UNPKG

taglib-wasm

Version:

TagLib for TypeScript platforms: Deno, Node.js, Bun, Electron, browsers, and Cloudflare Workers

61 lines (60 loc) 2.05 kB
import { TagLib } from "./taglib.js"; function isDenoCompiled() { return typeof Deno !== "undefined" && // @ts-ignore: Deno global is only available in Deno runtime typeof Deno.mainModule === "string" && // @ts-ignore: Deno global is only available in Deno runtime Deno.mainModule.includes("deno-compile://"); } async function initializeForDenoCompile(embeddedWasmPath = "./taglib-web.wasm") { if (isDenoCompiled()) { try { const wasmUrl = new URL(embeddedWasmPath, import.meta.url); const wasmBinary = await Deno.readFile(wasmUrl); return await TagLib.initialize({ wasmBinary }); } catch (error) { console.warn( `Could not load embedded WASM from ${embeddedWasmPath}:`, error ); console.warn("Falling back to network fetch (requires --allow-net)"); } } return await TagLib.initialize(); } async function prepareWasmForEmbedding(outputPath = "./taglib-web.wasm") { try { const possiblePaths = [ new URL("../dist/taglib-web.wasm", import.meta.url), new URL("../build/taglib-web.wasm", import.meta.url), new URL( "./node_modules/taglib-wasm/dist/taglib-web.wasm", import.meta.url ) ]; let wasmData = null; let sourcePath = null; for (const path of possiblePaths) { try { wasmData = await Deno.readFile(path); sourcePath = path.pathname; break; } catch { } } if (!wasmData || !sourcePath) { throw new Error("Could not find taglib-web.wasm in expected locations"); } await Deno.writeFile(outputPath, wasmData); console.log(`WASM file copied from ${sourcePath} to ${outputPath}`); console.log( `Include this file when compiling: deno compile --include ${outputPath} ...` ); } catch (error) { const message = error instanceof Error ? error.message : String(error); throw new Error(`Failed to prepare WASM for embedding: ${message}`); } } export { initializeForDenoCompile, isDenoCompiled, prepareWasmForEmbedding };