Skip to content

Commit 38a1990

Browse files
committed
refactor(loader): reuse loader item data
1 parent d7b8898 commit 38a1990

10 files changed

Lines changed: 5 additions & 68 deletions

File tree

crates/node_binding/napi-binding.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1011,7 +1011,6 @@ export interface JsLoaderItem {
10111011
parallel: boolean
10121012
optionsHandle?: number
10131013
ident?: string
1014-
serializedData?: string
10151014
data: any
10161015
normalExecuted: boolean
10171016
pitchExecuted: boolean

crates/rspack_binding_api/src/plugins/js_loader/context.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,6 @@ pub struct JsLoaderItem {
2222
pub parallel: bool,
2323
pub options_handle: Option<u32>,
2424
pub ident: Option<String>,
25-
pub serialized_data: Option<String>,
2625

2726
// data
2827
pub data: serde_json::Value,
@@ -43,7 +42,6 @@ impl From<&rspack_loader_runner::LoaderItem<RunnerContext>> for JsLoaderItem {
4342
parallel: value.parallel(),
4443
options_handle: value.js_options_handle(),
4544
ident: value.ident().map(ToOwned::to_owned),
46-
serialized_data: value.js_data().map(ToOwned::to_owned),
4745

4846
data: value.data().clone(),
4947
normal_executed: value.normal_executed(),
@@ -70,7 +68,6 @@ where
7068
parallel: false,
7169
options_handle: None,
7270
ident: None,
73-
serialized_data: None,
7471
pitch_executed: false,
7572
normal_executed: false,
7673
no_pitch: false,
@@ -84,7 +81,6 @@ where
8481
parallel: false,
8582
options_handle: None,
8683
ident: None,
87-
serialized_data: None,
8884
pitch_executed: false,
8985
normal_executed: false,
9086
no_pitch: false,

crates/rspack_binding_api/src/plugins/js_loader/scheduler.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,6 @@ fn merge_loader_hook_context(to: &mut LoaderContext<RunnerContext>, mut from: Js
167167
.collect();
168168
for (to, from) in to.loader_items.iter_mut().zip(from.loader_items.drain(..)) {
169169
to.set_data(from.data);
170-
to.set_js_data(from.serialized_data);
171170
}
172171
to.parse_meta.extend(
173172
from
@@ -246,7 +245,6 @@ pub(crate) fn merge_loader_context(
246245
to.set_pitch_executed()
247246
}
248247
to.set_data(from.data);
249-
to.set_js_data(from.serialized_data);
250248
// JS loader should always be considered as finished
251249
to.set_finish_called();
252250
to

crates/rspack_loader_runner/src/loader.rs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,6 @@ pub struct LoaderItem<Context: Send> {
3737
fragment: Option<String>,
3838
/// Data shared between pitching and normal
3939
data: serde_json::Value,
40-
/// Native-owned V8 serialization of JavaScript loader data. This keeps values such as Buffer,
41-
/// Map and function handles intact when execution changes isolates. Native loaders continue to
42-
/// use `data`; JavaScript loaders prefer this representation once it exists.
43-
js_data: Option<String>,
4440
r#type: String,
4541
cache_options: Option<Box<LoaderRunnerOptions>>,
4642
parallel: bool,
@@ -143,17 +139,6 @@ impl<C: Send> LoaderItem<C> {
143139
self.data = data;
144140
}
145141

146-
#[inline]
147-
pub fn js_data(&self) -> Option<&str> {
148-
self.js_data.as_deref()
149-
}
150-
151-
#[inline]
152-
#[doc(hidden)]
153-
pub fn set_js_data(&mut self, data: Option<String>) {
154-
self.js_data = data;
155-
}
156-
157142
#[inline]
158143
#[doc(hidden)]
159144
pub fn pitch_executed(&self) -> bool {
@@ -298,7 +283,6 @@ impl<C: Send> LoaderItem<C> {
298283
query,
299284
fragment,
300285
data: serde_json::Value::Null,
301-
js_data: None,
302286
r#type: ty,
303287
cache_options,
304288
parallel,
@@ -322,7 +306,6 @@ impl<C: Send> LoaderItem<C> {
322306
query,
323307
fragment,
324308
data: serde_json::Value::Null,
325-
js_data: None,
326309
r#type: String::default(),
327310
cache_options,
328311
parallel,

packages/rspack/src/loader-runner/index.ts

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -157,9 +157,7 @@ export class LoaderObject {
157157
this.parallel = loaderItem.parallel;
158158
this.cache = loaderItem.cache;
159159
this.loaderItem = loaderItem;
160-
this.loaderItem.data = loaderItem.serializedData
161-
? deserializeLoaderOptions(loaderItem.serializedData)
162-
: (this.loaderItem.data ?? {});
160+
this.loaderItem.data = this.loaderItem.data ?? {};
163161
}
164162

165163
get pitchExecuted() {
@@ -204,16 +202,7 @@ export class LoaderObject {
204202
return new this(loaderItem, compiler);
205203
}
206204

207-
static __to_binding(
208-
loader: LoaderObject,
209-
serializeData = false,
210-
): JsLoaderItem {
211-
if (serializeData || loader.loaderItem.serializedData) {
212-
loader.loaderItem.serializedData = serializeLoaderOptions(
213-
loader.loaderItem.data,
214-
);
215-
loader.loaderItem.data = null;
216-
}
205+
static __to_binding(loader: LoaderObject): JsLoaderItem {
217206
return loader.loaderItem;
218207
}
219208
}
@@ -772,7 +761,7 @@ function runLoadersInternal(
772761
}
773762
context.__internal__hookExtensions = serializeLoaderOptions(hookExtensions);
774763
context.loaderItems = loaderContext.loaders.map((item) =>
775-
LoaderObject.__to_binding(item, true),
764+
LoaderObject.__to_binding(item),
776765
);
777766
return Promise.resolve(context);
778767
}
@@ -988,7 +977,7 @@ function runLoadersInternal(
988977

989978
// update loader state
990979
context.loaderItems = loaderContext.loaders.map((item) =>
991-
LoaderObject.__to_binding(item, worker),
980+
LoaderObject.__to_binding(item),
992981
);
993982
} catch (e) {
994983
if (typeof e !== 'object' || e === null) {

task.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ parallel task 从 Rust loader runner 直接进入 Rust queue,不经过 JS 主
9090
- [x] queue payload 保存完整 Rust LoaderContext。
9191
- [x] main 和 worker 都在各自 N-API 边界组装同一个 `JsLoaderContext` DTO。
9292
- [x] 删除 bulk `JsLoaderContextState`、整套 native field accessor 和重复的 parallel DTO。
93-
- [x] `additionalData`loader `data` 使用 V8 序列化字符串跨 isolate,避免 JSON 丢失 Buffer、Map 或函数 handle
93+
- [x] loader `data` 沿用 main 的 `serde_json::Value``additionalData` 保留单独的跨 isolate 表示
9494
- [x] `_module` 使用 canonical pointer,不复制 NormalModule。
9595

9696
### 5. 清理 options/cache 的无关改动

tests/rspack-test/configCases/loader-parallel/loader-data/index.js

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/rspack-test/configCases/loader-parallel/loader-data/loader.js

Lines changed: 0 additions & 11 deletions
This file was deleted.

tests/rspack-test/configCases/loader-parallel/loader-data/resource.js

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/rspack-test/configCases/loader-parallel/loader-data/rspack.config.js

Lines changed: 0 additions & 10 deletions
This file was deleted.

0 commit comments

Comments
 (0)