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.zig39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/resolver/package_json.zig b/src/resolver/package_json.zig
index 4949fe49e..9db39ff7a 100644
--- a/src/resolver/package_json.zig
+++ b/src/resolver/package_json.zig
@@ -18,6 +18,8 @@ threadlocal var hashy: [2048]u8 = undefined;
pub const MacroImportReplacementMap = std.StringArrayHashMap(string);
pub const MacroMap = std.StringArrayHashMapUnmanaged(MacroImportReplacementMap);
+const ScriptsMap = std.StringArrayHashMap(string);
+
pub const PackageJSON = struct {
pub const LoadFramework = enum {
none,
@@ -57,6 +59,8 @@ pub const PackageJSON = struct {
version: string = "",
hash: u32 = 0xDEADBEEF,
+ scripts: ?*ScriptsMap = null,
+
always_bundle: []string = &.{},
macros: MacroMap = MacroMap{},
@@ -440,6 +444,7 @@ pub const PackageJSON = struct {
input_path: string,
dirname_fd: StoredFileDescriptorType,
comptime generate_hash: bool,
+ comptime include_scripts: bool,
) ?PackageJSON {
// TODO: remove this extra copy
@@ -690,6 +695,40 @@ pub const PackageJSON = struct {
}
}
+ if (include_scripts) {
+ read_scripts: {
+ if (json.asProperty("scripts")) |scripts_prop| {
+ if (scripts_prop.expr.data == .e_object) {
+ const scripts_obj = scripts_prop.expr.data.e_object;
+
+ var count: usize = 0;
+ for (scripts_obj.properties) |prop| {
+ const key = prop.key.?.asString(r.allocator) orelse continue;
+ const value = prop.value.?.asString(r.allocator) orelse continue;
+
+ count += @as(usize, @boolToInt(key.len > 0 and value.len > 0));
+ }
+
+ if (count == 0) break :read_scripts;
+ var scripts = ScriptsMap.init(r.allocator);
+ scripts.ensureUnusedCapacity(count) catch break :read_scripts;
+
+ for (scripts_obj.properties) |prop| {
+ const key = prop.key.?.asString(r.allocator) orelse continue;
+ const value = prop.value.?.asString(r.allocator) orelse continue;
+
+ if (!(key.len > 0 and value.len > 0)) continue;
+
+ scripts.putAssumeCapacity(key, value);
+ }
+
+ package_json.scripts = r.allocator.create(ScriptsMap) catch unreachable;
+ package_json.scripts.?.* = scripts;
+ }
+ }
+ }
+ }
+
// TODO: side effects
// TODO: exports map