diff options
author | 2023-08-31 17:44:16 -0700 | |
---|---|---|
committer | 2023-08-31 17:44:16 -0700 | |
commit | 7528ea00843f7c33b8e3017ca28b83cca556f783 (patch) | |
tree | 1bde419e3674efe2d06bec754ee6e82176ec80f0 /src/install/install.zig | |
parent | 4d944773f0234262e2df0dfd10cb564d3cdf6125 (diff) | |
parent | 59edbe645ca568aa6438f8fa53c1a567cf1159c0 (diff) | |
download | bun-7528ea00843f7c33b8e3017ca28b83cca556f783.tar.gz bun-7528ea00843f7c33b8e3017ca28b83cca556f783.tar.zst bun-7528ea00843f7c33b8e3017ca28b83cca556f783.zip |
Merge branch 'main' into dylan/non-enumerable-export-values
Diffstat (limited to 'src/install/install.zig')
-rw-r--r-- | src/install/install.zig | 91 |
1 files changed, 38 insertions, 53 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index 768113d35..e8b95b820 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -249,61 +249,31 @@ const NetworkTask = struct { allocator: std.mem.Allocator, scope: *const Npm.Registry.Scope, loaded_manifest: ?Npm.PackageManifest, + warn_on_error: bool, ) !void { - const pathname: string = if (!strings.eqlComptime(scope.url.pathname, "/")) - scope.url.pathname - else - @as(string, ""); + this.url_buf = blk: { + const tmp = bun.JSC.URL.join( + bun.String.fromUTF8(scope.url.href), + bun.String.fromUTF8(name), + ); + defer tmp.deref(); - if (pathname.len > 0) { - if (scope.url.getPort()) |port_number| { - this.url_buf = try std.fmt.allocPrint( - allocator, - "{s}://{s}:{d}/{s}/{s}", - .{ - scope.url.displayProtocol(), - scope.url.displayHostname(), - port_number, - strings.withoutTrailingSlash(pathname), - name, - }, - ); - } else { - this.url_buf = try std.fmt.allocPrint( - allocator, - "{s}://{s}/{s}/{s}", - .{ - scope.url.displayProtocol(), - scope.url.displayHostname(), - strings.withoutTrailingSlash(pathname), - name, - }, - ); - } - } else { - if (scope.url.getPort()) |port_number| { - this.url_buf = try std.fmt.allocPrint( - allocator, - "{s}://{s}:{d}/{s}", - .{ - scope.url.displayProtocol(), - scope.url.displayHostname(), - port_number, - name, - }, - ); - } else { - this.url_buf = try std.fmt.allocPrint( - allocator, - "{s}://{s}/{s}", - .{ - scope.url.displayProtocol(), - scope.url.displayHostname(), - name, - }, - ); + if (tmp.tag == .Dead) { + const msg = .{ + .fmt = "Failed to join registry \"{s}\" and package \"{s}\" URLs", + .args = .{ scope.url.href, name }, + }; + + if (warn_on_error) + this.package_manager.log.addWarningFmt(null, .{}, allocator, msg.fmt, msg.args) catch unreachable + else + this.package_manager.log.addErrorFmt(null, .{}, allocator, msg.fmt, msg.args) catch unreachable; + + return error.InvalidURL; } - } + // This actually duplicates the string! So we defer deref the WTF managed one above. + break :blk try tmp.toOwnedSlice(allocator); + }; var last_modified: string = ""; var etag: string = ""; @@ -3075,6 +3045,7 @@ pub const PackageManager = struct { this.allocator, this.scopeForPackageName(name_str), loaded_manifest, + dependency.behavior.isOptional() or dependency.behavior.isPeer(), ); this.enqueueNetworkTask(network_task); } @@ -3432,7 +3403,21 @@ pub const PackageManager = struct { i, &dependency, resolution, - ) catch {}; + ) catch |err| { + const note = .{ + .fmt = "error occured while resolving {s}", + .args = .{ + lockfile.str(&dependency.realname()), + }, + }; + + if (dependency.behavior.isOptional() or dependency.behavior.isPeer()) + this.log.addWarningWithNote(null, .{}, this.allocator, @errorName(err), note.fmt, note.args) catch unreachable + else + this.log.addZigErrorWithNote(this.allocator, err, note.fmt, note.args) catch unreachable; + + continue; + }; } this.drainDependencyList(); |