aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/install/lockfile.zig47
1 files changed, 26 insertions, 21 deletions
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index cebc7e64d..73347871a 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -2496,10 +2496,9 @@ pub const Package = extern struct {
package_dependencies: []Dependency,
dependencies_count: u32,
in_workspace: bool,
- tag: ?Dependency.Version.Tag,
- workspace_path: ?String,
- workspace_version: ?Semver.Version,
- external_name: ExternalString,
+ comptime tag: ?Dependency.Version.Tag,
+ workspace_ver: ?Semver.Version,
+ external_alias: ExternalString,
version: string,
key_loc: logger.Loc,
value_loc: logger.Loc,
@@ -2510,12 +2509,18 @@ pub const Package = extern struct {
var dependency_version = Dependency.parseWithOptionalTag(
allocator,
- external_name.value,
+ external_alias.value,
sliced.slice,
tag,
&sliced,
log,
) orelse Dependency.Version{};
+ const name_hash = switch (dependency_version.tag) {
+ .npm => String.Builder.stringHash(dependency_version.value.npm.name.slice(buf)),
+ else => external_alias.hash,
+ };
+ const workspace_path = if (comptime tag == null) lockfile.workspace_paths.get(@truncate(name_hash)) else null;
+ const workspace_version = if (comptime tag == null) lockfile.workspace_versions.get(@truncate(name_hash)) else workspace_ver;
switch (dependency_version.tag) {
.folder => {
@@ -2534,11 +2539,13 @@ pub const Package = extern struct {
),
);
},
- .npm => if (workspace_version) |ver| {
+ .npm => if (comptime tag != null)
+ unreachable
+ else if (workspace_version) |ver| {
if (dependency_version.value.npm.version.satisfies(ver)) {
for (package_dependencies[0..dependencies_count]) |dep| {
// `dependencies` & `workspaces` defined within the same `package.json`
- if (dep.version.tag == .workspace and dep.name_hash == external_name.hash) {
+ if (dep.version.tag == .workspace and dep.name_hash == name_hash) {
return null;
}
}
@@ -2546,7 +2553,7 @@ pub const Package = extern struct {
const path = workspace_path.?.sliced(buf);
if (Dependency.parseWithTag(
allocator,
- external_name.value,
+ external_alias.value,
path.slice,
.workspace,
&path,
@@ -2576,7 +2583,7 @@ pub const Package = extern struct {
),
);
defer dependency_version.value.workspace = path;
- var workspace_entry = try lockfile.workspace_paths.getOrPut(allocator, @truncate(external_name.hash));
+ var workspace_entry = try lockfile.workspace_paths.getOrPut(allocator, @truncate(name_hash));
if (workspace_entry.found_existing) {
const old_path = workspace_entry.value_ptr.*;
@@ -2586,7 +2593,7 @@ pub const Package = extern struct {
} else if (strings.eqlComptime(old_path.slice(buf), "*")) brk: {
workspace_entry.value_ptr.* = path;
for (package_dependencies[0..dependencies_count]) |*package_dep| {
- if (package_dep.name_hash == external_name.hash) {
+ if (String.Builder.stringHash(package_dep.realname().slice(buf)) == name_hash) {
if (package_dep.version.tag != .workspace) break :brk;
package_dep.version.value.workspace = path;
return null;
@@ -2597,7 +2604,7 @@ pub const Package = extern struct {
return null;
} else {
log.addErrorFmt(&source, logger.Loc.Empty, allocator, "Workspace name \"{s}\" already exists", .{
- external_name.slice(buf),
+ external_alias.slice(buf),
}) catch {};
return error.InstallFailed;
}
@@ -2606,12 +2613,12 @@ pub const Package = extern struct {
}
if (workspace_version) |ver| {
- try lockfile.workspace_versions.put(allocator, @truncate(external_name.hash), ver);
+ try lockfile.workspace_versions.put(allocator, @truncate(name_hash), ver);
for (package_dependencies[0..dependencies_count]) |*package_dep| {
// `dependencies` & `workspaces` defined within the same `package.json`
if (package_dep.version.tag == .npm and
- package_dep.name_hash == external_name.hash and
+ String.Builder.stringHash(package_dep.version.value.npm.name.slice(buf)) == name_hash and
package_dep.version.value.npm.version.satisfies(ver))
{
package_dep.version = dependency_version;
@@ -2625,14 +2632,14 @@ pub const Package = extern struct {
const this_dep = Dependency{
.behavior = group.behavior.setWorkspace(in_workspace),
- .name = external_name.value,
- .name_hash = external_name.hash,
+ .name = external_alias.value,
+ .name_hash = external_alias.hash,
.version = dependency_version,
};
// `peerDependencies` may be specified on existing dependencies
if (comptime features.check_for_duplicate_dependencies and !group.behavior.isPeer()) {
- var entry = lockfile.scratch.duplicate_checker_map.getOrPutAssumeCapacity(external_name.hash);
+ var entry = lockfile.scratch.duplicate_checker_map.getOrPutAssumeCapacity(external_alias.hash);
if (entry.found_existing) {
// duplicate dependencies are allowed in optionalDependencies
if (comptime group.behavior.isOptional()) {
@@ -2647,7 +2654,7 @@ pub const Package = extern struct {
var notes = try allocator.alloc(logger.Data, 1);
notes[0] = .{
- .text = try std.fmt.allocPrint(lockfile.allocator, "\"{s}\" originally specified here", .{external_name.slice(buf)}),
+ .text = try std.fmt.allocPrint(lockfile.allocator, "\"{s}\" originally specified here", .{external_alias.slice(buf)}),
.location = logger.Location.init_or_nil(&source, source.rangeOfString(entry.value_ptr.*)),
};
@@ -2657,7 +2664,7 @@ pub const Package = extern struct {
lockfile.allocator,
notes,
"Duplicate dependency: \"{s}\" specified in package.json",
- .{external_name.slice(buf)},
+ .{external_alias.slice(buf)},
);
}
}
@@ -3447,7 +3454,6 @@ pub const Package = extern struct {
total_dependencies_count,
in_workspace,
.workspace,
- null,
entry.version,
external_name,
path,
@@ -3480,8 +3486,7 @@ pub const Package = extern struct {
total_dependencies_count,
in_workspace,
null,
- lockfile.workspace_paths.get(@truncate(external_name.hash)),
- lockfile.workspace_versions.get(@truncate(external_name.hash)),
+ null,
external_name,
version,
key.loc,