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