aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Niles Salter <Validark@pm.me> 2023-03-29 18:10:44 -0600
committerGravatar GitHub <noreply@github.com> 2023-03-29 17:10:44 -0700
commit9f07073074e455fdda57cc82a335637565dc9a96 (patch)
tree4152aa10fd18771b7c4379da3e12e24288d1292f
parent546f78a49e80ef8e71d83aa964052bcfa81ecae7 (diff)
downloadbun-9f07073074e455fdda57cc82a335637565dc9a96.tar.gz
bun-9f07073074e455fdda57cc82a335637565dc9a96.tar.zst
bun-9f07073074e455fdda57cc82a335637565dc9a96.zip
Fix some lockfile creation issues (#2506)
-rw-r--r--src/install/lockfile.zig22
1 files changed, 16 insertions, 6 deletions
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index 35e018b7e..b2997899f 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -1156,7 +1156,7 @@ pub const Printer = struct {
{
var i: PackageID = 1;
while (i < package_count) : (i += 1) {
- alphabetized_names[i - 1] = @truncate(PackageID, i);
+ alphabetized_names[i - 1] = i;
var resolutions = resolutions_buffer;
var dependencies = dependencies_buffer;
@@ -1196,14 +1196,22 @@ pub const Printer = struct {
const resolution = resolved[i];
const meta = metas[i];
const dependencies: []const Dependency = dependency_lists[i].get(dependencies_buffer);
+ const version_formatter = resolution.fmt(string_buf);
// This prints:
// "@babel/core@7.9.0":
{
try writer.writeAll("\n");
-
const dependency_versions = requested_versions.get(i).?;
- const always_needs_quote = name[0] == '@';
+
+ // https://github.com/yarnpkg/yarn/blob/158d96dce95313d9a00218302631cd263877d164/src/lockfile/stringify.js#L9
+ const always_needs_quote = switch (name[0]) {
+ 'A'...'Z', 'a'...'z' => strings.hasPrefixComptime(name, "true") or
+ strings.hasPrefixComptime(name, "false") or
+ std.mem.indexOfAnyPos(u8, name, 1, ": \t\r\n\x0B\x0C\\\",[]") != null,
+ else => true,
+ };
+
var prev_dependency_version: ?Dependency.Version = null;
var needs_comma = false;
for (dependency_versions) |*dependency_version| {
@@ -1225,7 +1233,11 @@ pub const Printer = struct {
try writer.writeAll(name);
try writer.writeByte('@');
- try writer.writeAll(version_name);
+ if (version_name.len == 0) {
+ try std.fmt.format(writer, "^{any}", .{version_formatter});
+ } else {
+ try writer.writeAll(version_name);
+ }
if (needs_quote) {
try writer.writeByte('"');
@@ -1240,8 +1252,6 @@ pub const Printer = struct {
{
try writer.writeAll(" version ");
- const version_formatter = resolution.fmt(string_buf);
-
// Version is always quoted
try std.fmt.format(writer, "\"{any}\"\n", .{version_formatter});