turbopack_ecmascript/references/
node.rs

1use anyhow::Result;
2use turbo_rcstr::RcStr;
3use turbo_tasks::{ResolvedVc, ValueToString, Vc};
4use turbo_tasks_fs::FileSystemPath;
5use turbopack_core::{
6    file_source::FileSource, raw_module::RawModule, reference::ModuleReference,
7    resolve::ModuleResolveResult,
8};
9
10#[turbo_tasks::value]
11#[derive(Hash, Clone, Debug)]
12pub struct PackageJsonReference {
13    pub package_json: FileSystemPath,
14}
15
16#[turbo_tasks::value_impl]
17impl PackageJsonReference {
18    #[turbo_tasks::function]
19    pub fn new(package_json: FileSystemPath) -> Vc<Self> {
20        Self::cell(PackageJsonReference { package_json })
21    }
22}
23
24#[turbo_tasks::value_impl]
25impl ModuleReference for PackageJsonReference {
26    #[turbo_tasks::function]
27    async fn resolve_reference(&self) -> Result<Vc<ModuleResolveResult>> {
28        Ok(*ModuleResolveResult::module(ResolvedVc::upcast(
29            RawModule::new(Vc::upcast(FileSource::new(self.package_json.clone())))
30                .to_resolved()
31                .await?,
32        )))
33    }
34}
35
36#[turbo_tasks::value_impl]
37impl ValueToString for PackageJsonReference {
38    #[turbo_tasks::function]
39    async fn to_string(&self) -> Result<Vc<RcStr>> {
40        Ok(Vc::cell(
41            format!(
42                "package.json {}",
43                self.package_json.value_to_string().await?
44            )
45            .into(),
46        ))
47    }
48}