Skip to content

Commit

Permalink
feat(compile): support sloppy imports (#27944)
Browse files Browse the repository at this point in the history
Closes #26102
  • Loading branch information
dsherret authored Feb 3, 2025
1 parent 41fa8df commit e46860a
Show file tree
Hide file tree
Showing 7 changed files with 49 additions and 12 deletions.
22 changes: 22 additions & 0 deletions cli/rt/run.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -103,6 +106,8 @@ struct SharedModuleLoaderState {
npm_module_loader: Arc<DenoRtNpmModuleLoader>,
npm_registry_permission_checker: NpmRegistryReadPermissionChecker<DenoRtSys>,
npm_req_resolver: Arc<DenoRtNpmReqResolver>,
sloppy_imports_resolver:
Option<SloppyImportsResolver<SloppyImportsCachedFs<DenoRtSys>>>,
vfs: Arc<FileBackedVfs>,
workspace_resolver: WorkspaceResolver<DenoRtSys>,
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -892,6 +913,7 @@ pub async fn run(
)),
npm_registry_permission_checker,
npm_req_resolver,
sloppy_imports_resolver,
vfs: vfs.clone(),
workspace_resolver,
}),
Expand Down
12 changes: 0 additions & 12 deletions cli/tools/compile.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
14 changes: 14 additions & 0 deletions tests/specs/compile/sloppy_imports/__test__.jsonc
Original file line number Diff line number Diff line change
@@ -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"
}
]
}
10 changes: 10 additions & 0 deletions tests/specs/compile/sloppy_imports/compile.out
Original file line number Diff line number Diff line change
@@ -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]
1 change: 1 addition & 0 deletions tests/specs/compile/sloppy_imports/hello.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
console.log("Hello");
1 change: 1 addition & 0 deletions tests/specs/compile/sloppy_imports/main.out
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Hello
1 change: 1 addition & 0 deletions tests/specs/compile/sloppy_imports/main.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
import "./hello"; // no ext for sloppy imports

1 comment on commit e46860a

@dandv
Copy link

@dandv dandv commented on e46860a Feb 3, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🚀

Please sign in to comment.