turbopack_ecmascript/references/
raw.rs

1use anyhow::Result;
2use turbo_rcstr::RcStr;
3use turbo_tasks::{ResolvedVc, ValueToString, Vc};
4use turbopack_core::{
5    reference::ModuleReference,
6    resolve::{ModuleResolveResult, pattern::Pattern, resolve_raw},
7    source::Source,
8};
9
10#[turbo_tasks::value]
11#[derive(Hash, Debug)]
12pub struct FileSourceReference {
13    pub source: ResolvedVc<Box<dyn Source>>,
14    pub path: ResolvedVc<Pattern>,
15}
16
17#[turbo_tasks::value_impl]
18impl FileSourceReference {
19    #[turbo_tasks::function]
20    pub fn new(source: ResolvedVc<Box<dyn Source>>, path: ResolvedVc<Pattern>) -> Vc<Self> {
21        Self::cell(FileSourceReference { source, path })
22    }
23}
24
25#[turbo_tasks::value_impl]
26impl ModuleReference for FileSourceReference {
27    #[turbo_tasks::function]
28    fn resolve_reference(&self) -> Vc<ModuleResolveResult> {
29        let context_dir = self.source.ident().path().parent();
30
31        resolve_raw(context_dir, *self.path, false).as_raw_module_result()
32    }
33}
34
35#[turbo_tasks::value_impl]
36impl ValueToString for FileSourceReference {
37    #[turbo_tasks::function]
38    async fn to_string(&self) -> Result<Vc<RcStr>> {
39        Ok(Vc::cell(
40            format!("raw asset {}", self.path.to_string().await?,).into(),
41        ))
42    }
43}