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