aboutsummaryrefslogtreecommitdiff
path: root/src/bun.js/api
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-08-16 19:40:20 -0700
committerGravatar GitHub <noreply@github.com> 2023-08-16 19:40:20 -0700
commit0486cea35a80be97ba43f41a29ce55f0d3a8eb01 (patch)
tree2a6335ff465826b3e20959c5751c89ba793becca /src/bun.js/api
parent2634c64aa32fec00073bd0a776e5ac67ad6aa6e5 (diff)
downloadbun-0486cea35a80be97ba43f41a29ce55f0d3a8eb01.tar.gz
bun-0486cea35a80be97ba43f41a29ce55f0d3a8eb01.tar.zst
bun-0486cea35a80be97ba43f41a29ce55f0d3a8eb01.zip
`bun --inspect` (#4158)
* Let the debugger to pause/resume the event loop * Add initial support for Debug Adapter Protocol * Add progress * Update Worker.cpp * Fix require("console") #3820 (#4073) * Fix #3820 * Add Module (#4074) * Set exports to {} in user-constructed CommonJSModuleRecords (#4076) * feat(bun/test): Implement "toSatisfy" & "toIncludeRepeated" (fwup) (#3651) * Fix merge issues * oop * make codegen * Fix build issues --------- Co-authored-by: dave caruso <me@paperdave.net> * worker tests (#4058) Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * feat(bun:test) add support for test.each() and describe.each() (#4047) * rename callback to func * update testscope to handle function arguments * works * big cleanup * works in debug, not release * fix memory issue & update tests * catch & str test * write types for each() & switch tests to ts * rm & typo * move some code around & support describe * review changes * Fix one of the astro segfaults, also fix bun init version (#4079) * 4->16 * add assertions * fix version stuff * Remove unintentional logs from #4043 * Run prettier * Update main-worker-file.js * Update SIMDUTF (#4078) * Fix constructing buffer from a UTF16 string with the Latin1 encoding. (#4086) Close: #3914 * Add support for `bun --revision` (#4027) Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local> * Updates * Update __global.zig * remove non-node node-fallbacks (#4082) * remove non-node node-fallbacks. * organize the imports * Fix test * Sync bun-polyfills branch (#4081) * bun-polyfills: initial impl. & baseline refactor * move @types/ws dep from root to /test/ * bun-types: remove ReadableStream.forEach method (this does not exist, probably added by mistake) * bun-polyfills: remove extraneous stream utils * bun-polyfills: add types syncing file * bun-polyfills: re-arrange global polyfills * bun-polyfills: fix FileBlob streams types again * bun-polyfills: sync all of @types/node * bun-polyfills: typeguard all current polyfills * bun-polyfills: fix import paths * bun-polyfills: switch to wasm impl. of farmhash * bun-polyfills: support default import of bun obj * bun-polyfills: transpiler placeholder file * bun-polyfills: loaderless import.meta polyfill * bun-polyfills: refactor import.meta polyfill * bun-polyfills: repl entrypoint & todo list index * bun-types: Add null to return type of Bun.which * bun-types: match Bun.sha with Bun.hash.SHA512_256 * bun-polyfills: new "repl" package.json script * bun-polyfills: full refactor of toplevel hashes * bun-polyfills: these are fixed * bun-types: NODE_ENV is optional * bun-polyfills: fix Bun.env types * bun-types+polyfills: fix HeapSnapshot.version type * bun-polyfills: fix some web streams type conflicts * bun-polyfills: update internal FileBlob.slice * bun-polyfills: fix subproc stdin conversions * bun-polyfills: better internal fileblob types * bun-polyfills: try to sync global performance type * bun-polyfills: working zig wasm polyfills setup * bun-polyfills: update scripts * bun-polyfills: fix wasm file location resolution * bun-polyfills: goodbye farmhash (replaced by zig) * bun-polyfills: move all Bun.hash polyfills to zig * bun-polyfills: reimpl. seeding of seeded hashes * bun-polyfills: impl. undocumented murmur32v2 * bun-polyfills: switch zighash from jsdoc to .d.ts * bun-types: partial fix of Hash types * bun-polyfills: documented Hash.murmur32v2 * bun-polyfills: misc updates * bun-polyfills: enable sourcemaps * bun-polyfills: handle empty inputs to hash funcs * bun-types: narrow down hash func types * bun-polyfills: remove unnecessary bigint casts * bun-polyfills: impl. Bun.isMainThread * bun-polyfills: impl. Bun.sleep and fix sleepSync * bun-polyfills: impl. indexOfLine * bun-polyfills: impl. Bun.peek.status * bun-types: fix hashing test --------- Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * Add remix guide * Fix title * add util.formatWithOptions (#4090) * Add formatWithOptions * tests and tweaks * adjust --------- Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * bun test: format description of test.each (#4092) * bun test: format description * add tests for tests * only --------- Co-authored-by: Jarred Sumner <jarred@jarredsumner.com> * Fixes #4062 (#4106) * Fixes #4062 * Update encoding.zig * Use faster C++ impl * Update wtf-bindings.cpp * undo * Fixup --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> * zig fmt * Update remix guide * fs.zig: create temp files with 0o700, not 0o007 (#4107) * Handle thundering herd of setInterval (#4109) Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> * Fix memory leak in base64url (#4111) Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> * run files without extensions (#4113) * run script without extension * process stdio write fix * don't check for trailing slash, var stream * More lazily initialize these static strings * Remove assertion * wip * Add --inspect flag * Deprecate loading `node_modules.bun` * realpath * regenerate schema * More * more * Update cli.zig * Debugger JS loads * have fun * Most of the code * Its starting to work. * more progress * win some, lose some * Update dap.ts * Async Context Tracking * untested websocket * Emit Console messages * Error handling * errors * Make profiling work better * [clap] CLI arguments with optional values ignore positional params In `bun --inspect foo.js`, `foo.js` should not be the value of `--inspect`. It is a positional parameter. `--inspect=foo` * Support multiple simultaneous clients, automatically unpause on disconnect * regenerate * Update Makefile * Update WebKit * Update cli.zig * Update InternalModuleRegistry+createInternalModuleById.h * BaseURL * Update WebKit * Add web-inspector-bun * Update build.ts * formatting, mostly * Update debugger.ts * Update InternalModuleRegistryConstants.h * wrap * Update test * Update test --------- Co-authored-by: Ashcon Partovi <ashcon@partovi.net> Co-authored-by: Dylan Conway <dylan.conway567@gmail.com> Co-authored-by: dave caruso <me@paperdave.net> Co-authored-by: Tiramify (A.K. Daniel) <94789999+TiranexDev@users.noreply.github.com> Co-authored-by: Jacques <25390037+jecquas@users.noreply.github.com> Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com> Co-authored-by: Ai Hoshino <ambiguous404@gmail.com> Co-authored-by: Yash Sharma <yashosharma@gmail.com> Co-authored-by: Yash Sharma <yashsharma@Yashs-MacBook-Air.local> Co-authored-by: Colin McDonnell <colinmcd94@gmail.com> Co-authored-by: jhmaster <32803471+jhmaster2000@users.noreply.github.com> Co-authored-by: Adhityaa Chandrasekar <github@adtac.in> Co-authored-by: Dylan Conway <35280289+dylan-conway@users.noreply.github.com>
Diffstat (limited to 'src/bun.js/api')
-rw-r--r--src/bun.js/api/bun.zig39
-rw-r--r--src/bun.js/api/server.zig8
2 files changed, 44 insertions, 3 deletions
diff --git a/src/bun.js/api/bun.zig b/src/bun.js/api/bun.zig
index 6daff5fcc..d230028ba 100644
--- a/src/bun.js/api/bun.zig
+++ b/src/bun.js/api/bun.zig
@@ -3498,6 +3498,8 @@ pub const TOML = struct {
}
};
+const Debugger = JSC.Debugger;
+
pub const Timer = struct {
last_id: i32 = 1,
warned: bool = false,
@@ -3612,6 +3614,9 @@ pub const Timer = struct {
};
if (should_cancel_job) {
+ if (vm.isInspectorEnabled()) {
+ Debugger.didCancelAsyncCall(globalThis, .DOMTimer, Timeout.ID.asyncID(.{ .id = this.id, .kind = kind }));
+ }
this.deinit();
return;
} else if (kind != .setInterval) {
@@ -3624,6 +3629,7 @@ pub const Timer = struct {
defer if (args_needs_deinit) bun.default_allocator.free(args);
const callback = this.callback.get() orelse @panic("Expected CallbackJob to have a callback function");
+
if (this.arguments.trySwap()) |arguments| {
// Bun.sleep passes a Promise
if (arguments.jsType() == .JSPromise) {
@@ -3648,11 +3654,19 @@ pub const Timer = struct {
}
}
+ if (vm.isInspectorEnabled()) {
+ Debugger.willDispatchAsyncCall(globalThis, .DOMTimer, Timeout.ID.asyncID(.{ .id = this.id, .kind = kind }));
+ }
+
const result = callback.callWithGlobalThis(
globalThis,
args,
);
+ if (vm.isInspectorEnabled()) {
+ Debugger.didDispatchAsyncCall(globalThis, .DOMTimer, Timeout.ID.asyncID(.{ .id = this.id, .kind = kind }));
+ }
+
if (result.isEmptyOrUndefinedOrNull() or !result.isCell()) {
this.deinit();
return;
@@ -3787,6 +3801,9 @@ pub const Timer = struct {
}
vm.enqueueTask(JSC.Task.init(&job.task));
+ if (vm.isInspectorEnabled()) {
+ Debugger.didScheduleAsyncCall(globalThis, .DOMTimer, id.asyncID(), true);
+ }
map.put(vm.allocator, this.id, null) catch unreachable;
return this_value;
@@ -3888,6 +3905,10 @@ pub const Timer = struct {
kind: Kind = Kind.setTimeout,
+ pub inline fn asyncID(this: ID) u64 {
+ return @bitCast(this);
+ }
+
pub fn repeats(this: ID) bool {
return this.kind == .setInterval;
}
@@ -3976,6 +3997,9 @@ pub const Timer = struct {
job.ref.ref(vm);
vm.enqueueTask(JSC.Task.init(&job.task));
+ if (vm.isInspectorEnabled()) {
+ Debugger.didScheduleAsyncCall(globalThis, .DOMTimer, timer_id.asyncID(), !repeats);
+ }
}
pub fn deinit(this: *Timeout) void {
@@ -4033,6 +4057,9 @@ pub const Timer = struct {
job.ref.ref(vm);
vm.enqueueTask(JSC.Task.init(&job.task));
+ if (vm.isInspectorEnabled()) {
+ Debugger.didScheduleAsyncCall(globalThis, .DOMTimer, Timeout.ID.asyncID(.{ .id = id, .kind = kind }), !repeat);
+ }
map.put(vm.allocator, id, null) catch unreachable;
return;
}
@@ -4056,6 +4083,10 @@ pub const Timer = struct {
timeout.poll_ref.ref(vm);
map.put(vm.allocator, id, timeout) catch unreachable;
+ if (vm.isInspectorEnabled()) {
+ Debugger.didScheduleAsyncCall(globalThis, .DOMTimer, Timeout.ID.asyncID(.{ .id = id, .kind = kind }), !repeat);
+ }
+
timeout.timer.set(
Timeout.ID{
.id = id,
@@ -4117,8 +4148,8 @@ pub const Timer = struct {
JSC.markBinding(@src());
const kind: Timeout.Kind = if (repeats) .setInterval else .setTimeout;
-
- var map = globalThis.bunVM().timer.maps.get(kind);
+ var vm = globalThis.bunVM();
+ var map = vm.timer.maps.get(kind);
const id: Timeout.ID = .{
.id = brk: {
@@ -4137,6 +4168,10 @@ pub const Timer = struct {
};
var timer = map.fetchSwapRemove(id.id) orelse return;
+ if (vm.isInspectorEnabled()) {
+ Debugger.didCancelAsyncCall(globalThis, .DOMTimer, id.asyncID());
+ }
+
if (timer.value == null) {
// this timer was scheduled to run but was cancelled before it was run
// so long as the callback isn't already in progress, fetchSwapRemove will handle invalidating it
diff --git a/src/bun.js/api/server.zig b/src/bun.js/api/server.zig
index 4eca89cc6..df3bdba1f 100644
--- a/src/bun.js/api/server.zig
+++ b/src/bun.js/api/server.zig
@@ -137,6 +137,7 @@ pub const ServerConfig = struct {
websocket: ?WebSocketServer = null,
inspector: bool = false,
+ reuse_port: bool = false,
pub const SSLConfig = struct {
server_name: [*c]const u8 = null,
@@ -744,6 +745,11 @@ pub const ServerConfig = struct {
if (arg.get(global, "development")) |dev| {
args.development = dev.coerce(bool, global);
+ args.reuse_port = !args.development;
+ }
+
+ if (arg.get(global, "reusePort")) |dev| {
+ args.reuse_port = dev.coerce(bool, global);
}
if (arg.get(global, "inspector")) |inspector| {
@@ -5500,7 +5506,7 @@ pub fn NewServer(comptime ssl_enabled_: bool, comptime debug_mode_: bool) type {
this.app.listenWithConfig(*ThisServer, this, onListen, .{
.port = this.config.port,
.host = host,
- .options = 0,
+ .options = if (this.config.reuse_port) 0 else 1,
});
}
};