aboutsummaryrefslogtreecommitdiff
path: root/src/options.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-13 02:01:41 -0700
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-08-13 02:01:41 -0700
commitf59892f647ceef1c05e40c9cdef4f79d0a530c2f (patch)
tree6fed07dc02e722de634618a6f2d246f52510d141 /src/options.zig
parent86642cbdd528bbf37708dbb30a815c9a68b6aea1 (diff)
downloadbun-f59892f647ceef1c05e40c9cdef4f79d0a530c2f.tar.gz
bun-f59892f647ceef1c05e40c9cdef4f79d0a530c2f.tar.zst
bun-f59892f647ceef1c05e40c9cdef4f79d0a530c2f.zip
late
Former-commit-id: 1d598bb05a3bac62d86063125e1fe2962f0b5cc6
Diffstat (limited to 'src/options.zig')
-rw-r--r--src/options.zig34
1 files changed, 32 insertions, 2 deletions
diff --git a/src/options.zig b/src/options.zig
index f93937b24..a4302a703 100644
--- a/src/options.zig
+++ b/src/options.zig
@@ -250,6 +250,17 @@ pub const Platform = enum {
speedy,
node,
+ const browser_define_value_true = "true";
+ const browser_define_value_false = "false";
+
+ pub fn processBrowserDefineValue(this: Platform) ?string {
+ return switch (this) {
+ .browser => browser_define_value_true,
+ .speedy, .node => browser_define_value_false,
+ else => null,
+ };
+ }
+
pub fn isWebLike(platform: Platform) bool {
return switch (platform) {
.neutral, .browser => true,
@@ -545,9 +556,20 @@ pub const DefaultUserDefines = struct {
pub const Key = "process.env.NODE_ENV";
pub const Value = "\"development\"";
};
+
+ pub const PlatformDefine = struct {
+ pub const Key = "process.browser";
+ pub const Value = []string{ "false", "true" };
+ };
};
-pub fn definesFromTransformOptions(allocator: *std.mem.Allocator, log: *logger.Log, _input_define: ?Api.StringMap, hmr: bool) !*defines.Define {
+pub fn definesFromTransformOptions(
+ allocator: *std.mem.Allocator,
+ log: *logger.Log,
+ _input_define: ?Api.StringMap,
+ hmr: bool,
+ platform: Platform,
+) !*defines.Define {
var input_user_define = _input_define orelse std.mem.zeroes(Api.StringMap);
var user_defines = try stringHashMapFromArrays(
@@ -564,6 +586,12 @@ pub fn definesFromTransformOptions(allocator: *std.mem.Allocator, log: *logger.L
try user_defines.put(DefaultUserDefines.HotModuleReloading.Key, DefaultUserDefines.HotModuleReloading.Value);
}
+ // Automatically set `process.browser` to `true` for browsers and false for node+js
+ // This enables some extra dead code elimination
+ if (platform.processBrowserDefineValue()) |value| {
+ _ = try user_defines.getOrPutValue(DefaultUserDefines.PlatformDefine.Key, value);
+ }
+
var resolved_defines = try defines.DefineData.from_input(user_defines, log, allocator);
return try defines.Define.init(
allocator,
@@ -672,7 +700,7 @@ pub const BundleOptions = struct {
var opts: BundleOptions = BundleOptions{
.log = log,
.resolve_mode = transform.resolve orelse .dev,
- .define = try definesFromTransformOptions(allocator, log, transform.define, transform.serve orelse false),
+ .define = undefined,
.loaders = try loadersFromTransformOptions(allocator, transform.loaders),
.output_dir = try fs.absAlloc(allocator, &output_dir_parts),
.platform = Platform.from(transform.platform),
@@ -712,6 +740,8 @@ pub const BundleOptions = struct {
else => {},
}
+ opts.define = try definesFromTransformOptions(allocator, log, transform.define, transform.serve orelse false, opts.platform);
+
if (!(transform.generate_node_module_bundle orelse false)) {
if (node_modules_bundle_existing) |node_mods| {
opts.node_modules_bundle = node_mods;