Skip to content

fix: record lazily created nested lists#1963

Merged
gaoachao merged 2 commits intomainfrom
fix/lazily-created-nested-list
Nov 28, 2025
Merged

fix: record lazily created nested lists#1963
gaoachao merged 2 commits intomainfrom
fix/lazily-created-nested-list

Conversation

@gaoachao
Copy link
Copy Markdown
Collaborator

@gaoachao gaoachao commented Nov 27, 2025

Summary by CodeRabbit

  • Bug Fixes

    • Resolved blank-screen rendering when lazily created nested lists are flushed, ensuring nested list items render reliably.
  • Tests

    • Added coverage for lazily created nested lists, verifying insert/reuse semantics, flush/hydration flows, and update-list-info behaviors. Updated expectations to align with new nested-list handling.

✏️ Tip: You can customize this high-level summary in your review settings.

Checklist

  • Tests updated (or not required).
  • Documentation updated (or not required).
  • Changeset added, and when a BREAKING CHANGE occurs, it needs to be clearly marked (or not required).

@gaoachao gaoachao requested a review from hzy as a code owner November 27, 2025 12:40
@changeset-bot
Copy link
Copy Markdown

changeset-bot bot commented Nov 27, 2025

🦋 Changeset detected

Latest commit: 9b727ad

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@lynx-js/react Patch

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

@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai bot commented Nov 27, 2025

📝 Walkthrough

Walkthrough

Adds a changeset and a snapshot update to pre-register lazily created nested list children into pending list updates before flushing; includes new/updated tests to verify recording and update actions for nested lists.

Changes

Cohort / File(s) Change Summary
Changeset
\.changeset/early-crabs-lie.md
New changeset entry documenting a patch for nested-list rendering bug.
Snapshot runtime change
packages/react/runtime/src/snapshot.ts
In SnapshotInstance.ensureElements, pre-registers existing child nodes into __pendingListUpdates via onInsertBefore using a ListUpdateInfoRecording when processing a list holder and pending updates exist, before calling flushWithId.
Tests (nested list behavior)
packages/react/runtime/__test__/list.test.jsx
Adds a test "should record lazily created nested lists" and updates an inline snapshot expectation (type id change) to validate insert/reuse semantics and emitted update-list-info payloads for lazily created nested lists.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

  • Mixed edits: runtime logic change plus new/updated tests.
  • Review should focus on correctness of pre-flush registration and interactions with existing flushWithId behavior.
  • Pay extra attention to:
    • Potential duplicate registrations or ordering changes when iterating children and calling onInsertBefore.
    • Test expectations that reference internal snapshot/type ids and their stability across runs.
    • Any side effects on hydration/enqueue flows exercised by the new test.

Possibly related PRs

Suggested reviewers

  • HuJean
  • hzy
  • DwwWxx

Poem

🥕
I hopped through snapshots in the night,
Found lazy lists that lost their light.
I nudged each child to join the queue,
Now nested items show anew — hooray, we view! 🐇

Pre-merge checks and finishing touches

✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately describes the main change: a bug fix for recording lazily created nested lists. It is concise, specific, and clearly communicates the primary purpose of the changeset.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch fix/lazily-created-nested-list

📜 Recent review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9ea6225 and 9b727ad.

📒 Files selected for processing (1)
  • packages/react/runtime/__test__/list.test.jsx (2 hunks)
🧰 Additional context used
🧬 Code graph analysis (1)
packages/react/runtime/__test__/list.test.jsx (2)
packages/react/runtime/src/snapshot.ts (1)
  • SnapshotInstance (278-665)
packages/react/runtime/src/pendingListUpdates.ts (1)
  • __pendingListUpdates (7-44)
🔇 Additional comments (3)
packages/react/runtime/__test__/list.test.jsx (3)

4133-4140: Potential issue: the uiSign parameter should be captured from triggerComponentAtIndex.

At line 4136, you pass 0 as the uiSign to triggerEnqueueComponent, but based on other tests in this file (e.g., line 3903 where triggerComponentAtIndex(parentListRef, 0) returns 4), the actual uiSign is the return value from triggerComponentAtIndex, not the index.

Consider capturing the return value:

-    elementTree.triggerComponentAtIndex(parentListRef, 0);
-    elementTree.triggerComponentAtIndex(parentListRef, 1);
+    const uiSign0 = elementTree.triggerComponentAtIndex(parentListRef, 0);
+    const uiSign1 = elementTree.triggerComponentAtIndex(parentListRef, 1);
     // enqueue c1
