Skip to content

Commit ee85e3e

Browse files
committed
Merge branch 'main' into alsh/asset-graph-tidy
2 parents dc71b69 + 43565ea commit ee85e3e

File tree

7 files changed

+242
-124
lines changed

7 files changed

+242
-124
lines changed

crates/atlaspack/src/atlaspack.rs

+19-20
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use std::path::PathBuf;
22
use std::sync::Arc;
33

44
use atlaspack_config::atlaspack_rc_config_loader::{AtlaspackRcConfigLoader, LoadConfigOptions};
5-
use atlaspack_core::asset_graph::{AssetGraph, AssetGraphNode, AssetNode};
5+
use atlaspack_core::asset_graph::{AssetGraph, AssetNode};
66
use atlaspack_core::config_loader::ConfigLoader;
77
use atlaspack_core::plugin::{PluginContext, PluginLogger, PluginOptions};
88
use atlaspack_core::types::AtlaspackOptions;
@@ -128,7 +128,7 @@ impl Atlaspack {
128128

129129
let asset_graph = match request_result {
130130
RequestResult::AssetGraph(result) => {
131-
self.commit_assets(result.graph.nodes().collect())?;
131+
self.commit_assets(result.graph.get_asset_nodes())?;
132132

133133
result.graph
134134
}
@@ -139,19 +139,20 @@ impl Atlaspack {
139139
})
140140
}
141141

