-
Notifications
You must be signed in to change notification settings - Fork 28.2k
/
Copy pathutil.rs
48 lines (45 loc) · 1.44 KB
/
util.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
use std::collections::BTreeMap;
use anyhow::Result;
use serde::{Deserialize, Serialize};
use serde_json::Value as JsonValue;
use turbo_rcstr::RcStr;
use turbo_tasks::{trace::TraceRawVcs, NonLocalValue, ResolvedVc, TryJoinIterExt};
use turbo_tasks_fs::{File, FileContent, FileSystem};
use turbopack_core::{
asset::AssetContent, server_fs::ServerFileSystem, virtual_source::VirtualSource,
};
#[derive(Debug, PartialEq, Eq, Serialize, Deserialize, Clone, TraceRawVcs, NonLocalValue)]
#[serde(rename_all = "camelCase")]
pub struct EmittedAsset {
file: RcStr,
content: RcStr,
source_map: Option<JsonValue>,
}
pub async fn emitted_assets_to_virtual_sources(
assets: Option<Vec<EmittedAsset>>,
) -> Result<Vec<ResolvedVc<VirtualSource>>> {
assets
.into_iter()
.flatten()
.map(
|EmittedAsset {
file,
content,
source_map,
}| (file, (content, source_map)),
)
// Sort it to make it determinstic
.collect::<BTreeMap<_, _>>()
.into_iter()
.map(|(file, (content, _source_map))| {
// TODO handle SourceMap
VirtualSource::new(
ServerFileSystem::new().root().join(file),
AssetContent::File(FileContent::Content(File::from(content)).resolved_cell())
.cell(),
)
.to_resolved()
})
.try_join()
.await
}