diff options
author | 2023-04-10 06:35:41 -0700 | |
---|---|---|
committer | 2023-04-10 11:58:19 -0700 | |
commit | 7a310b4c310bb727e455bc82a51d26d5a29ec621 (patch) | |
tree | 59310ff70579d7176b890d996c1dc3692e8cba9d /src/options.zig | |
parent | a107a7cd95fb4e376278d06ba178d42f893d2d83 (diff) | |
download | bun-7a310b4c310bb727e455bc82a51d26d5a29ec621.tar.gz bun-7a310b4c310bb727e455bc82a51d26d5a29ec621.tar.zst bun-7a310b4c310bb727e455bc82a51d26d5a29ec621.zip |
Implement TOML & JSON support in Bun's new bundler (#2609)
* Implement JSON & TOML support in the bundler
* Fix failing to bind namespace imports
* Support namespace exports better
---------
Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/options.zig')
-rw-r--r-- | src/options.zig | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/src/options.zig b/src/options.zig index 62d20d16c..774570d5c 100644 --- a/src/options.zig +++ b/src/options.zig @@ -658,7 +658,7 @@ pub const Platform = enum { }; }; -pub const Loader = enum(u4) { +pub const Loader = enum { jsx, js, ts, @@ -669,6 +669,11 @@ pub const Loader = enum(u4) { toml, wasm, napi, + base64, + dataurl, + text, + + pub const HashTable = bun.StringArrayHashMap(Loader); pub fn canHaveSourceMap(this: Loader) bool { return switch (this) { @@ -697,6 +702,7 @@ pub const Loader = enum(u4) { map.set(Loader.toml, "input.toml"); map.set(Loader.wasm, "input.wasm"); map.set(Loader.napi, "input.node"); + map.set(Loader.text, "input.txt"); break :brk map; }; @@ -722,26 +728,28 @@ pub const Loader = enum(u4) { }; } + pub const names = bun.ComptimeStringMap(Loader, .{ + .{ "js", Loader.js }, + .{ "jsx", Loader.jsx }, + .{ "ts", Loader.ts }, + .{ "tsx", Loader.tsx }, + .{ "css", Loader.css }, + .{ "file", Loader.file }, + .{ "json", Loader.json }, + .{ "toml", Loader.toml }, + .{ "wasm", Loader.wasm }, + .{ "node", Loader.napi }, + .{ "dataurl", Loader.dataurl }, + .{ "base64", Loader.base64 }, + }); + pub fn fromString(slice_: string) ?Loader { - const LoaderMatcher = strings.ExactSizeMatcher(4); var slice = slice_; if (slice.len > 0 and slice[0] == '.') { slice = slice[1..]; } - return switch (LoaderMatcher.matchLower(slice)) { - LoaderMatcher.case("js") => Loader.js, - LoaderMatcher.case("jsx") => Loader.jsx, - LoaderMatcher.case("ts") => Loader.ts, - LoaderMatcher.case("tsx") => Loader.tsx, - LoaderMatcher.case("css") => Loader.css, - LoaderMatcher.case("file") => Loader.file, - LoaderMatcher.case("json") => Loader.json, - LoaderMatcher.case("toml") => Loader.toml, - LoaderMatcher.case("wasm") => Loader.wasm, - LoaderMatcher.case("node") => Loader.napi, - else => null, - }; + return names.getWithEql(slice, strings.eqlCaseInsensitiveASCIIICheckLength); } pub fn supportsClientEntryPoint(this: Loader) bool { @@ -798,6 +806,10 @@ pub const Loader = enum(u4) { pub fn isJavaScriptLikeOrJSON(loader: Loader) bool { return switch (loader) { .jsx, .js, .ts, .tsx, .json => true, + + // toml is included because we can serialize to the same AST as JSON + .toml => true, + else => false, }; } @@ -1255,7 +1267,7 @@ pub const BundleOptions = struct { footer: string = "", banner: string = "", define: *defines.Define, - loaders: bun.StringArrayHashMap(Loader), + loaders: Loader.HashTable, resolve_dir: string = "/", jsx: JSX.Pragma = JSX.Pragma{}, auto_import_jsx: bool = true, |