142-
fn commit_assets(&self, assets: Vec<&AssetGraphNode>) -> anyhow::Result<()> {
142+
fn commit_assets(&self, assets: Vec<&AssetNode>) -> anyhow::Result<()> {
143143
let mut txn = self.db.environment().write_txn()?;
144144

145-
for asset_node in assets.iter() {
146-
let AssetGraphNode::Asset(AssetNode { asset, .. }) = asset_node else {
147-
continue;
148-
};
149-
self.db.put(&mut txn, &asset.id, asset.code.bytes())?;
150-
if let Some(map) = &asset.map {
145+
for asset_node in assets {
146+
self.db.put(
147+
&mut txn,
148+
&asset_node.asset.id,
149+
asset_node.asset.code.bytes(),
150+
)?;
151+
if let Some(map) = &asset_node.asset.map {
151152
// TODO: For some reason to_buffer strips data when rkyv was upgraded, so now we use json
152153
self.db.put(
153154
&mut txn,
154-
&format!("map:{}", asset.id),
155+
&format!("map:{}", asset_node.asset.id),
155156
map.to_json()?.as_bytes(),
156157
)?;
157158
}
@@ -192,17 +193,15 @@ mod tests {
192193
let nodes = assets
193194
.iter()
194195
.enumerate()
195-
.map(|(idx, asset)| {
196-
AssetGraphNode::Asset(AssetNode {
197-
asset: Asset {
198-
id: idx.to_string(),
199-
code: Code::from(asset.to_string()),
200-
..Asset::default()
201-
},
202-
requested_symbols: HashSet::new(),
203-
})
196+
.map(|(idx, asset)| AssetNode {
197+
asset: Asset {
198+
id: idx.to_string(),
199+
code: Code::from(asset.to_string()),
200+
..Asset::default()
201+
},
202+
requested_symbols: HashSet::new(),
204203
})
205-
.collect::<Vec<AssetGraphNode>>();
204+
.collect::<Vec<AssetNode>>();
206205

207206
atlaspack.commit_assets(nodes.iter().collect())?;
208207

crates/atlaspack/src/requests/asset_graph_request.rs

+36-68
Original file line numberDiff line numberDiff line change
@@ -46,14 +46,14 @@ impl Request for AssetGraphRequest {
4646
}
4747

4848
struct AssetGraphBuilder {
49-
request_id_to_dep_node_index: HashMap<u64, NodeIndex>,
5049
graph: AssetGraph,
5150
visited: HashSet<u64>,
5251
work_count: u32,
5352
request_context: RunRequestContext,
5453
sender: ResultSender,
5554
receiver: ResultReceiver,
56-
asset_request_to_asset: HashMap<u64, NodeIndex>,
55+
request_id_to_asset_nx: HashMap<u64, NodeIndex>,
56+
request_id_to_dependency_nx: HashMap<u64, NodeIndex>,
5757
waiting_asset_requests: HashMap<u64, HashSet<NodeIndex>>,
5858
}
5959

@@ -62,14 +62,14 @@ impl AssetGraphBuilder {
6262
let (sender, receiver) = channel();
6363

6464
AssetGraphBuilder {
65-
request_id_to_dep_node_index: HashMap::new(),
65+
request_id_to_dependency_nx: HashMap::new(),
6666
graph: AssetGraph::new(),
6767
visited: HashSet::new(),
6868
work_count: 0,
6969
request_context,
7070
sender,
7171
receiver,
72-
asset_request_to_asset: HashMap::new(),
72+
request_id_to_asset_nx: HashMap::new(),
7373
waiting_asset_requests: HashMap::new(),
7474
}
7575
}
@@ -138,16 +138,16 @@ impl AssetGraphBuilder {
138138
}
139139

140140
fn handle_path_result(&mut self, result: PathRequestOutput, request_id: u64) {
141-
let node = *self
142-
.request_id_to_dep_node_index
141+
let dependency_nx = *self
142+
.request_id_to_dependency_nx
143143
.get(&request_id)
144144
.expect("Missing node index for request id {request_id}");
145145

146146
let DependencyNode {
147147
dependency,
148148
requested_symbols,
149149
state,
150-
} = &mut self.graph.get_dependency_node_mut(node).unwrap();
150+
} = &mut self.graph.get_dependency_node_mut(&dependency_nx).unwrap();
151151

152152
let asset_request = match result {
153153
PathRequestOutput::Resolved {
@@ -186,16 +186,16 @@ impl AssetGraphBuilder {
186186
let id = asset_request.id();
187187

188188
if self.visited.insert(id) {
189-
self.request_id_to_dep_node_index.insert(id, node);
189+
self.request_id_to_dependency_nx.insert(id, dependency_nx);
190190
self.work_count += 1;
191191
let _ = self
192192
.request_context
193193
.queue_request(asset_request, self.sender.clone());
194-
} else if let Some(asset_node_index) = self.asset_request_to_asset.get(&id) {
194+
} else if let Some(asset_node_index) = self.request_id_to_asset_nx.get(&id) {
195195
// We have already completed this AssetRequest so we can connect the
196196
// Dependency to the Asset immediately
197-
self.graph.add_edge(&node, asset_node_index);
198-
self.propagate_requested_symbols(*asset_node_index, node);
197+
self.graph.add_edge(&dependency_nx, asset_node_index);
198+
self.propagate_requested_symbols(*asset_node_index, dependency_nx);
199199
} else {
200200
// The AssetRequest has already been kicked off but is yet to
201201
// complete. Register this Dependency to be connected once it
@@ -204,9 +204,9 @@ impl AssetGraphBuilder {
204204
.waiting_asset_requests
205205
.entry(id)
206206
.and_modify(|nodes| {
207-
nodes.insert(node);
207+
nodes.insert(dependency_nx);
208208
})
209-
.or_insert_with(|| HashSet::from([node]));
209+
.or_insert_with(|| HashSet::from([dependency_nx]));
210210
}
211211
}
212212

@@ -233,23 +233,19 @@ impl AssetGraphBuilder {
233233
discovered_assets,
234234
dependencies,
235235
} = result;
236-
let incoming_dep_node_index = *self
237-
.request_id_to_dep_node_index
236+
let incoming_dependency_nx = *self
237+
.request_id_to_dependency_nx
238238
.get(&request_id)
239239
.expect("Missing node index for request id {request_id}");
240240

241241
// Connect the incoming DependencyNode to the new AssetNode
242-
let asset_node_index = self.graph.add_asset(asset.clone());
242+
let asset_nx = self.graph.add_asset(asset.clone());
243243

244-
self
245-
.graph
246-
.add_edge(&incoming_dep_node_index, &asset_node_index);
244+
self.graph.add_edge(&incoming_dependency_nx, &asset_nx);
247245

248-
self
249-
.asset_request_to_asset
250-
.insert(request_id, asset_node_index);
246+
self.request_id_to_asset_nx.insert(request_id, asset_nx);
251247

252-
let root_asset = (&asset, asset_node_index);
248+
let root_asset = (&asset, asset_nx);
253249
let mut added_discovered_assets: HashMap<String, NodeIndex> = HashMap::new();
254250

255251
// Attach the "direct" discovered assets to the graph
@@ -259,7 +255,7 @@ impl AssetGraphBuilder {
259255

260256
self
261257
.graph
262-
.add_edge(&incoming_dep_node_index, &asset_node_index);
258+
.add_edge(&incoming_dependency_nx, &asset_node_index);
263259

264260
self.add_asset_dependencies(
265261
&discovered_asset.dependencies,
@@ -268,25 +264,25 @@ impl AssetGraphBuilder {
268264
&mut added_discovered_assets,
269265
root_asset,
270266
);
271-
self.propagate_requested_symbols(asset_node_index, incoming_dep_node_index);
267+
self.propagate_requested_symbols(asset_node_index, incoming_dependency_nx);
272268
}
273269

274270
self.add_asset_dependencies(
275271
&dependencies,
276272
&discovered_assets,
277-
asset_node_index,
273+
asset_nx,
278274
&mut added_discovered_assets,
279275
root_asset,
280276
);
281277

282-
self.propagate_requested_symbols(asset_node_index, incoming_dep_node_index);
278+
self.propagate_requested_symbols(asset_nx, incoming_dependency_nx);
283279

284280
// Connect any previously discovered Dependencies that were waiting
285281
// for this AssetNode to be created
286282
if let Some(waiting) = self.waiting_asset_requests.remove(&request_id) {
287283
for dep in waiting {
288-
self.graph.add_edge(&dep, &asset_node_index);
289-
self.propagate_requested_symbols(asset_node_index, dep);
284+
self.graph.add_edge(&dep, &asset_nx);
285+
self.propagate_requested_symbols(asset_nx, dep);
290286
}
291287
}
292288
}
@@ -393,7 +389,7 @@ impl AssetGraphBuilder {
393389
.unwrap()
394390
{
395391
Self::on_undeferred(
396-
&mut self.request_id_to_dep_node_index,
392+
&mut self.request_id_to_dependency_nx,
397393
&mut self.work_count,
398394
&mut self.request_context,
399395
&self.sender,
@@ -417,7 +413,7 @@ impl AssetGraphBuilder {
417413
dependency: Arc::new(dependency),
418414
};
419415
self
420-
.request_id_to_dep_node_index
416+
.request_id_to_dependency_nx
421417
.insert(request.id(), dep_node);
422418
self.work_count += 1;
423419
let _ = self
@@ -432,7 +428,7 @@ impl AssetGraphBuilder {
432428
/// Once they do have symbols in use, this callback will re-trigger resolution/transformation
433429
/// for those files.
434430
fn on_undeferred(
435-
request_id_to_dep_node_index: &mut HashMap<u64, NodeIndex>,
431+
request_id_to_asset_nx: &mut HashMap<u64, NodeIndex>,
436432
work_count: &mut u32,
437433
request_context: &mut RunRequestContext,
438434
sender: &ResultSender,
@@ -443,7 +439,7 @@ impl AssetGraphBuilder {
443439
dependency: dependency.clone(),
444440
};
445441

446-
request_id_to_dep_node_index.insert(request.id(), dependency_node_index);
442+
request_id_to_asset_nx.insert(request.id(), dependency_node_index);
447443
tracing::debug!(
448444
"queueing a path request from on_undeferred, {}",
449445
dependency.specifier
@@ -501,8 +497,7 @@ mod tests {
501497
use std::path::{Path, PathBuf};
502498
use std::sync::Arc;
503499

504-
use atlaspack_core::asset_graph::{AssetGraphNode, AssetNode};
505-
use atlaspack_core::types::{AtlaspackOptions, Code};
500+
use atlaspack_core::types::*;
506501
use atlaspack_filesystem::in_memory_file_system::InMemoryFileSystem;
507502
use atlaspack_filesystem::FileSystem;
508503

@@ -588,34 +583,14 @@ mod tests {
588583
1
589584
);
590585

591-
let file_path = asset_graph_request_result
592-
.graph
593-
.nodes_from(&asset_graph_request_result.graph.root_node())
594-
.iter()
595-
.filter_map(|n| match *n {
596-
AssetGraphNode::Asset(asset_node) => Some(asset_node),
597-
_ => None,
598-
})
599-
.collect::<Vec<&AssetNode>>()
600-
.get(0)
601-
.unwrap()
602-
.asset
603-
.file_path
604-
.clone();
605-
606-
let code = asset_graph_request_result
586+
let Asset {
587+
file_path, code, ..
588+
}: Asset = asset_graph_request_result
607589
.graph
608-
.nodes_from(&asset_graph_request_result.graph.root_node())
609-
.iter()
610-
.filter_map(|n| match *n {
611-
AssetGraphNode::Asset(asset_node) => Some(asset_node),
612-
_ => None,
613-
})
614-
.collect::<Vec<&AssetNode>>()
590+
.get_asset_nodes()
615591
.get(0)
616592
.unwrap()
617593
.asset
618-
.code
619594
.clone();
620595

621596
assert_eq!(file_path, temporary_dir.join("entry.js"));
@@ -713,19 +688,12 @@ mod tests {
713688
5
714689
);
715690

716-
let file_path = asset_graph_request_result
691+
let Asset { file_path, .. }: Asset = asset_graph_request_result
717692
.graph
718-
.nodes_from(&asset_graph_request_result.graph.root_node())
719-
.iter()
720-
.filter_map(|n| match *n {
721-
AssetGraphNode::Asset(asset_node) => Some(asset_node),
722-
_ => None,
723-
})
724-
.collect::<Vec<&AssetNode>>()
693+
.get_asset_nodes()
725694
.get(0)
726695
.unwrap()
727696
.asset
728-
.file_path
729697
.clone();
730698

731699
assert_eq!(file_path, temporary_dir.join("entry.js"));

0 commit comments

Comments
 (0)