turbopack_ecmascript/references/
raw.rs1use 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}