aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-24 23:53:03 -0800
committerGravatar Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> 2023-01-24 23:53:03 -0800
commit325ffd70e17992e9b61c41e854e9e0a810f21274 (patch)
treeee0b2c8b649cde1f6f040f9a9ba474e92ac21496
parentd4ce045f9ee98d02db9228920497b30ffc3a2af1 (diff)
downloadbun-325ffd70e17992e9b61c41e854e9e0a810f21274.tar.gz
bun-325ffd70e17992e9b61c41e854e9e0a810f21274.tar.zst
bun-325ffd70e17992e9b61c41e854e9e0a810f21274.zip
one less alloc
-rw-r--r--src/install/install.zig40
-rw-r--r--src/install/lockfile.zig10
2 files changed, 37 insertions, 13 deletions
diff --git a/src/install/install.zig b/src/install/install.zig
index 6d9bd5409..16943ae33 100644
--- a/src/install/install.zig
+++ b/src/install/install.zig
@@ -2967,6 +2967,32 @@ pub const PackageManager = struct {
data.json_path,
data.json_buf[0..data.json_len],
);
+ package.resolution.value.github.resolved = String{};
+
+ const GitHubResolver = struct {
+ data_: ExtractData,
+ package_name: String,
+ package_name_hash: u64,
+
+ pub fn count(this: *@This(), comptime StringBuilderType: type, builder: StringBuilderType, _: JSAst.Expr) void {
+ builder.count(this.data_.resolved);
+ }
+
+ pub fn resolveWithPackage(this: *@This(), comptime StringBuilderType: type, builder: StringBuilderType, pkg: *Package) anyerror!Resolution {
+ pkg.name = this.package_name;
+ pkg.name_hash = this.package_name_hash;
+ var resolution = pkg.resolution;
+ resolution.value.github.resolved = builder.append(String, this.data_.resolved);
+
+ return resolution;
+ }
+ };
+
+ var github = GitHubResolver{
+ .data_ = data,
+ .package_name = package_name,
+ .package_name_hash = package_name_hash,
+ };
Lockfile.Package.parse(
manager.lockfile,
@@ -2974,8 +3000,8 @@ pub const PackageManager = struct {
manager.allocator,
manager.log,
package_json_source,
- void,
- {},
+ *GitHubResolver,
+ &github,
Features.npm,
) catch |err| {
if (comptime log_level != .silent) {
@@ -2987,16 +3013,6 @@ pub const PackageManager = struct {
}
Global.crash();
};
- // package.json might contain a different name than already appended
- package.name = package_name;
- package.name_hash = package_name_hash;
- // stored resolved ID from committish
- var builder = manager.lockfile.stringBuilder();
- builder.count(data.resolved);
- builder.allocate() catch unreachable;
- package.resolution.value.github.resolved = builder.append(String, data.resolved);
- builder.clamp();
- manager.lockfile.packages.set(package_id, package);
if (package.dependencies.len > 0) {
manager.lockfile.scratch.dependency_list_queue.writeItem(package.dependencies) catch unreachable;
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index 1568ea728..6690e1d3f 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -2806,7 +2806,15 @@ pub const Package = extern struct {
if (comptime !features.is_main) {
if (comptime ResolverContext != void) {
- package.resolution = try resolver.resolve(*Lockfile.StringBuilder, &string_builder, json);
+ if (comptime std.meta.trait.is(.Pointer)(ResolverContext) and @hasDecl(std.meta.Child(ResolverContext), "resolveWithPackage")) {
+ package.resolution = try resolver.resolveWithPackage(*Lockfile.StringBuilder, &string_builder, package);
+ } else {
+ package.resolution = try resolver.resolve(
+ *Lockfile.StringBuilder,
+ &string_builder,
+ json,
+ );
+ }
}
} else {
package.resolution = .{