Split bundler up into multiple files (#20192)

This commit is contained in:
Zack Radisic
2025-06-06 18:34:18 -07:00
committed by GitHub
parent 5b0523a32a
commit fa1d37b4e3
39 changed files with 16151 additions and 14144 deletions

View File

@@ -0,0 +1,52 @@
/// This task is run once all parse and resolve tasks have been complete
/// and we have deferred onLoad plugins that we need to resume
///
/// It enqueues a task to be run on the JS thread which resolves the promise
/// for every onLoad callback which called `.defer()`.
pub const DeferredBatchTask = @This();
running: if (Environment.isDebug) bool else u0 = if (Environment.isDebug) false else 0,
pub fn init(this: *DeferredBatchTask) void {
if (comptime Environment.isDebug) bun.debugAssert(!this.running);
this.* = .{
.running = if (comptime Environment.isDebug) false else 0,
};
}
pub fn getBundleV2(this: *DeferredBatchTask) *bun.BundleV2 {
return @alignCast(@fieldParentPtr("drain_defer_task", this));
}
pub fn schedule(this: *DeferredBatchTask) void {
if (comptime Environment.isDebug) {
bun.assert(!this.running);
this.running = false;
}
this.getBundleV2().jsLoopForPlugins().enqueueTaskConcurrent(JSC.ConcurrentTask.create(JSC.Task.init(this)));
}
pub fn deinit(this: *DeferredBatchTask) void {
if (comptime Environment.isDebug) {
this.running = false;
}
}
pub fn runOnJSThread(this: *DeferredBatchTask) void {
defer this.deinit();
var bv2 = this.getBundleV2();
bv2.plugins.?.drainDeferred(
if (bv2.completion) |completion|
completion.result == .err
else
false,
);
}
const bun = @import("bun");
const Environment = bun.Environment;
pub const Ref = @import("../ast/base.zig").Ref;
pub const Index = @import("../ast/base.zig").Index;
const JSC = bun.JSC;