Skip to content

Commit

Permalink
feat: support rspack native plugin
Browse files Browse the repository at this point in the history
  • Loading branch information
LingyuCoder committed Jan 10, 2025
1 parent ecd9c97 commit 28500f1
Show file tree
Hide file tree
Showing 10 changed files with 488 additions and 155 deletions.
39 changes: 36 additions & 3 deletions crates/node_binding/binding.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -814,23 +814,39 @@ export interface JsRsdoctorAsset {
ukey: number
path: string
chunks: Array<number>
size: number
}

export interface JsRsdoctorAssetPatch {
assets: Array<JsRsdoctorAsset>
chunkAssets: Array<JsRsdoctorChunkAssets>
entrypointAssets: Array<JsRsdoctorEntrypointAssets>
}

export interface JsRsdoctorChunk {
ukey: number
name: string
initial: boolean
entry: boolean
assets: Array<number>
dependencies: Array<number>
imported: Array<number>
}

export interface JsRsdoctorChunkAssets {
chunk: number
assets: Array<number>
}

export interface JsRsdoctorChunkGraph {
chunks: Array<JsRsdoctorChunk>
entrypoints: Array<JsRsdoctorEntrypoint>
}

export interface JsRsdoctorChunkModules {
chunk: number
modules: Array<number>
}

export interface JsRsdoctorDependency {
ukey: number
kind: string
Expand All @@ -845,6 +861,11 @@ export interface JsRsdoctorEntrypoint {
chunks: Array<number>
}

export interface JsRsdoctorEntrypointAssets {
entrypoint: number
assets: Array<number>
}

export interface JsRsdoctorExportInfo {
ukey: number
name: string
Expand All @@ -864,6 +885,7 @@ export interface JsRsdoctorModule {
dependencies: Array<number>
imported: Array<number>
modules: Array<number>
belongModules: Array<number>
chunks: Array<number>
}

Expand All @@ -881,7 +903,13 @@ export interface JsRsdoctorModuleGraphModule {
dynamic: boolean
}

export interface JsRsdoctorModuleId {
module: number
renderId: string
}

export interface JsRsdoctorModuleSource {
module: number
sourceSize: number
transformSize: number
source?: string
Expand All @@ -900,6 +928,11 @@ export interface JsRsdoctorSideEffect {
variable?: number
}

export interface JsRsdoctorSourcePatch {
moduleSources: Array<JsRsdoctorModuleSource>
moduleIds: Array<JsRsdoctorModuleId>
}

export interface JsRsdoctorSourcePosition {
line?: number
column?: number
Expand Down Expand Up @@ -2258,8 +2291,8 @@ export interface RegisterJsTaps {
registerHtmlPluginAfterEmitTaps: (stages: Array<number>) => Array<{ function: ((arg: JsAfterEmitData) => JsAfterEmitData); stage: number; }>
registerRsdoctorPluginModuleGraphTaps: (stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorModuleGraph) => Promise<boolean | undefined>); stage: number; }>
registerRsdoctorPluginChunkGraphTaps: (stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorChunkGraph) => Promise<boolean | undefined>); stage: number; }>
registerRsdoctorPluginModuleSourcesTaps: (stages: Array<number>) => Array<{ function: ((arg: Vec<JsRsdoctorModuleSource>) => Promise<boolean | undefined>); stage: number; }>
registerRsdoctorPluginAssetsTaps: (stages: Array<number>) => Array<{ function: ((arg: Vec<JsRsdoctorAsset>) => Promise<boolean | undefined>); stage: number; }>
registerRsdoctorPluginModuleSourcesTaps: (stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorSourcePatch) => Promise<boolean | undefined>); stage: number; }>
registerRsdoctorPluginAssetsTaps: (stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorAssetPatch) => Promise<boolean | undefined>); stage: number; }>
}

