Skip to content

Commit 874cb8e

Browse files
authored
refactor(bundle): remove usage of cli module loader (#30086)
1 parent 141e6ae commit 874cb8e

File tree

10 files changed

+106
-139
lines changed

10 files changed

+106
-139
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ simd-json = "0.14.0"
251251
slab = "0.4"
252252
smallvec = "1.8"
253253
socket2 = { version = "0.5.3", features = ["all"] }
254-
sys_traits = "=0.1.16"
254+
sys_traits = "=0.1.17"
255255
tar = "=0.4.43"
256256
tempfile = "3.4.0"
257257
termcolor = "1.1.3"

cli/module_loader.rs

Lines changed: 15 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -502,23 +502,6 @@ impl ModuleLoaderFactory for CliModuleLoaderFactory {
502502
}
503503
}
504504

505-
impl CliModuleLoaderFactory {
506-
pub fn create_cli_module_loader(
507-
&self,
508-
root_permissions: PermissionsContainer,
509-
) -> CliModuleLoader<MainModuleGraphContainer> {
510-
CliModuleLoader(Rc::new(CliModuleLoaderInner {
511-
lib: self.shared.lib_window,
512-
is_worker: false,
513-
parent_permissions: root_permissions.clone(),
514-
permissions: root_permissions,
515-
graph_container: (*self.shared.main_module_graph_container).clone(),
516-
shared: self.shared.clone(),
517-
loaded_files: Default::default(),
518-
}))
519-
}
520-
}
521-
522505
struct ModuleCodeStringSource {
523506
pub code: ModuleSourceCode,
524507
pub found_url: ModuleSpecifier,
@@ -555,18 +538,13 @@ pub enum ResolveReferrerError {
555538
pub enum CliModuleLoaderError {
556539
#[class(inherit)]
557540
#[error(transparent)]
558-
Fetch(deno_resolver::file_fetcher::FetchError),
541+
Fetch(#[from] deno_resolver::file_fetcher::FetchError),
559542
#[class(inherit)]
560543
#[error(transparent)]
561544
LoadCodeSource(#[from] LoadCodeSourceError),
562545
#[class(inherit)]
563546
#[error(transparent)]
564547
LoadPreparedModule(#[from] LoadPreparedModuleError),
565-
#[class(generic)]
566-
#[error(
567-
"Attempted to load JSON module without specifying \"type\": \"json\" attribute in the import statement."
568-
)]
569-
MissingJsonAttribute,
570548
#[class(inherit)]
571549
#[error(transparent)]
572550
PathToUrl(#[from] PathToUrlError),
@@ -578,50 +556,9 @@ pub enum CliModuleLoaderError {
578556
ResolveReferrer(#[from] ResolveReferrerError),
579557
}
580558

581-
impl<TGraphContainer: ModuleGraphContainer> CliModuleLoader<TGraphContainer> {
582-
pub async fn load_module_source(
583-
&self,
584-
specifier: &ModuleSpecifier,
585-
maybe_referrer: Option<&ModuleSpecifier>,
586-
requested_module_type: &RequestedModuleType,
587-
) -> Result<ModuleSource, CliModuleLoaderError> {
588-
self
589-
.0
590-
.load_module_source(specifier, maybe_referrer, requested_module_type)
591-
.await
592-
}
593-
}
594-
595559
impl<TGraphContainer: ModuleGraphContainer>
596560
CliModuleLoaderInner<TGraphContainer>
597561
{
598-
async fn load_module_source(
599-
&self,
600-
specifier: &ModuleSpecifier,
601-
maybe_referrer: Option<&ModuleSpecifier>,
602-
requested_module_type: &RequestedModuleType,
603-
) -> Result<ModuleSource, CliModuleLoaderError> {
604-
let code_source = self
605-
.load_code_source(specifier, maybe_referrer, requested_module_type)
606-
.await?;
607-
608-
// If we loaded a JSON file, but the "requested_module_type" (that is computed from
609-
// import attributes) is not JSON we need to fail.
610-
if code_source.module_type == ModuleType::Json
611-
&& *requested_module_type != RequestedModuleType::Json
612-
{
613-
return Err(CliModuleLoaderError::MissingJsonAttribute);
614-
}
615-
616-
Ok(ModuleSource::new_with_redirect(
617-
code_source.module_type,
618-
code_source.code,
619-
specifier,
620-
&code_source.found_url,
621-
None,
622-
))
623-
}
624-
625562
async fn load_inner(
626563
&self,
627564
specifier: &ModuleSpecifier,
@@ -633,13 +570,6 @@ impl<TGraphContainer: ModuleGraphContainer>
633570
.await
634571
.map_err(JsErrorBox::from_err)?;
635572

636-
// If we loaded a JSON file, but the "requested_module_type" (that is computed from
637-
// import attributes) is not JSON we need to fail.
638-
if code_source.module_type == ModuleType::Json
639-
&& *requested_module_type != RequestedModuleType::Json
640-
{
641-
return Err(JsErrorBox::generic("Attempted to load JSON module without specifying \"type\": \"json\" attribute in the import statement.").into());
642-
}
643573
let code = if self.shared.is_inspecting
644574
|| code_source.module_type == ModuleType::Wasm
645575
{
@@ -743,19 +673,20 @@ impl<TGraphContainer: ModuleGraphContainer>
743673
specifier,
744674
statically_analyzable,
745675
} => {
746-
self
747-
.load_asset(
748-
&specifier,
749-
if statically_analyzable {
750-
CheckSpecifierKind::Static
751-
} else {
752-
// force permissions
753-
CheckSpecifierKind::Dynamic
754-
},
755-
requested_module_type,
756-
)
757-
.await
758-
.map_err(CliModuleLoaderError::Fetch)
676+
Ok(
677+
self
678+
.load_asset(
679+
&specifier,
680+
if statically_analyzable {
681+
CheckSpecifierKind::Static
682+
} else {
683+
// force permissions
684+
CheckSpecifierKind::Dynamic
685+
},
686+
requested_module_type,
687+
)
688+
.await?,
689+
)
759690
}
760691
}
761692
}

cli/tools/bundle/mod.rs

Lines changed: 36 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use deno_ast::EmitOptions;
1717
use deno_ast::MediaType;
1818
use deno_ast::ModuleSpecifier;
1919
use deno_config::workspace::TsTypeLib;
20-
use deno_core::RequestedModuleType;
2120
use deno_core::error::AnyError;
2221
use deno_core::futures::FutureExt as _;
2322
use deno_core::resolve_url_or_path;
@@ -31,6 +30,9 @@ use deno_resolver::graph::ResolveWithGraphOptions;
3130
use deno_resolver::loader::LoadCodeSourceError;
3231
use deno_resolver::loader::LoadCodeSourceErrorKind;
3332
use deno_resolver::loader::LoadPreparedModuleErrorKind;
33+
use deno_resolver::loader::LoadedModuleOrAsset;
34+
use deno_resolver::loader::LoadedModuleSource;
35+
use deno_resolver::loader::RequestedModuleType;
3436
use deno_resolver::npm::managed::ResolvePkgFolderFromDenoModuleError;
3537
use deno_runtime::deno_permissions::PermissionsContainer;
3638
use deno_semver::npm::NpmPackageReqReference;
@@ -52,11 +54,11 @@ use crate::args::Flags;
5254
use crate::args::PackageHandling;
5355
use crate::args::SourceMapType;
5456
use crate::factory::CliFactory;
57+
use crate::file_fetcher::CliFileFetcher;
5558
use crate::graph_container::MainModuleGraphContainer;
5659
use crate::graph_container::ModuleGraphContainer;
5760
use crate::graph_container::ModuleGraphUpdatePermit;
58-
use crate::module_loader::CliModuleLoader;
59-
use crate::module_loader::CliModuleLoaderError;
61+
use crate::module_loader::CliDenoResolverModuleLoader;
6062
use crate::module_loader::ModuleLoadPreparer;
6163
use crate::module_loader::PrepareModuleLoadOptions;
6264
use crate::node::CliNodeResolver;
@@ -87,10 +89,7 @@ pub async fn bundle(
8789
let npm_resolver = factory.npm_resolver().await?;
8890
let node_resolver = factory.node_resolver().await?;
8991
let cli_options = factory.cli_options()?;
90-
let module_loader = factory
91-
.create_module_loader_factory()
92-
.await?
93-
.create_cli_module_loader(root_permissions.clone());
92+
let module_loader = factory.resolver_factory()?.module_loader()?;
9493
let sys = factory.sys();
9594
let init_cwd = cli_options.initial_cwd().to_path_buf();
9695
let module_graph_container =
@@ -99,6 +98,7 @@ pub async fn bundle(
9998
let (on_end_tx, on_end_rx) = tokio::sync::mpsc::channel(10);
10099
#[allow(clippy::arc_with_non_send_sync)]
101100
let plugin_handler = Arc::new(DenoPluginHandler {
101+
file_fetcher: factory.file_fetcher()?.clone(),
102102
resolver: resolver.clone(),
103103
module_load_preparer,
104104
module_graph_container,
@@ -470,23 +470,24 @@ enum BundleError {
470470

471471
fn requested_type_from_map(
472472
map: &IndexMap<String, String>,
473-
) -> RequestedModuleType {
473+
) -> RequestedModuleType<'_> {
474474
let type_ = map.get("type").map(|s| s.as_str());
475475
match type_ {
476476
Some("json") => RequestedModuleType::Json,
477477
Some("bytes") => RequestedModuleType::Bytes,
478478
Some("text") => RequestedModuleType::Text,
479-
Some(other) => RequestedModuleType::Other(other.to_string().into()),
479+
Some(other) => RequestedModuleType::Other(other),
480480
None => RequestedModuleType::None,
481481
}
482482
}
483483

484484
pub struct DenoPluginHandler {
485+
file_fetcher: Arc<CliFileFetcher>,
485486
resolver: Arc<CliResolver>,
486487
module_load_preparer: Arc<ModuleLoadPreparer>,
487488
module_graph_container: Arc<MainModuleGraphContainer>,
488489
permissions: PermissionsContainer,
489-
module_loader: CliModuleLoader<MainModuleGraphContainer>,
490+
module_loader: Arc<CliDenoResolverModuleLoader>,
490491
externals_matcher: Option<ExternalsMatcher>,
491492
on_end_tx: tokio::sync::mpsc::Sender<esbuild_client::OnEndArgs>,
492493
}
@@ -642,7 +643,10 @@ fn import_kind_to_resolution_mode(
642643
pub enum BundleLoadError {
643644
#[class(inherit)]
644645
#[error(transparent)]
645-
CliModuleLoader(#[from] CliModuleLoaderError),
646+
Fetch(#[from] deno_resolver::file_fetcher::FetchError),
647+
#[class(inherit)]
648+
#[error(transparent)]
649+
LoadCodeSource(#[from] LoadCodeSourceError),
646650
#[class(inherit)]
647651
#[error(transparent)]
648652
ResolveUrlOrPath(#[from] deno_path_util::ResolveUrlOrPathError),
@@ -666,9 +670,7 @@ pub enum BundleLoadError {
666670
impl BundleLoadError {
667671
pub fn is_unsupported_media_type(&self) -> bool {
668672
match self {
669-
BundleLoadError::CliModuleLoader(
670-
CliModuleLoaderError::LoadCodeSource(LoadCodeSourceError(e)),
671-
) => match &**e {
673+
BundleLoadError::LoadCodeSource(e) => match e.as_kind() {
672674
LoadCodeSourceErrorKind::LoadPreparedModule(e) => match e.as_kind() {
673675
LoadPreparedModuleErrorKind::Graph(e) => matches!(
674676
e.error.as_kind(),
@@ -808,7 +810,7 @@ impl DenoPluginHandler {
808810
async fn bundle_load(
809811
&self,
810812
specifier: &str,
811-
requested_type: &RequestedModuleType,
813+
requested_type: &RequestedModuleType<'_>,
812814
) -> Result<Option<(Vec<u8>, esbuild_client::BuiltinLoader)>, BundleLoadError>
813815
{
814816
log::debug!(
@@ -862,10 +864,24 @@ impl DenoPluginHandler {
862864
}
863865
(specifier, media_type, media_type_to_loader(media_type))
864866
};
865-
let loaded = self
867+
let graph = self.module_graph_container.graph();
868+
let module_or_asset = self
866869
.module_loader
867-
.load_module_source(&specifier, None, requested_type)
870+
.load(&graph, &specifier, None, requested_type)
868871
.await?;
872+
let loaded_code = match module_or_asset {
873+
LoadedModuleOrAsset::Module(loaded_module) => loaded_module.source,
874+
LoadedModuleOrAsset::ExternalAsset {
875+
specifier,
876+
statically_analyzable: _,
877+
} => LoadedModuleSource::ArcBytes(
878+
self
879+
.file_fetcher
880+
.fetch(&specifier, &self.permissions)
881+
.await?
882+
.source,
883+
),
884+
};
869885

870886
if matches!(
871887
media_type,
@@ -877,20 +893,16 @@ impl DenoPluginHandler {
877893
| MediaType::Cts
878894
| MediaType::Jsx
879895
| MediaType::Tsx
880-
) && !self
881-
.module_graph_container
882-
.graph()
883-
.roots
884-
.contains(&specifier)
896+
) && !graph.roots.contains(&specifier)
885897
{
886898
let code = self.apply_transform(
887899
&specifier,
888900
media_type,
889-
std::str::from_utf8(loaded.code.as_bytes())?,
901+
std::str::from_utf8(loaded_code.as_bytes())?,
890902
)?;
891903
Ok(Some((code.into_bytes(), loader)))
892904
} else {
893-
Ok(Some((loaded.code.as_bytes().to_vec(), loader)))
905+
Ok(Some((loaded_code.as_bytes().to_vec(), loader)))
894906
}
895907
}
896908

libs/resolver/loader/mod.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ pub use module_loader::*;
1313
pub use npm::*;
1414
use url::Url;
1515

16+
#[derive(Debug)]
1617
pub enum RequestedModuleType<'a> {
1718
None,
1819
Json,

0 commit comments

Comments
 (0)