Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 51f1be1

Browse files
authored
fix: async_scope_block_on (#210)
1 parent 0a40bbd commit 51f1be1

7 files changed

Lines changed: 78 additions & 11 deletions

File tree

Cargo.lock

Lines changed: 34 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

crates/rolldown/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ rustc-hash = { workspace = true }
2828
tracing = { workspace = true }
2929
anyhow = { workspace = true }
3030
index_vec = { workspace = true }
31-
futures = "0.3.25"
31+
futures = { workspace = true }
3232
rayon = "1.6.0"
3333
string_wizard = { workspace = true }
3434
async-trait = { workspace = true }

crates/rolldown/src/bundler/module_loader/module_loader.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ use rolldown_common::{ImportKind, ModuleId, RawPath, ResourceId};
55
use rolldown_error::BuildError;
66
use rolldown_fs::FileSystemExt;
77
use rolldown_resolver::Resolver;
8+
use rolldown_utils::block_on_spawn_all;
89
use rustc_hash::{FxHashMap, FxHashSet};
910

1011
use super::normal_module_task::NormalModuleTask;
@@ -127,7 +128,7 @@ impl<'a, T: FileSystemExt + 'static + Default> ModuleLoader<'a, T> {
127128
pub async fn fetch_all_modules(mut self) -> BatchedResult<()> {
128129
assert!(!self.input_options.input.is_empty(), "You must supply options.input to rolldown");
129130

130-
let resolved_entries = self.resolve_entries().await?;
131+
let resolved_entries = self.resolve_entries()?;
131132

132133
self.ctx.intermediate_modules.reserve(resolved_entries.len() + 1 /* runtime */);
133134

@@ -199,12 +200,12 @@ impl<'a, T: FileSystemExt + 'static + Default> ModuleLoader<'a, T> {
199200
}
200201

201202
#[allow(clippy::collection_is_never_read)]
202-
async fn resolve_entries(&mut self) -> BatchedResult<Vec<(Option<String>, ResolvedRequestInfo)>> {
203+
fn resolve_entries(&mut self) -> BatchedResult<Vec<(Option<String>, ResolvedRequestInfo)>> {
203204
let resolver = &self.resolver;
204205
let plugin_driver = &self.plugin_driver;
205206

206207
let resolved_ids =
207-
futures::future::join_all(self.input_options.input.iter().map(|input_item| async move {
208+
block_on_spawn_all(self.input_options.input.iter().map(|input_item| async move {
208209
let specifier = &input_item.import;
209210
match resolve_id(resolver, plugin_driver, specifier, None, false).await {
210211
Ok(r) => {
@@ -220,8 +221,7 @@ impl<'a, T: FileSystemExt + 'static + Default> ModuleLoader<'a, T> {
220221
}
221222
Err(e) => Err(e),
222223
}
223-
}))
224-
.await;
224+
}));
225225

226226
let mut errors = BatchedErrors::default();
227227

crates/rolldown_utils/Cargo.toml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,9 @@ repository.workspace = true
1111

1212
[dependencies]
1313
string_wizard = { workspace = true }
14+
15+
[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
16+
async-scoped = { workspace = true, features = ["use-tokio"] }
17+
18+
[target.'cfg(target_arch = "wasm32")'.dependencies]
19+
futures = { workspace = true, features = ["executor"]}

crates/rolldown_utils/src/lib.rs

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,30 @@ mod magic_string_ext;
33
pub mod reserved_word;
44

55
pub use crate::magic_string_ext::MagicStringExt;
6+
use std::future::Future;
7+
8+
#[cfg(not(target_arch = "wasm32"))]
9+
pub fn block_on_spawn_all<Iter, Out>(iter: Iter) -> Vec<Out>
10+
where
11+
Iter: Iterator,
12+
Out: Send + 'static,
13+
Iter::Item: Future<Output = Out> + Send,
14+
{
15+
use async_scoped::TokioScope;
16+
let (_ret, collections) =
17+
async_scoped::Scope::scope_and_block(|scope: &mut TokioScope<'_, _>| {
18+
iter.into_iter().for_each(|fut| scope.spawn(fut));
19+
});
20+
collections.into_iter().map(Result::unwrap).collect()
21+
}
22+
23+
#[cfg(target_arch = "wasm32")]
24+
pub fn block_on_spawn_all<Iter, Out>(iter: Iter) -> Vec<Out>
25+
where
26+
Iter: Iterator,
27+
Out: Send + 'static,
28+
Iter::Item: Future<Output = Out> + Send,
29+
{
30+
use futures::{executor::block_on, future};
31+
block_on(future::join_all(iter))
32+
}

web/wasm/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,4 @@
1717
"sideEffects": [
1818
"./snippets/*"
1919
]
20-
}
20+
}

web/wasm/rolldown_wasm.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -390,15 +390,15 @@ async function __wbg_load(module, imports) {
390390
function __wbg_get_imports() {
391391
const imports = {};
392392
imports.wbg = {};
393+
imports.wbg.__wbg_assetitem_new = function() { return logError(function (arg0) {
394+
const ret = AssetItem.__wrap(arg0);
395+
return addHeapObject(ret);
396+
}, arguments) };
393397
imports.wbg.__wbg_fileitem_unwrap = function() { return logError(function (arg0) {
394398
const ret = FileItem.__unwrap(takeObject(arg0));
395399
_assertNum(ret);
396400
return ret;
397401
}, arguments) };
398-
imports.wbg.__wbg_assetitem_new = function() { return logError(function (arg0) {
399-
const ret = AssetItem.__wrap(arg0);
400-
return addHeapObject(ret);
401-
}, arguments) };
402402
imports.wbg.__wbg_error_f851667af71bcfc6 = function() { return logError(function (arg0, arg1) {
403403
let deferred0_0;
404404
let deferred0_1;

0 commit comments

Comments
 (0)