turbopack_core/
virtual_source.rs1use anyhow::Result;
2use turbo_tasks::{ResolvedVc, Vc};
3use turbo_tasks_fs::FileSystemPath;
4
5use crate::{
6 asset::{Asset, AssetContent},
7 ident::AssetIdent,
8 source::Source,
9};
10
11#[turbo_tasks::value]
13pub struct VirtualSource {
14 pub ident: ResolvedVc<AssetIdent>,
15 pub content: ResolvedVc<AssetContent>,
16}
17
18#[turbo_tasks::value_impl]
19impl VirtualSource {
20 #[turbo_tasks::function]
21 pub async fn new(
22 path: Vc<FileSystemPath>,
23 content: ResolvedVc<AssetContent>,
24 ) -> Result<Vc<Self>> {
25 Ok(Self::cell(VirtualSource {
26 ident: AssetIdent::from_path(path).to_resolved().await?,
27 content,
28 }))
29 }
30
31 #[turbo_tasks::function]
32 pub fn new_with_ident(
33 ident: ResolvedVc<AssetIdent>,
34 content: ResolvedVc<AssetContent>,
35 ) -> Vc<Self> {
36 Self::cell(VirtualSource { ident, content })
37 }
38}
39
40#[turbo_tasks::value_impl]
41impl Source for VirtualSource {
42 #[turbo_tasks::function]
43 fn ident(&self) -> Vc<AssetIdent> {
44 *self.ident
45 }
46}
47
48#[turbo_tasks::value_impl]
49impl Asset for VirtualSource {
50 #[turbo_tasks::function]
51 fn content(&self) -> Vc<AssetContent> {
52 *self.content
53 }
54}