describeNode feedback

This commit is contained in:
sjorsdonkers
2025-04-22 13:48:13 +02:00
parent 5026c48805
commit a698ff8309
3 changed files with 11 additions and 35 deletions

View File

@@ -170,15 +170,11 @@ fn describeNode(cmd: anytype) !void {
if (params.nodeId != null) { if (params.nodeId != null) {
const node = bc.node_registry.lookup_by_id.get(params.nodeId.?) orelse return error.NodeNotFound; const node = bc.node_registry.lookup_by_id.get(params.nodeId.?) orelse return error.NodeNotFound;
return cmd.sendResult(.{ .node = bc.nodeWriter(node, .{}) }, .{}); return cmd.sendResult(.{ .node = bc.nodeWriter(node, .{}) }, .{});
} else if (params.objectId != null) { }
if (params.objectId != null) {
// Retrieve the object from which ever context it is in. // Retrieve the object from which ever context it is in.
const js_value = try bc.session.inspector.getValueByObjectId(cmd.arena, bc.session.executor, params.objectId.?); const parser_node = try bc.session.inspector.getNodePtr(cmd.arena, params.objectId.?);
const entry = js_value.taggedAnyOpaque() orelse return error.ObjectIdIsNotANode; const node = try bc.node_registry.register(@ptrCast(parser_node));
const subtype = entry.subtype orelse return error.ObjectIdIsNotANode;
if (subtype != .node) return error.ObjectIdIsNotANode;
const node = try bc.node_registry.register(@ptrCast(entry.ptr));
return cmd.sendResult(.{ .node = bc.nodeWriter(node, .{}) }, .{}); return cmd.sendResult(.{ .node = bc.nodeWriter(node, .{}) }, .{});
} }
return error.MissingParams; return error.MissingParams;

View File

@@ -122,28 +122,12 @@ const Inspector = struct {
_ = value; _ = value;
return RemoteObject{}; return RemoteObject{};
} }
pub fn getValueByObjectId(self: Inspector, alloc: std.mem.Allocator, executor: *const Executor, object_id: []const u8) !Value { pub fn getNodePtr(self: Inspector, alloc: std.mem.Allocator, object_id: []const u8) !?*anyopaque {
_ = self; _ = self;
_ = alloc;
_ = executor;
_ = object_id; _ = object_id;
return .{}; return try alloc.create(i32);
} }
}; };
const Value = struct {
pub fn taggedAnyOpaque(self: Value) ?*TaggedAnyOpaque {
_ = self;
return null;
}
};
const TaggedAnyOpaque = struct {
ptr: *anyopaque,
subtype: ?SubType = .node,
};
const SubType = enum {
node,
};
const RemoteObject = struct { const RemoteObject = struct {
pub fn deinit(self: RemoteObject) void { pub fn deinit(self: RemoteObject) void {

View File

@@ -1371,12 +1371,12 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
} }
// Gets a value by object ID regardless of which context it is in. // Gets a value by object ID regardless of which context it is in.
// unwrapping the object also tells us the context, for now we assume it is always the default one. pub fn getNodePtr(self: *const Inspector, allocator: Allocator, object_id: []const u8) !?*anyopaque {
// The executor argument is likely to change to somthing to allow us to find the right Executer with the given context
pub fn getValueByObjectId(self: Inspector, allocator: std.mem.Allocator, executor: *const Executor, object_id: []const u8) !Value {
const unwrapped = try self.session.unwrapObject(allocator, object_id); const unwrapped = try self.session.unwrapObject(allocator, object_id);
// std.debug.assert(executor.context.handle == unwrapped.context.handle); // The values context and groupId are not used here
return .{ .value = unwrapped.value, .executor = executor }; // The values context and groupId are not used here const toa = getTaggedAnyOpaque(unwrapped.value) orelse return null;
if (toa.subtype == null or toa.subtype != .node) return error.ObjectIdIsNotANode;
return toa.ptr;
} }
}; };
@@ -1391,10 +1391,6 @@ pub fn Env(comptime S: type, comptime types: anytype) type {
const executor = self.executor; const executor = self.executor;
return valueToString(allocator, self.value, executor.isolate, executor.context); return valueToString(allocator, self.value, executor.isolate, executor.context);
} }
pub fn taggedAnyOpaque(self: Value) ?*TaggedAnyOpaque {
return getTaggedAnyOpaque(self.value);
}
}; };
// Reverses the mapZigInstanceToJs, making sure that our TaggedAnyOpaque // Reverses the mapZigInstanceToJs, making sure that our TaggedAnyOpaque