aboutsummaryrefslogtreecommitdiff
path: root/src/sourcemap/sourcemap.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-05-14 06:13:39 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-14 06:13:39 -0700
commit893f70fee4a62b7729abc17257aee89a2dce0069 (patch)
tree9a1da782efdadc8ab9869293f6fd9cd64e5b4ba7 /src/sourcemap/sourcemap.zig
parent7f25aa9e0864e95aad72ee85d475a03aee68bfb4 (diff)
downloadbun-893f70fee4a62b7729abc17257aee89a2dce0069.tar.gz
bun-893f70fee4a62b7729abc17257aee89a2dce0069.tar.zst
bun-893f70fee4a62b7729abc17257aee89a2dce0069.zip
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 dd968f30bffb6c06e34302645a3a4468c957fb4e. * Revert "leftover" This reverts commit 7664de7686276cfba431103847d35b9270433dee. * Revert "leftover" This reverts commit 498005be06a8a1747d48824310e5a020b1f90d97. * 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>
Diffstat (limited to 'src/sourcemap/sourcemap.zig')
-rw-r--r--src/sourcemap/sourcemap.zig76
1 files changed, 75 insertions, 1 deletions
diff --git a/src/sourcemap/sourcemap.zig b/src/sourcemap/sourcemap.zig
index cc557caf1..d9dd85a7e 100644
--- a/src/sourcemap/sourcemap.zig
+++ b/src/sourcemap/sourcemap.zig
@@ -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,