Skip to content
Draft
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
133 changes: 77 additions & 56 deletions crates/node_binding/napi-binding.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -333,8 +333,7 @@ export declare class JsCompilation {
}

export declare class JsCompiler {
constructor(compilerPath: string, options: RawOptions, builtinPlugins: Array<BuiltinPlugin>, registerJsTaps: RegisterJsTaps, outputFilesystem: ThreadsafeNodeFS, intermediateFilesystem: ThreadsafeNodeFS | undefined | null, inputFilesystem: ThreadsafeNodeFS | undefined | null, resolverFactoryReference: JsResolverFactory, unsafeFastDrop: boolean, platform: RawCompilerPlatform)
setNonSkippableRegisters(kinds: Array<RegisterJsTapKind>): void
constructor(options: JsCompilerOptions)
/** Build with the given option passed to the constructor */
build(callback: (err: null | Error) => void): void
/** Rebuild with the given option passed to the constructor */
Expand Down Expand Up @@ -627,6 +626,67 @@ export declare enum BuiltinPluginName {

export declare function cleanupGlobalTrace(): void

export const COMPILATION_HOOK_SUBSCRIPTION_BITSET_BYTE_LENGTH: number

export declare enum CompilationHooks {
BuildModule = 0,
StillValidModule = 1,
SucceedModule = 2,
ExecuteModule = 3,
FinishModules = 4,
OptimizeModules = 5,
AfterOptimizeModules = 6,
OptimizeTree = 7,
OptimizeChunkModules = 8,
BeforeModuleIds = 9,
AdditionalTreeRuntimeRequirements = 10,
RuntimeRequirementInTree = 11,
RuntimeModule = 12,
ChunkHash = 13,
ChunkAsset = 14,
ProcessAssets = 15,
AfterProcessAssets = 16,
Seal = 17,
AfterSeal = 18,
NormalModuleFactoryBeforeResolve = 19,
NormalModuleFactoryFactorize = 20,
NormalModuleFactoryResolve = 21,
NormalModuleFactoryAfterResolve = 22,
NormalModuleFactoryCreateModule = 23,
NormalModuleFactoryResolveForScheme = 24,
ContextModuleFactoryBeforeResolve = 25,
ContextModuleFactoryAfterResolve = 26,
JavascriptModulesChunkHash = 27,
HtmlPluginBeforeAssetTagGeneration = 28,
HtmlPluginAlterAssetTags = 29,
HtmlPluginAlterAssetTagGroups = 30,
HtmlPluginAfterTemplateExecution = 31,
HtmlPluginBeforeEmit = 32,
HtmlPluginAfterEmit = 33,
RuntimePluginCreateScript = 34,
RuntimePluginCreateLink = 35,
RuntimePluginLinkPreload = 36,
RuntimePluginLinkPrefetch = 37,
RsdoctorPluginModuleGraph = 38,
RsdoctorPluginChunkGraph = 39,
RsdoctorPluginModuleIds = 40,
RsdoctorPluginModuleSources = 41,
RsdoctorPluginAssets = 42
}

export const COMPILER_HOOK_SUBSCRIPTION_BITSET_BYTE_LENGTH: number

export declare enum CompilerHooks {
ThisCompilation = 0,
Compilation = 1,
Make = 2,
FinishMake = 3,
ShouldEmit = 4,
Emit = 5,
AfterEmit = 6,
AssetEmitted = 7
}

export interface ContextInfo {
issuer: string
issuerLayer?: string
Expand Down Expand Up @@ -790,6 +850,21 @@ export interface JsCodegenerationResults {
map: Record<string, Record<string, JsCodegenerationResult>>
}

export interface JsCompilerOptions {
compilerPath: string
options: RawOptions
builtinPlugins: Array<BuiltinPlugin>
registerJsTaps: RegisterJsTaps
compilerHookSubscriptionBitset: Buffer
compilationHookSubscriptionBitset: Buffer
outputFilesystem: ThreadsafeNodeFS
intermediateFilesystem?: ThreadsafeNodeFS
inputFilesystem?: ThreadsafeNodeFS
resolverFactoryReference: JsResolverFactory
unsafeFastDrop: boolean
platform: RawCompilerPlatform
}

export interface JsCreateData {
request: string
userRequest: string
Expand Down Expand Up @@ -3083,60 +3158,6 @@ export interface RealDependencyLocation {
*/
export declare function registerGlobalTrace(filter: string, layer: "logger" | "perfetto" , output: string): void

export declare enum RegisterJsTapKind {
CompilerThisCompilation = 0,
CompilerCompilation = 1,
CompilerMake = 2,
CompilerFinishMake = 3,
CompilerShouldEmit = 4,
CompilerEmit = 5,
CompilerAfterEmit = 6,
CompilerAssetEmitted = 7,
CompilationBuildModule = 8,
CompilationStillValidModule = 9,
CompilationSucceedModule = 10,
CompilationExecuteModule = 11,
CompilationFinishModules = 12,
CompilationOptimizeModules = 13,
CompilationAfterOptimizeModules = 14,
CompilationOptimizeTree = 15,
CompilationOptimizeChunkModules = 16,
CompilationBeforeModuleIds = 17,
CompilationAdditionalTreeRuntimeRequirements = 18,
CompilationRuntimeRequirementInTree = 19,
CompilationRuntimeModule = 20,
CompilationChunkHash = 21,
CompilationChunkAsset = 22,
CompilationProcessAssets = 23,
CompilationAfterProcessAssets = 24,
CompilationSeal = 25,
CompilationAfterSeal = 26,
NormalModuleFactoryBeforeResolve = 27,
NormalModuleFactoryFactorize = 28,
NormalModuleFactoryResolve = 29,
NormalModuleFactoryAfterResolve = 30,
NormalModuleFactoryCreateModule = 31,
NormalModuleFactoryResolveForScheme = 32,
ContextModuleFactoryBeforeResolve = 33,
ContextModuleFactoryAfterResolve = 34,
JavascriptModulesChunkHash = 35,
HtmlPluginBeforeAssetTagGeneration = 36,
HtmlPluginAlterAssetTags = 37,
HtmlPluginAlterAssetTagGroups = 38,
HtmlPluginAfterTemplateExecution = 39,
HtmlPluginBeforeEmit = 40,
HtmlPluginAfterEmit = 41,
RuntimePluginCreateScript = 42,
RuntimePluginCreateLink = 43,
RuntimePluginLinkPreload = 44,
RuntimePluginLinkPrefetch = 45,
RsdoctorPluginModuleGraph = 46,
RsdoctorPluginChunkGraph = 47,
RsdoctorPluginModuleIds = 48,
RsdoctorPluginModuleSources = 49,
RsdoctorPluginAssets = 50
}

export interface RegisterJsTaps {
registerCompilerThisCompilationTaps: (stages: Array<number>) => Array<{ function: ((arg: JsCompilation) => void); stage: number; }>
registerCompilerCompilationTaps: (stages: Array<number>) => Array<{ function: ((arg: JsCompilation) => void); stage: number; }>
Expand Down
3 changes: 2 additions & 1 deletion crates/node_binding/rspack.wasi-browser.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,8 @@ export const minifySync = __napiModule.exports.minifySync
export const RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
export const RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
export const registerGlobalTrace = __napiModule.exports.registerGlobalTrace
export const RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
export const CompilerHooks = __napiModule.exports.CompilerHooks
export const CompilationHooks = __napiModule.exports.CompilationHooks
export const sync = __napiModule.exports.sync
export const syncTraceEvent = __napiModule.exports.syncTraceEvent
export const transform = __napiModule.exports.transform
Expand Down
3 changes: 2 additions & 1 deletion crates/node_binding/rspack.wasi.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@ module.exports.minifySync = __napiModule.exports.minifySync
module.exports.RawJavascriptParserCommonjsExports = __napiModule.exports.RawJavascriptParserCommonjsExports
module.exports.RawRuleSetConditionType = __napiModule.exports.RawRuleSetConditionType
module.exports.registerGlobalTrace = __napiModule.exports.registerGlobalTrace
module.exports.RegisterJsTapKind = __napiModule.exports.RegisterJsTapKind
module.exports.CompilerHooks = __napiModule.exports.CompilerHooks
module.exports.CompilationHooks = __napiModule.exports.CompilationHooks
module.exports.sync = __napiModule.exports.sync
module.exports.syncTraceEvent = __napiModule.exports.syncTraceEvent
module.exports.transform = __napiModule.exports.transform
Expand Down
62 changes: 38 additions & 24 deletions crates/rspack_binding_api/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -129,9 +129,7 @@ use crate::{
fs_node::{HybridFileSystem, NodeFileSystem, ThreadsafeNodeFS},
module::ModuleObject,
platform::RawCompilerPlatform,
plugins::{
JsCleanupPlugin, JsHooksAdapterPlugin, RegisterJsTapKind, RegisterJsTaps, buildtime_plugins,
},
plugins::{JsCleanupPlugin, JsHooksAdapterPlugin, RegisterJsTaps, buildtime_plugins},
raw_options::{BuiltinPlugin, RawOptions, WithFalse},
resolver_factory::JsResolverFactory,
trace_event::RawTraceEvent,
Expand Down Expand Up @@ -174,30 +172,51 @@ struct JsCompiler {
virtual_file_store: Option<Arc<RwLock<dyn VirtualFileStore>>>,
}

#[napi(object, object_to_js = false)]
pub struct JsCompilerOptions<'a> {
pub compiler_path: String,
pub options: RawOptions,
pub builtin_plugins: Vec<BuiltinPlugin<'a>>,
pub register_js_taps: RegisterJsTaps,
pub compiler_hook_subscription_bitset: Buffer,
pub compilation_hook_subscription_bitset: Buffer,
pub output_filesystem: ThreadsafeNodeFS,
pub intermediate_filesystem: Option<ThreadsafeNodeFS>,
pub input_filesystem: Option<ThreadsafeNodeFS>,
pub resolver_factory_reference: Reference<JsResolverFactory>,
pub unsafe_fast_drop: bool,
pub platform: RawCompilerPlatform,
}

#[napi]
impl JsCompiler {
#[allow(clippy::too_many_arguments)]
#[napi(constructor)]
pub fn new(
env: Env,
mut this: This,
compiler_path: String,
mut options: RawOptions,
builtin_plugins: Vec<BuiltinPlugin>,
register_js_taps: RegisterJsTaps,
output_filesystem: ThreadsafeNodeFS,
intermediate_filesystem: Option<ThreadsafeNodeFS>,
input_filesystem: Option<ThreadsafeNodeFS>,
mut resolver_factory_reference: Reference<JsResolverFactory>,
unsafe_fast_drop: bool,
platform: RawCompilerPlatform,
) -> Result<Self> {
pub fn new(env: Env, mut this: This, options: JsCompilerOptions<'_>) -> Result<Self> {
let JsCompilerOptions {
compiler_path,
mut options,
builtin_plugins,
register_js_taps,
compiler_hook_subscription_bitset,
compilation_hook_subscription_bitset,
output_filesystem,
intermediate_filesystem,
input_filesystem,
mut resolver_factory_reference,
unsafe_fast_drop,
platform,
} = options;
tracing::info!(name:"rspack_version", version = rspack_workspace::rspack_pkg_version!());
tracing::info!(name:"raw_options", options=?&options);
let compiler_context = Arc::new(CompilerContext::new());
CURRENT_COMPILER_CONTEXT.sync_scope(compiler_context.clone(), || {
let mut plugins = Vec::with_capacity(builtin_plugins.len());
let js_hooks_plugin = JsHooksAdapterPlugin::from_js_hooks(env, register_js_taps)?;
let js_hooks_plugin = JsHooksAdapterPlugin::from_js_hooks(
env,
register_js_taps,
compiler_hook_subscription_bitset,
compilation_hook_subscription_bitset,
)?;
plugins.push(js_hooks_plugin.clone().boxed());

// Register builtin loader plugins
Expand Down Expand Up @@ -332,11 +351,6 @@ impl JsCompiler {
})
})
}
#[napi]
pub fn set_non_skippable_registers(&self, kinds: Vec<RegisterJsTapKind>) {
self.js_hooks_plugin.set_non_skippable_registers(kinds)
}

/// Build with the given option passed to the constructor
#[napi(ts_args_type = "callback: (err: null | Error) => void")]
pub fn build(
Expand Down
Loading
Loading