aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-11-15 15:07:58 -0800
committerGravatar Jarred Sumner <jarred@jarredsumner.com> 2021-12-16 19:18:51 -0800
commit49dbf79e8139489a25dd384227ccb77f7255d8c8 (patch)
treee6225c7572309b4b454db2b62ea071ff22808707
parent1610ff33ea5d8a1e6d66960ba8411baf9aea1d3e (diff)
downloadbun-49dbf79e8139489a25dd384227ccb77f7255d8c8.tar.gz
bun-49dbf79e8139489a25dd384227ccb77f7255d8c8.tar.zst
bun-49dbf79e8139489a25dd384227ccb77f7255d8c8.zip
WIP
-rw-r--r--src/install/install.zig28
-rw-r--r--src/resolver/lockfile.kiwi4
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