// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. "use strict"; ((window) => { const core = window.Deno.core; const __bootstrap = window.__bootstrap; class DynamicLibrary { #rid; symbols = {}; constructor(path, symbols) { this.#rid = core.opSync("op_ffi_load", { path, symbols }); for (const symbol in symbols) { this.symbols[symbol] = symbols[symbol].nonblocking ? (...parameters) => core.opAsync("op_ffi_call_nonblocking", { rid: this.#rid, symbol, parameters, }) : (...parameters) => core.opSync("op_ffi_call", { rid: this.#rid, symbol, parameters }); } } close() { core.close(this.#rid); } } function dlopen(path, symbols) { // URL support is progressively enhanced by util in `runtime/js`. const pathFromURL = __bootstrap.util.pathFromURL ?? ((p) => p); return new DynamicLibrary(pathFromURL(path), symbols); } window.__bootstrap.ffi = { dlopen }; })(this);