Skip to content

Commit ed1a944

Browse files
committed
fix: ensure duplicated are excluded from child bundles
1 parent a208bb5 commit ed1a944

File tree

2 files changed

+64
-4
lines changed

2 files changed

+64
-4
lines changed

rjs-parse/src/modules.rs

+8-2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ pub fn generate_modules(
5252
&mut modules,
5353
req_log,
5454
&config.bundles,
55+
&mut vec![],
5556
vec!["requirejs/require".into()],
5657
);
5758
modules.to_vec()
@@ -64,13 +65,17 @@ pub fn collect<'a>(
6465
modules: &'a mut Vec<BuildModule>,
6566
req_log: &Vec<ModuleData>,
6667
children: &Vec<ConfigItem>,
68+
prev: &mut Vec<String>,
6769
exclude: Vec<String>,
6870
) {
6971
children.iter().for_each(|conf_item| {
7072
let mut include: Vec<String> = vec![];
7173
req_log.iter().for_each(|item| {
7274
if let Some(..) = conf_item.urls.iter().find(|x| **x == item.referrer) {
73-
include.push(create_entry_point(&item));
75+
let next_id = create_entry_point(&item);
76+
if let None = prev.iter().find(|x| **x == next_id) {
77+
include.push(next_id);
78+
}
7479
}
7580
});
7681
include.sort();
@@ -84,7 +89,8 @@ pub fn collect<'a>(
8489
modules.push(this_item);
8590
let mut exclude = exclude.clone();
8691
exclude.push(conf_item.name.to_string());
87-
collect(modules, req_log, &conf_item.children, exclude);
92+
prev.extend(include);
93+
collect(modules, req_log, &conf_item.children, prev, exclude);
8894
});
8995
}
9096

rjs-parse/tests/e2e.rs

+56-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ extern crate rjs;
22
extern crate from_file;
33
extern crate serde_json;
44

5-
use rjs::{RequireJsBuildConfig, RequireJsClientConfig, bundle_config};
5+
use rjs::{RequireJsBuildConfig, bundle_config};
66

77
#[test]
88
fn test_all_strings() {
@@ -16,14 +16,48 @@ fn test_all_strings() {
1616
})();
1717
"#;
1818
let bundle_config = r#"
19-
{"bundles": [{"name": "main", "children": [], "urls": ["/"]}]}
19+
{
20+
"bundles": [
21+
{
22+
"name": "main",
23+
"urls": ["/"],
24+
"children": [
25+
{
26+
"name": "other",
27+
"urls": ["/about"],
28+
"children": []
29+
},
30+
{
31+
"name": "product",
32+
"urls": ["/product"],
33+
"children": []
34+
}
35+
]
36+
}
37+
]
38+
}
2039
"#;
2140
let req_log = r#"
2241
[
2342
{
2443
"url": "https://example.com/jquery",
2544
"id": "jquery",
2645
"referrer": "/"
46+
},
47+
{
48+
"url": "https://example.com/jquery",
49+
"id": "jquery",
50+
"referrer": "/about"
51+
},
52+
{
53+
"url": "https://example.com/jquery-ui",
54+
"id": "jquery-ui",
55+
"referrer": "/about"
56+
},
57+
{
58+
"url": "https://example.com/gallery.js",
59+
"id": "gallery",
60+
"referrer": "/product"
2761
}
2862
]
2963
"#;
@@ -57,6 +91,24 @@ fn test_all_strings() {
5791
"requirejs/require"
5892
],
5993
"create": true
94+
},
95+
{
96+
"name": "other",
97+
"include": ["jquery-ui"],
98+
"exclude": [
99+
"requirejs/require",
100+
"main"
101+
],
102+
"create": true
103+
},
104+
{
105+
"name": "product",
106+
"include": ["gallery"],
107+
"exclude": [
108+
"requirejs/require",
109+
"main"
110+
],
111+
"create": true
60112
}
61113
]
62114
}
@@ -72,5 +124,7 @@ fn test_all_strings() {
72124
let actual_as_value: serde_json::Value = serde_json::from_str(&as_string).expect("serde actual");
73125
let expected_as_value: serde_json::Value = serde_json::from_str(&expected).expect("serde expected");
74126

127+
// println!("{}", as_string);
128+
75129
assert_eq!(actual_as_value, expected_as_value);
76130
}

0 commit comments

Comments
 (0)