Skip to content

Commit a49cd42

Browse files
authored
Revert "Turbopack: remove Asset supertrait from Module trait. Modules don't have content" (#86415)
Reverts #86339
1 parent d89a7a0 commit a49cd42

File tree

39 files changed

+330
-82
lines changed

39 files changed

+330
-82
lines changed

crates/next-core/src/next_client_reference/ecmascript_client_reference/ecmascript_client_reference_module.rs

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ use anyhow::{Context, Result, bail};
44
use indoc::writedoc;
55
use turbo_rcstr::{RcStr, rcstr};
66
use turbo_tasks::{IntoTraitRef, ResolvedVc, ValueToString, Vc};
7-
use turbo_tasks_fs::File;
7+
use turbo_tasks_fs::{File, FileContent};
88
use turbopack_core::{
9-
asset::AssetContent,
9+
asset::{Asset, AssetContent},
1010
chunk::{
1111
AsyncModuleInfo, ChunkGroupType, ChunkItem, ChunkType, ChunkableModule,
1212
ChunkableModuleReference, ChunkingContext, ChunkingType, ChunkingTypeOption,
@@ -243,6 +243,18 @@ impl Module for EcmascriptClientReferenceModule {
243243
}
244244
}
245245

246+
#[turbo_tasks::value_impl]
247+
impl Asset for EcmascriptClientReferenceModule {
248+
#[turbo_tasks::function]
249+
fn content(&self) -> Vc<AssetContent> {
250+
AssetContent::File(
251+
FileContent::Content("// This is a proxy module for Next.js client references.".into())
252+
.resolved_cell(),
253+
)
254+
.cell()
255+
}
256+
}
257+
246258
#[turbo_tasks::value_impl]
247259
impl ChunkableModule for EcmascriptClientReferenceModule {
248260
#[turbo_tasks::function]

crates/next-core/src/next_dynamic/dynamic_module.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@ use anyhow::Result;
44
use indoc::formatdoc;
55
use turbo_rcstr::{RcStr, rcstr};
66
use turbo_tasks::{ResolvedVc, Vc};
7+
use turbo_tasks_fs::FileContent;
78
use turbopack_core::{
9+
asset::{Asset, AssetContent},
810
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
911
ident::AssetIdent,
1012
module::Module,
@@ -71,6 +73,18 @@ impl Module for NextDynamicEntryModule {
7173
}
7274
}
7375

76+
#[turbo_tasks::value_impl]
77+
impl Asset for NextDynamicEntryModule {
78+
#[turbo_tasks::function]
79+
fn content(&self) -> Vc<AssetContent> {
80+
AssetContent::File(
81+
FileContent::Content("// This is a marker module for Next.js dynamic.".into())
82+
.resolved_cell(),
83+
)
84+
.cell()
85+
}
86+
}
87+
7488
#[turbo_tasks::value_impl]
7589
impl ChunkableModule for NextDynamicEntryModule {
7690
#[turbo_tasks::function]

crates/next-core/src/next_server_component/server_component_module.rs

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use anyhow::Result;
44
use indoc::formatdoc;
55
use turbo_rcstr::rcstr;
66
use turbo_tasks::{ResolvedVc, Vc};
7-
use turbo_tasks_fs::FileSystemPath;
7+
use turbo_tasks_fs::{FileContent, FileSystemPath};
88
use turbopack_core::{
9+
asset::{Asset, AssetContent},
910
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
1011
ident::AssetIdent,
1112
module::Module,
@@ -68,6 +69,20 @@ impl Module for NextServerComponentModule {
6869
}
6970
}
7071

72+
#[turbo_tasks::value_impl]
73+
impl Asset for NextServerComponentModule {
74+
#[turbo_tasks::function]
75+
fn content(&self) -> Vc<AssetContent> {
76+
AssetContent::File(
77+
FileContent::Content(
78+
"// This is a marker module for Next.js server components.".into(),
79+
)
80+
.resolved_cell(),
81+
)
82+
.cell()
83+
}
84+
}
85+
7186
#[turbo_tasks::value_impl]
7287
impl ChunkableModule for NextServerComponentModule {
7388
#[turbo_tasks::function]

crates/next-core/src/next_server_utility/server_utility_module.rs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,9 @@ use anyhow::Result;
44
use indoc::formatdoc;
55
use turbo_rcstr::rcstr;
66
use turbo_tasks::{ResolvedVc, Vc};
7-
use turbo_tasks_fs::FileSystemPath;
7+
use turbo_tasks_fs::{FileContent, FileSystemPath};
88
use turbopack_core::{
9+
asset::{Asset, AssetContent},
910
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext, ModuleChunkItemIdExt},
1011
ident::AssetIdent,
1112
module::Module,
@@ -68,6 +69,18 @@ impl Module for NextServerUtilityModule {
6869
}
6970
}
7071

72+
#[turbo_tasks::value_impl]
73+
impl Asset for NextServerUtilityModule {
74+
#[turbo_tasks::function]
75+
fn content(&self) -> Vc<AssetContent> {
76+
AssetContent::File(
77+
FileContent::Content("// This is a marker module for Next.js server utilities.".into())
78+
.resolved_cell(),
79+
)
80+
.cell()
81+
}
82+
}
83+
7184
#[turbo_tasks::value_impl]
7285
impl ChunkableModule for NextServerUtilityModule {
7386
#[turbo_tasks::function]

crates/next-core/src/next_shared/transforms/swc_ecma_transform_plugins.rs

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,11 @@ pub async fn get_swc_ecma_transform_rule_impl(
3636
enable_mdx_rs: bool,
3737
) -> Result<Option<ModuleRule>> {
3838
use anyhow::bail;
39-
use turbo_tasks::{TryFlatJoinIterExt, ValueToString};
39+
use turbo_tasks::TryFlatJoinIterExt;
4040
use turbo_tasks_fs::FileContent;
4141
use turbopack::{resolve_options, resolve_options_context::ResolveOptionsContext};
4242
use turbopack_core::{
4343
asset::Asset,
44-
module::Module,
4544
reference_type::{CommonJsReferenceSubType, ReferenceType},
4645
resolve::{handle_resolve_error, parse::Request, resolve},
4746
};
@@ -100,16 +99,7 @@ pub async fn get_swc_ecma_transform_rule_impl(
10099
return Ok(None);
101100
};
102101

103-
let Some(plugin_source) = &*plugin_module.source().await? else {
104-
use anyhow::bail;
105-
106-
bail!(
107-
"Expected source for plugin module: {}",
108-
plugin_module.ident().to_string().await?
109-
);
110-
};
111-
112-
let content = &*plugin_source.content().file_content().await?;
102+
let content = &*plugin_module.content().file_content().await?;
113103
let FileContent::Content(file) = content else {
114104
bail!("Expected file content for plugin module");
115105
};

crates/next-core/src/raw_ecmascript_module.rs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use turbo_tasks::{FxIndexMap, FxIndexSet, ResolvedVc, TryJoinIterExt, ValueToStr
1010
use turbo_tasks_fs::{FileContent, glob::Glob, rope::Rope};
1111
use turbopack::{ModuleAssetContext, module_options::CustomModuleType};
1212
use turbopack_core::{
13-
asset::Asset,
13+
asset::{Asset, AssetContent},
1414
chunk::{ChunkItem, ChunkType, ChunkableModule, ChunkingContext},
1515
code_builder::CodeBuilder,
1616
compile_time_info::{
@@ -107,6 +107,14 @@ impl Module for RawEcmascriptModule {
107107
}
108108
}
109109

110+
#[turbo_tasks::value_impl]
111+
impl Asset for RawEcmascriptModule {
112+
#[turbo_tasks::function]
113+
fn content(&self) -> Vc<AssetContent> {
114+
self.source.content()
115+
}
116+
}
117+
110118
#[turbo_tasks::value_impl]
111119
impl ChunkableModule for RawEcmascriptModule {
112120
#[turbo_tasks::function]

turbopack/crates/turbopack-core/src/changed.rs

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
use anyhow::{Result, bail};
1+
use anyhow::Result;
22
use turbo_tasks::{
3-
Completion, Completions, ResolvedVc, TryJoinIterExt, ValueToString, Vc,
3+
Completion, Completions, ResolvedVc, TryJoinIterExt, Vc,
44
graph::{AdjacencyMap, GraphTraversal},
55
};
66

@@ -33,7 +33,7 @@ pub async fn any_content_changed_of_module(
3333
.completed()?
3434
.into_inner()
3535
.into_postorder_topological()
36-
.map(|m| source_changed(*m))
36+
.map(|m| content_changed(*ResolvedVc::upcast(m)))
3737
.map(|v| v.to_resolved())
3838
.try_join()
3939
.await?;
@@ -85,16 +85,3 @@ pub async fn content_changed(asset: Vc<Box<dyn Asset>>) -> Result<Vc<Completion>
8585
asset.content().file_content().await?;
8686
Ok(Completion::new())
8787
}
88-
89-
/// Returns a completion that changes when the content of the given asset
90-
/// changes.
91-
#[turbo_tasks::function]
92-
pub async fn source_changed(asset: Vc<Box<dyn Module>>) -> Result<Vc<Completion>> {
93-
if let Some(source) = *asset.source().await? {
94-
// Reading the file content is enough to add as dependency
95-
source.content().file_content().await?;
96-
} else {
97-
bail!("Module {} has no source", asset.ident().to_string().await?)
98-
}
99-
Ok(Completion::new())
100-
}

turbopack/crates/turbopack-core/src/chunk/evaluate.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ use turbo_tasks::{ResolvedVc, Upcast, ValueToString, Vc};
33

44
use super::ChunkableModule;
55
use crate::{
6+
asset::Asset,
67
context::AssetContext,
78
module::Module,
89
reference_type::{EntryReferenceSubType, ReferenceType},
@@ -14,7 +15,7 @@ use crate::{
1415
/// The chunking context implementation will resolve the dynamic entry to a
1516
/// well-known value or trait object.
1617
#[turbo_tasks::value_trait]
17-
pub trait EvaluatableAsset: Module + ChunkableModule {}
18+
pub trait EvaluatableAsset: Asset + Module + ChunkableModule {}
1819

1920
pub trait EvaluatableAssetExt {
2021
fn to_evaluatable(

turbopack/crates/turbopack-core/src/chunk/mod.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@ pub struct ModuleIds(Vec<ResolvedVc<ModuleId>>);
9090

9191
/// A [Module] that can be converted into a [Chunk].
9292
#[turbo_tasks::value_trait]
93-
pub trait ChunkableModule: Module {
93+
pub trait ChunkableModule: Module + Asset {
9494
#[turbo_tasks::function]
9595
fn as_chunk_item(
9696
self: Vc<Self>,
@@ -115,7 +115,7 @@ impl ChunkableModules {
115115
// with other module types (as a MergeableModule cannot prevent itself from being merged with other
116116
// module types)
117117
#[turbo_tasks::value_trait]
118-
pub trait MergeableModule: Module {
118+
pub trait MergeableModule: Module + Asset {
119119
/// Even though MergeableModule is implemented, this allows a dynamic condition to determine
120120
/// mergeability
121121
#[turbo_tasks::function]

turbopack/crates/turbopack-core/src/introspect/module.rs

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,12 +33,8 @@ impl Introspectable for IntrospectableModule {
3333
}
3434

3535
#[turbo_tasks::function]
36-
async fn details(&self) -> Result<Vc<RcStr>> {
37-
if let Some(source) = *self.0.source().await? {
38-
Ok(content_to_details(source.content()))
39-
} else {
40-
Ok(Vc::cell("No source".into()))
41-
}
36+
fn details(&self) -> Vc<RcStr> {
37+
content_to_details(self.0.content())
4238
}
4339

4440
#[turbo_tasks::function]

0 commit comments

Comments
 (0)