-    elementTree.triggerEnqueueComponent(parentListRef, 0);
+    elementTree.triggerEnqueueComponent(parentListRef, uiSign0);

Please verify if the current test passes correctly and whether using the actual uiSign is intended.


4048-4263: Test structure and coverage look good for the fix.

The new test case properly validates the scenario where lazily created nested lists are recorded into pending list updates before flushing. It covers:

  • Creating nested list structures with parent and child lists
  • The componentAtIndex → enqueue → reuse → recreate flow
  • Verification that the final state shows 4 list-items with correct update-list-info including the removeAction for the reused nested list

This aligns well with the changes mentioned in the AI summary for SnapshotInstance.ensureElements.


4366-4366: Snapshot type reference update is correct.

This numbering change from __snapshot_a94a8_test_76 to __snapshot_a94a8_test_79 is expected due to the three new snapshot definitions (s1, s2, s3) added in the new test case above.


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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@gaoachao gaoachao requested review from DwwWxx and HuJean November 27, 2025 12:40
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
packages/react/runtime/src/snapshot.ts (1)

338-344: Pre-registration of lazily created list children before flush looks correct; please confirm ensureElements’ lifecycle

The new pre-flush block for list holders:

  • Only creates a ListUpdateInfoRecording when __pendingListUpdates.values exists and there’s no existing entry for this.__id.
  • Iterates from __firstChild through __nextSibling, calling onInsertBefore for each child before the existing flushWithId(this.__id) call.

This mirrors the existing insertBefore behavior and should ensure lazily created nested list items are actually recorded before the flush, addressing the blank-screen issue without changing behavior for lists that already have pending entries.

One thing to double-check: this assumes ensureElements is effectively one-shot for a given list instance, or at least that flushWithId doesn’t clear values[this.__id] in a way that would cause this block to run again and re-enqueue inserts for already-flushed children. If there’s any path where ensureElements might be called again after a previous flush for the same instance, it could be worth asserting or documenting that invariant, or guarding against double queuing.

📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2765cea and 9ea6225.

📒 Files selected for processing (2)
  • .changeset/early-crabs-lie.md (1 hunks)
  • packages/react/runtime/src/snapshot.ts (1 hunks)
