diff options
author | 2021-11-15 15:07:58 -0800 | |
---|---|---|
committer | 2021-12-16 19:18:51 -0800 | |
commit | 49dbf79e8139489a25dd384227ccb77f7255d8c8 (patch) | |
tree | e6225c7572309b4b454db2b62ea071ff22808707 | |
parent | 1610ff33ea5d8a1e6d66960ba8411baf9aea1d3e (diff) | |
download | bun-49dbf79e8139489a25dd384227ccb77f7255d8c8.tar.gz bun-49dbf79e8139489a25dd384227ccb77f7255d8c8.tar.zst bun-49dbf79e8139489a25dd384227ccb77f7255d8c8.zip |
WIP
-rw-r--r-- | src/install/install.zig | 28 | ||||
-rw-r--r-- | src/resolver/lockfile.kiwi | 4 |
2 files changed, 27 insertions, 5 deletions
diff --git a/src/install/install.zig b/src/install/install.zig index f2fda1d6e..f8e3b46d7 100644 --- a/src/install/install.zig +++ b/src/install/install.zig @@ -1160,7 +1160,14 @@ const Npm = struct { for (versions) |prop, version_i| { const version_name = prop.key.?.asString(allocator) orelse continue; - const parsed_version = Semver.Version.parse(SlicedString.init(version_name, version_name), allocator); + + + // We only need to copy the version tags if it's a pre/post + if (std.mem.indexOfAny(u8, version_name, "-+") != null) { + sliced_string = SlicedString.init(string_buf, string_builder.append(version_name)); + } + + const parsed_version = Semver.Version.parse(sliced_string, allocator); std.debug.assert(parsed_version.valid); if (!parsed_version.valid) { @@ -1261,6 +1268,7 @@ const Npm = struct { const items = versioned_deps.expr.data.e_object.properties; var any_differences = false; + for (items) |item, i| { // Often, npm packages have the same dependency names/versions many times. @@ -1332,6 +1340,18 @@ const Npm = struct { result.pkg.etag = string_slice.sub(string_builder.append(etag)).external(); } + if (json.asProperty("dist-tags")) |dist| { + if (dist.expr.data == .e_object) { + const tags = dist.expr.data.e_object.properties; + const extern_strings_start = extern_strings + for (tags) |tag| { + if (tag.key.?.asString(allocator)) |key| { + extern_strings string_builder.append(key); + extern_string_count += 1; + } + } + } + } result.pkg.releases.keys.len = @truncate(u32, release_versions_len); result.pkg.releases.values.len = @truncate(u32, release_versions_len); @@ -2382,15 +2402,13 @@ test "getPackageMetadata" { var registry = Npm.Registry{}; var log = logger.Log.init(default_allocator); - var response = try registry.getPackageMetadata(default_allocator, &log, "lodash", "", ""); - - const react_17 = try Semver.Query.parse(default_allocator, "1.2.0"); + var response = try registry.getPackageMetadata(default_allocator, &log, "react", "", ""); switch (response) { .cached, .not_found => unreachable, .fresh => |package| { package.reportSize(); - const react = package.findBestVersion(react_17) orelse unreachable; + const react = package.findByDistTag("alpha") orelse try std.testing.expect(false); const entry = react.package.dependencies.name.get(package.external_strings)[0]; // try std.testing.expectEqualStrings("loose-envify", entry.slice(package.string_buf)); diff --git a/src/resolver/lockfile.kiwi b/src/resolver/lockfile.kiwi new file mode 100644 index 000000000..b69c5c4d5 --- /dev/null +++ b/src/resolver/lockfile.kiwi @@ -0,0 +1,4 @@ + +package Lockfile; + +struct API
\ No newline at end of file |