diff options
author | 2023-07-27 01:35:47 +0300 | |
---|---|---|
committer | 2023-07-26 15:35:47 -0700 | |
commit | 06503663b1e42acdf43574c97a636ca8f81c22f4 (patch) | |
tree | 3fea5e7e508ac62f7df479593323f43651e43d28 /src | |
parent | 4c89c60867591b50e0b31bf5009fd5ad6a3cebe1 (diff) | |
download | bun-06503663b1e42acdf43574c97a636ca8f81c22f4.tar.gz bun-06503663b1e42acdf43574c97a636ca8f81c22f4.tar.zst bun-06503663b1e42acdf43574c97a636ca8f81c22f4.zip |
[install] handle `workspace:[alias@]range` (#3819)
Diffstat (limited to 'src')
-rw-r--r-- | src/install/lockfile.zig | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig index 73347871a..c224cc765 100644 --- a/src/install/lockfile.zig +++ b/src/install/lockfile.zig @@ -2515,8 +2515,20 @@ pub const Package = extern struct { &sliced, log, ) orelse Dependency.Version{}; + var workspace_range: ?Semver.Query.Group = null; const name_hash = switch (dependency_version.tag) { .npm => String.Builder.stringHash(dependency_version.value.npm.name.slice(buf)), + .workspace => if (strings.hasPrefixComptime(sliced.slice, "workspace:")) brk: { + const input = sliced.slice["workspace:".len..]; + const at = strings.lastIndexOfChar(input, '@') orelse 0; + if (at > 0) { + workspace_range = Semver.Query.parse(allocator, input[at + 1 ..], sliced) catch return error.InstallFailed; + break :brk String.Builder.stringHash(input[0..at]); + } else { + workspace_range = Semver.Query.parse(allocator, input, sliced) catch null; + break :brk external_alias.hash; + } + } else external_alias.hash, else => external_alias.hash, }; const workspace_path = if (comptime tag == null) lockfile.workspace_paths.get(@truncate(name_hash)) else null; @@ -2564,7 +2576,15 @@ pub const Package = extern struct { } }, .workspace => if (workspace_path) |path| { - dependency_version.value.workspace = path; + if (workspace_range) |range| { + if (workspace_version) |ver| { + if (range.satisfies(ver)) { + dependency_version.value.workspace = path; + } + } + } else { + dependency_version.value.workspace = path; + } } else { { const workspace = dependency_version.value.workspace.slice(buf); |