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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

29 changes: 29 additions & 0 deletions crates/node_binding/napi-binding.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -540,10 +540,13 @@ export declare enum BuiltinPluginName {
SplitChunksPlugin = 'SplitChunksPlugin',
RemoveDuplicateModulesPlugin = 'RemoveDuplicateModulesPlugin',
ShareRuntimePlugin = 'ShareRuntimePlugin',
SharedUsedExportsOptimizerPlugin = 'SharedUsedExportsOptimizerPlugin',
ContainerPlugin = 'ContainerPlugin',
ContainerReferencePlugin = 'ContainerReferencePlugin',
ProvideSharedPlugin = 'ProvideSharedPlugin',
ConsumeSharedPlugin = 'ConsumeSharedPlugin',
CollectSharedEntryPlugin = 'CollectSharedEntryPlugin',
ShareContainerPlugin = 'ShareContainerPlugin',
ModuleFederationRuntimePlugin = 'ModuleFederationRuntimePlugin',
ModuleFederationManifestPlugin = 'ModuleFederationManifestPlugin',
NamedModuleIdsPlugin = 'NamedModuleIdsPlugin',
Expand Down Expand Up @@ -1837,6 +1840,11 @@ export interface RawCircularDependencyRspackPluginOptions {
onEnd?: () => void
}

export interface RawCollectShareEntryPluginOptions {
consumes: Array<RawConsumeOptions>
filename?: string
}

export interface RawConsumeOptions {
key: string
import?: string
Expand Down Expand Up @@ -2584,6 +2592,12 @@ export interface RawOptimizationOptions {
avoidEntryIife: boolean
}

export interface RawOptimizeSharedConfig {
shareKey: string
treeshake: boolean
usedExports?: Array<string>
}

export interface RawOptions {
name?: string
mode?: undefined | 'production' | 'development' | 'none'
Expand Down Expand Up @@ -2820,6 +2834,21 @@ export interface RawRuntimeChunkOptions {
name: string | ((entrypoint: { name: string }) => string)
}

export interface RawShareContainerPluginOptions {
name: string
request: string
version: string
fileName?: string
library: JsLibraryOptions
}

export interface RawSharedUsedExportsOptimizerPluginOptions {
shared: Array<RawOptimizeSharedConfig>
injectUsedExports?: boolean
manifestFileName?: string
statsFileName?: string
}

export interface RawSizeLimitsPluginOptions {
assetFilter?: (assetFilename: string) => boolean
hints?: "error" | "warning"
Expand Down
3 changes: 2 additions & 1 deletion crates/rspack_binding_api/src/plugins/interceptor.rs
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ use crate::{
JsContextModuleFactoryAfterResolveDataWrapper, JsContextModuleFactoryAfterResolveResult,
JsContextModuleFactoryBeforeResolveDataWrapper, JsContextModuleFactoryBeforeResolveResult,
},
dependency::DependencyWrapper,
html::{
JsAfterEmitData, JsAfterTemplateExecutionData, JsAlterAssetTagGroupsData, JsAlterAssetTagsData,
JsBeforeAssetTagGenerationData, JsBeforeEmitData,
Expand All @@ -94,7 +95,7 @@ use crate::{
runtime::{
JsAdditionalTreeRuntimeRequirementsArg, JsAdditionalTreeRuntimeRequirementsResult,
JsCreateLinkData, JsCreateScriptData, JsLinkPrefetchData, JsLinkPreloadData, JsRuntimeGlobals,
JsRuntimeRequirementInTreeArg, JsRuntimeRequirementInTreeResult,
JsRuntimeRequirementInTreeArg, JsRuntimeRequirementInTreeResult, JsRuntimeSpec,
},
source::JsSourceToJs,
};
Expand Down
34 changes: 30 additions & 4 deletions crates/rspack_binding_api/src/raw_options/raw_builtins/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,11 @@ use napi_derive::napi;
use raw_dll::{RawDllReferenceAgencyPluginOptions, RawFlagAllModulesAsUsedPluginOptions};
use raw_ids::RawOccurrenceChunkIdsPluginOptions;
use raw_lightning_css_minimizer::RawLightningCssMinimizerRspackPluginOptions;
use raw_mf::{RawModuleFederationManifestPluginOptions, RawModuleFederationRuntimePluginOptions};
use raw_mf::{
RawCollectShareEntryPluginOptions, RawModuleFederationManifestPluginOptions,
RawModuleFederationRuntimePluginOptions, RawProvideOptions,
RawSharedUsedExportsOptimizerPluginOptions,
};
use raw_sri::RawSubresourceIntegrityPluginOptions;
use rspack_core::{BoxPlugin, Plugin, PluginExt};
use rspack_error::{Result, ToStringResultToRspackResultExt};
Expand Down Expand Up @@ -75,8 +79,9 @@ use rspack_plugin_lightning_css_minimizer::LightningCssMinimizerRspackPlugin;
use rspack_plugin_limit_chunk_count::LimitChunkCountPlugin;
use rspack_plugin_merge_duplicate_chunks::MergeDuplicateChunksPlugin;
use rspack_plugin_mf::{
ConsumeSharedPlugin, ContainerPlugin, ContainerReferencePlugin, ModuleFederationManifestPlugin,
ModuleFederationRuntimePlugin, ProvideSharedPlugin, ShareRuntimePlugin,
CollectSharedEntryPlugin, ConsumeSharedPlugin, ContainerPlugin, ContainerReferencePlugin,
ModuleFederationManifestPlugin, ModuleFederationRuntimePlugin, ProvideSharedPlugin,
ShareContainerPlugin, ShareRuntimePlugin, SharedUsedExportsOptimizerPlugin,
};
use rspack_plugin_module_info_header::ModuleInfoHeaderPlugin;
use rspack_plugin_module_replacement::{ContextReplacementPlugin, NormalModuleReplacementPlugin};
Expand Down Expand Up @@ -117,7 +122,7 @@ use self::{
raw_limit_chunk_count::RawLimitChunkCountPluginOptions,
raw_mf::{
RawConsumeSharedPluginOptions, RawContainerPluginOptions, RawContainerReferencePluginOptions,
RawProvideOptions,
RawShareContainerPluginOptions,
},
raw_normal_replacement::RawNormalModuleReplacementPluginOptions,
raw_runtime_chunk::RawRuntimeChunkOptions,
Expand Down Expand Up @@ -167,10 +172,13 @@ pub enum BuiltinPluginName {
SplitChunksPlugin,
RemoveDuplicateModulesPlugin,
ShareRuntimePlugin,
SharedUsedExportsOptimizerPlugin,
ContainerPlugin,
ContainerReferencePlugin,
ProvideSharedPlugin,
ConsumeSharedPlugin,
CollectSharedEntryPlugin,
ShareContainerPlugin,
ModuleFederationRuntimePlugin,
ModuleFederationManifestPlugin,
NamedModuleIdsPlugin,
Expand Down Expand Up @@ -463,6 +471,12 @@ impl<'a> BuiltinPlugin<'a> {
)
.boxed(),
),
BuiltinPluginName::SharedUsedExportsOptimizerPlugin => {
let options = downcast_into::<RawSharedUsedExportsOptimizerPluginOptions>(self.options)
.map_err(|report| napi::Error::from_reason(report.to_string()))?
.into();
plugins.push(SharedUsedExportsOptimizerPlugin::new(options).boxed());
}
BuiltinPluginName::ContainerPlugin => {
plugins.push(
ContainerPlugin::new(
Expand Down Expand Up @@ -492,6 +506,18 @@ impl<'a> BuiltinPlugin<'a> {
provides.sort_unstable_by_key(|(k, _)| k.to_string());
plugins.push(ProvideSharedPlugin::new(provides).boxed())
}
BuiltinPluginName::CollectSharedEntryPlugin => {
let options = downcast_into::<RawCollectShareEntryPluginOptions>(self.options)
.map_err(|report| napi::Error::from_reason(report.to_string()))?
.into();
plugins.push(CollectSharedEntryPlugin::new(options).boxed())
}
BuiltinPluginName::ShareContainerPlugin => {
let options = downcast_into::<RawShareContainerPluginOptions>(self.options)
.map_err(|report| napi::Error::from_reason(report.to_string()))?
.into();
plugins.push(ShareContainerPlugin::new(options).boxed())
}
BuiltinPluginName::ConsumeSharedPlugin => plugins.push(
ConsumeSharedPlugin::new(
downcast_into::<RawConsumeSharedPluginOptions>(self.options)
Expand Down
97 changes: 93 additions & 4 deletions crates/rspack_binding_api/src/raw_options/raw_builtins/raw_mf.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,12 @@ use std::{collections::HashMap, sync::Arc};
use napi::Either;
use napi_derive::napi;
use rspack_plugin_mf::{
ConsumeOptions, ConsumeSharedPluginOptions, ConsumeVersion, ContainerPluginOptions,
ContainerReferencePluginOptions, ExposeOptions, ManifestExposeOption, ManifestSharedOption,
ModuleFederationManifestPluginOptions, ModuleFederationRuntimePluginOptions, ProvideOptions,
ProvideVersion, RemoteAliasTarget, RemoteOptions, StatsBuildInfo,
CollectSharedEntryPluginOptions, ConsumeOptions, ConsumeSharedPluginOptions, ConsumeVersion,
ContainerPluginOptions, ContainerReferencePluginOptions, ExposeOptions, ManifestExposeOption,
ManifestSharedOption, ModuleFederationManifestPluginOptions,
ModuleFederationRuntimePluginOptions, OptimizeSharedConfig, ProvideOptions, ProvideVersion,
RemoteAliasTarget, RemoteOptions, ShareContainerEntryOptions, ShareContainerPluginOptions,
SharedUsedExportsOptimizerPluginOptions, StatsBuildInfo,
};

use crate::options::{
Expand Down Expand Up @@ -133,6 +135,51 @@ impl From<RawProvideOptions> for (String, ProvideOptions) {
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawCollectShareEntryPluginOptions {
pub consumes: Vec<RawConsumeOptions>,
pub filename: Option<String>,
}

impl From<RawCollectShareEntryPluginOptions> for CollectSharedEntryPluginOptions {
fn from(value: RawCollectShareEntryPluginOptions) -> Self {
Self {
consumes: value
.consumes
.into_iter()
.map(|provide| {
let (key, consume_options): (String, ConsumeOptions) = provide.into();
(key, std::sync::Arc::new(consume_options))
})
.collect(),
filename: value.filename,
}
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawShareContainerPluginOptions {
pub name: String,
pub request: String,
pub version: String,
pub file_name: Option<String>,
pub library: JsLibraryOptions,
}

impl From<RawShareContainerPluginOptions> for ShareContainerPluginOptions {
fn from(value: RawShareContainerPluginOptions) -> Self {
ShareContainerPluginOptions {
name: value.name,
request: value.request,
version: value.version,
library: value.library.into(),
file_name: value.file_name.clone().map(Into::into),
}
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawConsumeSharedPluginOptions {
Expand All @@ -154,6 +201,48 @@ impl From<RawConsumeSharedPluginOptions> for ConsumeSharedPluginOptions {
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawOptimizeSharedConfig {
pub share_key: String,
pub treeshake: bool,
pub used_exports: Option<Vec<String>>,
}

impl From<RawOptimizeSharedConfig> for OptimizeSharedConfig {
fn from(value: RawOptimizeSharedConfig) -> Self {
Self {
share_key: value.share_key,
treeshake: value.treeshake,
used_exports: value.used_exports.unwrap_or_default(),
}
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawSharedUsedExportsOptimizerPluginOptions {
pub shared: Vec<RawOptimizeSharedConfig>,
pub inject_used_exports: Option<bool>,
pub manifest_file_name: Option<String>,
pub stats_file_name: Option<String>,
}

impl From<RawSharedUsedExportsOptimizerPluginOptions> for SharedUsedExportsOptimizerPluginOptions {
fn from(value: RawSharedUsedExportsOptimizerPluginOptions) -> Self {
Self {
shared: value
.shared
.into_iter()
.map(|config| config.into())
.collect(),
inject_used_exports: value.inject_used_exports.unwrap_or(true),
manifest_file_name: value.manifest_file_name,
stats_file_name: value.stats_file_name,
}
}
}

#[derive(Debug)]
#[napi(object)]
pub struct RawConsumeOptions {
Expand Down
23 changes: 15 additions & 8 deletions crates/rspack_core/src/compilation/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -46,14 +46,14 @@ use crate::{
ChunkIdsArtifact, ChunkKind, ChunkRenderArtifact, ChunkRenderCacheArtifact, ChunkRenderResult,
ChunkUkey, CodeGenerationJob, CodeGenerationResult, CodeGenerationResults, CompilationLogger,
CompilationLogging, CompilerOptions, ConcatenationScope, DependenciesDiagnosticsArtifact,
DependencyCodeGeneration, DependencyTemplate, DependencyTemplateType, DependencyType, Entry,
EntryData, EntryOptions, EntryRuntime, Entrypoint, ExecuteModuleId, Filename, ImportPhase,
ImportVarMap, ImportedByDeferModulesArtifact, Logger, MemoryGCStorage, ModuleFactory,
ModuleGraph, ModuleGraphCacheArtifact, ModuleGraphMut, ModuleGraphPartial, ModuleGraphRef,
ModuleIdentifier, ModuleIdsArtifact, ModuleStaticCacheArtifact, PathData, ResolverFactory,
RuntimeGlobals, RuntimeKeyMap, RuntimeMode, RuntimeModule, RuntimeSpec, RuntimeSpecMap,
RuntimeTemplate, SharedPluginDriver, SideEffectsOptimizeArtifact, SourceType, Stats,
ValueCacheVersions,
DependencyCodeGeneration, DependencyId, DependencyTemplate, DependencyTemplateType,
DependencyType, Entry, EntryData, EntryOptions, EntryRuntime, Entrypoint, ExecuteModuleId,
ExtendedReferencedExport, Filename, ImportPhase, ImportVarMap, ImportedByDeferModulesArtifact,
Logger, MemoryGCStorage, ModuleFactory, ModuleGraph, ModuleGraphCacheArtifact, ModuleGraphMut,
ModuleGraphPartial, ModuleGraphRef, ModuleIdentifier, ModuleIdsArtifact,
ModuleStaticCacheArtifact, PathData, ResolverFactory, RuntimeGlobals, RuntimeKeyMap, RuntimeMode,
RuntimeModule, RuntimeSpec, RuntimeSpecMap, RuntimeTemplate, SharedPluginDriver,
SideEffectsOptimizeArtifact, SourceType, Stats, ValueCacheVersions,
build_chunk_graph::artifact::BuildChunkGraphArtifact,
compilation::build_module_graph::{
BuildModuleGraphArtifact, ModuleExecutor, UpdateParam, build_module_graph,
Expand All @@ -76,6 +76,12 @@ define_hook!(CompilationExecuteModule:
Series(module: &ModuleIdentifier, runtime_modules: &IdentifierSet, code_generation_results: &BindingCell<CodeGenerationResults>, execute_module_id: &ExecuteModuleId));
define_hook!(CompilationFinishModules: Series(compilation: &mut Compilation));
define_hook!(CompilationSeal: Series(compilation: &mut Compilation));
define_hook!(CompilationDependencyReferencedExports: Series(
compilation: &Compilation,
dependency: &DependencyId,
referenced_exports: &Option<Vec<ExtendedReferencedExport>> ,
runtime: Option<&RuntimeSpec>
));
define_hook!(CompilationConcatenationScope: SeriesBail(compilation: &Compilation, curr_module: ModuleIdentifier) -> ConcatenationScope);
define_hook!(CompilationOptimizeDependencies: SeriesBail(compilation: &mut Compilation) -> bool);
define_hook!(CompilationOptimizeModules: SeriesBail(compilation: &mut Compilation) -> bool);
Expand Down Expand Up @@ -113,6 +119,7 @@ pub struct CompilationHooks {
pub succeed_module: CompilationSucceedModuleHook,
pub execute_module: CompilationExecuteModuleHook,
pub finish_modules: CompilationFinishModulesHook,
pub dependency_referenced_exports: CompilationDependencyReferencedExportsHook,
pub seal: CompilationSealHook,
pub optimize_dependencies: CompilationOptimizeDependenciesHook,
pub optimize_modules: CompilationOptimizeModulesHook,
Expand Down
6 changes: 6 additions & 0 deletions crates/rspack_core/src/dependency/dependency_type.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,10 @@ pub enum DependencyType {
ContainerExposed,
/// container entry,
ContainerEntry,
/// share container entry
ShareContainerEntry,
/// share container fallback
ShareContainerFallback,
/// remote to external,
RemoteToExternal,
/// fallback
Expand Down Expand Up @@ -179,6 +183,8 @@ impl DependencyType {
DependencyType::ImportMetaContext => "import.meta context",
DependencyType::ContainerExposed => "container exposed",
DependencyType::ContainerEntry => "container entry",
DependencyType::ShareContainerEntry => "share container entry",
DependencyType::ShareContainerFallback => "share container fallback",
DependencyType::DllEntry => "dll entry",
DependencyType::RemoteToExternal => "remote to external",
DependencyType::RemoteToFallback => "fallback",
Expand Down
10 changes: 8 additions & 2 deletions crates/rspack_core/src/dependency/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,16 @@ pub use static_exports_dependency::{StaticExportsDependency, StaticExportsSpec};
use swc_core::ecma::atoms::Atom;

use crate::{
ConnectionState, EvaluatedInlinableValue, ModuleGraph, ModuleGraphCacheArtifact,
ModuleGraphConnection, ModuleIdentifier, RuntimeSpec,
ConnectionState, EvaluatedInlinableValue, ExtendedReferencedExport, ModuleGraph,
ModuleGraphCacheArtifact, ModuleGraphConnection, ModuleIdentifier, RuntimeSpec,
};

#[derive(Debug, Clone)]
pub enum ProcessModuleReferencedExports {
Map(FxHashMap<String, ExtendedReferencedExport>),
ExtendRef(Vec<ExtendedReferencedExport>),
}

#[derive(Debug, Default)]
pub struct ExportSpec {
pub name: Atom,
Expand Down
Loading
Loading