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

     1  import { importModule, Application, heap, Pointer } from "@ffi";
     2  
     3  importModule("plat/js/webext/crashreportprivate", (A: Application) => {
     4    const WEBEXT = typeof globalThis.browser === "undefined" ? globalThis.chrome : globalThis.browser;
     5  
     6    return {
     7      "store_ErrorInfo": (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 + 34, false);
    12          A.store.Ref(ptr + 0, undefined);
    13          A.store.Ref(ptr + 4, undefined);
    14          A.store.Ref(ptr + 8, undefined);
    15          A.store.Ref(ptr + 12, undefined);
    16          A.store.Bool(ptr + 32, false);
    17          A.store.Int32(ptr + 16, 0);
    18          A.store.Bool(ptr + 33, false);
    19          A.store.Int32(ptr + 20, 0);
    20          A.store.Ref(ptr + 24, undefined);
    21          A.store.Ref(ptr + 28, undefined);
    22        } else {
    23          A.store.Bool(ptr + 34, true);
    24          A.store.Ref(ptr + 0, x["message"]);
    25          A.store.Ref(ptr + 4, x["url"]);
    26          A.store.Ref(ptr + 8, x["product"]);
    27          A.store.Ref(ptr + 12, x["version"]);
    28          A.store.Bool(ptr + 32, "lineNumber" in x ? true : false);
    29          A.store.Int32(ptr + 16, x["lineNumber"] === undefined ? 0 : (x["lineNumber"] as number));
    30          A.store.Bool(ptr + 33, "columnNumber" in x ? true : false);
    31          A.store.Int32(ptr + 20, x["columnNumber"] === undefined ? 0 : (x["columnNumber"] as number));
    32          A.store.Ref(ptr + 24, x["debugId"]);
    33          A.store.Ref(ptr + 28, x["stackTrace"]);
    34        }
    35      },
    36      "load_ErrorInfo": (ptr: Pointer, create: heap.Ref<boolean>, ref: heap.Ref<any>): heap.Ref<any> => {
    37        const x = create === A.H.TRUE ? {} : A.H.get<any>(ref);
    38  
    39        x["message"] = A.load.Ref(ptr + 0, undefined);
    40        x["url"] = A.load.Ref(ptr + 4, undefined);
    41        x["product"] = A.load.Ref(ptr + 8, undefined);
    42        x["version"] = A.load.Ref(ptr + 12, undefined);
    43        if (A.load.Bool(ptr + 32)) {
    44          x["lineNumber"] = A.load.Int32(ptr + 16);
    45        } else {
    46          delete x["lineNumber"];
    47        }
    48        if (A.load.Bool(ptr + 33)) {
    49          x["columnNumber"] = A.load.Int32(ptr + 20);
    50        } else {
    51          delete x["columnNumber"];
    52        }
    53        x["debugId"] = A.load.Ref(ptr + 24, undefined);
    54        x["stackTrace"] = A.load.Ref(ptr + 28, undefined);
    55        return create === A.H.TRUE ? A.H.push(x) : ref;
    56      },
    57      "has_ReportError": (): heap.Ref<boolean> => {
    58        if (WEBEXT?.crashReportPrivate && "reportError" in WEBEXT?.crashReportPrivate) {
    59          return A.H.TRUE;
    60        }
    61        return A.H.FALSE;
    62      },
    63      "func_ReportError": (fn: Pointer): void => {
    64        A.store.Ref(fn, WEBEXT.crashReportPrivate.reportError);
    65      },
    66      "call_ReportError": (retPtr: Pointer, info: Pointer): void => {
    67        const info_ffi = {};
    68  
    69        info_ffi["message"] = A.load.Ref(info + 0, undefined);
    70        info_ffi["url"] = A.load.Ref(info + 4, undefined);
    71        info_ffi["product"] = A.load.Ref(info + 8, undefined);
    72        info_ffi["version"] = A.load.Ref(info + 12, undefined);
    73        if (A.load.Bool(info + 32)) {
    74          info_ffi["lineNumber"] = A.load.Int32(info + 16);
    75        }
    76        if (A.load.Bool(info + 33)) {
    77          info_ffi["columnNumber"] = A.load.Int32(info + 20);
    78        }
    79        info_ffi["debugId"] = A.load.Ref(info + 24, undefined);
    80        info_ffi["stackTrace"] = A.load.Ref(info + 28, undefined);
    81  
    82        const _ret = WEBEXT.crashReportPrivate.reportError(info_ffi);
    83        A.store.Ref(retPtr, _ret);
    84      },
    85      "try_ReportError": (retPtr: Pointer, errPtr: Pointer, info: Pointer): heap.Ref<boolean> => {
    86        try {
    87          const info_ffi = {};
    88  
    89          info_ffi["message"] = A.load.Ref(info + 0, undefined);
    90          info_ffi["url"] = A.load.Ref(info + 4, undefined);
    91          info_ffi["product"] = A.load.Ref(info + 8, undefined);
    92          info_ffi["version"] = A.load.Ref(info + 12, undefined);
    93          if (A.load.Bool(info + 32)) {
    94            info_ffi["lineNumber"] = A.load.Int32(info + 16);
    95          }
    96          if (A.load.Bool(info + 33)) {
    97            info_ffi["columnNumber"] = A.load.Int32(info + 20);
    98          }
    99          info_ffi["debugId"] = A.load.Ref(info + 24, undefined);
   100          info_ffi["stackTrace"] = A.load.Ref(info + 28, undefined);
   101  
   102          const _ret = WEBEXT.crashReportPrivate.reportError(info_ffi);
   103          A.store.Ref(retPtr, _ret);
   104          return A.H.TRUE;
   105        } catch (err: any) {
   106          A.store.Ref(errPtr, err);
   107          return A.H.FALSE;
   108        }
   109      },
   110    };
   111  });