@@ -36,6 +36,7 @@ pub const ModuleLoadFn = *const fn (ctx: *anyopaque, referrer: ?Module, specifie
36
36
pub const LoadFnType = @import ("generate.zig" ).LoadFnType ;
37
37
pub const loadFn = @import ("generate.zig" ).loadFn ;
38
38
const setNativeObject = @import ("generate.zig" ).setNativeObject ;
39
+ const setNativeType = @import ("generate.zig" ).setNativeType ;
39
40
const loadFunctionTemplate = @import ("generate.zig" ).loadFunctionTemplate ;
40
41
const bindObjectNativeAndJS = @import ("generate.zig" ).bindObjectNativeAndJS ;
41
42
const getTpl = @import ("generate.zig" ).getTpl ;
@@ -351,6 +352,29 @@ pub const Env = struct {
351
352
}
352
353
}
353
354
355
+ // Currently used for DOM nodes
356
+ // - value Note: *parser.Node should be converted to dom/node.zig.Union to get the most precise type
357
+ pub fn findOrAddValue (env : * Env , value : anytype ) ! v8.Value {
358
+ if (builtin .is_test ) {
359
+ // std.testing.refAllDecls(@import("server.zig")); Causes `try ret.lookup(gen.Types);` to throw an error
360
+ return error .TestingNotSupported ;
361
+ }
362
+ comptime var ret : refl.Type = undefined ;
363
+ comptime {
364
+ @setEvalBranchQuota (150_000 ); // Needed when this is called with a dom/node.zig.Union
365
+ ret = try refl .Type .reflect (@TypeOf (value ), null );
366
+ try ret .lookup (gen .Types );
367
+ }
368
+ return try setNativeType (
369
+ env .nat_ctx .alloc ,
370
+ & env .nat_ctx ,
371
+ ret ,
372
+ value ,
373
+ env .js_ctx .? ,
374
+ env .isolate ,
375
+ );
376
+ }
377
+
354
378
// compile and run a JS script
355
379
// It doesn't wait for callbacks execution
356
380
pub fn exec (
@@ -719,6 +743,13 @@ pub const Inspector = struct {
719
743
pub fn send (self : Inspector , env : Env , msg : []const u8 ) void {
720
744
return self .session .dispatchProtocolMessage (env .isolate , msg );
721
745
}
746
+
747
+ // Retrieves the RemoteObject for a given JsValue. We may extend the interface here to include:
748
+ // backendNodeId, objectGroup, executionContextId. For a complete resolveNode implementation at this level.
749
+ pub fn getRemoteObject (self : Inspector , env : * Env , jsValue : v8.Value , groupName : []const u8 ) ! v8.RemoteObject {
750
+ const generatePreview = false ; // We do not want to expose this as a parameter for now
751
+ return self .session .wrapObject (env .isolate , env .js_ctx .? , jsValue , groupName , generatePreview );
752
+ }
722
753
};
723
754
724
755
// When we return a Zig instance to V8, we wrap it in a v8.Object. That wrapping
0 commit comments