aboutsummaryrefslogtreecommitdiff
path: root/src/options.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-04-10 06:35:41 -0700
committerGravatar Dylan Conway <dylan.conway567@gmail.com> 2023-04-10 11:58:19 -0700
commit7a310b4c310bb727e455bc82a51d26d5a29ec621 (patch)
tree59310ff70579d7176b890d996c1dc3692e8cba9d /src/options.zig
parenta107a7cd95fb4e376278d06ba178d42f893d2d83 (diff)
downloadbun-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.zig44
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,