🧰 Additional context used
📓 Path-based instructions (1)
.changeset/*.md

📄 CodeRabbit inference engine (AGENTS.md)

For contributions, generate and commit a Changeset describing your changes

Files:

  • .changeset/early-crabs-lie.md
🧠 Learnings (11)
📓 Common learnings
Learnt from: gaoachao
Repo: lynx-family/lynx-stack PR: 1736
File: .changeset/spotty-experts-smoke.md:1-3
Timestamp: 2025-09-12T09:43:04.847Z
Learning: In the lynx-family/lynx-stack repository, empty changeset files (containing only `---\n\n---`) are used for internal changes that modify src/** files but don't require meaningful release notes, such as private package changes or testing-only modifications. This satisfies CI requirements without generating user-facing release notes.
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1330
File: .changeset/olive-animals-attend.md:1-3
Timestamp: 2025-07-22T09:23:07.797Z
Learning: In the lynx-family/lynx-stack repository, changesets are only required for meaningful changes to end-users such as bugfixes and features. Internal/development changes like chores, refactoring, or removing debug info do not need changeset entries.
📚 Learning: 2025-11-04T10:15:14.965Z
Learnt from: upupming
Repo: lynx-family/lynx-stack PR: 1899
File: packages/react/runtime/__test__/snapshotPatch.test.jsx:725-749
Timestamp: 2025-11-04T10:15:14.965Z
Learning: In packages/react/runtime/src/snapshot.ts, the snapshotCreatorMap type signature uses `Record<string, (uniqId: string) => string>` (returning string) rather than void for backward compatibility. Old lazy bundles still use the pattern `const snapshot_xxx = createSnapshot(...)` directly, which requires createSnapshot to return a value. The snapshotCreatorMap creators that wrap createSnapshot calls must maintain the same return type to support these legacy bundles.

Applied to files:

  • packages/react/runtime/src/snapshot.ts
📚 Learning: 2025-09-12T09:43:04.847Z
Learnt from: gaoachao
Repo: lynx-family/lynx-stack PR: 1736
File: .changeset/spotty-experts-smoke.md:1-3
Timestamp: 2025-09-12T09:43:04.847Z
Learning: In the lynx-family/lynx-stack repository, empty changeset files (containing only `---\n\n---`) are used for internal changes that modify src/** files but don't require meaningful release notes, such as private package changes or testing-only modifications. This satisfies CI requirements without generating user-facing release notes.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-09-12T09:43:04.847Z
Learnt from: gaoachao
Repo: lynx-family/lynx-stack PR: 1736
File: .changeset/spotty-experts-smoke.md:1-3
Timestamp: 2025-09-12T09:43:04.847Z
Learning: In the lynx-family/lynx-stack repository, private packages (marked with "private": true in package.json) like lynx-js/react-transform don't require meaningful changeset entries even when their public APIs change, since they are not published externally and only affect internal development.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-07-22T09:23:07.797Z
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1330
File: .changeset/olive-animals-attend.md:1-3
Timestamp: 2025-07-22T09:23:07.797Z
Learning: In the lynx-family/lynx-stack repository, changesets are only required for meaningful changes to end-users such as bugfixes and features. Internal/development changes like chores, refactoring, or removing debug info do not need changeset entries.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-07-22T09:26:16.722Z
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1330
File: .changeset/olive-animals-attend.md:1-3
Timestamp: 2025-07-22T09:26:16.722Z
Learning: In the lynx-family/lynx-stack repository, CI checks require changesets when files matching the pattern "src/**" are modified (as configured in .changeset/config.json). For internal changes that don't need meaningful changesets, an empty changeset file is used to satisfy the CI requirement while not generating any release notes.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-08-19T11:25:36.127Z
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1558
File: .changeset/solid-squids-fall.md:2-2
Timestamp: 2025-08-19T11:25:36.127Z
Learning: In the lynx-family/lynx-stack repository, changesets should use the exact package name from package.json#name, not generic or unscoped names. Each package has its own specific scoped name (e.g., "lynx-js/react-transform" for packages/react/transform).

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-08-07T04:00:59.645Z
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1454
File: pnpm-workspace.yaml:46-46
Timestamp: 2025-08-07T04:00:59.645Z
Learning: In the lynx-family/lynx-stack repository, the webpack patch (patches/webpack5.101.0.patch) was created to fix issues with webpack5.99.9 but only takes effect on webpack5.100.0 and later versions. The patchedDependencies entry should use "webpack@^5.100.0" to ensure the patch applies to the correct version range.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-09-18T04:43:54.426Z
Learnt from: gaoachao
Repo: lynx-family/lynx-stack PR: 1771
File: packages/react/transform/tests/__swc_snapshots__/src/swc_plugin_snapshot/mod.rs/basic_component_with_static_sibling.js:2-2
Timestamp: 2025-09-18T04:43:54.426Z
Learning: In the lynx-family/lynx-stack repository, the `add_pure_comment` function in packages/react/transform/src/swc_plugin_compat/mod.rs (around lines 478-482) is specifically for `wrapWithLynxComponent` calls, not `createSnapshot` calls. The PURE comment injection for `createSnapshot` is handled separately in swc_plugin_snapshot/mod.rs.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-08-12T16:09:32.413Z
Learnt from: colinaaa
Repo: lynx-family/lynx-stack PR: 1497
File: packages/react/transform/tests/__swc_snapshots__/src/swc_plugin_snapshot/mod.rs/basic_full_static.js:9-10
Timestamp: 2025-08-12T16:09:32.413Z
Learning: In the Lynx stack, functions prefixed with `__` that are called in transformed code may be injected globally by the Lynx Engine at runtime rather than exported from the React runtime package. For example, `__CreateFrame` is injected globally by the Lynx Engine, not exported from lynx-js/react.

Applied to files:

  • .changeset/early-crabs-lie.md
📚 Learning: 2025-08-13T09:20:00.936Z
Learnt from: upupming
Repo: lynx-family/lynx-stack PR: 1502
File: packages/react/testing-library/types/entry.d.ts:71-71
Timestamp: 2025-08-13T09:20:00.936Z
Learning: In lynx-js/react testing library, wrapper components must have children as a required prop because they are always called with `h(WrapperComponent, null, innerElement)` where innerElement is passed as children. The type `React.JSXElementConstructor<{ children: React.ReactNode }>` correctly requires children to be mandatory.

Applied to files:

  • .changeset/early-crabs-lie.md
🔇 Additional comments (1)
.changeset/early-crabs-lie.md (1)

1-5: Changeset content and targeting look correct

The changeset correctly targets @lynx-js/react with a patch bump and gives a concise, user-facing description of the nested-list blank screen bugfix. This aligns with the repo’s guidance on when to add changesets and how to name packages.

Based on learnings, this matches the expected pattern for user-visible bugfixes in this repo.

@codecov
Copy link
Copy Markdown

codecov bot commented Nov 27, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Nov 27, 2025

CodSpeed Performance Report

Merging #1963 will not alter performance

Comparing fix/lazily-created-nested-list (9b727ad) with main (2765cea)

Summary

✅ 63 untouched
⏩ 3 skipped1

Footnotes

  1. 3 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports.

@relativeci
Copy link
Copy Markdown

relativeci bot commented Nov 27, 2025

React Example

#6227 Bundle Size — 234.54KiB (+0.08%).

9b727ad(current) vs 55cb796 main#6218(baseline)

Bundle metrics  Change 2 changes
                 Current
#6227
     Baseline
#6218
No change  Initial JS 0B 0B
No change  Initial CSS 0B 0B
Change  Cache Invalidation 37.8% 0%
No change  Chunks 0 0
No change  Assets 4 4
No change  Modules 164 164
No change  Duplicate Modules 66 66
Change  Duplicate Code 46.72%(+0.02%) 46.71%
No change  Packages 2 2
No change  Duplicate Packages 0 0
Bundle size by type  Change 1 change Regression 1 regression
                 Current
#6227
     Baseline
#6218
No change  IMG 145.76KiB 145.76KiB
Regression  Other 88.79KiB (+0.22%) 88.59KiB

Bundle analysis reportBranch fix/lazily-created-nested-listProject dashboard


Generated by RelativeCIDocumentationReport issue

@relativeci
Copy link
Copy Markdown

relativeci bot commented Nov 27, 2025

Web Explorer

#6361 Bundle Size — 377.5KiB (0%).

9b727ad(current) vs 2765cea main#6346(baseline)

Bundle metrics  Change 2 changes
                 Current
#6361
     Baseline
#6346
No change  Initial JS 146.32KiB 146.32KiB
No change  Initial CSS 32.38KiB 32.38KiB
No change  Cache Invalidation 0% 0%
No change  Chunks 8 8
No change  Assets 8 8
Change  Modules 229(-0.87%) 231
No change  Duplicate Modules 16 16
Change  Duplicate Code 2.96%(+0.34%) 2.95%
No change  Packages 4 4
No change  Duplicate Packages 0 0
Bundle size by type  no changes
                 Current
#6361
     Baseline
#6346
No change  JS 243.18KiB 243.18KiB
No change  Other 101.94KiB 101.94KiB
No change  CSS 32.38KiB 32.38KiB

Bundle analysis reportBranch fix/lazily-created-nested-listProject dashboard


Generated by RelativeCIDocumentationReport issue

@gaoachao gaoachao merged commit fd233bd into main Nov 28, 2025
114 of 119 checks passed
@gaoachao gaoachao deleted the fix/lazily-created-nested-list branch November 28, 2025 06:26
colinaaa pushed a commit that referenced this pull request Dec 7, 2025
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/react@0.115.0

### Minor Changes

- **BREAKING CHANGE**: Delay the `createSnapshot` operation to
`Snapshot` constructor to speed up IFR.
([#1899](#1899))

    This change refactors how snapshots are created and registered:

    -   Removed the `entryUniqID` function
- Snapshots are now lazily created via `snapshotCreatorMap` instead of
eagerly at bundle load time
- Snapshot IDs are generated at compile time and only prefixed with
`${globDynamicComponentEntry}:` for standalone lazy bundles

    **⚠️ Lazy Bundle Compatibility:**

- **Backward compatibility (new runtime → old lazy bundles)**: ✅
**Supported**. Old lazy bundles will work with the new runtime.

- **Forward compatibility (old runtime → new lazy bundles)**: ❌ **NOT
Supported**. Lower version consumers **will not be able to load lazy
bundles produced by this version** due to the changed snapshot creation
mechanism.

    **Migration guidance**:
If you are using lazy bundles, ensure all consumers are upgraded to this
version or later **before** deploying lazy bundles built with this
version. For monorepo setups, coordinate the upgrade across all
consuming applications.

### Patch Changes

- Preserve assignments to webpack runtime variables like
`__webpack_public_path__`, `__webpack_require__.p`, etc.
([#1958](#1958))

- Fixed blank screen issues with nested lists. Lazily created nested
lists were being flushed but not properly recorded, causing rendering
failures. ([#1963](#1963))

- fix: export `createRef` and `useRef` from
`@lynx-js/react/legacy-react-runtime`
([#1953](#1953))

## @lynx-js/react-rsbuild-plugin@0.12.0

### Minor Changes

- **BREAKING CHANGE**: Require `@lynx-js/rspeedy` 0.12.0.
([#1951](#1951))

### Patch Changes

- Support Yarn Plug'n'Play.
([#1964](#1964))

- Updated dependencies
\[[`738d44d`](738d44d),
[`5bbb439`](5bbb439),
[`3692a16`](3692a16),
[`d2e290b`](d2e290b),
[`738d44d`](738d44d)]:
    -   @lynx-js/react-alias-rsbuild-plugin@0.12.0
    -   @lynx-js/css-extract-webpack-plugin@0.6.5
    -   @lynx-js/template-webpack-plugin@0.9.2
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/react-refresh-webpack-plugin@0.3.4
    -   @lynx-js/react-webpack-plugin@0.7.2

## @lynx-js/react-alias-rsbuild-plugin@0.12.0

### Minor Changes

- **BREAKING CHANGE**: Use resolver from Rspack.
([#1964](#1964))

    The `createLazyResolver` now requires an `rspack` parameter:

    ```diff
- function createLazyResolver(directory: string, conditionNames:
string[]): (request: string) => Promise<string>;
+ function createLazyResolver(rspack: rspack, directory: string,
conditionNames: string[]): (request: string) => Promise<string>;
    ```

### Patch Changes

- Support Yarn Plug'n'Play.
([#1964](#1964))

## @lynx-js/web-core@0.19.0

### Minor Changes

- feat: new flex:val impl
([#1979](#1979))

### Patch Changes

- Updated dependencies
\[[`40c3a1a`](40c3a1a),
[`46bd5ee`](46bd5ee)]:
    -   @lynx-js/web-mainthread-apis@0.19.0
    -   @lynx-js/web-worker-runtime@0.19.0
    -   @lynx-js/web-constants@0.19.0
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/web-elements@0.9.0

### Minor Changes

- feat: new flex:val impl
([#1979](#1979))

### Patch Changes

- fix: x-input display should add !important to avoid override
([#1960](#1960))

-   Updated dependencies \[]:
    -   @lynx-js/web-elements-template@0.9.0

## @lynx-js/rspeedy@0.12.1

### Patch Changes

- Bump Rsbuild v1.6.9 with Rspack v1.6.5.
([#1967](#1967))

-   Updated dependencies \[]:
    -   @lynx-js/web-rsbuild-server-middleware@0.19.0

## create-rspeedy@0.12.1

### Patch Changes

- Bump `@rsbuild/plugin-type-check` v1.3.1.
([#1964](#1964))

## @lynx-js/lynx-bundle-rslib-config@0.0.1

### Patch Changes

- Add `@lynx-js/lynx-bundle-rslib-config` for bundling Lynx bundle with
[Rslib](https://rslib.rs/):
([#1943](#1943))

    ```js
    // rslib.config.js
import { defineExternalBundleRslibConfig } from
"@lynx-js/lynx-bundle-rslib-config";

    export default defineExternalBundleRslibConfig({
      id: "utils-lib",
      source: {
        entry: {
          utils: "./src/utils.ts",
        },
      },
    });
    ```

## @lynx-js/web-constants@0.19.0

### Patch Changes

-   Updated dependencies \[]:
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/web-explorer@0.0.14

### Patch Changes

- chore: update web-elements version of web-explorer
([#1962](#1962))

## @lynx-js/web-mainthread-apis@0.19.0

### Patch Changes

- fix: capture and bind event listener should be trigger correctly
([#1972](#1972))

- fix: the l-p-comp-uid of page should be '1'
([#1970](#1970))

-   Updated dependencies \[]:
    -   @lynx-js/web-constants@0.19.0

## @lynx-js/web-worker-runtime@0.19.0

### Patch Changes

- Updated dependencies
\[[`40c3a1a`](40c3a1a),
[`46bd5ee`](46bd5ee)]:
    -   @lynx-js/web-mainthread-apis@0.19.0
    -   @lynx-js/web-constants@0.19.0
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/css-extract-webpack-plugin@0.6.5

### Patch Changes

- Set main thread JS basename to `lepusCode.filename` in tasm encode
data. It will ensure a filename is reported on MTS error without
devtools enabled.
([#1949](#1949))

## @lynx-js/template-webpack-plugin@0.9.2

### Patch Changes

- Set main thread JS basename to `lepusCode.filename` in tasm encode
data. It will ensure a filename is reported on MTS error without
devtools enabled.
([#1949](#1949))

- Upgrade `@lynx-js/tasm` to `0.0.20`.
([#1943](#1943))

- refactor: move web style info generation to the encode phase
([#1975](#1975))

## upgrade-rspeedy@0.12.1



## @lynx-js/web-core-server@0.19.0



## @lynx-js/web-elements-template@0.9.0



## @lynx-js/web-rsbuild-server-middleware@0.19.0



## @lynx-js/web-worker-rpc@0.19.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
f0rdream pushed a commit to f0rdream/lynx-stack that referenced this pull request Dec 18, 2025
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/react@0.115.0

### Minor Changes

- **BREAKING CHANGE**: Delay the `createSnapshot` operation to
`Snapshot` constructor to speed up IFR.
([lynx-family#1899](lynx-family#1899))

    This change refactors how snapshots are created and registered:

    -   Removed the `entryUniqID` function
- Snapshots are now lazily created via `snapshotCreatorMap` instead of
eagerly at bundle load time
- Snapshot IDs are generated at compile time and only prefixed with
`${globDynamicComponentEntry}:` for standalone lazy bundles

    **⚠️ Lazy Bundle Compatibility:**

- **Backward compatibility (new runtime → old lazy bundles)**: ✅
**Supported**. Old lazy bundles will work with the new runtime.

- **Forward compatibility (old runtime → new lazy bundles)**: ❌ **NOT
Supported**. Lower version consumers **will not be able to load lazy
bundles produced by this version** due to the changed snapshot creation
mechanism.

    **Migration guidance**:
If you are using lazy bundles, ensure all consumers are upgraded to this
version or later **before** deploying lazy bundles built with this
version. For monorepo setups, coordinate the upgrade across all
consuming applications.

### Patch Changes

- Preserve assignments to webpack runtime variables like
`__webpack_public_path__`, `__webpack_require__.p`, etc.
([lynx-family#1958](lynx-family#1958))

- Fixed blank screen issues with nested lists. Lazily created nested
lists were being flushed but not properly recorded, causing rendering
failures. ([lynx-family#1963](lynx-family#1963))

- fix: export `createRef` and `useRef` from
`@lynx-js/react/legacy-react-runtime`
([lynx-family#1953](lynx-family#1953))

## @lynx-js/react-rsbuild-plugin@0.12.0

### Minor Changes

- **BREAKING CHANGE**: Require `@lynx-js/rspeedy` 0.12.0.
([lynx-family#1951](lynx-family#1951))

### Patch Changes

- Support Yarn Plug'n'Play.
([lynx-family#1964](lynx-family#1964))

- Updated dependencies
\[[`738d44d`](lynx-family@738d44d),
[`5bbb439`](lynx-family@5bbb439),
[`3692a16`](lynx-family@3692a16),
[`d2e290b`](lynx-family@d2e290b),
[`738d44d`](lynx-family@738d44d)]:
    -   @lynx-js/react-alias-rsbuild-plugin@0.12.0
    -   @lynx-js/css-extract-webpack-plugin@0.6.5
    -   @lynx-js/template-webpack-plugin@0.9.2
    -   @lynx-js/use-sync-external-store@1.5.0
    -   @lynx-js/react-refresh-webpack-plugin@0.3.4
    -   @lynx-js/react-webpack-plugin@0.7.2

## @lynx-js/react-alias-rsbuild-plugin@0.12.0

### Minor Changes

- **BREAKING CHANGE**: Use resolver from Rspack.
([lynx-family#1964](lynx-family#1964))

    The `createLazyResolver` now requires an `rspack` parameter:

    ```diff
- function createLazyResolver(directory: string, conditionNames:
string[]): (request: string) => Promise<string>;
+ function createLazyResolver(rspack: rspack, directory: string,
conditionNames: string[]): (request: string) => Promise<string>;
    ```

### Patch Changes

- Support Yarn Plug'n'Play.
([lynx-family#1964](lynx-family#1964))

## @lynx-js/web-core@0.19.0

### Minor Changes

- feat: new flex:val impl
([lynx-family#1979](lynx-family#1979))

### Patch Changes

- Updated dependencies
\[[`40c3a1a`](lynx-family@40c3a1a),
[`46bd5ee`](lynx-family@46bd5ee)]:
    -   @lynx-js/web-mainthread-apis@0.19.0
    -   @lynx-js/web-worker-runtime@0.19.0
    -   @lynx-js/web-constants@0.19.0
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/web-elements@0.9.0

### Minor Changes

- feat: new flex:val impl
([lynx-family#1979](lynx-family#1979))

### Patch Changes

- fix: x-input display should add !important to avoid override
([lynx-family#1960](lynx-family#1960))

-   Updated dependencies \[]:
    -   @lynx-js/web-elements-template@0.9.0

## @lynx-js/rspeedy@0.12.1

### Patch Changes

- Bump Rsbuild v1.6.9 with Rspack v1.6.5.
([lynx-family#1967](lynx-family#1967))

-   Updated dependencies \[]:
    -   @lynx-js/web-rsbuild-server-middleware@0.19.0

## create-rspeedy@0.12.1

### Patch Changes

- Bump `@rsbuild/plugin-type-check` v1.3.1.
([lynx-family#1964](lynx-family#1964))

## @lynx-js/lynx-bundle-rslib-config@0.0.1

### Patch Changes

- Add `@lynx-js/lynx-bundle-rslib-config` for bundling Lynx bundle with
[Rslib](https://rslib.rs/):
([lynx-family#1943](lynx-family#1943))

    ```js
    // rslib.config.js
import { defineExternalBundleRslibConfig } from
"@lynx-js/lynx-bundle-rslib-config";

    export default defineExternalBundleRslibConfig({
      id: "utils-lib",
      source: {
        entry: {
          utils: "./src/utils.ts",
        },
      },
    });
    ```

## @lynx-js/web-constants@0.19.0

### Patch Changes

-   Updated dependencies \[]:
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/web-explorer@0.0.14

### Patch Changes

- chore: update web-elements version of web-explorer
([lynx-family#1962](lynx-family#1962))

## @lynx-js/web-mainthread-apis@0.19.0

### Patch Changes

- fix: capture and bind event listener should be trigger correctly
([lynx-family#1972](lynx-family#1972))

- fix: the l-p-comp-uid of page should be '1'
([lynx-family#1970](lynx-family#1970))

-   Updated dependencies \[]:
    -   @lynx-js/web-constants@0.19.0

## @lynx-js/web-worker-runtime@0.19.0

### Patch Changes

- Updated dependencies
\[[`40c3a1a`](lynx-family@40c3a1a),
[`46bd5ee`](lynx-family@46bd5ee)]:
    -   @lynx-js/web-mainthread-apis@0.19.0
    -   @lynx-js/web-constants@0.19.0
    -   @lynx-js/web-worker-rpc@0.19.0

## @lynx-js/css-extract-webpack-plugin@0.6.5

### Patch Changes

- Set main thread JS basename to `lepusCode.filename` in tasm encode
data. It will ensure a filename is reported on MTS error without
devtools enabled.
([lynx-family#1949](lynx-family#1949))

## @lynx-js/template-webpack-plugin@0.9.2

### Patch Changes

- Set main thread JS basename to `lepusCode.filename` in tasm encode
data. It will ensure a filename is reported on MTS error without
devtools enabled.
([lynx-family#1949](lynx-family#1949))

- Upgrade `@lynx-js/tasm` to `0.0.20`.
([lynx-family#1943](lynx-family#1943))

- refactor: move web style info generation to the encode phase
([lynx-family#1975](lynx-family#1975))

## upgrade-rspeedy@0.12.1



## @lynx-js/web-core-server@0.19.0



## @lynx-js/web-elements-template@0.9.0



## @lynx-js/web-rsbuild-server-middleware@0.19.0



## @lynx-js/web-worker-rpc@0.19.0

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants