refactor(create-rspeedy): move vitest scaffold to extraTools overlay#2408
refactor(create-rspeedy): move vitest scaffold to extraTools overlay#2408colinaaa merged 1 commit intolynx-family:mainfrom
Conversation
🦋 Changeset detectedLatest commit: ed50d94 The changes in this PR will be included in the next version bump. This PR includes changesets to release 3 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 |
|
You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard. |
📝 WalkthroughWalkthroughThe PR consolidates Vitest integration for React templates by removing dedicated Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 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 |
❌ 1 Tests Failed:
View the top 1 failed test(s) by shortest run time
View the full list of 2 ❄️ flaky test(s)
To view more test analytics, go to the Test Analytics Dashboard |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
packages/rspeedy/create-rspeedy/src/index.ts (1)
100-113: Unreachable default case in switch statement.The
defaultcase on line 110-111 is unreachable because line 103 already returnsnullwhenlangis neither'js'nor'ts'. Consider removing the dead code for clarity.♻️ Proposed simplification
mapESLintTemplate(templateName) { const lang = templateName.split('-').at(-1) if (lang !== 'js' && lang !== 'ts') return null - switch (lang) { - case 'js': - return 'react-js' - case 'ts': - return 'react-ts' - default: - return null - } + return lang === 'js' ? 'react-js' : 'react-ts' },🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@packages/rspeedy/create-rspeedy/src/index.ts` around lines 100 - 113, The switch in mapESLintTemplate redundantly includes an unreachable default because lang is already guarded by the earlier if (lang !== 'js' && lang !== 'ts') return null; — remove the default branch (or drop the initial guard and let the switch handle all cases) so only the explicit cases remain; locate mapESLintTemplate and adjust the control flow around the templateName -> lang extraction to keep behavior unchanged while eliminating the dead default branch.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@packages/rspeedy/create-rspeedy/src/index.ts`:
- Around line 100-113: The switch in mapESLintTemplate redundantly includes an
unreachable default because lang is already guarded by the earlier if (lang !==
'js' && lang !== 'ts') return null; — remove the default branch (or drop the
initial guard and let the switch handle all cases) so only the explicit cases
remain; locate mapESLintTemplate and adjust the control flow around the
templateName -> lang extraction to keep behavior unchanged while eliminating the
dead default branch.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 1bbe9437-6848-4dc5-9939-fced93e2d52c
📒 Files selected for processing (25)
.changeset/swift-spoons-smile.md.github/workflows/test.ymlpackages/rspeedy/create-rspeedy/src/index.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/lynx.config.jspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/package.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/App.jsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/__tests__/index.test.jsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/index.jsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/lib/flappy.jspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/useFlappy.jspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/lynx.config.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/package.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/App.tsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/__tests__/index.test.tsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/index.tsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/lib/flappy.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/rspeedy-env.d.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tsconfig.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/useFlappy.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.node.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/vitest.config.tspackages/rspeedy/create-rspeedy/template-react-vitest-rltl/package.jsonpackages/rspeedy/create-rspeedy/template-react-vitest-rltl/src/__tests__/index.test.jsxpackages/rspeedy/create-rspeedy/template-react-vitest-rltl/vitest.config.js
💤 Files with no reviewable changes (19)
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/rspeedy-env.d.ts
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/vitest.config.ts
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/tests/index.test.jsx
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.json
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tests/index.test.tsx
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/index.jsx
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/lynx.config.ts
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/index.tsx
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/tsconfig.json
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/useFlappy.ts
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/App.jsx
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/useFlappy.js
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/tsconfig.node.json
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/src/lib/flappy.js
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/package.json
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/lib/flappy.ts
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-js/lynx.config.js
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/package.json
- packages/rspeedy/create-rspeedy/template-react-vitest-rltl-ts/src/App.tsx
Merging this PR will not alter performance
Comparing Footnotes
|
React MTF Example#124 Bundle Size — 207.36KiB (0%).ed50d94(current) vs 0f9d14b main#118(baseline) Bundle metrics
|
| Current #124 |
Baseline #118 |
|
|---|---|---|
0B |
0B |
|
0B |
0B |
|
0% |
0% |
|
0 |
0 |
|
3 |
3 |
|
174 |
174 |
|
68 |
68 |
|
46.09% |
46.09% |
|
2 |
2 |
|
0 |
0 |
Bundle size by type no changes
| Current #124 |
Baseline #118 |
|
|---|---|---|
111.23KiB |
111.23KiB |
|
96.13KiB |
96.13KiB |
Bundle analysis report Branch colinaaa:opencode/neon-panda Project dashboard
Generated by RelativeCI Documentation Report issue
Web Explorer#8567 Bundle Size — 728.84KiB (0%).ed50d94(current) vs 0f9d14b main#8561(baseline) Bundle metrics
Bundle size by type
|
| Current #8567 |
Baseline #8561 |
|
|---|---|---|
384.62KiB |
384.62KiB |
|
342.07KiB |
342.07KiB |
|
2.16KiB |
2.16KiB |
Bundle analysis report Branch colinaaa:opencode/neon-panda Project dashboard
Generated by RelativeCI Documentation Report issue
React Example#6991 Bundle Size — 237.78KiB (0%).ed50d94(current) vs 0f9d14b main#6984(baseline) Bundle metrics
|
| Current #6991 |
Baseline #6984 |
|
|---|---|---|
0B |
0B |
|
0B |
0B |
|
0% |
0% |
|
0 |
0 |
|
4 |
4 |
|
180 |
180 |
|
71 |
71 |
|
46.4% |
46.4% |
|
2 |
2 |
|
0 |
0 |
Bundle size by type no changes
| Current #6991 |
Baseline #6984 |
|
|---|---|---|
145.76KiB |
145.76KiB |
|
92.02KiB |
92.02KiB |
Bundle analysis report Branch colinaaa:opencode/neon-panda Project dashboard
Generated by RelativeCI Documentation Report issue
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/rspeedy@0.14.0 ### Minor Changes - feat: add `Minify.mainThreadOptions` and `Minify.backgroundOptions` for thread-specific minifier. ([#2336](#2336)) ### Patch Changes - Bump Rsbuild v1.7.4 with Rspack v1.7.10. ([#2384](#2384)) - Updated dependencies \[]: - @lynx-js/web-rsbuild-server-middleware@0.20.0 ## @lynx-js/lynx-bundle-rslib-config@0.3.0 ### Minor Changes - **BREAKING CHANGE**: ([#2370](#2370)) Simplify the API for external bundle builds by `externalsPresets` and `externalsPresetDefinitions`. ### Patch Changes - Preserve the default external-bundle `output.minify.jsOptions` when users set `output.minify: true` in `defineExternalBundleRslibConfig`, so required minifier options are not lost. ([#2390](#2390)) ## @lynx-js/external-bundle-rsbuild-plugin@0.1.0 ### Minor Changes - **BREAKING CHANGE**: ([#2370](#2370)) Simplify the API for external bundle builds by `externalsPresets` and `externalsPresetDefinitions`. ### Patch Changes - Updated dependencies \[[`7b7a0c6`](7b7a0c6)]: - @lynx-js/externals-loading-webpack-plugin@0.1.0 ## @lynx-js/react-rsbuild-plugin@0.14.0 ### Minor Changes - feat: support `optimizeBundleSize` option to remove unused code for main-thread and background. ([#2336](#2336)) - If `optimizeBundleSize` is `true` or `optimizeBundleSize.background` is `true`, `lynx.registerDataProcessors` calls will be marked as pure for the background thread output. - If `optimizeBundleSize` is `true` or `optimizeBundleSize.mainThread` is `true`, `NativeModules.call` and `lynx.getJSModule` calls will be marked as pure for the main-thread output. ### Patch Changes - refactor: remove `modifyWebpackChain` since Rsbuild 2.0 dropped webpack support ([#2397](#2397)) - Updated dependencies \[[`9193711`](9193711)]: - @lynx-js/template-webpack-plugin@0.10.7 - @lynx-js/css-extract-webpack-plugin@0.7.0 - @lynx-js/react-webpack-plugin@0.8.0 - @lynx-js/react-alias-rsbuild-plugin@0.14.0 - @lynx-js/use-sync-external-store@1.5.0 - @lynx-js/react-refresh-webpack-plugin@0.3.5 ## @lynx-js/web-core@0.20.0 ### Minor Changes - **This is a breaking change** ([#2322](#2322)) ## Architectural Upgrade: `web-core-wasm` replaces `web-core` This release marks a major architectural upgrade for the web platform. The experimental, WASM-powered engine formerly known as `web-core-wasm` has been fully stabilized and merged into the main branch, completely replacing the previous pure JS/TS based `web-core` implementation. This consolidation massively improves execution performance and aligns the API boundaries of the Web platform directly with other native Lynx implementations. ### 🎉 Added Features - **Core API Enhancements**: Successfully exposed and supported `__QuerySelector` and `__InvokeUIMethod` methods. - **Security & CSP Compliance**: Added a `nonce` attribute to the iframe's `srcdoc` script execution, strengthening Content Security Policy (CSP) compliance. - **`<lynx-view>` Parameter Enhancements**: - Added the `browser-config` attribute and property to `<lynx-view>`. Development environments can now supply a `BrowserConfig` object (e.g., configuring `pixelRatio`, `pixelWidth`, `pixelHeight`) allowing the `systemInfo` payload to be dynamically configured at the instance level. ### 🔄 Changed Features - **Legacy JSON Backwards Compatibility**: Delivered comprehensive fixes and optimizations to deeply support legacy JSON output templates: - Added support for lazy loading execution mode (`lazy usage`). - Implemented the correct decoding and handling of `@keyframe` animation rules. - Rectified rule scoping matching including scoped CSS, root selectors, and type selectors. - **Ecosystem Migration**: Updated testing and ecosystem applications (such as `web-explorer` and `shell-project`) to migrate away from obsolete fragmented dependencies. The new WASM architecture seamlessly integrates Element APIs and CSS directly inside the core client module, requiring a much simpler initialization footprint. **Before (Legacy `web-core` + `web-elements`):** ```typescript // Required multiple imports to assemble the environment import "@lynx-js/web-core/client"; import type { LynxViewElement as LynxView } from "@lynx-js/web-core"; // Had to manually import separate elements and their CSS import "@lynx-js/web-elements/index.css"; import "@lynx-js/web-elements/all"; const lynxView = document.createElement("lynx-view") as LynxView; // ... ``` **After (New `web-core` unified architecture):** ```typescript // The new engine natively registers Web Components and injects fundamental CSS import "@lynx-js/web-core/client"; import type { LynxViewElement as LynxView } from "@lynx-js/web-core/client"; const lynxView = document.createElement("lynx-view") as LynxView; // ... ``` _(Applications can now drop `@lynx-js/web-elements` entirely from their `package.json` dependencies)._ - **Dependency & Boot Sequence Improvements**: Re-architected module loading pathways. Promoted `wasm-feature-detect` directly to a core dependency, and hardened the web worker count initialization assertions. - **Initialization Optimizations**: Converted `SERVER_IN_SHADOW_CSS` initialization bounds to use compilation-time constant expressions for better optimization. ### 🗑️ Deleted Features & Structural Deprecations - **`<lynx-view>` Parameter Removals**: - Removed the `thread-strategy` property and attribute. Historically, this permitted consumers to toggle between `'multi-thread'` and `'all-on-ui'` modes depending on how they wanted the background logic to be executed. The WASM-driven architecture enforces a consolidated concurrency model, deprecating this `<lynx-view>` attribute entirely. - Removed the `overrideLynxTagToHTMLTagMap` property/attribute. HTML tag overriding mechanism has been deprecated in the new engine. - Removed the `customTemplateLoader` property handler from `<lynx-view>`. - Removed the `inject-head-links` property and attribute (`injectHeadLinks`), which previously was used to automatically inject `<link rel="stylesheet">` tags from the document head into the `lynx-view` shadow root. - **Fragmented Packages Removal**: The new cohesive WASM architecture native to `@lynx-js/web-core` handles cross-thread communication, worker boundaries, and rendering loops uniformly. Consequently, multiple obsolete packages have been completely removed from the workspace: - `@lynx-js/web-mainthread-apis` - `@lynx-js/web-worker-runtime` - `@lynx-js/web-core-server` - `@lynx-js/web-core-wasm-e2e` (transitioned into standard test suites) - Added support for `rpx` unit ([#2377](#2377)) **This is a breaking change** The following Styles has been added to `web-core` ```css lynx-view { width: 100%; container-name: lynx-view; container-type: inline-size; --rpx-unit: 1cqw; } ``` Check MDN for the details about these styles: - <https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/container-name> - <https://developer.mozilla.org/en-US/docs/Web/CSS/Reference/Properties/container-type> - <https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Containment/Container_queries> ### how it works? For the following code ```html <view style="height:1rpx"></view> ``` it will be transformed to ```html <view style="height:calc(1 * var(--rpx-unit))"></view> ``` Therefore you could use any `<length>` value to replace the unit, for example: ```html <lynx-view style="--rpx-unit:1px"></lynx-view> ``` By default, the --rpx-unit value is `1cqw` - Added support for transform `vw` and `vh` unit ([#2377](#2377)) Add `transform-vw` and `transform-vh` attributes and properties on `<lynx-view>`. For the following code ```html <view style="height:1vw"></view> ``` If the `transform-vw` is enabled `<lynx-view transform-vw="true">`, it will be transformed to ```html <view style="height:calc(1 * var(--vw-unit))"></view> ``` Therefore you could use any `<length>` value to replace the unit, for example: ```html <lynx-view style="--vw-unit:1px"></lynx-view> ``` ### Patch Changes - feat(web-core): add `is_bubble` parameter to `common_event_handler` to properly handle non-bubbling events like `window.Event('click', { bubbles: false })`. ([#2399](#2399)) - chore: update readme ([#2380](#2380)) - fix: the output format should be module ([#2388](#2388)) - opt: use opt-level 3 to compile wasm ([#2371](#2371)) - fix(web-core): avoid partial bundle loading and double fetching when fetchBundle is called concurrently for the same url. ([#2386](#2386)) - fix(web-core): fallback to the original export chunk when `processEvalResult` is absent during `queryComponent` execution ([#2399](#2399)) - fix: tokenizing inline style values correctly to support rpx and ppx unit conversion ([#2381](#2381)) This fixes an issue where the `transform_inline_style_key_value_vec` API bypassed the CSS tokenizer, preventing dimension units like `rpx` or `ppx` from being successfully transformed into `calc` strings when specified via inline styles. - feat: add mts lynx.querySelectorAll API ([#2382](#2382)) - fix: mts in lazy component ([#2375](#2375)) - fix: enableJSDataProcessor not work ([#2372](#2372)) - feat: add `ppx` unit support for CSS, transforming to `calc(... * var(--ppx-unit))` directly. ([#2381](#2381)) - Updated dependencies \[]: - @lynx-js/web-worker-rpc@0.20.0 ## @lynx-js/externals-loading-webpack-plugin@0.1.0 ### Minor Changes - **BREAKING CHANGE**: ([#2370](#2370)) Simplify the API for external bundle builds by `externalsPresets` and `externalsPresetDefinitions`. ## @lynx-js/devtool-connector@0.1.1 ### Patch Changes - fix: align GlobalKeys with Android DevToolSettings keys and filter global switch responses ([#2392](#2392)) ## @lynx-js/devtool-mcp-server@0.5.1 ### Patch Changes - Updated dependencies \[[`95fff27`](95fff27)]: - @lynx-js/devtool-connector@0.1.1 ## @lynx-js/react@0.117.1 ### Patch Changes - Update preact version to simplify `setProperty` implementation ([#2367](#2367)) ## @lynx-js/react-umd@0.117.1 ### Patch Changes - Add a new `entry` export to `@lynx-js/react-umd` for reuse by wrapper libraries of `@lynx-js/react`. ([#2370](#2370)) ## create-rspeedy@0.14.0 ### Patch Changes - Add optional Lynx DevTool skill. ([#2421](#2421)) - move Vitest integration to create-rstack extraTools and merge the Vitest templates into a single incremental overlay ([#2408](#2408)) ## @lynx-js/kitten-lynx-test-infra@0.1.2 ### Patch Changes - Updated dependencies \[[`95fff27`](95fff27)]: - @lynx-js/devtool-connector@0.1.1 ## @lynx-js/template-webpack-plugin@0.10.7 ### Patch Changes - use path.posix.format instead of path.format to ensure consistent path separators across platforms ([#2359](#2359)) - Updated dependencies \[[`75960cd`](75960cd), [`518c310`](518c310), [`863469e`](863469e), [`dc18c5c`](dc18c5c), [`7d242f3`](7d242f3), [`62bebcf`](62bebcf), [`75960cd`](75960cd), [`182f568`](182f568), [`1aa051d`](1aa051d), [`6b46f7e`](6b46f7e), [`fcda36a`](fcda36a), [`182f568`](182f568), [`138f727`](138f727), [`138f727`](138f727)]: - @lynx-js/web-core@0.20.0 ## @lynx-js/react-alias-rsbuild-plugin@0.14.0 ## upgrade-rspeedy@0.14.0 ## @lynx-js/web-rsbuild-server-middleware@0.20.0 ## @lynx-js/web-worker-rpc@0.20.0 Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Summary
create-rspeedyVitest setup from template-name branching intoextraTools(vitest-rltl) so scaffolding matchescreate-rstackusagetemplate-react-vitest-rltl-jsandtemplate-react-vitest-rltl-tsinto a single incrementaltemplate-react-vitest-rltloverlay containing only Vitest-specific additions--template react --tools eslint,vitest-rltland add a changeset forcreate-rspeedyTest Plan
Summary by CodeRabbit
Release Notes