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 });