diff options
Diffstat (limited to 'src/bun_js.zig')
-rw-r--r-- | src/bun_js.zig | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/bun_js.zig b/src/bun_js.zig new file mode 100644 index 000000000..e0af9d273 --- /dev/null +++ b/src/bun_js.zig @@ -0,0 +1,93 @@ +usingnamespace @import("global.zig"); +const std = @import("std"); + +const lex = @import("js_lexer.zig"); +const logger = @import("logger.zig"); +const alloc = @import("alloc.zig"); +const options = @import("options.zig"); +const js_parser = @import("js_parser.zig"); +const json_parser = @import("json_parser.zig"); +const js_printer = @import("js_printer.zig"); +const js_ast = @import("js_ast.zig"); +const linker = @import("linker.zig"); +usingnamespace @import("ast/base.zig"); +usingnamespace @import("defines.zig"); +const panicky = @import("panic_handler.zig"); +const sync = @import("./sync.zig"); +const Api = @import("api/schema.zig").Api; +const resolve_path = @import("./resolver/resolve_path.zig"); +const configureTransformOptionsForBun = @import("./javascript/jsc/config.zig").configureTransformOptionsForBun; +const Command = @import("cli.zig").Command; +const bundler = @import("bundler.zig"); +const NodeModuleBundle = @import("node_module_bundle.zig").NodeModuleBundle; +const DotEnv = @import("env_loader.zig"); +const which = @import("which.zig").which; +const VirtualMachine = @import("./javascript/jsc/javascript.zig").VirtualMachine; + +pub const Run = struct { + file: std.fs.File, + ctx: Command.Context, + vm: *VirtualMachine, + entry_path: string, + pub fn boot(ctx: Command.Context, file: std.fs.File, entry_path: string) !void { + js_ast.Expr.Data.Store.create(default_allocator); + js_ast.Stmt.Data.Store.create(default_allocator); + + var run = Run{ + .vm = try VirtualMachine.init(ctx.allocator, ctx.args, null, ctx.log, null), + .file = file, + .ctx = ctx, + .entry_path = entry_path, + }; + + run.vm.bundler.configureRouter(false) catch |err| { + if (Output.enable_ansi_colors) { + run.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), true) catch {}; + } else { + run.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), false) catch {}; + } + + std.os.exit(1); + }; + run.vm.bundler.configureDefines() catch |err| { + if (Output.enable_ansi_colors) { + run.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), true) catch {}; + } else { + run.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), false) catch {}; + } + + std.os.exit(1); + }; + + try run.start(); + } + + pub fn start(this: *Run) !void { + var promise = try this.vm.loadEntryPoint(this.entry_path); + + this.vm.global.vm().drainMicrotasks(); + + while (promise.status(this.vm.global.vm()) == .Pending) { + this.vm.global.vm().drainMicrotasks(); + } + + if (promise.status(this.vm.global.vm()) == .Rejected) { + this.vm.defaultErrorHandler(promise.result(this.vm.global.vm()), null); + std.os.exit(1); + } + + _ = promise.result(this.vm.global.vm()); + + if (this.vm.log.msgs.items.len > 0) { + if (Output.enable_ansi_colors) { + this.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), true) catch {}; + } else { + this.vm.log.printForLogLevelWithEnableAnsiColors(Output.errorWriter(), false) catch {}; + } + } + + Output.flush(); + + std.os.exit(0); + } +}; |