Former-commit-id: a13dd6402f54527e87e9afdbbf48e5ff1501c8f9
This commit is contained in:
Jarred Sumner
2021-08-03 19:04:24 -07:00
parent 3b684308c3
commit 58fd17867d
5 changed files with 66 additions and 31 deletions

View File

@@ -166,7 +166,7 @@ pub const Cli = struct {
var diag = clap.Diagnostic{};
var args = clap.parse(clap.Help, &params, .{ .diagnostic = &diag }) catch |err| {
var args = clap.parse(clap.Help, &params, .{ .diagnostic = &diag, .allocator = allocator }) catch |err| {
// Report useful error and exit
diag.report(stderr.writer(), err) catch {};
return err;
@@ -365,6 +365,35 @@ pub const Cli = struct {
pub const src = "var headers = new Headers(); headers.set(\"hey\", \"hi\"); console.log(headers.get(\"hey\")); \"HELLO\";";
};
pub fn Threader(comptime Stdout: type, comptime Stderr: type) type {
return struct {
allocator: *std.mem.Allocator,
stdout: Stdout,
stderr: Stderr,
args: Api.TransformOptions,
pub fn spawn(this: @This()) !void {
try alloc.setup(std.heap.c_allocator);
var stdout = std.io.getStdOut();
// var stdout = std.io.bufferedWriter(stdout_file.writer());
var stderr = std.io.getStdErr();
// var stderr = std.io.bufferedWriter(stderr_file.writer());
var output_source = Output.Source.init(stdout, stderr);
// defer stdout.flush() catch {};
// defer stderr.flush() catch {};
Output.Source.set(&output_source);
Output.enable_ansi_colors = stderr.isTty();
var log = logger.Log.init(this.allocator);
var vm = try VirtualMachine.init(this.allocator, this.args, null, &log);
var promise = try vm.loadEntryPoint(vm.bundler.options.entry_points[0]);
if (promise.status(vm.global.vm()) == js.JSPromise.Status.Rejected) {
vm.defaultErrorHandler(promise.result(vm.global.vm()));
}
}
};
}
pub fn start(allocator: *std.mem.Allocator, stdout: anytype, stderr: anytype) anyerror!void {
const start_time = std.time.nanoTimestamp();
var log = logger.Log.init(allocator);
@@ -377,17 +406,16 @@ pub const Cli = struct {
// var results = try bundler.Bundler.bundle(allocator, &log, args);
// var file = results.output_files[0];
var vm = try VirtualMachine.init(allocator, args, null, &log);
// var resolved_entry_point = try vm.bundler.resolver.resolve(
// vm.bundler.fs.top_level_dir,
// vm.bundler.normalizeEntryPointPath(vm.bundler.options.entry_points[0]),
// .entry_point,
// );
var promise = try vm.loadEntryPoint(vm.bundler.options.entry_points[0]);
if (promise.status(vm.global.vm()) == js.JSPromise.Status.Rejected) {
vm.defaultRejectionHandler(promise.result(vm.global.vm()));
}
const Threadable = Threader(@TypeOf(stdout), @TypeOf(stderr));
const runner = Threadable{ .allocator = allocator, .stdout = stdout, .stderr = stderr, .args = args };
var thread = try std.Thread.spawn(.{}, Threadable.spawn, .{runner});
thread.join();
}
};