Skip to main content

turbopack_ecmascript/references/
node.rs

1use anyhow::Result;
2use turbo_tasks::{ResolvedVc, ValueToString, Vc};
3use turbo_tasks_fs::FileSystemPath;
4use turbopack_core::{
5    file_source::FileSource, raw_module::RawModule, reference::ModuleReference,
6    resolve::ModuleResolveResult,
7};
8
9#[turbo_tasks::value]
10#[derive(Hash, Clone, Debug, ValueToString)]
11#[value_to_string("package.json {package_json}")]
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}