aboutsummaryrefslogtreecommitdiff
path: root/src/options.zig
diff options
context:
space:
mode:
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;