turbopack_ecmascript/hmr/
content.rs1use anyhow::{Result, bail};
2use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc};
3use turbopack_core::{
4 asset::AssetContent,
5 version::{Update, Version, VersionedContent},
6};
7
8use crate::hmr::{
9 EcmascriptHmrChunkContent, update::update_ecmascript_merged_chunk,
10 version::EcmascriptMergedChunkVersion,
11};
12
13#[turbo_tasks::value(serialization = "skip", shared)]
22pub struct EcmascriptMergedChunkContent {
23 pub contents: Vec<ResolvedVc<Box<dyn EcmascriptHmrChunkContent>>>,
24}
25
26#[turbo_tasks::value_impl]
27impl EcmascriptMergedChunkContent {
28 #[turbo_tasks::function]
29 pub async fn version(&self) -> Result<Vc<EcmascriptMergedChunkVersion>> {
30 Ok(EcmascriptMergedChunkVersion {
31 versions: self
32 .contents
33 .iter()
34 .map(|content| async move { content.ecmascript_chunk_version().await })
35 .try_join()
36 .await?,
37 }
38 .cell())
39 }
40}
41
42#[turbo_tasks::value_impl]
43impl VersionedContent for EcmascriptMergedChunkContent {
44 #[turbo_tasks::function]
45 fn content(self: Vc<Self>) -> Result<Vc<AssetContent>> {
46 bail!("EcmascriptMergedChunkContent does not have content")
47 }
48
49 #[turbo_tasks::function]
50 fn version(self: Vc<Self>) -> Vc<Box<dyn Version>> {
51 Vc::upcast(self.version())
52 }
53
54 #[turbo_tasks::function]
55 async fn update(
56 self: Vc<Self>,
57 from_version: ResolvedVc<Box<dyn Version>>,
58 ) -> Result<Vc<Update>> {
59 Ok(update_ecmascript_merged_chunk(self, from_version)
60 .await?
61 .cell())
62 }
63}