diff options
Diffstat (limited to 'src/install/dependency.zig')
-rw-r--r-- | src/install/dependency.zig | 52 |
1 files changed, 34 insertions, 18 deletions
diff --git a/src/install/dependency.zig b/src/install/dependency.zig index 98a62ac87..315c22894 100644 --- a/src/install/dependency.zig +++ b/src/install/dependency.zig @@ -473,12 +473,24 @@ pub const Version = struct { } }, // v1.2.3 + // verilog // verilog.tar.gz // verilog/repo 'v' => { if (isTarball(dependency)) return .tarball; if (isGitHubRepoPath(dependency)) return .github; - return .npm; + if (dependency.len == 1) return .dist_tag; + return switch (dependency[1]) { + '0'...'9' => .npm, + else => .dist_tag, + }; + }, + // workspace:* + // w00t + // w00t.tar.gz + // w00t/repo + 'w' => { + if (strings.hasPrefixComptime(dependency, "workspace:")) return .workspace; }, // x // xyz.tar.gz @@ -626,7 +638,7 @@ pub fn parseWithTag( return null; }; - return Version{ + return .{ .literal = sliced.value(), .value = .{ .npm = .{ @@ -638,12 +650,12 @@ pub fn parseWithTag( }; }, .dist_tag => { - var tag_to_use: String = sliced.value(); + var tag_to_use = sliced.value(); const actual = if (strings.hasPrefixComptime(dependency, "npm:") and dependency.len > "npm:".len) // npm:@foo/bar@latest sliced.sub(brk: { - var i: usize = "npm:".len; + var i = "npm:".len; // npm:@foo/bar@latest // ^ @@ -673,7 +685,7 @@ pub fn parseWithTag( // tag should never be empty if (Environment.allow_assert) std.debug.assert(!tag_to_use.isEmpty()); - return Version{ + return .{ .literal = sliced.value(), .value = .{ .dist_tag = .{ @@ -739,7 +751,7 @@ pub fn parseWithTag( repo = repo[0 .. repo.len - ".git".len]; } - return Version{ + return .{ .literal = sliced.value(), .value = .{ .github = .{ @@ -753,26 +765,26 @@ pub fn parseWithTag( }, .tarball => { if (strings.hasPrefixComptime(dependency, "https://") or strings.hasPrefixComptime(dependency, "http://")) { - return Version{ + return .{ .tag = .tarball, .literal = sliced.value(), - .value = .{ .tarball = URI{ .remote = sliced.sub(dependency).value() } }, + .value = .{ .tarball = .{ .remote = sliced.sub(dependency).value() } }, }; } else if (strings.hasPrefixComptime(dependency, "file://")) { - return Version{ + return .{ .tag = .tarball, .literal = sliced.value(), - .value = .{ .tarball = URI{ .local = sliced.sub(dependency[7..]).value() } }, + .value = .{ .tarball = .{ .local = sliced.sub(dependency[7..]).value() } }, }; } else if (strings.contains(dependency, "://")) { if (log_) |log| log.addErrorFmt(null, logger.Loc.Empty, allocator, "invalid or unsupported dependency \"{s}\"", .{dependency}) catch unreachable; return null; } - return Version{ + return .{ .literal = sliced.value(), .value = .{ - .tarball = URI{ + .tarball = .{ .local = sliced.value(), }, }, @@ -787,14 +799,14 @@ pub fn parseWithTag( return null; } - return Version{ .literal = sliced.value(), .value = .{ .folder = sliced.sub(dependency[protocol + 1 ..]).value() }, .tag = .folder }; + return .{ .literal = sliced.value(), .value = .{ .folder = sliced.sub(dependency[protocol + 1 ..]).value() }, .tag = .folder }; } if (log_) |log| log.addErrorFmt(null, logger.Loc.Empty, allocator, "Unsupported protocol {s}", .{dependency}) catch unreachable; return null; } - return Version{ + return .{ .value = .{ .folder = sliced.value() }, .tag = .folder, .literal = sliced.value(), @@ -803,22 +815,26 @@ pub fn parseWithTag( .uninitialized => return null, .symlink => { if (strings.indexOfChar(dependency, ':')) |colon| { - return Version{ + return .{ .value = .{ .symlink = sliced.sub(dependency[colon + 1 ..]).value() }, .tag = .symlink, .literal = sliced.value(), }; } - return Version{ + return .{ .value = .{ .symlink = sliced.value() }, .tag = .symlink, .literal = sliced.value(), }; }, .workspace => { - return Version{ - .value = .{ .workspace = sliced.value() }, + var input = dependency; + if (strings.hasPrefixComptime(input, "workspace:")) { + input = input["workspace:".len..]; + } + return .{ + .value = .{ .workspace = sliced.sub(input).value() }, .tag = .workspace, .literal = sliced.value(), }; |