diff options
author | 2023-05-14 06:13:39 -0700 | |
---|---|---|
committer | 2023-05-14 06:13:39 -0700 | |
commit | 893f70fee4a62b7729abc17257aee89a2dce0069 (patch) | |
tree | 9a1da782efdadc8ab9869293f6fd9cd64e5b4ba7 /src/sourcemap/sourcemap.zig | |
parent | 7f25aa9e0864e95aad72ee85d475a03aee68bfb4 (diff) | |
download | bun-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.zig | 76 |
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, |