diff options
author | 2022-12-26 07:20:35 +0200 | |
---|---|---|
committer | 2022-12-25 21:20:35 -0800 | |
commit | 74251fbf5e011191721c96ea520f29a7cc4ea94a (patch) | |
tree | 600e52c4dce92afca5bb9befe00ca6f6d0f20fbc /src | |
parent | 08a738c6c8841dcb1b84933b483396d66d702f87 (diff) | |
download | bun-74251fbf5e011191721c96ea520f29a7cc4ea94a.tar.gz bun-74251fbf5e011191721c96ea520f29a7cc4ea94a.tar.zst bun-74251fbf5e011191721c96ea520f29a7cc4ea94a.zip |
[install] use default URL when only auth token is specified (#1664)
Previously it would default to `http://localhost/` which was inconsistent with the case sans token.
Use official `npm` registry as fallback in both cases.
Diffstat (limited to 'src')
-rw-r--r-- | src/install/install.zig | 145 | ||||
-rw-r--r-- | src/install/npm.zig | 21 |
2 files changed, 130 insertions, 36 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index 4c3837a6f..7fba71b76 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -3449,11 +3449,7 @@ pub const PackageManager = struct { lockfile_path: stringZ = Lockfile.default_filename, save_lockfile_path: stringZ = Lockfile.default_filename, did_override_default_scope: bool = false, - scope: Npm.Registry.Scope = .{ - .name = "", - .token = "", - .url = URL.parse("https://registry.npmjs.org/"), - }, + scope: Npm.Registry.Scope = undefined, registries: Npm.Registry.Map = Npm.Registry.Map{}, cache_directory: string = "", @@ -3594,18 +3590,17 @@ pub const PackageManager = struct { ) !void { this.save_lockfile_path = this.lockfile_path; + var registry = if (bun_install_) |bun_install| bun_install.default_registry else null; + this.scope = try Npm.Registry.Scope.fromAPI("", registry orelse Api.NpmRegistry{ + .url = "", + .username = "", + .password = "", + .token = "", + }, allocator, env_loader); defer { - this.did_override_default_scope = !strings.eqlComptime(this.scope.url.href, "https://registry.npmjs.org/"); + this.did_override_default_scope = !strings.eqlComptime(this.scope.url.href, Npm.Registry.DefaultURL); } if (bun_install_) |bun_install| { - if (bun_install.default_registry) |*registry| { - if (registry.url.len == 0) { - registry.url = "https://registry.npmjs.org/"; - } - - this.scope = try Npm.Registry.Scope.fromAPI("", registry.*, allocator, env_loader); - } - if (bun_install.scoped) |scoped| { for (scoped.scopes) |name, i| { try this.registries.put(allocator, Npm.Registry.Scope.hash(name), try Npm.Registry.Scope.fromAPI(name, scoped.registries[i], allocator, env_loader)); @@ -6747,6 +6742,16 @@ pub const PackageManager = struct { const Package = Lockfile.Package; +pub const PackageManifestError = error{ + PackageManifestHTTP400, + PackageManifestHTTP401, + PackageManifestHTTP402, + PackageManifestHTTP403, + PackageManifestHTTP404, + PackageManifestHTTP4xx, + PackageManifestHTTP5xx, +}; + test "UpdateRequests.parse" { var log = logger.Log.init(default_allocator); var array = PackageManager.UpdateRequest.Array.init(0) catch unreachable; @@ -6773,12 +6778,106 @@ test "UpdateRequests.parse" { try std.testing.expectEqual(updates.len, 6); } -pub const PackageManifestError = error{ - PackageManifestHTTP400, - PackageManifestHTTP401, - PackageManifestHTTP402, - PackageManifestHTTP403, - PackageManifestHTTP404, - PackageManifestHTTP4xx, - PackageManifestHTTP5xx, -}; +test "PackageManager.Options - default registry, default values" { + var allocator = default_allocator; + var log = logger.Log.init(allocator); + defer log.deinit(); + var env_loader = DotEnv.Loader.init(&DotEnv.Map.init(allocator), allocator); + var options = PackageManager.Options{}; + + try options.load(allocator, &log, &env_loader, null, null); + + try std.testing.expectEqualStrings(options.scope.name, ""); + try std.testing.expectEqualStrings(options.scope.auth, ""); + try std.testing.expectEqualStrings(options.scope.url.href, Npm.Registry.DefaultURL); + try std.testing.expectEqualStrings(options.scope.token, ""); +} + +test "PackageManager.Options - default registry, custom token" { + var allocator = default_allocator; + var log = logger.Log.init(allocator); + defer log.deinit(); + var env_loader = DotEnv.Loader.init(&DotEnv.Map.init(allocator), allocator); + var install = Api.BunInstall{ + .default_registry = Api.NpmRegistry{ + .url = "", + .username = "", + .password = "", + .token = "foo", + }, + .native_bin_links = &.{}, + }; + var options = PackageManager.Options{}; + + try options.load(allocator, &log, &env_loader, null, &install); + + try std.testing.expectEqualStrings(options.scope.name, ""); + try std.testing.expectEqualStrings(options.scope.auth, ""); + try std.testing.expectEqualStrings(options.scope.url.href, Npm.Registry.DefaultURL); + try std.testing.expectEqualStrings(options.scope.token, "foo"); +} + +test "PackageManager.Options - default registry, custom URL" { + var allocator = default_allocator; + var log = logger.Log.init(allocator); + defer log.deinit(); + var env_loader = DotEnv.Loader.init(&DotEnv.Map.init(allocator), allocator); + var install = Api.BunInstall{ + .default_registry = Api.NpmRegistry{ + .url = "https://example.com/", + .username = "foo", + .password = "bar", + .token = "", + }, + .native_bin_links = &.{}, + }; + var options = PackageManager.Options{}; + + try options.load(allocator, &log, &env_loader, null, &install); + + try std.testing.expectEqualStrings(options.scope.name, ""); + try std.testing.expectEqualStrings(options.scope.auth, "Zm9vOmJhcg=="); + try std.testing.expectEqualStrings(options.scope.url.href, "https://example.com/"); + try std.testing.expectEqualStrings(options.scope.token, ""); +} + +test "PackageManager.Options - scoped registry" { + var allocator = default_allocator; + var log = logger.Log.init(allocator); + defer log.deinit(); + var env_loader = DotEnv.Loader.init(&DotEnv.Map.init(allocator), allocator); + var install = Api.BunInstall{ + .scoped = Api.NpmRegistryMap{ + .scopes = &.{ + "foo", + }, + .registries = &.{ + Api.NpmRegistry{ + .url = "", + .username = "", + .password = "", + .token = "bar", + }, + }, + }, + .native_bin_links = &.{}, + }; + var options = PackageManager.Options{}; + + try options.load(allocator, &log, &env_loader, null, &install); + + try std.testing.expectEqualStrings(options.scope.name, ""); + try std.testing.expectEqualStrings(options.scope.auth, ""); + try std.testing.expectEqualStrings(options.scope.url.href, Npm.Registry.DefaultURL); + try std.testing.expectEqualStrings(options.scope.token, ""); + + var scoped = options.registries.getPtr(Npm.Registry.Scope.hash(Npm.Registry.Scope.getName("foo"))); + + try std.testing.expect(scoped != null); + if (scoped) |scope| { + try std.testing.expectEqualStrings(scope.name, "foo"); + try std.testing.expectEqualStrings(scope.auth, ""); + try std.testing.expectEqualStrings(scope.url.href, Npm.Registry.DefaultURL); + try std.testing.expectEqualStrings(scope.token, "bar"); + } +} diff --git a/src/install/npm.zig b/src/install/npm.zig index 965157d50..3874c2c01 100644 --- a/src/install/npm.zig +++ b/src/install/npm.zig @@ -35,12 +35,7 @@ const ComptimeStringMap = @import("../comptime_string_map.zig").ComptimeStringMa const Npm = @This(); pub const Registry = struct { - url: URL = URL.parse("https://registry.npmjs.org/"), - scopes: Map = Map{}, - - token: string = "", - auth: string = "", - + pub const DefaultURL = "https://registry.npmjs.org/"; pub const BodyPool = ObjectPool(MutableString, MutableString.init2048, true, 8); pub const Scope = struct { @@ -72,7 +67,7 @@ pub const Registry = struct { pub fn fromAPI(name: string, registry_: Api.NpmRegistry, allocator: std.mem.Allocator, env: *DotEnv.Loader) !Scope { var registry = registry_; - var url = URL.parse(registry.url); + var url = URL.parse(if (registry.url.len == 0) DefaultURL else registry.url); var auth: string = ""; if (registry.token.len == 0) { @@ -620,15 +615,15 @@ pub const PackageManifest = struct { pub fn reportSize(this: *const PackageManifest) void { Output.prettyErrorln( - \\ Versions count: {d} - \\ External Strings count: {d} + \\ Versions count: {d} + \\ External Strings count: {d} \\ Package Versions count: {d} - \\ + \\ \\ Bytes: \\ - \\ Versions: {d} - \\ External: {d} - \\ Packages: {d} + \\ Versions: {d} + \\ External: {d} + \\ Packages: {d} \\ Strings: {d} \\ Total: {d} , .{ |