github.com/primecitizens/pcz/std@v0.2.1/plat/js/webext/dns/bindings/ffi_bindings.ts (about)

     1  import { importModule, Application, heap, Pointer } from "@ffi";
     2  
     3  importModule("plat/js/webext/dns", (A: Application) => {
     4    const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser;
     5  
     6    return {
     7      "store_ResolveCallbackResolveInfo": (ptr: Pointer, ref: heap.Ref<any>) => {
     8        const x = A.H.get<any>(ref);
     9  
    10        if (typeof x === "undefined") {
    11          A.store.Bool(ptr + 9, false);
    12          A.store.Bool(ptr + 8, false);
    13          A.store.Int32(ptr + 0, 0);
    14          A.store.Ref(ptr + 4, undefined);
    15        } else {
    16          A.store.Bool(ptr + 9, true);
    17          A.store.Bool(ptr + 8, "resultCode" in x ? true : false);
    18          A.store.Int32(ptr + 0, x["resultCode"] === undefined ? 0 : (x["resultCode"] as number));
    19          A.store.Ref(ptr + 4, x["address"]);
    20        }
    21      },
    22      "load_ResolveCallbackResolveInfo": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => {
    23        const x = create === A.H.TRUE ? {} : A.H.get<any>(ref);
    24  
    25        if (A.load.Bool(ptr + 8)) {
    26          x["resultCode"] = A.load.Int32(ptr + 0);
    27        } else {
    28          delete x["resultCode"];
    29        }
    30        x["address"] = A.load.Ref(ptr + 4, undefined);
    31        return create === A.H.TRUE ? A.H.push(x) : ref;
    32      },
    33      "has_Resolve": (): heap.Ref<boolean> => {
    34        if (WEBEXT?.dns && "resolve" in WEBEXT?.dns) {
    35          return A.H.TRUE;
    36        }
    37        return A.H.FALSE;
    38      },
    39      "func_Resolve": (fn: Pointer): void => {
    40        A.store.Ref(fn, WEBEXT.dns.resolve);
    41      },
    42      "call_Resolve": (retPtr: Pointer, hostname: heap.Ref<object>): void => {
    43        const _ret = WEBEXT.dns.resolve(A.H.get<object>(hostname));
    44        A.store.Ref(retPtr, _ret);
    45      },
    46      "try_Resolve": (retPtr: Pointer, errPtr: Pointer, hostname: heap.Ref<object>): heap.Ref<boolean> => {
    47        try {
    48          const _ret = WEBEXT.dns.resolve(A.H.get<object>(hostname));
    49          A.store.Ref(retPtr, _ret);
    50          return A.H.TRUE;
    51        } catch (err: any) {
    52          A.store.Ref(errPtr, err);
    53          return A.H.FALSE;
    54        }
    55      },
    56    };
    57  });