diff --git a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs index 7b06a51284da6..d11af6d6b69e1 100644 --- a/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs +++ b/crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs @@ -4,9 +4,9 @@ use anyhow::{Context, Result, bail}; use indoc::writedoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{IntoTraitRef, ResolvedVc, ValueToString, Vc}; -use turbo_tasks_fs::{File, FileContent}; +use turbo_tasks_fs::File; use turbopack_core::{ - asset::{Asset, AssetContent}, + asset::AssetContent, chunk::{ AsyncModuleInfo, ChunkGroupType, ChunkItem, ChunkType, ChunkableModule, ChunkableModuleReference, ChunkingContext, ChunkingType, ChunkingTypeOption, @@ -243,18 +243,6 @@ impl Module for EcmascriptClientReferenceModule { } } -#[turbo_tasks::value_impl] -impl Asset for EcmascriptClientReferenceModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - AssetContent::File( - FileContent::Content("// This is a proxy module for Next.js client references.".into()) - .resolved_cell(), - ) - .cell() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for EcmascriptClientReferenceModule { #[turbo_tasks::function] diff --git a/crates/next-core/src/next_dynamic/dynamic_module.rs b/crates/next-core/src/next_dynamic/dynamic_module.rs index a93cc9ff59ffa..2c308f2d14889 100644 --- a/crates/next-core/src/next_dynamic/dynamic_module.rs +++ b/crates/next-core/src/next_dynamic/dynamic_module.rs @@ -4,9 +4,7 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::FileContent; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, module::Module, @@ -73,18 +71,6 @@ impl Module for NextDynamicEntryModule { } } -#[turbo_tasks::value_impl] -impl Asset for NextDynamicEntryModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - AssetContent::File( - FileContent::Content("// This is a marker module for Next.js dynamic.".into()) - .resolved_cell(), - ) - .cell() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for NextDynamicEntryModule { #[turbo_tasks::function] diff --git a/crates/next-core/src/next_server_component/server_component_module.rs b/crates/next-core/src/next_server_component/server_component_module.rs index 996bdc7f91a53..e622d0892ae3b 100644 --- a/crates/next-core/src/next_server_component/server_component_module.rs +++ b/crates/next-core/src/next_server_component/server_component_module.rs @@ -4,9 +4,8 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath}; +use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, module::Module, @@ -69,20 +68,6 @@ impl Module for NextServerComponentModule { } } -#[turbo_tasks::value_impl] -impl Asset for NextServerComponentModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - AssetContent::File( - FileContent::Content( - "// This is a marker module for Next.js server components.".into(), - ) - .resolved_cell(), - ) - .cell() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for NextServerComponentModule { #[turbo_tasks::function] diff --git a/crates/next-core/src/next_server_utility/server_utility_module.rs b/crates/next-core/src/next_server_utility/server_utility_module.rs index e50548bd50d13..1f06944be8f0f 100644 --- a/crates/next-core/src/next_server_utility/server_utility_module.rs +++ b/crates/next-core/src/next_server_utility/server_utility_module.rs @@ -4,9 +4,8 @@ use anyhow::Result; use indoc::formatdoc; use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{FileContent, FileSystemPath}; +use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, ident::AssetIdent, module::Module, @@ -69,18 +68,6 @@ impl Module for NextServerUtilityModule { } } -#[turbo_tasks::value_impl] -impl Asset for NextServerUtilityModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - AssetContent::File( - FileContent::Content("// This is a marker module for Next.js server utilities.".into()) - .resolved_cell(), - ) - .cell() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for NextServerUtilityModule { #[turbo_tasks::function] diff --git a/crates/next-core/src/next_shared/transforms/swc_ecma_transform_plugins.rs b/crates/next-core/src/next_shared/transforms/swc_ecma_transform_plugins.rs index 78fc1e0ca51f4..8a4b93a30d8cd 100644 --- a/crates/next-core/src/next_shared/transforms/swc_ecma_transform_plugins.rs +++ b/crates/next-core/src/next_shared/transforms/swc_ecma_transform_plugins.rs @@ -36,11 +36,12 @@ pub async fn get_swc_ecma_transform_rule_impl( enable_mdx_rs: bool, ) -> Result> { use anyhow::bail; - use turbo_tasks::TryFlatJoinIterExt; + use turbo_tasks::{TryFlatJoinIterExt, ValueToString}; use turbo_tasks_fs::FileContent; use turbopack::{resolve_options, resolve_options_context::ResolveOptionsContext}; use turbopack_core::{ asset::Asset, + module::Module, reference_type::{CommonJsReferenceSubType, ReferenceType}, resolve::{handle_resolve_error, parse::Request, resolve}, }; @@ -99,7 +100,16 @@ pub async fn get_swc_ecma_transform_rule_impl( return Ok(None); }; - let content = &*plugin_module.content().file_content().await?; + let Some(plugin_source) = &*plugin_module.source().await? else { + use anyhow::bail; + + bail!( + "Expected source for plugin module: {}", + plugin_module.ident().to_string().await? + ); + }; + + let content = &*plugin_source.content().file_content().await?; let FileContent::Content(file) = content else { bail!("Expected file content for plugin module"); }; diff --git a/crates/next-core/src/raw_ecmascript_module.rs b/crates/next-core/src/raw_ecmascript_module.rs index bf8b6fcf3f05f..143de297b6144 100644 --- a/crates/next-core/src/raw_ecmascript_module.rs +++ b/crates/next-core/src/raw_ecmascript_module.rs @@ -10,7 +10,7 @@ use turbo_tasks::{FxIndexMap, FxIndexSet, ResolvedVc, TryJoinIterExt, ValueToStr use turbo_tasks_fs::{FileContent, glob::Glob, rope::Rope}; use turbopack::{ModuleAssetContext, module_options::CustomModuleType}; use turbopack_core::{ - asset::{Asset, AssetContent}, + asset::Asset, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, code_builder::CodeBuilder, compile_time_info::{ @@ -107,14 +107,6 @@ impl Module for RawEcmascriptModule { } } -#[turbo_tasks::value_impl] -impl Asset for RawEcmascriptModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for RawEcmascriptModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-core/src/changed.rs b/turbopack/crates/turbopack-core/src/changed.rs index 8d392c8cd6c22..c7cfc7f6873aa 100644 --- a/turbopack/crates/turbopack-core/src/changed.rs +++ b/turbopack/crates/turbopack-core/src/changed.rs @@ -1,6 +1,6 @@ -use anyhow::Result; +use anyhow::{Result, bail}; use turbo_tasks::{ - Completion, Completions, ResolvedVc, TryJoinIterExt, Vc, + Completion, Completions, ResolvedVc, TryJoinIterExt, ValueToString, Vc, graph::{AdjacencyMap, GraphTraversal}, }; @@ -33,7 +33,7 @@ pub async fn any_content_changed_of_module( .completed()? .into_inner() .into_postorder_topological() - .map(|m| content_changed(*ResolvedVc::upcast(m))) + .map(|m| source_changed(*m)) .map(|v| v.to_resolved()) .try_join() .await?; @@ -85,3 +85,16 @@ pub async fn content_changed(asset: Vc>) -> Result asset.content().file_content().await?; Ok(Completion::new()) } + +/// Returns a completion that changes when the content of the given asset +/// changes. +#[turbo_tasks::function] +pub async fn source_changed(asset: Vc>) -> Result> { + if let Some(source) = *asset.source().await? { + // Reading the file content is enough to add as dependency + source.content().file_content().await?; + } else { + bail!("Module {} has no source", asset.ident().to_string().await?) + } + Ok(Completion::new()) +} diff --git a/turbopack/crates/turbopack-core/src/chunk/evaluate.rs b/turbopack/crates/turbopack-core/src/chunk/evaluate.rs index c20aa32da3244..5b3cd3290e2db 100644 --- a/turbopack/crates/turbopack-core/src/chunk/evaluate.rs +++ b/turbopack/crates/turbopack-core/src/chunk/evaluate.rs @@ -3,7 +3,6 @@ use turbo_tasks::{ResolvedVc, Upcast, ValueToString, Vc}; use super::ChunkableModule; use crate::{ - asset::Asset, context::AssetContext, module::Module, reference_type::{EntryReferenceSubType, ReferenceType}, @@ -15,7 +14,7 @@ use crate::{ /// The chunking context implementation will resolve the dynamic entry to a /// well-known value or trait object. #[turbo_tasks::value_trait] -pub trait EvaluatableAsset: Asset + Module + ChunkableModule {} +pub trait EvaluatableAsset: Module + ChunkableModule {} pub trait EvaluatableAssetExt { fn to_evaluatable( diff --git a/turbopack/crates/turbopack-core/src/chunk/mod.rs b/turbopack/crates/turbopack-core/src/chunk/mod.rs index 604d5cf7ac160..55af21221e55b 100644 --- a/turbopack/crates/turbopack-core/src/chunk/mod.rs +++ b/turbopack/crates/turbopack-core/src/chunk/mod.rs @@ -90,7 +90,7 @@ pub struct ModuleIds(Vec>); /// A [Module] that can be converted into a [Chunk]. #[turbo_tasks::value_trait] -pub trait ChunkableModule: Module + Asset { +pub trait ChunkableModule: Module { #[turbo_tasks::function] fn as_chunk_item( self: Vc, @@ -115,7 +115,7 @@ impl ChunkableModules { // with other module types (as a MergeableModule cannot prevent itself from being merged with other // module types) #[turbo_tasks::value_trait] -pub trait MergeableModule: Module + Asset { +pub trait MergeableModule: Module { /// Even though MergeableModule is implemented, this allows a dynamic condition to determine /// mergeability #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-core/src/introspect/module.rs b/turbopack/crates/turbopack-core/src/introspect/module.rs index a1f9bf7924f42..de76e6426ac9a 100644 --- a/turbopack/crates/turbopack-core/src/introspect/module.rs +++ b/turbopack/crates/turbopack-core/src/introspect/module.rs @@ -33,8 +33,12 @@ impl Introspectable for IntrospectableModule { } #[turbo_tasks::function] - fn details(&self) -> Vc { - content_to_details(self.0.content()) + async fn details(&self) -> Result> { + if let Some(source) = *self.0.source().await? { + Ok(content_to_details(source.content())) + } else { + Ok(Vc::cell("No source".into())) + } } #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-core/src/module.rs b/turbopack/crates/turbopack-core/src/module.rs index a7390e56ccbe0..9e104a923bcbe 100644 --- a/turbopack/crates/turbopack-core/src/module.rs +++ b/turbopack/crates/turbopack-core/src/module.rs @@ -2,7 +2,7 @@ use turbo_rcstr::RcStr; use turbo_tasks::{ResolvedVc, TaskInput, ValueToString, Vc}; use turbo_tasks_fs::glob::Glob; -use crate::{asset::Asset, ident::AssetIdent, reference::ModuleReferences, source::OptionSource}; +use crate::{ident::AssetIdent, reference::ModuleReferences, source::OptionSource}; #[derive(Clone, Copy, Debug, TaskInput, Hash)] #[turbo_tasks::value(shared)] @@ -14,7 +14,7 @@ pub enum StyleType { /// A module. This usually represents parsed source code, which has references /// to other modules. #[turbo_tasks::value_trait] -pub trait Module: Asset { +pub trait Module { /// The identifier of the [Module]. It's expected to be unique and capture /// all properties of the [Module]. #[turbo_tasks::function] @@ -55,7 +55,7 @@ pub trait Module: Asset { } #[turbo_tasks::value_trait] -pub trait StyleModule: Module + Asset { +pub trait StyleModule: Module { /// The style type of the module. #[turbo_tasks::function] fn style_type(&self) -> Vc; diff --git a/turbopack/crates/turbopack-core/src/node_addon_module.rs b/turbopack/crates/turbopack-core/src/node_addon_module.rs index ba1096f4c5968..675264a58e900 100644 --- a/turbopack/crates/turbopack-core/src/node_addon_module.rs +++ b/turbopack/crates/turbopack-core/src/node_addon_module.rs @@ -7,7 +7,6 @@ use turbo_tasks::{FxIndexSet, ResolvedVc, TryJoinIterExt, Vc}; use turbo_tasks_fs::{FileSystemEntryType, FileSystemPath}; use crate::{ - asset::{Asset, AssetContent}, file_source::FileSource, ident::AssetIdent, module::Module, @@ -102,14 +101,6 @@ impl Module for NodeAddonModule { } } -#[turbo_tasks::value_impl] -impl Asset for NodeAddonModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::function] async fn dir_references(package_dir: FileSystemPath) -> Result> { let matches = read_matches( diff --git a/turbopack/crates/turbopack-core/src/raw_module.rs b/turbopack/crates/turbopack-core/src/raw_module.rs index dc6fd947b4e96..4bc4627092a12 100644 --- a/turbopack/crates/turbopack-core/src/raw_module.rs +++ b/turbopack/crates/turbopack-core/src/raw_module.rs @@ -1,7 +1,6 @@ use turbo_tasks::{ResolvedVc, Vc}; use crate::{ - asset::{Asset, AssetContent}, ident::AssetIdent, module::Module, source::{OptionSource, Source}, @@ -27,14 +26,6 @@ impl Module for RawModule { } } -#[turbo_tasks::value_impl] -impl Asset for RawModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl RawModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-core/src/rebase.rs b/turbopack/crates/turbopack-core/src/rebase.rs index 13a676b529c47..8f2d38f3efca1 100644 --- a/turbopack/crates/turbopack-core/src/rebase.rs +++ b/turbopack/crates/turbopack-core/src/rebase.rs @@ -1,7 +1,7 @@ use std::hash::Hash; -use anyhow::Result; -use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; +use anyhow::{Result, bail}; +use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_fs::FileSystemPath; use crate::{ @@ -74,7 +74,14 @@ impl OutputAsset for RebasedAsset { #[turbo_tasks::value_impl] impl Asset for RebasedAsset { #[turbo_tasks::function] - fn content(&self) -> Vc { - self.module.content() + async fn content(&self) -> Result> { + if let Some(source) = *self.module.source().await? { + Ok(source.content()) + } else { + bail!( + "Module {} has no source", + self.module.ident().to_string().await? + ) + } } } diff --git a/turbopack/crates/turbopack-core/src/traced_asset.rs b/turbopack/crates/turbopack-core/src/traced_asset.rs index ec8e092fe8343..1202526eccc40 100644 --- a/turbopack/crates/turbopack-core/src/traced_asset.rs +++ b/turbopack/crates/turbopack-core/src/traced_asset.rs @@ -1,5 +1,5 @@ -use anyhow::Result; -use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; +use anyhow::{Result, bail}; +use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_fs::FileSystemPath; use crate::{ @@ -54,7 +54,14 @@ impl OutputAsset for TracedAsset { #[turbo_tasks::value_impl] impl Asset for TracedAsset { #[turbo_tasks::function] - fn content(&self) -> Vc { - self.module.content() + async fn content(&self) -> Result> { + if let Some(source) = *self.module.source().await? { + Ok(source.content()) + } else { + bail!( + "Module {} has no source", + self.module.ident().to_string().await?, + ) + } } } diff --git a/turbopack/crates/turbopack-css/src/asset.rs b/turbopack/crates/turbopack-css/src/asset.rs index a13d89aa7b36c..368e76d82c02a 100644 --- a/turbopack/crates/turbopack-css/src/asset.rs +++ b/turbopack/crates/turbopack-css/src/asset.rs @@ -3,7 +3,6 @@ use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, MinifyType}, context::AssetContext, environment::Environment, @@ -166,14 +165,6 @@ impl StyleModule for CssModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for CssModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for CssModuleAsset { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-css/src/chunk/mod.rs b/turbopack/crates/turbopack-css/src/chunk/mod.rs index 2106f81b87a23..7621c0b41e647 100644 --- a/turbopack/crates/turbopack-css/src/chunk/mod.rs +++ b/turbopack/crates/turbopack-css/src/chunk/mod.rs @@ -437,7 +437,7 @@ impl GenerateSourceMap for CssChunk { // TODO: remove #[turbo_tasks::value_trait] -pub trait CssChunkPlaceable: ChunkableModule + Module + Asset {} +pub trait CssChunkPlaceable: ChunkableModule + Module {} #[derive(Clone, Debug)] #[turbo_tasks::value(shared)] diff --git a/turbopack/crates/turbopack-css/src/embed.rs b/turbopack/crates/turbopack-css/src/embed.rs index a3552ca2f5a86..6859bf617ae91 100644 --- a/turbopack/crates/turbopack-css/src/embed.rs +++ b/turbopack/crates/turbopack-css/src/embed.rs @@ -1,8 +1,8 @@ use turbo_tasks::Vc; -use turbopack_core::{asset::Asset, chunk::ChunkingContext, module::Module, output::OutputAsset}; +use turbopack_core::{chunk::ChunkingContext, module::Module, output::OutputAsset}; #[turbo_tasks::value_trait] -pub trait CssEmbed: Module + Asset { +pub trait CssEmbed: Module { #[turbo_tasks::function] fn embedded_asset( self: Vc, diff --git a/turbopack/crates/turbopack-css/src/module_asset.rs b/turbopack/crates/turbopack-css/src/module_asset.rs index 1918f45763120..93e1aad721267 100644 --- a/turbopack/crates/turbopack-css/src/module_asset.rs +++ b/turbopack/crates/turbopack-css/src/module_asset.rs @@ -8,7 +8,6 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{FxIndexMap, IntoTraitRef, ResolvedVc, ValueToString, Vc}; use turbo_tasks_fs::{FileSystemPath, rope::Rope}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt}, context::{AssetContext, ProcessResult}, ident::AssetIdent, @@ -113,14 +112,6 @@ impl Module for ModuleCssAsset { } } -#[turbo_tasks::value_impl] -impl Asset for ModuleCssAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - /// A CSS class that is exported from a CSS module. /// /// See [`ModuleCssClasses`] for more information. diff --git a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs index d32a0551a236f..ae3d3ddd2aaa3 100644 --- a/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/async_chunk/module.rs @@ -3,7 +3,6 @@ use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, availability_info::AvailabilityInfo}, ident::AssetIdent, module::Module, @@ -76,14 +75,6 @@ impl Module for AsyncLoaderModule { } } -#[turbo_tasks::value_impl] -impl Asset for AsyncLoaderModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - panic!("content() should not be called"); - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for AsyncLoaderModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs b/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs index d9f810b120af5..37b9a7feb6268 100644 --- a/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs +++ b/turbopack/crates/turbopack-ecmascript/src/chunk/placeable.rs @@ -24,7 +24,7 @@ use crate::references::{ }; #[turbo_tasks::value_trait] -pub trait EcmascriptChunkPlaceable: ChunkableModule + Module + Asset { +pub trait EcmascriptChunkPlaceable: ChunkableModule + Module { #[turbo_tasks::function] fn get_exports(self: Vc) -> Vc; #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs index 106f45fc3c56d..478c9f2e825c4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/inlined_bytes_module.rs @@ -5,7 +5,7 @@ use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; use turbo_tasks_fs::{FileContent, glob::Glob, rope::RopeBuilder}; use turbopack_core::{ - asset::{Asset, AssetContent}, + asset::Asset, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::AssetIdent, module::Module, @@ -59,14 +59,6 @@ impl Module for InlinedBytesJsModule { } } -#[turbo_tasks::value_impl] -impl Asset for InlinedBytesJsModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for InlinedBytesJsModule { #[turbo_tasks::function] @@ -128,7 +120,7 @@ impl ChunkItem for InlinedBytesJsChunkItem { impl EcmascriptChunkItem for InlinedBytesJsChunkItem { #[turbo_tasks::function] async fn content(&self) -> Result> { - let content = self.module.content().file_content().await?; + let content = self.module.await?.source.content().file_content().await?; match &*content { FileContent::Content(data) => { let mut inner_code = RopeBuilder::default(); diff --git a/turbopack/crates/turbopack-ecmascript/src/lib.rs b/turbopack/crates/turbopack-ecmascript/src/lib.rs index 0d3e5c79f4277..71f6e874f50e5 100644 --- a/turbopack/crates/turbopack-ecmascript/src/lib.rs +++ b/turbopack/crates/turbopack-ecmascript/src/lib.rs @@ -90,7 +90,6 @@ use turbo_tasks::{ }; use turbo_tasks_fs::{FileJsonContent, FileSystemPath, glob::Glob, rope::Rope}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ AsyncModuleInfo, ChunkItem, ChunkType, ChunkableModule, ChunkingContext, EvaluatableAsset, MergeableModule, MergeableModuleExposure, MergeableModules, MergeableModulesExposed, @@ -403,7 +402,7 @@ pub trait EcmascriptParsable { } #[turbo_tasks::value_trait] -pub trait EcmascriptAnalyzable: Module + Asset { +pub trait EcmascriptAnalyzable: Module { #[turbo_tasks::function] fn analyze(self: Vc) -> Vc; @@ -774,14 +773,6 @@ impl Module for EcmascriptModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for EcmascriptModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for EcmascriptModuleAsset { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs index 06f3276366ca2..36067a4f46b53 100644 --- a/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/manifest/chunk_asset.rs @@ -3,7 +3,6 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ ChunkableModule, ChunkingContext, ChunkingContextExt, availability_info::AvailabilityInfo, }, @@ -162,14 +161,6 @@ impl Module for ManifestAsyncModule { } } -#[turbo_tasks::value_impl] -impl Asset for ManifestAsyncModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - panic!("content() should not be called"); - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for ManifestAsyncModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs index 31b8729b93421..5b72454979e79 100644 --- a/turbopack/crates/turbopack-ecmascript/src/merged_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/merged_module.rs @@ -1,7 +1,6 @@ use anyhow::{Context, Result}; use turbo_tasks::{ResolvedVc, Vc}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ AsyncModuleInfo, ChunkItem, ChunkType, ChunkableModule, ChunkingContext, MergeableModuleExposure, MergeableModules, MergeableModulesExposed, @@ -60,14 +59,6 @@ impl MergedEcmascriptModule { } } -#[turbo_tasks::value_impl] -impl Asset for MergedEcmascriptModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - panic!("content() should not be called"); - } -} - #[turbo_tasks::value_impl] impl Module for MergedEcmascriptModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs index 72b2199fe7c11..12eb45f2e30e6 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/external_module.rs @@ -4,9 +4,8 @@ use anyhow::Result; use serde::{Deserialize, Serialize}; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{NonLocalValue, ResolvedVc, TaskInput, TryJoinIterExt, Vc, trace::TraceRawVcs}; -use turbo_tasks_fs::{FileContent, FileSystem, VirtualFileSystem, glob::Glob, rope::RopeBuilder}; +use turbo_tasks_fs::{FileSystem, VirtualFileSystem, glob::Glob, rope::RopeBuilder}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{AsyncModuleInfo, ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::{AssetIdent, Layer}, module::Module, @@ -313,15 +312,6 @@ impl Module for CachedExternalModule { } } -#[turbo_tasks::value_impl] -impl Asset for CachedExternalModule { - #[turbo_tasks::function] - fn content(self: Vc) -> Vc { - // should be `NotFound` as this function gets called to detect source changes - AssetContent::file(FileContent::NotFound.cell()) - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for CachedExternalModule { #[turbo_tasks::function] @@ -445,14 +435,6 @@ impl ModuleWithoutSelfAsync { } } -#[turbo_tasks::value_impl] -impl Asset for ModuleWithoutSelfAsync { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.module.content() - } -} - #[turbo_tasks::value_impl] impl Module for ModuleWithoutSelfAsync { #[turbo_tasks::function] @@ -462,7 +444,7 @@ impl Module for ModuleWithoutSelfAsync { #[turbo_tasks::function] fn source(&self) -> Vc { - Vc::cell(None) + self.module.source() } #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs index 3295e45cc49b3..a01febe9287b4 100644 --- a/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs +++ b/turbopack/crates/turbopack-ecmascript/src/references/require_context.rs @@ -21,7 +21,6 @@ use turbo_tasks::{ }; use turbo_tasks_fs::{DirectoryContent, DirectoryEntry, FileSystemPath, glob::Glob}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ ChunkItem, ChunkType, ChunkableModule, ChunkableModuleReference, ChunkingContext, MinifyType, ModuleChunkItemIdExt, @@ -436,14 +435,6 @@ impl Module for RequireContextAsset { } } -#[turbo_tasks::value_impl] -impl Asset for RequireContextAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - unimplemented!() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for RequireContextAsset { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs index 7fa5eb6b9a587..48de2d0b226f0 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/facade/module.rs @@ -2,9 +2,8 @@ use std::collections::BTreeMap; use anyhow::{Result, bail}; use turbo_tasks::{ResolvedVc, Vc}; -use turbo_tasks_fs::{File, FileContent, glob::Glob}; +use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset, MergeableModule, MergeableModules, MergeableModulesExposed, @@ -198,16 +197,6 @@ impl Module for EcmascriptModuleFacadeModule { } } -#[turbo_tasks::value_impl] -impl Asset for EcmascriptModuleFacadeModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - let f = File::from(""); - - AssetContent::file(FileContent::Content(f).cell()) - } -} - #[turbo_tasks::value_impl] impl EcmascriptAnalyzable for EcmascriptModuleFacadeModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs index 6f687d24f9518..c2aed17e09a82 100644 --- a/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/side_effect_optimization/locals/module.rs @@ -4,7 +4,6 @@ use anyhow::{Result, bail}; use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ AsyncModuleInfo, ChunkableModule, ChunkingContext, MergeableModule, MergeableModules, MergeableModulesExposed, @@ -79,14 +78,6 @@ impl Module for EcmascriptModuleLocalsModule { } } -#[turbo_tasks::value_impl] -impl Asset for EcmascriptModuleLocalsModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.module.content() - } -} - #[turbo_tasks::value_impl] impl EcmascriptAnalyzable for EcmascriptModuleLocalsModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs index b0ad370ff2ea0..8cac080b3cb35 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/asset.rs @@ -3,7 +3,6 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{AsyncModuleInfo, ChunkableModule, ChunkingContext, EvaluatableAsset}, context::AssetContext, ident::AssetIdent, @@ -366,14 +365,6 @@ impl Module for EcmascriptModulePartAsset { } } -#[turbo_tasks::value_impl] -impl Asset for EcmascriptModulePartAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.full_module.content() - } -} - #[turbo_tasks::value_impl] impl EcmascriptChunkPlaceable for EcmascriptModulePartAsset { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs index 5c6b2d9a9be6f..ab60a72a44e78 100644 --- a/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/tree_shake/side_effect_module.rs @@ -1,9 +1,8 @@ use anyhow::Result; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, Vc}; -use turbo_tasks_fs::{FileContent, glob::Glob}; +use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkableModule, ChunkingContext, EvaluatableAsset}, ident::AssetIdent, module::Module, @@ -119,21 +118,6 @@ impl Module for SideEffectsModule { } } -#[turbo_tasks::value_impl] -impl Asset for SideEffectsModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - AssetContent::File( - FileContent::Content( - "// This is a proxy module for reexportings a module with additional side effects." - .into(), - ) - .resolved_cell(), - ) - .cell() - } -} - #[turbo_tasks::value_impl] impl EcmascriptChunkPlaceable for SideEffectsModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs index 8e6314f96afd2..c086ef4aa6c5f 100644 --- a/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/typescript/mod.rs @@ -4,7 +4,7 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, TryJoinIterExt, ValueToString, Vc}; use turbo_tasks_fs::DirectoryContent; use turbopack_core::{ - asset::{Asset, AssetContent}, + asset::Asset, ident::AssetIdent, module::Module, raw_module::RawModule, @@ -180,14 +180,6 @@ impl Module for TsConfigModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for TsConfigModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value] #[derive(Hash, Debug)] pub struct CompilerReference { diff --git a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs index 54a85f9de99a2..ccc4326bf455e 100644 --- a/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs +++ b/turbopack/crates/turbopack-ecmascript/src/webpack/mod.rs @@ -3,7 +3,6 @@ use swc_core::ecma::ast::Lit; use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; use turbopack_core::{ - asset::{Asset, AssetContent}, file_source::FileSource, ident::AssetIdent, module::Module, @@ -66,14 +65,6 @@ impl Module for WebpackModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for WebpackModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value(shared)] pub struct WebpackChunkAssetReference { #[turbo_tasks(trace_ignore)] diff --git a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs index 09dfb6110c9d7..00bf4ad2ed2a2 100644 --- a/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs +++ b/turbopack/crates/turbopack-ecmascript/src/worker_chunk/module.rs @@ -3,7 +3,6 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ ChunkGroupType, ChunkableModule, ChunkableModuleReference, ChunkingContext, ChunkingType, ChunkingTypeOption, @@ -67,14 +66,6 @@ impl Module for WorkerLoaderModule { } } -#[turbo_tasks::value_impl] -impl Asset for WorkerLoaderModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - panic!("content() should not be called"); - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for WorkerLoaderModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-json/src/lib.rs b/turbopack/crates/turbopack-json/src/lib.rs index e77a9f7bbe3bc..d2539c0f44de4 100644 --- a/turbopack/crates/turbopack-json/src/lib.rs +++ b/turbopack/crates/turbopack-json/src/lib.rs @@ -16,7 +16,7 @@ use turbo_rcstr::rcstr; use turbo_tasks::{ResolvedVc, ValueToString, Vc}; use turbo_tasks_fs::{FileContent, FileJsonContent, glob::Glob}; use turbopack_core::{ - asset::{Asset, AssetContent}, + asset::Asset, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, code_builder::CodeBuilder, ident::AssetIdent, @@ -67,14 +67,6 @@ impl Module for JsonModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for JsonModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for JsonModuleAsset { #[turbo_tasks::function] @@ -138,7 +130,7 @@ impl EcmascriptChunkItem for JsonChunkItem { async fn content(&self) -> Result> { // We parse to JSON and then stringify again to ensure that the // JSON is valid. - let content = self.module.content().file_content(); + let content = self.module.await?.source.content().file_content(); let data = content.parse_json().await?; match &*data { FileJsonContent::Content(data) => { diff --git a/turbopack/crates/turbopack-static/src/css.rs b/turbopack/crates/turbopack-static/src/css.rs index 975318dc6cd28..e0cf1294e1cd7 100644 --- a/turbopack/crates/turbopack-static/src/css.rs +++ b/turbopack/crates/turbopack-static/src/css.rs @@ -2,12 +2,7 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, - chunk::ChunkingContext, - ident::AssetIdent, - module::Module, - output::OutputAsset, - source::Source, + chunk::ChunkingContext, ident::AssetIdent, module::Module, output::OutputAsset, source::Source, }; use turbopack_css::embed::CssEmbed; @@ -61,14 +56,6 @@ impl Module for StaticUrlCssModule { } } -#[turbo_tasks::value_impl] -impl Asset for StaticUrlCssModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl CssEmbed for StaticUrlCssModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-static/src/ecma.rs b/turbopack/crates/turbopack-static/src/ecma.rs index 5898740e7b410..07ccd5ff46f06 100644 --- a/turbopack/crates/turbopack-static/src/ecma.rs +++ b/turbopack/crates/turbopack-static/src/ecma.rs @@ -3,7 +3,6 @@ use turbo_rcstr::{RcStr, rcstr}; use turbo_tasks::{ResolvedVc, Vc}; use turbo_tasks_fs::glob::Glob; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, ident::AssetIdent, module::Module, @@ -73,14 +72,6 @@ impl Module for StaticUrlJsModule { } } -#[turbo_tasks::value_impl] -impl Asset for StaticUrlJsModule { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for StaticUrlJsModule { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-wasm/src/module_asset.rs b/turbopack/crates/turbopack-wasm/src/module_asset.rs index 3db28a19882fb..0e554fbb12d67 100644 --- a/turbopack/crates/turbopack-wasm/src/module_asset.rs +++ b/turbopack/crates/turbopack-wasm/src/module_asset.rs @@ -3,7 +3,6 @@ use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc, fxindexmap}; use turbo_tasks_fs::FileSystemPath; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ AsyncModuleInfo, ChunkItem, ChunkType, ChunkableModule, ChunkingContext, chunk_group::references_to_output_assets, @@ -146,14 +145,6 @@ impl Module for WebAssemblyModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for WebAssemblyModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for WebAssemblyModuleAsset { #[turbo_tasks::function] diff --git a/turbopack/crates/turbopack-wasm/src/raw.rs b/turbopack/crates/turbopack-wasm/src/raw.rs index 03661228b60b6..7bcf8c56e5440 100644 --- a/turbopack/crates/turbopack-wasm/src/raw.rs +++ b/turbopack/crates/turbopack-wasm/src/raw.rs @@ -2,7 +2,6 @@ use anyhow::{Result, bail}; use turbo_rcstr::rcstr; use turbo_tasks::{IntoTraitRef, ResolvedVc, Vc}; use turbopack_core::{ - asset::{Asset, AssetContent}, chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext}, context::AssetContext, ident::AssetIdent, @@ -66,14 +65,6 @@ impl Module for RawWebAssemblyModuleAsset { } } -#[turbo_tasks::value_impl] -impl Asset for RawWebAssemblyModuleAsset { - #[turbo_tasks::function] - fn content(&self) -> Vc { - self.source.content() - } -} - #[turbo_tasks::value_impl] impl ChunkableModule for RawWebAssemblyModuleAsset { #[turbo_tasks::function]