import manifest from "../deno.json" with { type: "json" };
import { dlopen, download } from "@denosaurs/plug";import { Webview } from "./webview.ts";
const version = manifest.version;const cache = Deno.env.get("PLUGIN_URL") === undefined ? "use" : "reloadAll";const url = Deno.env.get("PLUGIN_URL") ?? `https://github.com/webview/webview_deno/releases/download/${version}/`;
const encoder = new TextEncoder();
export function encodeCString(value: string) { return encoder.encode(value + "\0");}
async function checkForWebView2Loader(): Promise<boolean> { return await Deno.stat("./WebView2Loader.dll").then( () => true, (e) => e instanceof Deno.errors.NotFound ? false : true, );}
let preloaded = false;
export const instances: Webview[] = [];
export async function preload() { if (preloaded) return;
if (Deno.build.os === "windows") { if (await checkForWebView2Loader()) { await Deno.remove("./WebView2Loader.dll"); }
const webview2loader = await download({ url: `${url}/WebView2Loader.dll`, cache, }); await Deno.copyFile(webview2loader, "./WebView2Loader.dll");
self.addEventListener("unload", unload); }
preloaded = true;}
export function unload() { for (const instance of instances) { instance.destroy(); } lib.close(); if (Deno.build.os === "windows") { Deno.removeSync("./WebView2Loader.dll"); }}
if (Deno.build.os === "windows") { if ((self as never)["window"]) { await preload(); } else if (!await checkForWebView2Loader()) { throw new Error( "WebView2Loader.dll does not exist! Make sure to run preload() from the main thread.", ); }}
export const lib = await dlopen( { name: "webview", url, cache, suffixes: { darwin: `.${Deno.build.arch}`, }, }, { "webview_create": { parameters: ["i32", "pointer"], result: "pointer", }, "webview_destroy": { parameters: ["pointer"], result: "void", }, "webview_run": { parameters: ["pointer"], result: "void", }, "webview_terminate": { parameters: ["pointer"], result: "void", }, "webview_get_window": { parameters: ["pointer"], result: "pointer", }, "webview_set_title": { parameters: ["pointer", "buffer"], result: "void", }, "webview_set_size": { parameters: ["pointer", "i32", "i32", "i32"], result: "void", }, "webview_navigate": { parameters: ["pointer", "buffer"], result: "void", }, "webview_set_html": { parameters: ["pointer", "pointer"], result: "void", }, "webview_init": { parameters: ["pointer", "buffer"], result: "void", }, "webview_eval": { parameters: ["pointer", "buffer"], result: "void", }, "webview_bind": { parameters: ["pointer", "buffer", "function", "pointer"], result: "void", }, "webview_unbind": { parameters: ["pointer", "buffer"], result: "void", }, "webview_return": { parameters: ["pointer", "buffer", "i32", "buffer"], result: "void", }, } as const,);