Single-file standalone Bun executables (#2879)

* Add LIEF

* Compile LIEF

* Implement support for embedding files on macOS

* proof of concept

* Add zstd

* Implement runtime support

* Move some code around

* Update .gitmodules

* Upgrade zig

https://github.com/ziglang/zig/pull/15278

* leftover

* leftover

* delete dead code

* Fix extname

* Revert "Upgrade zig"

This reverts commit dd968f30bf.

* Revert "leftover"

This reverts commit 7664de7686.

* Revert "leftover"

This reverts commit 498005be06.

* various fixes

* it works!

* leftover

* Make `zig build` a little faster

* give up on code signing support

* Support Linux & macOS

* Finish removing LIEF

* few more

* Add zstd to list of deps

* make it pretty

---------

Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
This commit is contained in:
Jarred Sumner
2023-05-14 06:13:39 -07:00
committed by GitHub
parent 7f25aa9e08
commit 893f70fee4
28 changed files with 1416 additions and 2024 deletions

View File

@@ -35,10 +35,84 @@ pub const SourceMapState = struct {
};
sources: [][]const u8 = &[_][]u8{},
sources_content: [][]SourceContent,
sources_content: []string,
mapping: Mapping.List = .{},
allocator: std.mem.Allocator,
pub fn parse(
allocator: std.mem.Allocator,
json_source: *const Logger.Source,
log: *Logger.Log,
) !SourceMap {
var json = try bun.JSON.ParseJSONUTF8(json_source, log, allocator);
var mappings = bun.sourcemap.Mapping.List{};
if (json.get("version")) |version| {
if (version.data != .e_number or version.data.e_number.value != 3.0) {
return error.@"Unsupported sourcemap version";
}
}
if (json.get("mappings")) |mappings_str| {
if (mappings_str.data != .e_string) {
return error.@"Invalid sourcemap mappings";
}
var parsed = bun.sourcemap.Mapping.parse(allocator, try mappings_str.data.e_string.toUTF8(allocator), null, std.math.maxInt(i32));
if (parsed == .fail) {
try log.addMsg(bun.logger.Msg{
.data = parsed.fail.toData("sourcemap.json"),
.kind = .err,
});
return error.@"Failed to parse sourcemap mappings";
}
mappings = parsed.success;
}
var sources = std.ArrayList(bun.string).init(allocator);
var sources_content = std.ArrayList(string).init(allocator);
if (json.get("sourcesContent")) |mappings_str| {
if (mappings_str.data != .e_array) {
return error.@"Invalid sourcemap sources";
}
try sources_content.ensureTotalCapacityPrecise(mappings_str.data.e_array.items.len);
for (mappings_str.data.e_array.items.slice()) |source| {
if (source.data != .e_string) {
return error.@"Invalid sourcemap source";
}
try source.data.e_string.toUTF8(allocator);
sources_content.appendAssumeCapacity(source.data.e_string.slice());
}
}
if (json.get("sources")) |mappings_str| {
if (mappings_str.data != .e_array) {
return error.@"Invalid sourcemap sources";
}
try sources.ensureTotalCapacityPrecise(mappings_str.data.e_array.items.len);
for (mappings_str.data.e_array.items.slice()) |source| {
if (source.data != .e_string) {
return error.@"Invalid sourcemap source";
}
try source.data.e_string.toUTF8(allocator);
sources.appendAssumeCapacity(source.data.e_string.slice());
}
}
return SourceMap{
.mapping = mappings,
.allocator = allocator,
.sources_content = sources_content.items,
.sources = sources.items,
};
}
pub const Mapping = struct {
generated: LineColumnOffset,
original: LineColumnOffset,