aboutsummaryrefslogtreecommitdiff
path: root/src/resolver/package_json.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/resolver/package_json.zig')
-rw-r--r--src/resolver/package_json.zig29
1 files changed, 29 insertions, 0 deletions
diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig
index 4547be9db..972feb06c 100644
--- a/src/resolver/package_json.zig
+++ b/src/resolver/package_json.zig
@@ -108,6 +108,29 @@ pub const PackageJSON = struct {
}
}
+ fn loadOverrides(
+ framework: *options.Framework,
+ json: *const js_ast.E.Object,
+ allocator: *std.mem.Allocator,
+ ) void {
+ var valid_count: usize = 0;
+ for (json.properties) |prop| {
+ if (prop.value.?.data != .e_string) continue;
+ valid_count += 1;
+ }
+
+ var buffer = allocator.alloc([]const u8, valid_count * 2) catch unreachable;
+ var keys = buffer[0 .. buffer.len / 2];
+ var values = buffer[keys.len..];
+ var i: usize = 0;
+ for (json.properties) |prop| {
+ if (prop.value.?.data != .e_string) continue;
+ keys[i] = prop.key.?.data.e_string.string(allocator) catch unreachable;
+ values[i] = prop.value.?.data.e_string.string(allocator) catch unreachable;
+ }
+ framework.override_modules = Api.StringMap{ .keys = keys, .values = values };
+ }
+
fn loadDefineExpression(
env: *options.Env,
json: *const js_ast.E.Object,
@@ -178,6 +201,12 @@ pub const PackageJSON = struct {
}
}
+ if (json.asProperty("override")) |override| {
+ if (override.expr.data == .e_object) {
+ loadOverrides(framework, override.expr.data.e_object, allocator);
+ }
+ }
+
if (comptime read_define) {
if (json.asProperty("define")) |defines| {
var skip_fallback = false;