Skip to content

Commit f1cac49

Browse files
committed
refactor(turbopack): Rewrite CollectiblesSource callsites to use OperationVc
1 parent 7aa49a6 commit f1cac49

File tree

13 files changed

+175
-121
lines changed

13 files changed

+175
-121
lines changed

crates/next-api/src/module_graph.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1098,9 +1098,9 @@ impl ReducedGraphs {
10981098
}
10991099
}
11001100

1101-
#[turbo_tasks::function]
1102-
async fn get_reduced_graphs_for_endpoint_inner(
1103-
project: Vc<Project>,
1101+
#[turbo_tasks::function(operation)]
1102+
async fn get_reduced_graphs_for_endpoint_inner_operation(
1103+
project: ResolvedVc<Project>,
11041104
entry: ResolvedVc<Box<dyn Module>>,
11051105
) -> Result<Vc<ReducedGraphs>> {
11061106
let (is_single_page, graphs) = match &*project.next_mode().await? {
@@ -1172,15 +1172,16 @@ async fn get_reduced_graphs_for_endpoint_inner(
11721172
/// references, etc).
11731173
#[turbo_tasks::function]
11741174
pub async fn get_reduced_graphs_for_endpoint(
1175-
project: Vc<Project>,
1176-
entry: Vc<Box<dyn Module>>,
1175+
project: ResolvedVc<Project>,
1176+
entry: ResolvedVc<Box<dyn Module>>,
11771177
) -> Result<Vc<ReducedGraphs>> {
11781178
// TODO get rid of this function once everything inside of
11791179
// `get_reduced_graphs_for_endpoint_inner` calls `take_collectibles()` when needed
1180-
let result = get_reduced_graphs_for_endpoint_inner(project, entry);
1180+
let result_op = get_reduced_graphs_for_endpoint_inner_operation(project, entry);
1181+
let result_vc = result_op.connect();
11811182
if project.next_mode().await?.is_production() {
1182-
result.strongly_consistent().await?;
1183-
let _issues = result.take_collectibles::<Box<dyn Issue>>();
1183+
result_vc.strongly_consistent().await?;
1184+
let _issues = result_op.take_collectibles::<Box<dyn Issue>>();
11841185
}
1185-
Ok(result)
1186+
Ok(result_vc)
11861187
}

turbopack/crates/turbopack-dev-server/src/http.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ enum GetFromSourceResult {
4343
/// Resolves a [SourceRequest] within a [super::ContentSource], returning the
4444
/// corresponding content as a
4545
#[turbo_tasks::function(operation)]
46-
async fn get_from_source(
46+
async fn get_from_source_operation(
4747
source: OperationVc<Box<dyn ContentSource>>,
4848
request: TransientInstance<SourceRequest>,
4949
) -> Result<Vc<GetFromSourceResult>> {
@@ -63,7 +63,7 @@ async fn get_from_source(
6363
}
6464
}
6565
ResolveSourceRequestResult::HttpProxy(proxy) => {
66-
GetFromSourceResult::HttpProxy(proxy.await?)
66+
GetFromSourceResult::HttpProxy(proxy.connect().await?)
6767
}
6868
ResolveSourceRequestResult::NotFound => GetFromSourceResult::NotFound,
6969
}
@@ -83,7 +83,7 @@ pub async fn process_request_with_content_source(
8383
)> {
8484
let original_path = request.uri().path().to_string();
8585
let request = http_request_to_source_request(request).await?;
86-
let result_op = get_from_source(source, TransientInstance::new(request));
86+
let result_op = get_from_source_operation(source, TransientInstance::new(request));
8787
let result_vc = result_op.connect();
8888
let resolved_result = result_vc.resolve_strongly_consistent().await?;
8989
apply_effects(result_op).await?;
@@ -93,7 +93,7 @@ pub async fn process_request_with_content_source(
9393
issue_reporter,
9494
IssueSeverity::Fatal.cell(),
9595
Some(&original_path),
96-
Some("get_from_source"),
96+
Some("get_from_source_operation"),
9797
)
9898
.await?;
9999
match &*resolved_result.await? {

turbopack/crates/turbopack-dev-server/src/source/issue_context.rs

Lines changed: 35 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -55,11 +55,10 @@ impl ContentSource for IssueFilePathContentSource {
5555
#[turbo_tasks::function]
5656
async fn get_routes(self: ResolvedVc<Self>) -> Result<Vc<RouteTree>> {
5757
let this = self.await?;
58-
let routes = this
59-
.source
60-
.get_routes()
58+
let routes = content_source_get_routes_operation(this.source)
6159
.issue_file_path(this.file_path.map(|v| *v), &*this.description)
62-
.await?;
60+
.await?
61+
.connect();
6362
Ok(routes.map_routes(Vc::upcast(
6463
IssueContextContentSourceMapper { source: self }.cell(),
6564
)))
@@ -71,6 +70,13 @@ impl ContentSource for IssueFilePathContentSource {
7170
}
7271
}
7372

73+
#[turbo_tasks::function(operation)]
74+
fn content_source_get_routes_operation(
75+
source: ResolvedVc<Box<dyn ContentSource>>,
76+
) -> Vc<RouteTree> {
77+
source.get_routes()
78+
}
79+
7480
#[turbo_tasks::value]
7581
struct IssueContextContentSourceMapper {
7682
source: ResolvedVc<IssueFilePathContentSource>,
@@ -104,12 +110,10 @@ impl GetContentSourceContent for IssueContextGetContentSourceContent {
104110
#[turbo_tasks::function]
105111
async fn vary(&self) -> Result<Vc<ContentSourceDataVary>> {
106112
let source = self.source.await?;
107-
let result = self
108-
.get_content
109-
.vary()
113+
Ok(get_content_source_vary_operation(self.get_content)
110114
.issue_file_path(source.file_path.map(|v| *v), &*source.description)
111-
.await?;
112-
Ok(result)
115+
.await?
116+
.connect())
113117
}
114118

115119
#[turbo_tasks::function]
@@ -119,15 +123,31 @@ impl GetContentSourceContent for IssueContextGetContentSourceContent {
119123
data: Value<ContentSourceData>,
120124
) -> Result<Vc<ContentSourceContent>> {
121125
let source = self.source.await?;
122-
let result = self
123-
.get_content
124-
.get(path, data)
125-
.issue_file_path(source.file_path.map(|v| *v), &*source.description)
126-
.await?;
127-
Ok(result)
126+
Ok(
127+
get_content_source_get_operation(self.get_content, path, data)
128+
.issue_file_path(source.file_path.map(|v| *v), &*source.description)
129+
.await?
130+
.connect(),
131+
)
128132
}
129133
}
130134

135+
#[turbo_tasks::function(operation)]
136+
fn get_content_source_vary_operation(
137+
get_content: ResolvedVc<Box<dyn GetContentSourceContent>>,
138+
) -> Vc<ContentSourceDataVary> {
139+
get_content.vary()
140+
}
141+
142+
#[turbo_tasks::function(operation)]
143+
fn get_content_source_get_operation(
144+
get_content: ResolvedVc<Box<dyn GetContentSourceContent>>,
145+
path: RcStr,
146+
data: Value<ContentSourceData>,
147+
) -> Vc<ContentSourceContent> {
148+
get_content.get(path, data)
149+
}
150+
131151
#[turbo_tasks::value_impl]
132152
impl Introspectable for IssueFilePathContentSource {
133153
#[turbo_tasks::function]

turbopack/crates/turbopack-dev-server/src/source/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@ use futures::{stream::Stream as StreamTrait, TryStreamExt};
1919
use serde::{Deserialize, Serialize};
2020
use turbo_rcstr::RcStr;
2121
use turbo_tasks::{
22-
trace::TraceRawVcs, util::SharedError, Completion, NonLocalValue, ResolvedVc, Upcast, Value,
23-
ValueDefault, Vc,
22+
trace::TraceRawVcs, util::SharedError, Completion, NonLocalValue, OperationVc, ResolvedVc,
23+
Upcast, Value, ValueDefault, Vc,
2424
};
2525
use turbo_tasks_bytes::{Bytes, Stream, StreamRead};
2626
use turbo_tasks_fs::FileSystemPath;
@@ -92,7 +92,7 @@ pub struct StaticContent {
9292
pub enum ContentSourceContent {
9393
NotFound,
9494
Static(ResolvedVc<StaticContent>),
95-
HttpProxy(ResolvedVc<ProxyResult>),
95+
HttpProxy(OperationVc<ProxyResult>),
9696
Rewrite(ResolvedVc<Rewrite>),
9797
/// Continue with the next route
9898
Next,

turbopack/crates/turbopack-dev-server/src/source/resolve.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ use super::{
2626
pub enum ResolveSourceRequestResult {
2727
NotFound,
2828
Static(ResolvedVc<StaticContent>, ResolvedVc<HeaderList>),
29-
HttpProxy(Vc<ProxyResult>),
29+
HttpProxy(OperationVc<ProxyResult>),
3030
}
3131

3232
/// Resolves a [SourceRequest] within a [super::ContentSource], returning the
@@ -120,7 +120,7 @@ pub async fn resolve_source_request(
120120
.cell());
121121
}
122122
ContentSourceContent::HttpProxy(proxy_result) => {
123-
return Ok(ResolveSourceRequestResult::HttpProxy(**proxy_result).cell());
123+
return Ok(ResolveSourceRequestResult::HttpProxy(*proxy_result).cell());
124124
}
125125
ContentSourceContent::Next => continue,
126126
}

turbopack/crates/turbopack-dev-server/src/update/stream.rs

Lines changed: 24 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ use crate::source::{resolve::ResolveSourceRequestResult, ProxyResult};
2525

2626
type GetContentFn = Box<dyn Fn() -> OperationVc<ResolveSourceRequestResult> + Send + Sync>;
2727

28-
async fn peek_issues<T: Send>(source: Vc<T>) -> Result<Vec<ReadRef<PlainIssue>>> {
28+
async fn peek_issues<T: Send>(source: OperationVc<T>) -> Result<Vec<ReadRef<PlainIssue>>> {
2929
let captured = source.peek_issues_with_path().await?;
3030

3131
captured.get_plain_issues().await
@@ -41,15 +41,24 @@ fn extend_issues(issues: &mut Vec<ReadRef<PlainIssue>>, new_issues: Vec<ReadRef<
4141
}
4242
}
4343

44+
#[turbo_tasks::function(operation)]
45+
fn versioned_content_update_operation(
46+
content: ResolvedVc<Box<dyn VersionedContent>>,
47+
from: ResolvedVc<Box<dyn Version>>,
48+
) -> Vc<Update> {
49+
content.update(*from)
50+
}
51+
4452
#[turbo_tasks::function]
4553
async fn get_update_stream_item(
4654
resource: RcStr,
4755
from: Vc<VersionState>,
4856
get_content: TransientInstance<GetContentFn>,
4957
) -> Result<Vc<UpdateStreamItem>> {
50-
let content_vc = get_content().connect();
58+
let content_op = get_content();
59+
let content_vc = content_op.connect();
5160
let content_result = content_vc.strongly_consistent().await;
52-
let mut plain_issues = peek_issues(content_vc).await?;
61+
let mut plain_issues = peek_issues(content_op).await?;
5362

5463
let content_value = match content_result {
5564
Ok(content) => content,
@@ -89,27 +98,26 @@ async fn get_update_stream_item(
8998
}
9099

91100
let resolved_content = static_content.content;
92-
let from = from.get();
93-
let update = resolved_content.update(from);
101+
let from = from.get().to_resolved().await?;
102+
let update_op = versioned_content_update_operation(resolved_content, from);
94103

95-
extend_issues(&mut plain_issues, peek_issues(update).await?);
96-
97-
let update = update.await?;
104+
extend_issues(&mut plain_issues, peek_issues(update_op).await?);
98105

99106
Ok(UpdateStreamItem::Found {
100-
update,
107+
update: update_op.connect().await?,
101108
issues: plain_issues,
102109
}
103110
.cell())
104111
}
105-
ResolveSourceRequestResult::HttpProxy(proxy_result) => {
106-
let proxy_result_value = proxy_result.await?;
112+
ResolveSourceRequestResult::HttpProxy(proxy_result_op) => {
113+
let proxy_result_vc = proxy_result_op.connect();
114+
let proxy_result_value = proxy_result_vc.await?;
107115

108116
if proxy_result_value.status == 404 {
109117
return Ok(UpdateStreamItem::NotFound.cell());
110118
}
111119

112-
extend_issues(&mut plain_issues, peek_issues(proxy_result).await?);
120+
extend_issues(&mut plain_issues, peek_issues(proxy_result_op).await?);
113121

114122
let from = from.get();
115123
if let Some(from) = Vc::try_resolve_downcast_type::<ProxyResult>(from).await? {
@@ -124,7 +132,7 @@ async fn get_update_stream_item(
124132

125133
Ok(UpdateStreamItem::Found {
126134
update: Update::Total(TotalUpdate {
127-
to: Vc::upcast::<Box<dyn Version>>(proxy_result)
135+
to: Vc::upcast::<Box<dyn Version>>(proxy_result_vc)
128136
.into_trait_ref()
129137
.await?,
130138
})
@@ -195,7 +203,9 @@ impl UpdateStream {
195203
ResolveSourceRequestResult::Static(static_content, _) => {
196204
static_content.await?.content.version()
197205
}
198-
ResolveSourceRequestResult::HttpProxy(proxy_result) => Vc::upcast(proxy_result),
206+
ResolveSourceRequestResult::HttpProxy(proxy_result) => {
207+
Vc::upcast(proxy_result.connect())
208+
}
199209
_ => Vc::upcast(NotFoundVersion::new()),
200210
};
201211
let version_state = VersionState::new(version.into_trait_ref().await?).await?;

turbopack/crates/turbopack-mdx/src/lib.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -122,17 +122,22 @@ impl Source for MdxTransformedAsset {
122122
#[turbo_tasks::value_impl]
123123
impl Asset for MdxTransformedAsset {
124124
#[turbo_tasks::function]
125-
async fn content(self: Vc<Self>) -> Result<Vc<AssetContent>> {
125+
async fn content(self: ResolvedVc<Self>) -> Result<Vc<AssetContent>> {
126126
let this = self.await?;
127-
Ok(*self
128-
.process()
127+
Ok(*transform_process_operation(self)
129128
.issue_file_path(this.source.ident().path(), "MDX processing")
130129
.await?
130+
.connect()
131131
.await?
132132
.content)
133133
}
134134
}
135135

136+
#[turbo_tasks::function(operation)]
137+
fn transform_process_operation(asset: ResolvedVc<MdxTransformedAsset>) -> Vc<MdxTransformResult> {
138+
asset.process()
139+
}
140+
136141
#[turbo_tasks::value_impl]
137142
impl MdxTransformedAsset {
138143
#[turbo_tasks::function]

turbopack/crates/turbopack-node/src/evaluate.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -84,12 +84,12 @@ struct EmittedEvaluatePoolAssets {
8484
entrypoint: ResolvedVc<FileSystemPath>,
8585
}
8686

87-
#[turbo_tasks::function]
88-
async fn emit_evaluate_pool_assets(
87+
#[turbo_tasks::function(operation)]
88+
async fn emit_evaluate_pool_assets_operation(
8989
module_asset: ResolvedVc<Box<dyn Module>>,
90-
asset_context: Vc<Box<dyn AssetContext>>,
91-
chunking_context: Vc<Box<dyn ChunkingContext>>,
92-
runtime_entries: Option<Vc<EvaluatableAssets>>,
90+
asset_context: ResolvedVc<Box<dyn AssetContext>>,
91+
chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
92+
runtime_entries: Option<ResolvedVc<EvaluatableAssets>>,
9393
) -> Result<Vc<EmittedEvaluatePoolAssets>> {
9494
let runtime_asset = asset_context
9595
.process(
@@ -174,18 +174,18 @@ async fn emit_evaluate_pool_assets(
174174

175175
#[turbo_tasks::function]
176176
async fn emit_evaluate_pool_assets_with_effects(
177-
module_asset: Vc<Box<dyn Module>>,
178-
asset_context: Vc<Box<dyn AssetContext>>,
179-
chunking_context: Vc<Box<dyn ChunkingContext>>,
180-
runtime_entries: Option<Vc<EvaluatableAssets>>,
177+
module_asset: ResolvedVc<Box<dyn Module>>,
178+
asset_context: ResolvedVc<Box<dyn AssetContext>>,
179+
chunking_context: ResolvedVc<Box<dyn ChunkingContext>>,
180+
runtime_entries: Option<ResolvedVc<EvaluatableAssets>>,
181181
) -> Result<Vc<EmittedEvaluatePoolAssets>> {
182-
let operation = emit_evaluate_pool_assets(
182+
let operation = emit_evaluate_pool_assets_operation(
183183
module_asset,
184184
asset_context,
185185
chunking_context,
186186
runtime_entries,
187187
);
188-
let result = operation.resolve_strongly_consistent().await?;
188+
let result = operation.connect().resolve_strongly_consistent().await?;
189189
apply_effects(operation).await?;
190190
Ok(result)
191191
}

0 commit comments

Comments
 (0)