@oazmi/build-tools
Version:
general deno build tool scripts which I practically use in all of my typescript repos
921 lines (920 loc) • 34 kB
JavaScript
// @generated file from wasmbuild -- do not edit
import * as dntShim from "../../../../../_dnt.shims.js";
// @ts-nocheck: generated
// deno-lint-ignore-file
// deno-fmt-ignore-file
// source-hash: 8ea3226c49958960e6b386a27836138118156759
let wasm;
const heap = new Array(128).fill(undefined);
heap.push(undefined, null, true, false);
let heap_next = heap.length;
function addHeapObject(obj) {
if (heap_next === heap.length)
heap.push(heap.length + 1);
const idx = heap_next;
heap_next = heap[idx];
heap[idx] = obj;
return idx;
}
const cachedTextDecoder = typeof TextDecoder !== "undefined"
? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true })
: {
decode: () => {
throw Error("TextDecoder not available");
},
};
if (typeof TextDecoder !== "undefined")
cachedTextDecoder.decode();
let cachedUint8Memory0 = null;
function getUint8Memory0() {
if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) {
cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer);
}
return cachedUint8Memory0;
}
function getStringFromWasm0(ptr, len) {
ptr = ptr >>> 0;
return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len));
}
function getObject(idx) {
return heap[idx];
}
function isLikeNone(x) {
return x === undefined || x === null;
}
let cachedFloat64Memory0 = null;
function getFloat64Memory0() {
if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) {
cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer);
}
return cachedFloat64Memory0;
}
let cachedInt32Memory0 = null;
function getInt32Memory0() {
if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) {
cachedInt32Memory0 = new Int32Array(wasm.memory.buffer);
}
return cachedInt32Memory0;
}
let WASM_VECTOR_LEN = 0;
const cachedTextEncoder = typeof TextEncoder !== "undefined"
? new TextEncoder("utf-8")
: {
encode: () => {
throw Error("TextEncoder not available");
},
};
const encodeString = function (arg, view) {
return cachedTextEncoder.encodeInto(arg, view);
};
function passStringToWasm0(arg, malloc, realloc) {
if (realloc === undefined) {
const buf = cachedTextEncoder.encode(arg);
const ptr = malloc(buf.length, 1) >>> 0;
getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf);
WASM_VECTOR_LEN = buf.length;
return ptr;
}
let len = arg.length;
let ptr = malloc(len, 1) >>> 0;
const mem = getUint8Memory0();
let offset = 0;
for (; offset < len; offset++) {
const code = arg.charCodeAt(offset);
if (code > 0x7F)
break;
mem[ptr + offset] = code;
}
if (offset !== len) {
if (offset !== 0) {
arg = arg.slice(offset);
}
ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;
const view = getUint8Memory0().subarray(ptr + offset, ptr + len);
const ret = encodeString(arg, view);
offset += ret.written;
ptr = realloc(ptr, len, offset, 1) >>> 0;
}
WASM_VECTOR_LEN = offset;
return ptr;
}
function dropObject(idx) {
if (idx < 132)
return;
heap[idx] = heap_next;
heap_next = idx;
}
function takeObject(idx) {
const ret = getObject(idx);
dropObject(idx);
return ret;
}
let cachedBigInt64Memory0 = null;
function getBigInt64Memory0() {
if (cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0) {
cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer);
}
return cachedBigInt64Memory0;
}
function debugString(val) {
// primitive types
const type = typeof val;
if (type == "number" || type == "boolean" || val == null) {
return `${val}`;
}
if (type == "string") {
return `"${val}"`;
}
if (type == "symbol") {
const description = val.description;
if (description == null) {
return "Symbol";
}
else {
return `Symbol(${description})`;
}
}
if (type == "function") {
const name = val.name;
if (typeof name == "string" && name.length > 0) {
return `Function(${name})`;
}
else {
return "Function";
}
}
// objects
if (Array.isArray(val)) {
const length = val.length;
let debug = "[";
if (length > 0) {
debug += debugString(val[0]);
}
for (let i = 1; i < length; i++) {
debug += ", " + debugString(val[i]);
}
debug += "]";
return debug;
}
// Test for built-in
const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val));
let className;
if (builtInMatches.length > 1) {
className = builtInMatches[1];
}
else {
// Failed to match the standard '[object ClassName]'
return toString.call(val);
}
if (className == "Object") {
// we're a user defined class or Object
// JSON.stringify avoids problems with cycles, and is generally much
// easier than looping through ownProperties of `val`.
try {
return "Object(" + JSON.stringify(val) + ")";
}
catch (_) {
return "Object";
}
}
// errors
if (val instanceof Error) {
return `${val.name}: ${val.message}\n${val.stack}`;
}
// TODO we could test for more things here, like `Set`s and `Map`s.
return className;
}
const CLOSURE_DTORS = (typeof FinalizationRegistry === "undefined")
? { register: () => { }, unregister: () => { } }
: new FinalizationRegistry((state) => {
wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b);
});
function makeMutClosure(arg0, arg1, dtor, f) {
const state = { a: arg0, b: arg1, cnt: 1, dtor };
const real = (...args) => {
// First up with a closure we increment the internal reference
// count. This ensures that the Rust closure environment won't
// be deallocated while we're invoking it.
state.cnt++;
const a = state.a;
state.a = 0;
try {
return f(a, state.b, ...args);
}
finally {
if (--state.cnt === 0) {
wasm.__wbindgen_export_2.get(state.dtor)(a, state.b);
CLOSURE_DTORS.unregister(state);
}
else {
state.a = a;
}
}
};
real.original = state;
CLOSURE_DTORS.register(real, state, state);
return real;
}
function __wbg_adapter_48(arg0, arg1, arg2) {
wasm
._dyn_core__ops__function__FnMut__A____Output___R_as_wasm_bindgen__closure__WasmClosure___describe__invoke__h18256d698b0694c6(arg0, arg1, addHeapObject(arg2));
}
/**
* @param {any} roots
* @param {Function} load
* @param {string | undefined} maybe_default_jsx_import_source
* @param {string | undefined} maybe_default_jsx_import_source_types
* @param {string | undefined} maybe_jsx_import_source_module
* @param {Function | undefined} maybe_cache_info
* @param {Function | undefined} maybe_resolve
* @param {Function | undefined} maybe_resolve_types
* @param {string | undefined} maybe_graph_kind
* @param {any} maybe_imports
* @returns {Promise<any>}
*/
export function createGraph(roots, load, maybe_default_jsx_import_source, maybe_default_jsx_import_source_types, maybe_jsx_import_source_module, maybe_cache_info, maybe_resolve, maybe_resolve_types, maybe_graph_kind, maybe_imports) {
var ptr0 = isLikeNone(maybe_default_jsx_import_source)
? 0
: passStringToWasm0(maybe_default_jsx_import_source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len0 = WASM_VECTOR_LEN;
var ptr1 = isLikeNone(maybe_default_jsx_import_source_types)
? 0
: passStringToWasm0(maybe_default_jsx_import_source_types, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
var ptr2 = isLikeNone(maybe_jsx_import_source_module)
? 0
: passStringToWasm0(maybe_jsx_import_source_module, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len2 = WASM_VECTOR_LEN;
var ptr3 = isLikeNone(maybe_graph_kind)
? 0
: passStringToWasm0(maybe_graph_kind, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len3 = WASM_VECTOR_LEN;
const ret = wasm.createGraph(addHeapObject(roots), addHeapObject(load), ptr0, len0, ptr1, len1, ptr2, len2, isLikeNone(maybe_cache_info) ? 0 : addHeapObject(maybe_cache_info), isLikeNone(maybe_resolve) ? 0 : addHeapObject(maybe_resolve), isLikeNone(maybe_resolve_types) ? 0 : addHeapObject(maybe_resolve_types), ptr3, len3, addHeapObject(maybe_imports));
return takeObject(ret);
}
function passArray8ToWasm0(arg, malloc) {
const ptr = malloc(arg.length * 1, 1) >>> 0;
getUint8Memory0().set(arg, ptr / 1);
WASM_VECTOR_LEN = arg.length;
return ptr;
}
/**
* @param {string} specifier
* @param {any} maybe_headers
* @param {string | undefined} maybe_default_jsx_import_source
* @param {string | undefined} maybe_default_jsx_import_types_source
* @param {string | undefined} maybe_jsx_import_source_module
* @param {Uint8Array} content
* @param {Function | undefined} [maybe_resolve]
* @param {Function | undefined} [maybe_resolve_types]
* @returns {Promise<any>}
*/
export function parseModule(specifier, maybe_headers, maybe_default_jsx_import_source, maybe_default_jsx_import_types_source, maybe_jsx_import_source_module, content, maybe_resolve, maybe_resolve_types) {
const ptr0 = passStringToWasm0(specifier, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len0 = WASM_VECTOR_LEN;
var ptr1 = isLikeNone(maybe_default_jsx_import_source)
? 0
: passStringToWasm0(maybe_default_jsx_import_source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
var ptr2 = isLikeNone(maybe_default_jsx_import_types_source)
? 0
: passStringToWasm0(maybe_default_jsx_import_types_source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len2 = WASM_VECTOR_LEN;
var ptr3 = isLikeNone(maybe_jsx_import_source_module)
? 0
: passStringToWasm0(maybe_jsx_import_source_module, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len3 = WASM_VECTOR_LEN;
const ptr4 = passArray8ToWasm0(content, wasm.__wbindgen_malloc);
const len4 = WASM_VECTOR_LEN;
const ret = wasm.parseModule(ptr0, len0, addHeapObject(maybe_headers), ptr1, len1, ptr2, len2, ptr3, len3, ptr4, len4, isLikeNone(maybe_resolve) ? 0 : addHeapObject(maybe_resolve), isLikeNone(maybe_resolve_types) ? 0 : addHeapObject(maybe_resolve_types));
return takeObject(ret);
}
function handleError(f, args) {
try {
return f.apply(this, args);
}
catch (e) {
wasm.__wbindgen_exn_store(addHeapObject(e));
}
}
function __wbg_adapter_103(arg0, arg1, arg2, arg3) {
wasm.wasm_bindgen__convert__closures__invoke2_mut__h06a9eaaeb0dd48c7(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
}
const imports = {
__wbindgen_placeholder__: {
__wbg_new_632630b5cec17f21: function () {
const ret = new Object();
return addHeapObject(ret);
},
__wbg_set_e4cfc2763115ffc7: function (arg0, arg1, arg2) {
const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));
return addHeapObject(ret);
},
__wbg_set_841ac57cff3d672b: function (arg0, arg1, arg2) {
getObject(arg0)[takeObject(arg1)] = takeObject(arg2);
},
__wbg_new_75208e29bddfd88c: function () {
const ret = new Array();
return addHeapObject(ret);
},
__wbg_set_79c308ecd9a1d091: function (arg0, arg1, arg2) {
getObject(arg0)[arg1 >>> 0] = takeObject(arg2);
},
__wbg_iterator_40027cdd598da26b: function () {
const ret = Symbol.iterator;
return addHeapObject(ret);
},
__wbg_length_161c0d89c6535c1d: function (arg0) {
const ret = getObject(arg0).length;
return ret;
},
__wbindgen_number_new: function (arg0) {
const ret = arg0;
return addHeapObject(ret);
},
__wbindgen_bigint_from_i64: function (arg0) {
const ret = arg0;
return addHeapObject(ret);
},
__wbindgen_error_new: function (arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
},
__wbindgen_is_string: function (arg0) {
const ret = typeof (getObject(arg0)) === "string";
return ret;
},
__wbindgen_is_undefined: function (arg0) {
const ret = getObject(arg0) === undefined;
return ret;
},
__wbindgen_in: function (arg0, arg1) {
const ret = getObject(arg0) in getObject(arg1);
return ret;
},
__wbindgen_number_get: function (arg0, arg1) {
const obj = getObject(arg1);
const ret = typeof obj === "number" ? obj : undefined;
getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
},
__wbindgen_boolean_get: function (arg0) {
const v = getObject(arg0);
const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2;
return ret;
},
__wbindgen_string_get: function (arg0, arg1) {
const obj = getObject(arg1);
const ret = typeof obj === "string" ? obj : undefined;
var ptr1 = isLikeNone(ret)
? 0
: passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
var len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
},
__wbindgen_is_bigint: function (arg0) {
const ret = typeof (getObject(arg0)) === "bigint";
return ret;
},
__wbindgen_is_object: function (arg0) {
const val = getObject(arg0);
const ret = typeof val === "object" && val !== null;
return ret;
},
__wbindgen_bigint_from_u64: function (arg0) {
const ret = BigInt.asUintN(64, arg0);
return addHeapObject(ret);
},
__wbg_new_73a5987615ec8862: function (arg0, arg1) {
const ret = new Error(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
},
__wbg_String_88810dfeb4021902: function (arg0, arg1) {
const ret = String(getObject(arg1));
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
},
__wbindgen_jsval_eq: function (arg0, arg1) {
const ret = getObject(arg0) === getObject(arg1);
return ret;
},
__wbg_get_0ee8ea3c7c984c45: function (arg0, arg1) {
const ret = getObject(arg0)[arg1 >>> 0];
return addHeapObject(ret);
},
__wbindgen_string_new: function (arg0, arg1) {
const ret = getStringFromWasm0(arg0, arg1);
return addHeapObject(ret);
},
__wbg_getwithrefkey_5e6d9547403deab8: function (arg0, arg1) {
const ret = getObject(arg0)[getObject(arg1)];
return addHeapObject(ret);
},
__wbg_resolve_5da6faf2c96fd1d5: function (arg0) {
const ret = Promise.resolve(getObject(arg0));
return addHeapObject(ret);
},
__wbg_then_20a5920e447d1cb1: function (arg0, arg1, arg2) {
const ret = getObject(arg0).then(getObject(arg1), getObject(arg2));
return addHeapObject(ret);
},
__wbg_new_70828a4353259d4b: function (arg0, arg1) {
try {
var state0 = { a: arg0, b: arg1 };
var cb0 = (arg0, arg1) => {
const a = state0.a;
state0.a = 0;
try {
return __wbg_adapter_103(a, state0.b, arg0, arg1);
}
finally {
state0.a = a;
}
};
const ret = new Promise(cb0);
return addHeapObject(ret);
}
finally {
state0.a = state0.b = 0;
}
},
__wbg_new_abda76e883ba8a5f: function () {
const ret = new Error();
return addHeapObject(ret);
},
__wbg_stack_658279fe44541cf6: function (arg0, arg1) {
const ret = getObject(arg1).stack;
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
},
__wbg_error_f851667af71bcfc6: function (arg0, arg1) {
let deferred0_0;
let deferred0_1;
try {
deferred0_0 = arg0;
deferred0_1 = arg1;
console.error(getStringFromWasm0(arg0, arg1));
}
finally {
wasm.__wbindgen_free(deferred0_0, deferred0_1, 1);
}
},
__wbindgen_object_drop_ref: function (arg0) {
takeObject(arg0);
},
__wbindgen_is_function: function (arg0) {
const ret = typeof (getObject(arg0)) === "function";
return ret;
},
__wbg_call_3f093dd26d5569f8: function () {
return handleError(function (arg0, arg1) {
const ret = getObject(arg0).call(getObject(arg1));
return addHeapObject(ret);
}, arguments);
},
__wbg_next_b2d3366343a208b3: function () {
return handleError(function (arg0) {
const ret = getObject(arg0).next();
return addHeapObject(ret);
}, arguments);
},
__wbg_done_90b14d6f6eacc42f: function (arg0) {
const ret = getObject(arg0).done;
return ret;
},
__wbg_value_3158be908c80a75e: function (arg0) {
const ret = getObject(arg0).value;
return addHeapObject(ret);
},
__wbg_get_3fddfed2c83f434c: function () {
return handleError(function (arg0, arg1) {
const ret = Reflect.get(getObject(arg0), getObject(arg1));
return addHeapObject(ret);
}, arguments);
},
__wbg_next_586204376d2ed373: function (arg0) {
const ret = getObject(arg0).next;
return addHeapObject(ret);
},
__wbg_self_05040bd9523805b9: function () {
return handleError(function () {
const ret = self.self;
return addHeapObject(ret);
}, arguments);
},
__wbg_window_adc720039f2cb14f: function () {
return handleError(function () {
const ret = globalThis.window;
return addHeapObject(ret);
}, arguments);
},
__wbg_globalThis_622105db80c1457d: function () {
return handleError(function () {
const ret = globalThis.globalThis;
return addHeapObject(ret);
}, arguments);
},
__wbg_global_f56b013ed9bcf359: function () {
return handleError(function () {
const ret = global.global;
return addHeapObject(ret);
}, arguments);
},
__wbg_newnoargs_cfecb3965268594c: function (arg0, arg1) {
const ret = new Function(getStringFromWasm0(arg0, arg1));
return addHeapObject(ret);
},
__wbg_isArray_e783c41d0dd19b44: function (arg0) {
const ret = Array.isArray(getObject(arg0));
return ret;
},
__wbg_call_67f2111acd2dfdb6: function () {
return handleError(function (arg0, arg1, arg2) {
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2));
return addHeapObject(ret);
}, arguments);
},
__wbg_call_ef6edd65b3d356b6: function () {
return handleError(function (arg0, arg1, arg2, arg3) {
const ret = getObject(arg0).call(getObject(arg1), getObject(arg2), getObject(arg3));
return addHeapObject(ret);
}, arguments);
},
__wbg_isSafeInteger_a23a66ee7c41b273: function (arg0) {
const ret = Number.isSafeInteger(getObject(arg0));
return ret;
},
__wbg_length_21c4b0ae73cba59d: function (arg0) {
const ret = getObject(arg0).length;
return ret;
},
__wbindgen_memory: function () {
const ret = wasm.memory;
return addHeapObject(ret);
},
__wbg_buffer_b914fb8b50ebbc3e: function (arg0) {
const ret = getObject(arg0).buffer;
return addHeapObject(ret);
},
__wbg_new_b1f2d6842d615181: function (arg0) {
const ret = new Uint8Array(getObject(arg0));
return addHeapObject(ret);
},
__wbg_set_7d988c98e6ced92d: function (arg0, arg1, arg2) {
getObject(arg0).set(getObject(arg1), arg2 >>> 0);
},
__wbindgen_jsval_loose_eq: function (arg0, arg1) {
const ret = getObject(arg0) == getObject(arg1);
return ret;
},
__wbg_instanceof_Uint8Array_c299a4ee232e76ba: function (arg0) {
let result;
try {
result = getObject(arg0) instanceof Uint8Array;
}
catch (_) {
result = false;
}
const ret = result;
return ret;
},
__wbg_instanceof_ArrayBuffer_9221fa854ffb71b5: function (arg0) {
let result;
try {
result = getObject(arg0) instanceof ArrayBuffer;
}
catch (_) {
result = false;
}
const ret = result;
return ret;
},
__wbg_entries_488960b196cfb6a5: function (arg0) {
const ret = Object.entries(getObject(arg0));
return addHeapObject(ret);
},
__wbindgen_object_clone_ref: function (arg0) {
const ret = getObject(arg0);
return addHeapObject(ret);
},
__wbg_new_d1cc518eff6805bb: function () {
const ret = new Map();
return addHeapObject(ret);
},
__wbindgen_bigint_get_as_i64: function (arg0, arg1) {
const v = getObject(arg1);
const ret = typeof v === "bigint" ? v : undefined;
getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret;
getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret);
},
__wbindgen_debug_string: function (arg0, arg1) {
const ret = debugString(getObject(arg1));
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
const len1 = WASM_VECTOR_LEN;
getInt32Memory0()[arg0 / 4 + 1] = len1;
getInt32Memory0()[arg0 / 4 + 0] = ptr1;
},
__wbindgen_throw: function (arg0, arg1) {
throw new Error(getStringFromWasm0(arg0, arg1));
},
__wbindgen_cb_drop: function (arg0) {
const obj = takeObject(arg0).original;
if (obj.cnt-- == 1) {
obj.a = 0;
return true;
}
const ret = false;
return ret;
},
__wbg_then_f9e58f5a50f43eae: function (arg0, arg1) {
const ret = getObject(arg0).then(getObject(arg1));
return addHeapObject(ret);
},
__wbg_queueMicrotask_f61ee94ee663068b: function (arg0) {
queueMicrotask(getObject(arg0));
},
__wbg_queueMicrotask_f82fc5d1e8f816ae: function (arg0) {
const ret = getObject(arg0).queueMicrotask;
return addHeapObject(ret);
},
__wbindgen_closure_wrapper649: function (arg0, arg1, arg2) {
const ret = makeMutClosure(arg0, arg1, 664, __wbg_adapter_48);
return addHeapObject(ret);
},
},
};
class WasmBuildLoader {
#options;
#lastLoadPromise;
#instantiated;
constructor(options) {
this.#options = options;
}
get instance() {
return this.#instantiated?.instance;
}
get module() {
return this.#instantiated?.module;
}
load(url, decompress) {
if (this.#instantiated) {
return Promise.resolve(this.#instantiated);
}
else if (this.#lastLoadPromise == null) {
this.#lastLoadPromise = (async () => {
try {
this.#instantiated = await this.#instantiate(url, decompress);
return this.#instantiated;
}
finally {
this.#lastLoadPromise = undefined;
}
})();
}
return this.#lastLoadPromise;
}
async #instantiate(url, decompress) {
const imports = this.#options.imports;
if (this.#options.cache != null && url.protocol !== "file:") {
try {
const result = await this.#options.cache(url, decompress ?? ((bytes) => bytes));
if (result instanceof URL) {
url = result;
decompress = undefined; // already decompressed
}
else if (result != null) {
return WebAssembly.instantiate(result, imports);
}
}
catch {
// ignore if caching ever fails (ex. when on deploy)
}
}
const isFile = url.protocol === "file:";
// make file urls work in Node via dnt
const isNode = globalThis.process?.versions?.node != null;
if (isFile && typeof dntShim.Deno !== "object") {
throw new Error("Loading local files are not supported in this environment");
}
if (isNode && isFile) {
// the deno global will be shimmed by dnt
const wasmCode = await dntShim.Deno.readFile(url);
return WebAssembly.instantiate(decompress ? decompress(wasmCode) : wasmCode, imports);
}
switch (url.protocol) {
case "file:":
case "https:":
case "http:": {
const wasmResponse = await fetchWithRetries(url);
if (decompress) {
const wasmCode = new Uint8Array(await wasmResponse.arrayBuffer());
return WebAssembly.instantiate(decompress(wasmCode), imports);
}
if (isFile ||
wasmResponse.headers.get("content-type")?.toLowerCase()
.startsWith("application/wasm")) {
return WebAssembly.instantiateStreaming(wasmResponse, imports);
}
else {
return WebAssembly.instantiate(await wasmResponse.arrayBuffer(), imports);
}
}
default:
throw new Error(`Unsupported protocol: ${url.protocol}`);
}
}
}
const isNodeOrDeno = typeof dntShim.Deno === "object" ||
(typeof process !== "undefined" && process.versions != null &&
process.versions.node != null);
const loader = new WasmBuildLoader({
imports,
cache: isNodeOrDeno ? cacheToLocalDir : undefined,
});
export async function instantiate(opts) {
return (await instantiateWithInstance(opts)).exports;
}
export async function instantiateWithInstance(opts) {
const { instance } = await loader.load(opts?.url ?? new URL("deno_graph_wasm_bg.wasm", globalThis[Symbol.for("import-meta-ponyfill-esmodule")](import.meta).url), opts?.decompress);
wasm = wasm ?? instance.exports;
cachedInt32Memory0 = cachedInt32Memory0 ?? new Int32Array(wasm.memory.buffer);
cachedUint8Memory0 = cachedUint8Memory0 ?? new Uint8Array(wasm.memory.buffer);
return {
instance,
exports: getWasmInstanceExports(),
};
}
function getWasmInstanceExports() {
return { createGraph, parseModule };
}
export function isInstantiated() {
return loader.instance != null;
}
export async function cacheToLocalDir(url, decompress) {
const localPath = await getUrlLocalPath(url);
if (localPath == null) {
return undefined;
}
if (!await exists(localPath)) {
const fileBytes = decompress(new Uint8Array(await getUrlBytes(url)));
try {
await dntShim.Deno.writeFile(localPath, fileBytes);
}
catch {
// ignore and return the wasm bytes
return fileBytes;
}
}
return toFileUrl(localPath);
}
async function getUrlLocalPath(url) {
try {
const dataDirPath = await getInitializedLocalDataDirPath();
const hash = await getUrlHash(url);
return `${dataDirPath}/${hash}.wasm`;
}
catch {
return undefined;
}
}
async function getInitializedLocalDataDirPath() {
const dataDir = localDataDir();
if (dataDir == null) {
throw new Error(`Could not find local data directory.`);
}
const dirPath = `${dataDir}/deno-wasmbuild`;
await ensureDir(dirPath);
return dirPath;
}
async function exists(filePath) {
try {
await dntShim.Deno.lstat(filePath);
return true;
}
catch (error) {
if (error instanceof dntShim.Deno.errors.NotFound) {
return false;
}
throw error;
}
}
async function ensureDir(dir) {
try {
const fileInfo = await dntShim.Deno.lstat(dir);
if (!fileInfo.isDirectory) {
throw new Error(`Path was not a directory '${dir}'`);
}
}
catch (err) {
if (err instanceof dntShim.Deno.errors.NotFound) {
// if dir not exists. then create it.
await dntShim.Deno.mkdir(dir, { recursive: true });
return;
}
throw err;
}
}
async function getUrlHash(url) {
// Taken from MDN: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
const hashBuffer = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(url.href));
// convert buffer to byte array
const hashArray = Array.from(new Uint8Array(hashBuffer));
// convert bytes to hex string
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join("");
return hashHex;
}
async function getUrlBytes(url) {
const response = await fetchWithRetries(url);
return await response.arrayBuffer();
}
// the below is extracted from deno_std/path
const WHITESPACE_ENCODINGS = {
"\u0009": "%09",
"\u000A": "%0A",
"\u000B": "%0B",
"\u000C": "%0C",
"\u000D": "%0D",
"\u0020": "%20",
};
function encodeWhitespace(string) {
return string.replaceAll(/[\s]/g, (c) => {
return WHITESPACE_ENCODINGS[c] ?? c;
});
}
function toFileUrl(path) {
return dntShim.Deno.build.os === "windows"
? windowsToFileUrl(path)
: posixToFileUrl(path);
}
function posixToFileUrl(path) {
const url = new URL("file:///");
url.pathname = encodeWhitespace(path.replace(/%/g, "%25").replace(/\\/g, "%5C"));
return url;
}
function windowsToFileUrl(path) {
const [, hostname, pathname] = path.match(/^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/);
const url = new URL("file:///");
url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25"));
if (hostname != null && hostname != "localhost") {
url.hostname = hostname;
if (!url.hostname) {
throw new TypeError("Invalid hostname.");
}
}
return url;
}
export async function fetchWithRetries(url, maxRetries = 5) {
let sleepMs = 250;
let iterationCount = 0;
while (true) {
iterationCount++;
try {
const res = await fetch(url);
if (res.ok || iterationCount > maxRetries) {
return res;
}
}
catch (err) {
if (iterationCount > maxRetries) {
throw err;
}
}
console.warn(`Failed fetching. Retrying in ${sleepMs}ms...`);
await new Promise((resolve) => setTimeout(resolve, sleepMs));
sleepMs = Math.min(sleepMs * 2, 10000);
}
}
// MIT License - Copyright (c) justjavac.
// https://github.com/justjavac/deno_dirs/blob/e8c001bbef558f08fd486d444af391729b0b8068/data_local_dir/mod.ts
function localDataDir() {
switch (dntShim.Deno.build.os) {
case "linux": {
const xdg = dntShim.Deno.env.get("XDG_DATA_HOME");
if (xdg) {
return xdg;
}
const home = dntShim.Deno.env.get("HOME");
if (home) {
return `${home}/.local/share`;
}
break;
}
case "darwin": {
const home = dntShim.Deno.env.get("HOME");
if (home) {
return `${home}/Library/Application Support`;
}
break;
}
case "windows":
return dntShim.Deno.env.get("LOCALAPPDATA") ?? undefined;
}
return undefined;
}