diff options
-rw-r--r-- | src/bun.js/module_loader.zig | 8 | ||||
-rw-r--r-- | src/bun.js/test/jest.zig | 4 | ||||
-rw-r--r-- | src/bundler/bundle_v2.zig | 2 | ||||
-rw-r--r-- | src/cli.zig | 29 | ||||
-rw-r--r-- | src/cli/build_command.zig | 6 | ||||
-rw-r--r-- | src/fs.zig | 2 | ||||
-rw-r--r-- | src/options.zig | 4 | ||||
-rw-r--r-- | test/js/bun/resolve/more-data.any (renamed from test/js/bun/resolve/png/test-png.png) | 0 | ||||
-rw-r--r-- | test/js/bun/resolve/non-js/data.anything | 1 | ||||
-rw-r--r-- | test/js/bun/resolve/non-js/no-extension-js | 3 | ||||
-rw-r--r-- | test/js/bun/resolve/non-js/non-js-import.test.js | 16 | ||||
-rw-r--r-- | test/js/bun/resolve/non-js/test-png.png | 0 | ||||
-rw-r--r-- | test/js/bun/resolve/png/test-png-import.test.js | 7 | ||||
-rw-r--r-- | test/js/bun/test/test-test.test.ts | 2 |
14 files changed, 51 insertions, 33 deletions
diff --git a/src/bun.js/module_loader.zig b/src/bun.js/module_loader.zig index 8a46b063a..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.js; + 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/bun.js/test/jest.zig b/src/bun.js/test/jest.zig index 197bba03f..dcb9f8725 100644 --- a/src/bun.js/test/jest.zig +++ b/src/bun.js/test/jest.zig @@ -1202,9 +1202,7 @@ pub const Expect = struct { } } } else if (value.isString() and expected.isString()) { - const value_string = value.toString(globalObject).toSlice(globalObject, default_allocator).slice(); - const expected_string = expected.toString(globalObject).toSlice(globalObject, default_allocator).slice(); - if (strings.contains(value_string, expected_string)) { + if (value.stringIncludes(globalObject, expected)) { pass = true; } } else { diff --git a/src/bundler/bundle_v2.zig b/src/bundler/bundle_v2.zig index 10ad9898c..496b6af10 100644 --- a/src/bundler/bundle_v2.zig +++ b/src/bundler/bundle_v2.zig @@ -333,7 +333,7 @@ pub const BundleV2 = struct { var result = resolve; var path = result.path() orelse return null; - const loader = this.bundler.options.loaders.get(path.name.ext) orelse .file; + const loader = path.loader(&this.bundler.options.loaders) orelse Loader.js; if (!loader.isJavaScriptLikeOrJSON()) return null; var entry = try this.graph.path_to_source_index_map.getOrPut(this.graph.allocator, hash orelse wyhash(0, path.text)); 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 diff --git a/src/fs.zig b/src/fs.zig index 3f0303e32..7ef6db609 100644 --- a/src/fs.zig +++ b/src/fs.zig @@ -1142,7 +1142,7 @@ pub const PathName = struct { pub fn init(_path: string) PathName { var path = _path; var base = path; - var ext = path; + var ext: string = ""; var dir = path; var is_absolute = true; diff --git a/src/options.zig b/src/options.zig index b0756a396..774570d5c 100644 --- a/src/options.zig +++ b/src/options.zig @@ -826,6 +826,7 @@ pub const defaultLoaders = ComptimeStringMap(Loader, .{ .{ ".jsx", Loader.jsx }, .{ ".json", Loader.json }, .{ ".js", Loader.jsx }, + .{ "", Loader.js }, .{ ".mjs", Loader.js }, .{ ".cjs", Loader.js }, @@ -1143,6 +1144,9 @@ const default_loader_ext = [_]string{ ".mts", ".cts", ".toml", ".wasm", + + // no extension will default to js + "", }; pub fn loadersFromTransformOptions(allocator: std.mem.Allocator, _loaders: ?Api.LoaderMap, platform: Platform) !bun.StringArrayHashMap(Loader) { diff --git a/test/js/bun/resolve/png/test-png.png b/test/js/bun/resolve/more-data.any index e69de29bb..e69de29bb 100644 --- a/test/js/bun/resolve/png/test-png.png +++ b/test/js/bun/resolve/more-data.any diff --git a/test/js/bun/resolve/non-js/data.anything b/test/js/bun/resolve/non-js/data.anything new file mode 100644 index 000000000..1ba465088 --- /dev/null +++ b/test/js/bun/resolve/non-js/data.anything @@ -0,0 +1 @@ +anything diff --git a/test/js/bun/resolve/non-js/no-extension-js b/test/js/bun/resolve/non-js/no-extension-js new file mode 100644 index 000000000..ddafdcaa5 --- /dev/null +++ b/test/js/bun/resolve/non-js/no-extension-js @@ -0,0 +1,3 @@ +export default function js() { + return "success!"; +} diff --git a/test/js/bun/resolve/non-js/non-js-import.test.js b/test/js/bun/resolve/non-js/non-js-import.test.js new file mode 100644 index 000000000..41fffee66 --- /dev/null +++ b/test/js/bun/resolve/non-js/non-js-import.test.js @@ -0,0 +1,16 @@ +import { expect, test } from "bun:test"; +import { resolve, join } from "path"; +import MyPNG from "./test-png.png"; +import data from "./data.anything"; +import moreData from "../more-data.any"; +import js from "./no-extension-js"; + +test("png import", () => { + expect(MyPNG).toBe(resolve(__dirname, "./test-png.png")); +}); + +test("random import", () => { + expect(data).toBe(join(import.meta.dir, "data.anything")); + expect(moreData).toBe(join(import.meta.dir, "../more-data.any")); + expect(js()).toBe("success!"); +}); diff --git a/test/js/bun/resolve/non-js/test-png.png b/test/js/bun/resolve/non-js/test-png.png new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/test/js/bun/resolve/non-js/test-png.png diff --git a/test/js/bun/resolve/png/test-png-import.test.js b/test/js/bun/resolve/png/test-png-import.test.js deleted file mode 100644 index ca2d0b9ce..000000000 --- a/test/js/bun/resolve/png/test-png-import.test.js +++ /dev/null @@ -1,7 +0,0 @@ -import { expect, test } from "bun:test"; -import { resolve } from "path"; -import MyPNG from "./test-png.png"; - -test("png import", () => { - expect(MyPNG).toBe(resolve(__dirname, "./test-png.png")); -}); diff --git a/test/js/bun/test/test-test.test.ts b/test/js/bun/test/test-test.test.ts index 5154950de..906d8dd16 100644 --- a/test/js/bun/test/test-test.test.ts +++ b/test/js/bun/test/test-test.test.ts @@ -1774,6 +1774,8 @@ test("toContain()", () => { // expect("test").not.toContain("test"); expect(["test", "es"]).toContain("es"); expect("").toContain(""); + expect("").not.toContain(" "); + expect(" ").toContain(""); expect([""]).toContain(""); expect(["lemon", "lime"]).not.toContain("orange"); |