aboutsummaryrefslogtreecommitdiff
path: root/src/bundler.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/bundler.zig')
-rw-r--r--src/bundler.zig42
1 files changed, 29 insertions, 13 deletions
diff --git a/src/bundler.zig b/src/bundler.zig
index 4d88b27f2..42b515678 100644
--- a/src/bundler.zig
+++ b/src/bundler.zig
@@ -52,6 +52,7 @@ pub const ServeResult = struct {
// const BundleMap =
const ResolveResults = ThreadSafeHashMap.ThreadSafeStringHashMap(Resolver.Resolver.Result);
+const ResolveQueue = std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic);
pub const Bundler = struct {
options: options.BundleOptions,
log: *logger.Log,
@@ -62,7 +63,7 @@ pub const Bundler = struct {
// thread_pool: *ThreadPool,
output_files: std.ArrayList(options.OutputFile),
resolve_results: *ResolveResults,
- resolve_queue: std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic),
+ resolve_queue: ResolveQueue,
elapsed: i128 = 0,
needs_runtime: bool = false,
@@ -96,7 +97,7 @@ pub const Bundler = struct {
// .thread_pool = pool,
.result = options.TransformResult{ .outbase = bundle_options.output_dir },
.resolve_results = try ResolveResults.init(allocator),
- .resolve_queue = std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic).init(allocator),
+ .resolve_queue = ResolveQueue.init(allocator),
.output_files = std.ArrayList(options.OutputFile).init(allocator),
};
}
@@ -171,20 +172,32 @@ pub const Bundler = struct {
// Run the resolver
// Don't parse/print automatically.
if (bundler.options.resolve_mode != .lazy) {
- var hash_key = resolve_result.path_pair.primary.text;
+ try bundler.enqueueResolveResult(&resolve_result);
+ }
- // Shorter hash key is faster to hash
- if (strings.startsWith(resolve_result.path_pair.primary.text, bundler.fs.top_level_dir)) {
- hash_key = resolve_result.path_pair.primary.text[bundler.fs.top_level_dir.len..];
- }
+ import_record.path = try bundler.generateImportPath(source_dir, resolve_result.path_pair.primary.text);
+ }
- if (!bundler.resolve_results.contains(hash_key)) {
- try bundler.resolve_results.put(hash_key, resolve_result);
- try bundler.resolve_queue.writeItem(resolve_result);
- }
+ pub fn resolveResultHashKey(bundler: *Bundler, resolve_result: *Resolver.Resolver.Result) string {
+ var hash_key = resolve_result.path_pair.primary.text;
+
+ // Shorter hash key is faster to hash
+ if (strings.startsWith(resolve_result.path_pair.primary.text, bundler.fs.top_level_dir)) {
+ hash_key = resolve_result.path_pair.primary.text[bundler.fs.top_level_dir.len..];
}
- import_record.path = try bundler.generateImportPath(source_dir, resolve_result.path_pair.primary.text);
+ return hash_key;
+ }
+
+ pub fn enqueueResolveResult(bundler: *Bundler, resolve_result: *Resolver.Resolver.Result) !void {
+ const hash_key = bundler.resolveResultHashKey(resolve_result);
+
+ const get_or_put_entry = try bundler.resolve_results.backing.getOrPut(hash_key);
+
+ if (!get_or_put_entry.found_existing) {
+ get_or_put_entry.entry.value = resolve_result.*;
+ try bundler.resolve_queue.writeItem(resolve_result.*);
+ }
}
pub fn buildWithResolveResult(bundler: *Bundler, resolve_result: Resolver.Resolver.Result) !?options.OutputFile {
@@ -608,7 +621,10 @@ pub const Bundler = struct {
if (enableTracing) {
Output.print(
"\n---Tracing---\nResolve time: {d}\nParsing time: {d}\n---Tracing--\n\n",
- .{ bundler.resolver.elapsed, bundler.elapsed },
+ .{
+ bundler.resolver.elapsed,
+ bundler.elapsed,
+ },
);
}