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(path: FileSystemPath, content: ResolvedVc<AssetContent>) -> Result<Vc<Self>> {
22 Ok(Self::cell(VirtualSource {
23 ident: AssetIdent::from_path(path).to_resolved().await?,
24 content,
25 }))
26 }
27
28 #[turbo_tasks::function]
29 pub fn new_with_ident(
30 ident: ResolvedVc<AssetIdent>,
31 content: ResolvedVc<AssetContent>,
32 ) -> Vc<Self> {
33 Self::cell(VirtualSource { ident, content })
34 }
35}
36
37#[turbo_tasks::value_impl]
38impl Source for VirtualSource {
39 #[turbo_tasks::function]
40 fn ident(&self) -> Vc<AssetIdent> {
41 *self.ident
42 }
43}
44
45#[turbo_tasks::value_impl]
46impl Asset for VirtualSource {
47 #[turbo_tasks::function]
48 fn content(&self) -> Vc<AssetContent> {
49 *self.content
50 }
51}