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
29 changes: 14 additions & 15 deletions crates/rspack_core/src/concatenated_module.rs
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,12 @@ use rspack_sources::{
BoxSource, CachedSource, ConcatSource, RawStringSource, ReplaceSource, Source, SourceExt,
};
use rspack_util::{
SpanExt, ext::DynHash, fx_hash::FxIndexMap, itoa, json_stringify, json_stringify_str,
source_map::SourceMapKind, swc::join_atom,
SpanExt,
ext::DynHash,
Comment thread
JSerFeng marked this conversation as resolved.
fx_hash::{FxIndexMap, FxIndexSet},
itoa, json_stringify, json_stringify_str,
source_map::SourceMapKind,
swc::join_atom,
};
use rustc_hash::{FxHashMap as HashMap, FxHashSet as HashSet};
use swc_core::{
Expand Down Expand Up @@ -1517,9 +1521,9 @@ impl Module for ConcatenatedModule {
// Move it off the critical path once all replacements are applied.
fast_set(&mut changes, Vec::new());

let mut exports_map: HashMap<Atom, String> = HashMap::default();
let mut unused_exports: HashSet<Atom> = HashSet::default();
let mut inlined_exports: HashSet<Atom> = HashSet::default();
let mut exports_map: FxIndexMap<Atom, String> = FxIndexMap::default();
let mut unused_exports: FxIndexSet<Atom> = FxIndexSet::default();
let mut inlined_exports: FxIndexSet<Atom> = FxIndexSet::default();

let root_info = module_to_info_map
.get(&self.root_module_ctxt.id)
Expand Down Expand Up @@ -1621,21 +1625,16 @@ impl Module for ConcatenatedModule {

// Define exports
if !exports_map.is_empty() {
let mut definitions: Vec<_> = exports_map
let definitions: Vec<_> = exports_map
.iter()
.map(|(key, value)| {
(
key.clone(),
format!(
"\n {}: {}",
property_name(key).expect("should convert to property_name"),
runtime_template.returning_function(value, "")
),
format!(
"\n {}: {}",
property_name(key).expect("should convert to property_name"),
runtime_template.returning_function(value, "")
)
})
.collect();
definitions.sort_by(|a, b| a.0.cmp(&b.0));
let definitions: Vec<_> = definitions.into_iter().map(|(_, s)| s).collect();

let exports_argument = self.get_exports_argument();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export function marker() {
return "marker";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
const { usedA, usedB } = require("./root");
const { expectSourceToContain } = require("@rspack/test-tools/helper/legacy/expectSource");

it("should render concatenated export comments in deterministic order", () => {
expect(usedA()).toBe("marker-a");
expect(usedB()).toBe("marker-b");

const fs = require("fs");
const source = fs.readFileSync(__filename, "utf-8");

/*********** DO NOT MATCH BELOW THIS LINE ***********/

expectSourceToContain(source, "usedA: () => (/* binding */ usedA)");
expectSourceToContain(source, "usedB: () => (/* binding */ usedB)");
expectSourceToContain(source, "// UNUSED EXPORTS: unusedA, unusedB");
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import { marker } from "./dep";

export const unusedA = "unused-a";
export const unusedB = "unused-b";

export function usedA() {
return `${marker()}-a`;
}

export function usedB() {
return `${marker()}-b`;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/** @type {import("@rspack/core").Configuration} */
module.exports = {
optimization: {
concatenateModules: true,
inlineExports: true,
mangleExports: false,
minimize: false,
providedExports: true,
usedExports: true,
},
};
Loading