aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Dylan Conway <dylan.conway567@gmail.com> 2023-04-10 11:14:30 -0700
committerGravatar Dylan Conway <dylan.conway567@gmail.com> 2023-04-10 11:58:19 -0700
commitce89372ebdb4ead337b32975886735a44e857b7a (patch)
treedb7c0e89724be8a8eb1ee82f305e8adb4cf57638
parent7a310b4c310bb727e455bc82a51d26d5a29ec621 (diff)
downloadbun-ce89372ebdb4ead337b32975886735a44e857b7a.tar.gz
bun-ce89372ebdb4ead337b32975886735a44e857b7a.tar.zst
bun-ce89372ebdb4ead337b32975886735a44e857b7a.zip
run files with non-js extensions
-rw-r--r--src/bun.js/module_loader.zig8
-rw-r--r--src/cli.zig29
-rw-r--r--src/cli/build_command.zig6
3 files changed, 22 insertions, 21 deletions
diff --git a/src/bun.js/module_loader.zig b/src/bun.js/module_loader.zig
index 86d17a4ed..88b065727 100644
--- a/src/bun.js/module_loader.zig
+++ b/src/bun.js/module_loader.zig
@@ -1476,7 +1476,13 @@ pub const ModuleLoader = struct {
&display_specifier,
);
const path = Fs.Path.init(specifier);
- const loader = jsc_vm.bundler.options.loaders.get(path.name.ext) orelse options.Loader.file;
+ const loader = jsc_vm.bundler.options.loaders.get(path.name.ext) orelse brk: {
+ if (strings.eqlLong(specifier, jsc_vm.main, true)) {
+ break :brk options.Loader.js;
+ }
+
+ break :brk options.Loader.file;
+ };
var promise: ?*JSC.JSInternalPromise = null;
ret.* = ErrorableResolvedSource.ok(
ModuleLoader.transpileSourceCode(
diff --git a/src/cli.zig b/src/cli.zig
index f9c3f403f..6deb8062b 100644
--- a/src/cli.zig
+++ b/src/cli.zig
@@ -1331,18 +1331,9 @@ pub const Command = struct {
}
var was_js_like = false;
- // If we start bun with:
- // 1. `bun foo.js`, assume it's a JavaScript file.
- // 2. `bun /absolute/path/to/bin/foo` assume its a JavaScript file.
- // ^ no file extension
- //
- // #!/usr/bin/env bun
- // will pass us an absolute path to the script.
- // This means a non-standard file extension will not work, but that is better than the current state
- // which is file extension-less doesn't work
- const default_loader = options.defaultLoaders.get(extension) orelse brk: {
+ const default_loader: options.Loader = options.defaultLoaders.get(extension) orelse brk: {
if (extension.len == 0 and ctx.args.entry_points.len > 0 and ctx.args.entry_points[0].len > 0 and std.fs.path.isAbsolute(ctx.args.entry_points[0])) {
- break :brk options.Loader.js;
+ break :brk .js;
}
if (extension.len > 0) {
@@ -1351,22 +1342,20 @@ pub const Command = struct {
}
if (ctx.preloads.len > 0)
- break :brk options.Loader.js;
+ break :brk .js;
}
- break :brk null;
+ break :brk .js;
};
const force_using_bun = ctx.debug.run_in_bun;
var did_check = false;
- if (default_loader) |loader| {
- if (loader.canBeRunByBun()) {
- was_js_like = true;
- if (maybeOpenWithBunJS(&ctx)) {
- return;
- }
- did_check = true;
+ if (default_loader.canBeRunByBun()) {
+ was_js_like = true;
+ if (maybeOpenWithBunJS(&ctx)) {
+ return;
}
+ did_check = true;
}
if (force_using_bun and !did_check) {
diff --git a/src/cli/build_command.zig b/src/cli/build_command.zig
index 1b8e5c632..6b2a6761e 100644
--- a/src/cli/build_command.zig
+++ b/src/cli/build_command.zig
@@ -54,6 +54,12 @@ pub const BuildCommand = struct {
this_bundler.options.code_splitting = ctx.bundler_options.code_splitting;
this_bundler.resolver.opts.code_splitting = ctx.bundler_options.code_splitting;
+ if (this_bundler.options.entry_points.len > 1 and ctx.bundler_options.outdir.len == 0) {
+ Output.prettyErrorln("<red>error<r>: must use \"outdir\" when there are multiple input files", .{});
+ Global.exit(1);
+ return;
+ }
+
this_bundler.configureLinker();
// This step is optional