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    chunk::{ChunkingType, TracedMode},
6    file_source::FileSource,
7    raw_module::RawModule,
8    reference::ModuleReference,
9    resolve::ModuleResolveResult,
10};
11
12#[turbo_tasks::value]
13#[derive(Hash, Clone, Debug, ValueToString)]
14#[value_to_string("package.json {package_json}")]
15pub struct PackageJsonReference {
16    pub package_json: FileSystemPath,
17}
18
19#[turbo_tasks::value_impl]
20impl PackageJsonReference {
21    #[turbo_tasks::function]
22    pub fn new(package_json: FileSystemPath) -> Vc<Self> {
23        Self::cell(PackageJsonReference { package_json })
24    }
25}
26
27#[turbo_tasks::value_impl]
28impl ModuleReference for PackageJsonReference {
29    #[turbo_tasks::function]
30    async fn resolve_reference(&self) -> Result<Vc<ModuleResolveResult>> {
31        Ok(*ModuleResolveResult::module(ResolvedVc::upcast(
32            RawModule::new(Vc::upcast(FileSource::new(self.package_json.clone())))
33                .to_resolved()
34                .await?,
35        )))
36    }
37
38    fn chunking_type(&self) -> Option<ChunkingType> {
39        Some(ChunkingType::Traced {
40            mode: TracedMode::Transitive,
41        })
42    }
43}