Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .changeset/eight-geckos-tease.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---

---
5 changes: 5 additions & 0 deletions .changeset/flat-hats-flow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@lynx-js/chunk-loading-webpack-plugin": patch
---

Add `StartupChunkDependenciesRuntimeModule` to fix `RuntimeGlobals.ensureChunkHandler` not found when using chunk splitting
5 changes: 5 additions & 0 deletions .changeset/itchy-islands-float.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@lynx-js/rspeedy": patch
---

Support `performance.profile`.
3 changes: 3 additions & 0 deletions .changeset/lovely-pots-tap.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---

---
23 changes: 23 additions & 0 deletions .changeset/three-baboons-hunt.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
"@lynx-js/rspeedy": patch
---

Enable native Rsdoctor plugin by default.

Set `tools.rsdoctor.experiments.enableNativePlugin` to `false` to use the old JS plugin.

```js
import { defineConfig } from '@lynx-js/rspeedy';

export default defineConfig({
tools: {
rsdoctor: {
experiments: {
enableNativePlugin: false,
},
},
},
});
```

See [Rsdoctor - 1.0](https://rsdoctor.dev/blog/release/release-note-1_0#-faster-analysis) for more details.
6 changes: 3 additions & 3 deletions .dprint.jsonc
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,12 @@
"plugins": [
"https://plugins.dprint.dev/dockerfile-0.3.2.wasm",
"https://plugins.dprint.dev/exec-0.5.1.json@492414e39dea4dccc07b4af796d2f4efdb89e84bae2bd4e1e924c0cc050855bf",
"https://plugins.dprint.dev/typescript-0.94.0.wasm",
"https://plugins.dprint.dev/typescript-0.95.0.wasm",
"https://plugins.dprint.dev/json-0.20.0.wasm",
"https://plugins.dprint.dev/markdown-0.18.0.wasm",
"https://plugins.dprint.dev/toml-0.7.0.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.11.2.wasm",
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.19.0.wasm",
"https://plugins.dprint.dev/g-plane/malva-v0.12.0.wasm",
"https://plugins.dprint.dev/g-plane/markup_fmt-v0.20.0.wasm",
"https://plugins.dprint.dev/g-plane/pretty_yaml-v0.5.0.wasm",
],
}
10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
},
"devDependencies": {
"@biomejs/biome": "^1.9.4",
"@changesets/cli": "^2.29.2",
"@changesets/cli": "^2.29.3",
"@codspeed/vitest-plugin": "^4.0.1",
"@eslint/js": "^9.25.1",
"@microsoft/api-extractor": "catalog:",
Expand All @@ -24,9 +24,9 @@
"@tsconfig/node20": "^20.1.5",
"@tsconfig/strictest": "^2.0.5",
"@types/node": "^22.15.3",
"@vitest/coverage-v8": "^3.1.2",
"@vitest/coverage-v8": "^3.1.3",
"@vitest/eslint-plugin": "^1.1.44",
"@vitest/ui": "^3.1.2",
"@vitest/ui": "^3.1.3",
"cspell": "^8.19.3",
"dprint": "^0.49.1",
"eslint": "^9.25.1",
Expand All @@ -40,12 +40,12 @@
"globals": "^16.0.0",
"husky": "^9.1.7",
"lint-staged": "^15.5.1",
"sort-package-json": "^3.1.0",
"sort-package-json": "^3.2.0",
"ts-patch": "^3.3.0",
"turbo": "^2.5.2",
"typescript": "^5.8.3",
"typescript-eslint": "^8.31.1",
"vitest": "^3.1.2"
"vitest": "^3.1.3"
},
"packageManager": "[email protected]",
"engines": {
Expand Down
6 changes: 3 additions & 3 deletions packages/react/runtime/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,11 +23,11 @@
"@lynx-js/react-transform": "workspace:*",
"@types/react": "^18.3.20",
"@vitejs/plugin-react": "4.4.1",
"@vitest/coverage-v8": "^3.1.2",
"@vitest/ui": "^3.1.2",
"@vitest/coverage-v8": "^3.1.3",
"@vitest/ui": "^3.1.3",
"esbuild": "^0.25.3",
"pretty-format": "^29.7.0",
"vitest": "^3.1.2"
"vitest": "^3.1.3"
},
"peerDependencies": {
"@types/react": "^18.0.0"
Expand Down
29 changes: 8 additions & 21 deletions packages/react/transform/src/swc_plugin_worklet/extract_ident.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,14 @@ use crate::swc_plugin_worklet::decl_collect::{
use crate::swc_plugin_worklet::globals::{DEFAULT_GLOBALS, LYNX_GLOBALS};
use rustc_hash::FxHashSet;
use std::cmp::max;
use std::mem::swap;
use std::mem::{swap, take};
use std::ops::Deref;
use swc_core::common::util::take::Take;
use swc_core::common::{EqIgnoreSpan, DUMMY_SP};
use swc_core::common::EqIgnoreSpan;
use swc_core::ecma::ast::*;
use swc_core::ecma::utils::quote_ident;
use swc_core::ecma::visit::{noop_visit_mut_type, VisitMut, VisitMutWith};
use swc_core::{quote, quote_expr};
use swc_core::quote;

pub struct ExtractingIdentsCollectorConfig {
pub custom_global_ident_names: Option<Vec<String>>,
Expand All @@ -31,7 +31,7 @@ pub struct ExtractingIdentsCollector {
values_extracted: Box<Expr>,
idents_to_extract: Vec<Ident>,
this_expr_to_extract: Box<Expr>,
js_fns_to_extract: Box<Expr>,
js_fns_to_extract: Vec<(IdentName, Box<Expr>)>,
id_of_last_js_fn: u32,
next_block_decls_collected: bool,
scope_env: Vec<ScopeEnv>,
Expand All @@ -51,7 +51,7 @@ impl ExtractingIdentsCollector {
values_extracted: quote!("{}" as Expr).into(),
idents_to_extract: vec![],
this_expr_to_extract: quote!("{}" as Expr).into(),
js_fns_to_extract: quote!("{}" as Expr).into(),
js_fns_to_extract: vec![],
id_of_last_js_fn: 0,
next_block_decls_collected: false,
scope_env: vec![ScopeEnv {
Expand All @@ -76,8 +76,8 @@ impl ExtractingIdentsCollector {
self.this_expr_to_extract.take()
}

pub fn take_js_fns(&mut self) -> Box<Expr> {
self.js_fns_to_extract.take()
pub fn take_js_fns(&mut self) -> Vec<(IdentName, Box<Expr>)> {
take(&mut self.js_fns_to_extract)
}

fn is_at_global(&self, s: &str) -> bool {
Expand Down Expand Up @@ -350,20 +350,7 @@ impl VisitMut for ExtractingIdentsCollector {
let fn_ident = quote_ident!(format!("_jsFn{}", self.id_of_last_js_fn));
let mut fn_expr = Box::new(fn_ident.clone().into());
swap(&mut fn_expr, &mut n.args[0].expr);
self.js_fns_to_extract.as_mut_object().unwrap().props.push(
Prop::KeyValue(KeyValueProp {
key: fn_ident.into(),
value: CallExpr {
ctxt: Default::default(),
span: DUMMY_SP,
args: vec![fn_expr.into()],
callee: Callee::Expr(quote_expr!("transformToWorklet")),
type_args: None,
}
.into(),
})
.into(),
);
self.js_fns_to_extract.push((fn_ident.clone(), fn_expr));
// skip visit_mut_children_with() here
}

Expand Down
53 changes: 37 additions & 16 deletions packages/react/transform/src/swc_plugin_worklet/gen_stmt.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use std::collections::HashSet;
use std::vec;
use swc_core::common::DUMMY_SP;
use swc_core::ecma::ast::*;
use swc_core::quote;
use swc_core::{quote, quote_expr};

pub struct StmtGen {}

Expand Down Expand Up @@ -66,11 +66,11 @@ impl StmtGen {
target: TransformTarget,
extracted_value: Box<Expr>,
extracted_this_expr: Box<Expr>,
extracted_js_fns: Box<Expr>,
extracted_js_fns: Vec<(IdentName, Box<Expr>)>,
hash: Expr,
named_imports: &mut HashSet<String>,
) -> Box<Expr> {
if target == TransformTarget::JS && !extracted_js_fns.as_object().unwrap().props.is_empty() {
if target == TransformTarget::JS && !extracted_js_fns.is_empty() {
named_imports.insert("transformToWorklet".into());
}

Expand Down Expand Up @@ -99,11 +99,37 @@ impl StmtGen {
.into(),
);

if target == TransformTarget::JS && !extracted_js_fns.as_object().unwrap().props.is_empty() {
if target == TransformTarget::JS && !extracted_js_fns.is_empty() {
let value: Box<Expr> = Expr::Object(ObjectLit {
span: DUMMY_SP,
props: extracted_js_fns
.into_iter()
.map(|(key, value)| {
{
match target {
TransformTarget::JS => Prop::KeyValue(KeyValueProp {
key: key.into(),
value: CallExpr {
ctxt: Default::default(),
span: DUMMY_SP,
args: vec![value.into()],
callee: Callee::Expr(quote_expr!("transformToWorklet")),
type_args: None,
}
.into(),
}),
_ => unreachable!(),
}
}
.into()
})
.collect(),
})
.into();
props.push(
Prop::KeyValue(KeyValueProp {
key: Ident::from("_jsFn").into(),
value: extracted_js_fns,
value: value,
})
.into(),
);
Expand Down Expand Up @@ -141,7 +167,7 @@ impl StmtGen {
function_name: Ident,
function: Box<Function>,
extracted_idents: Vec<Ident>,
extracted_js_fns: Box<Expr>,
extracted_js_fns: Vec<(IdentName, Box<Expr>)>,
hash: Expr,
is_class_member: bool,
named_imports: &mut HashSet<String>,
Expand Down Expand Up @@ -184,7 +210,7 @@ impl StmtGen {
function: Box<Function>,
function_name: Ident,
extracted_idents: Vec<Ident>,
extracted_js_fns: Box<Expr>,
extracted_js_fns: Vec<(IdentName, Box<Expr>)>,
hash: Expr,
is_class_member: bool,
) -> Function {
Expand All @@ -201,15 +227,10 @@ impl StmtGen {
}

// let { _jsFn1, _jsFn2 } = this._jsFn;
let fn_props = extracted_js_fns.expect_object().props;
if !fn_props.is_empty() {
let fn_ids = fn_props
.into_iter()
.map(|prop| match *prop.expect_prop() {
Prop::Shorthand(id) => id,
Prop::KeyValue(kv) => kv.key.expect_ident().into(),
_ => unreachable!(),
})
if !extracted_js_fns.is_empty() {
let fn_ids = extracted_js_fns
.iter()
.map(|(k, _)| Ident::from(k.clone()))
.collect();
stmts.push(StmtGen::gen_destructure_stmt(
Ident::new("_jsFn".into(), DUMMY_SP, Default::default()).into(),
Expand Down
8 changes: 4 additions & 4 deletions packages/rspeedy/core/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

### Patch Changes

- Support cli option `--no-env` to disable loading of .env files ([#483](https://github.com/lynx-family/lynx-stack/pull/483))
- Support CLI option `--no-env` to disable loading of `.env` files ([#483](https://github.com/lynx-family/lynx-stack/pull/483))

- Bump Rsbuild v1.3.8 with Rspack v1.3.5. ([#579](https://github.com/lynx-family/lynx-stack/pull/579))

Expand Down Expand Up @@ -46,9 +46,9 @@

### Patch Changes

- Support cli flag `--base` to specify the base path of the server. ([#387](https://github.com/lynx-family/lynx-stack/pull/387))
- Support CLI flag `--base` to specify the base path of the server. ([#387](https://github.com/lynx-family/lynx-stack/pull/387))

- Support cli option `--environment` to specify the name of environment to build ([#462](https://github.com/lynx-family/lynx-stack/pull/462))
- Support CLI option `--environment` to specify the name of environment to build ([#462](https://github.com/lynx-family/lynx-stack/pull/462))

- Select the most appropriate network interface. ([#457](https://github.com/lynx-family/lynx-stack/pull/457))

Expand All @@ -58,7 +58,7 @@

See [Node.js - TypeScript](https://nodejs.org/api/typescript.html) for more details.

- Support cli option `--env-mode` to specify the env mode to load the `.env.[mode]` file. ([#453](https://github.com/lynx-family/lynx-stack/pull/453))
- Support CLI option `--env-mode` to specify the env mode to load the `.env.[mode]` file. ([#453](https://github.com/lynx-family/lynx-stack/pull/453))

- Support `dev.hmr` and `dev.liveReload`. ([#458](https://github.com/lynx-family/lynx-stack/pull/458))

Expand Down
1 change: 1 addition & 0 deletions packages/rspeedy/core/etc/rspeedy.api.md
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,7 @@ export interface Output {
export interface Performance {
chunkSplit?: ChunkSplit | ChunkSplitBySize | ChunkSplitCustom | undefined;
printFileSize?: PerformanceConfig['printFileSize'] | undefined;
profile?: boolean | undefined;
removeConsole?: boolean | ConsoleType[] | undefined;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/rspeedy/core/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@
"type-fest": "^4.40.1",
"typia": "9.1.1",
"typia-rspack-plugin": "2.0.1",
"vitest": "^3.1.2",
"vitest": "^3.1.3",
"webpack": "^5.99.7"
},
"peerDependencies": {
Expand Down
25 changes: 3 additions & 22 deletions packages/rspeedy/core/src/cli/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,9 @@ import { logger } from '@rsbuild/core'
import type { Command } from 'commander'

import type { CommonOptions } from './commands.js'
import type { CreateRspeedyOptions } from '../create-rspeedy.js'
import { exit } from './exit.js'
import { loadConfig } from '../config/loadConfig.js'
import { createRspeedy } from '../create-rspeedy.js'
import { init } from './init.js'
import { isCI } from '../utils/is-ci.js'

export type BuildOptions = CommonOptions & {
Expand All @@ -26,27 +25,9 @@ export async function build(
const shouldExit = process.env['RSDOCTOR'] !== 'true' || isCI()

try {
const { content: rspeedyConfig } = await loadConfig({
cwd,
configPath: buildOptions.config,
})

const options: CreateRspeedyOptions = {
cwd,
rspeedyConfig,
}

if (buildOptions.noEnv) {
options.loadEnv = false
} else if (buildOptions.envMode) {
options.loadEnv = { mode: buildOptions.envMode }
}

if (buildOptions.environment) {
options.environment = buildOptions.environment
}
const { createRspeedyOptions } = await init(cwd, buildOptions)

const rspeedy = await createRspeedy(options)
const rspeedy = await createRspeedy(createRspeedyOptions)

await rspeedy.build()
} catch (error) {
Expand Down
Loading