diff --git a/cli/rt/run.rs b/cli/rt/run.rs index df5388e0d1a18e..906504327f9202 100644 --- a/cli/rt/run.rs +++ b/cli/rt/run.rs @@ -59,6 +59,9 @@ use deno_resolver::npm::NpmReqResolver; use deno_resolver::npm::NpmReqResolverOptions; use deno_resolver::npm::NpmResolver; use deno_resolver::npm::NpmResolverCreateOptions; +use deno_resolver::sloppy_imports::SloppyImportsCachedFs; +use deno_resolver::sloppy_imports::SloppyImportsResolutionKind; +use deno_resolver::sloppy_imports::SloppyImportsResolver; use deno_runtime::code_cache::CodeCache; use deno_runtime::deno_fs::FileSystem; use deno_runtime::deno_node::create_host_defined_options; @@ -103,6 +106,8 @@ struct SharedModuleLoaderState { npm_module_loader: Arc, npm_registry_permission_checker: NpmRegistryReadPermissionChecker, npm_req_resolver: Arc, + sloppy_imports_resolver: + Option>>, vfs: Arc, workspace_resolver: WorkspaceResolver, } @@ -316,6 +321,18 @@ impl ModuleLoader for EmbeddedModuleLoader { } } + // do sloppy imports resolution if enabled + let specifier = if let Some(sloppy_imports_resolver) = + &self.shared.sloppy_imports_resolver + { + sloppy_imports_resolver + .resolve(&specifier, SloppyImportsResolutionKind::Execution) + .map(|s| s.into_specifier()) + .unwrap_or(specifier) + } else { + specifier + }; + Ok( self .shared @@ -813,6 +830,10 @@ pub async fn run( pkg_json_resolver.clone(), sys.clone(), )); + let sloppy_imports_resolver = + metadata.unstable_config.sloppy_imports.then(|| { + SloppyImportsResolver::new(SloppyImportsCachedFs::new(sys.clone())) + }); let workspace_resolver = { let import_map = match metadata.workspace_resolver.import_map { Some(import_map) => Some( @@ -892,6 +913,7 @@ pub async fn run( )), npm_registry_permission_checker, npm_req_resolver, + sloppy_imports_resolver, vfs: vfs.clone(), workspace_resolver, }), diff --git a/cli/tools/compile.rs b/cli/tools/compile.rs index 75a36e7896d3ba..5df399336afe3a 100644 --- a/cli/tools/compile.rs +++ b/cli/tools/compile.rs @@ -43,18 +43,6 @@ pub async fn compile( cli_options.initial_cwd(), )?; - // this is not supported, so show a warning about it, but don't error in order - // to allow someone to still run `deno compile` when this is in a deno.json - if cli_options.unstable_sloppy_imports() { - log::warn!( - concat!( - "{} Sloppy imports are not supported in deno compile. ", - "The compiled executable may encounter runtime errors.", - ), - crate::colors::yellow("Warning"), - ); - } - let output_path = resolve_compile_executable_output_path( http_client, &compile_flags, diff --git a/tests/specs/compile/sloppy_imports/__test__.jsonc b/tests/specs/compile/sloppy_imports/__test__.jsonc new file mode 100644 index 00000000000000..d3069e2f7b864b --- /dev/null +++ b/tests/specs/compile/sloppy_imports/__test__.jsonc @@ -0,0 +1,14 @@ +{ + "tempDir": true, + "steps": [ + { + "args": "compile --unstable-sloppy-imports -A --output out main.ts", + "output": "compile.out" + }, + { + "commandName": "./out", + "args": [], + "output": "main.out" + } + ] +} diff --git a/tests/specs/compile/sloppy_imports/compile.out b/tests/specs/compile/sloppy_imports/compile.out new file mode 100644 index 00000000000000..9512bf5f3a469f --- /dev/null +++ b/tests/specs/compile/sloppy_imports/compile.out @@ -0,0 +1,10 @@ +Check file:///[WILDLINE]/main.ts +Compile file:///[WILDLINE]/main.ts to [WILDLINE] + +Embedded Files + +[WILDLINE] +├── hello.ts ([WILDLINE]) +└── main.ts ([WILDLINE]) + +[WILDCARD] diff --git a/tests/specs/compile/sloppy_imports/hello.ts b/tests/specs/compile/sloppy_imports/hello.ts new file mode 100644 index 00000000000000..bf6b8179632b57 --- /dev/null +++ b/tests/specs/compile/sloppy_imports/hello.ts @@ -0,0 +1 @@ +console.log("Hello"); diff --git a/tests/specs/compile/sloppy_imports/main.out b/tests/specs/compile/sloppy_imports/main.out new file mode 100644 index 00000000000000..e965047ad7c578 --- /dev/null +++ b/tests/specs/compile/sloppy_imports/main.out @@ -0,0 +1 @@ +Hello diff --git a/tests/specs/compile/sloppy_imports/main.ts b/tests/specs/compile/sloppy_imports/main.ts new file mode 100644 index 00000000000000..c76458e12ecfbc --- /dev/null +++ b/tests/specs/compile/sloppy_imports/main.ts @@ -0,0 +1 @@ +import "./hello"; // no ext for sloppy imports