export interface ThreadsafeNodeFS {
Expand Down
42 changes: 16 additions & 26 deletions crates/node_binding/src/plugins/interceptor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ use rspack_binding_values::{
JsContextModuleFactoryBeforeResolveDataWrapper, JsContextModuleFactoryBeforeResolveResult,
JsCreateData, JsExecuteModuleArg, JsFactorizeArgs, JsFactorizeOutput, JsModuleWrapper,
JsNormalModuleFactoryCreateModuleArgs, JsResolveArgs, JsResolveForSchemeArgs,
JsResolveForSchemeOutput, JsResolveOutput, JsRsdoctorAsset, JsRsdoctorChunkGraph,
JsRsdoctorModuleGraph, JsRsdoctorModuleSource, JsRuntimeGlobals, JsRuntimeModule,
JsResolveForSchemeOutput, JsResolveOutput, JsRsdoctorAssetPatch, JsRsdoctorChunkGraph,
JsRsdoctorModuleGraph, JsRsdoctorSourcePatch, JsRuntimeGlobals, JsRuntimeModule,
JsRuntimeModuleArg, JsRuntimeRequirementInTreeArg, JsRuntimeRequirementInTreeResult,
ToJsCompatSourceOwned,
};
Expand Down Expand Up @@ -70,10 +70,10 @@ use rspack_plugin_html::{
};
use rspack_plugin_javascript::{JavascriptModulesChunkHash, JavascriptModulesChunkHashHook};
use rspack_plugin_rsdoctor::{
RsdoctorAsset, RsdoctorChunkGraph, RsdoctorModuleGraph, RsdoctorModuleSource,
RsdoctorPluginAssets, RsdoctorPluginAssetsHook, RsdoctorPluginChunkGraph,
RsdoctorPluginChunkGraphHook, RsdoctorPluginModuleGraph, RsdoctorPluginModuleGraphHook,
RsdoctorPluginModuleSources, RsdoctorPluginModuleSourcesHook,
RsdoctorAssetPatch, RsdoctorChunkGraph, RsdoctorModuleGraph, RsdoctorPluginAssets,
RsdoctorPluginAssetsHook, RsdoctorPluginChunkGraph, RsdoctorPluginChunkGraphHook,
RsdoctorPluginModuleGraph, RsdoctorPluginModuleGraphHook, RsdoctorPluginModuleSources,
RsdoctorPluginModuleSourcesHook, RsdoctorSourcePatch,
};

#[napi(object)]
Expand Down Expand Up @@ -614,15 +614,15 @@ pub struct RegisterJsTaps {
pub register_rsdoctor_plugin_chunk_graph_taps:
RegisterFunction<JsRsdoctorChunkGraph, Promise<Option<bool>>>,
#[napi(
ts_type = "(stages: Array<number>) => Array<{ function: ((arg: Vec<JsRsdoctorModuleSource>) => Promise<boolean | undefined>); stage: number; }>"
ts_type = "(stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorSourcePatch) => Promise<boolean | undefined>); stage: number; }>"
)]
pub register_rsdoctor_plugin_module_sources_taps:
RegisterFunction<Vec<JsRsdoctorModuleSource>, Promise<Option<bool>>>,
RegisterFunction<JsRsdoctorSourcePatch, Promise<Option<bool>>>,
#[napi(
ts_type = "(stages: Array<number>) => Array<{ function: ((arg: Vec<JsRsdoctorAsset>) => Promise<boolean | undefined>); stage: number; }>"
ts_type = "(stages: Array<number>) => Array<{ function: ((arg: JsRsdoctorAssetPatch) => Promise<boolean | undefined>); stage: number; }>"
)]
pub register_rsdoctor_plugin_assets_taps:
RegisterFunction<Vec<JsRsdoctorAsset>, Promise<Option<bool>>>,
RegisterFunction<JsRsdoctorAssetPatch, Promise<Option<bool>>>,
}

/* Compiler Hooks */
Expand Down Expand Up @@ -991,7 +991,7 @@ define_register!(

define_register!(
RegisterRsdoctorPluginAssetsTaps,
tap = RsdoctorPluginAssetsTap<Vec<JsRsdoctorAsset>, Promise<Option<bool>>> @ RsdoctorPluginAssetsHook,
tap = RsdoctorPluginAssetsTap<JsRsdoctorAssetPatch, Promise<Option<bool>>> @ RsdoctorPluginAssetsHook,
cache = true,
sync = false,
kind = RegisterJsTapKind::RsdoctorPluginAssets,
Expand All @@ -1000,7 +1000,7 @@ define_register!(

define_register!(
RegisterRsdoctorPluginModuleSourcesTaps,
tap = RsdoctorPluginModuleSourcesTap<Vec<JsRsdoctorModuleSource>, Promise<Option<bool>>> @ RsdoctorPluginModuleSourcesHook,
tap = RsdoctorPluginModuleSourcesTap<JsRsdoctorSourcePatch, Promise<Option<bool>>> @ RsdoctorPluginModuleSourcesHook,
cache = true,
sync = false,
kind = RegisterJsTapKind::RsdoctorPluginModuleSources,
Expand Down Expand Up @@ -1874,16 +1874,11 @@ impl RsdoctorPluginChunkGraph for RsdoctorPluginChunkGraphTap {

#[async_trait]
impl RsdoctorPluginModuleSources for RsdoctorPluginModuleSourcesTap {
async fn run(&self, data: &mut Vec<RsdoctorModuleSource>) -> rspack_error::Result<Option<bool>> {
async fn run(&self, data: &mut RsdoctorSourcePatch) -> rspack_error::Result<Option<bool>> {
let data = std::mem::take(data);
let bail = self
.function
.call_with_promise(
data
.into_iter()
.map(JsRsdoctorModuleSource::from)
.collect::<Vec<_>>(),
)
.call_with_promise(JsRsdoctorSourcePatch::from(data))
.await?;
Ok(bail)
}
Expand All @@ -1895,16 +1890,11 @@ impl RsdoctorPluginModuleSources for RsdoctorPluginModuleSourcesTap {

#[async_trait]
impl RsdoctorPluginAssets for RsdoctorPluginAssetsTap {
async fn run(&self, data: &mut Vec<RsdoctorAsset>) -> rspack_error::Result<Option<bool>> {
async fn run(&self, data: &mut RsdoctorAssetPatch) -> rspack_error::Result<Option<bool>> {
let data = std::mem::take(data);
let bail = self
.function
.call_with_promise(
data
.into_iter()
.map(JsRsdoctorAsset::from)
.collect::<Vec<_>>(),
)
.call_with_promise(JsRsdoctorAssetPatch::from(data))
.await?;
Ok(bail)
}
Expand Down
Loading

0 comments on commit 28500f1

Please sign in to comment.