UNPKG

taglib-wasm

Version:

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

138 lines (137 loc) 3.81 kB
function hasWASISupport() { if (typeof Deno !== "undefined") { return true; } const globalAny = globalThis; if (typeof globalAny.process !== "undefined" && globalAny.process.versions?.node) { const [major] = globalAny.process.versions.node.split(".").map(Number); return major >= 16; } return false; } function isBrowser() { return typeof window !== "undefined" && typeof document !== "undefined"; } function isWebWorker() { const globalAny = globalThis; return typeof globalAny.WorkerGlobalScope !== "undefined" && typeof globalAny.self !== "undefined" && globalAny.self instanceof globalAny.WorkerGlobalScope; } function isCloudflareWorker() { const globalAny = globalThis; return typeof caches !== "undefined" && typeof Request !== "undefined" && typeof addEventListener === "function" && typeof Deno === "undefined" && typeof globalAny.process === "undefined"; } function isNode() { const globalAny = globalThis; return typeof globalAny.process !== "undefined" && globalAny.process.versions?.node !== void 0; } function isDeno() { return typeof Deno !== "undefined"; } function detectRuntime() { if (isDeno() && hasWASISupport()) { return { environment: "deno-wasi", wasmType: "wasi", supportsFilesystem: true, supportsStreaming: true, performanceTier: 1 }; } if (isNode() && hasWASISupport()) { return { environment: "node-wasi", wasmType: "wasi", supportsFilesystem: true, supportsStreaming: true, performanceTier: 1 }; } if (isBrowser()) { return { environment: "browser", wasmType: "emscripten", supportsFilesystem: false, supportsStreaming: true, performanceTier: 2 }; } if (isWebWorker()) { return { environment: "worker", wasmType: "emscripten", supportsFilesystem: false, supportsStreaming: true, performanceTier: 2 }; } if (isCloudflareWorker()) { return { environment: "cloudflare", wasmType: "emscripten", supportsFilesystem: false, supportsStreaming: false, // Limited streaming capabilities performanceTier: 3 }; } if (isNode()) { return { environment: "node-emscripten", wasmType: "emscripten", supportsFilesystem: true, supportsStreaming: true, performanceTier: 3 }; } return { environment: "browser", // Default assumption wasmType: "emscripten", supportsFilesystem: false, supportsStreaming: true, performanceTier: 3 }; } function getEnvironmentDescription(env) { switch (env) { case "deno-wasi": return "Deno with WASI (optimal filesystem performance)"; case "node-wasi": return "Node.js with WASI (high performance)"; case "browser": return "Browser with Emscripten (web compatibility)"; case "worker": return "Web Worker with Emscripten"; case "cloudflare": return "Cloudflare Workers (limited streaming)"; case "node-emscripten": return "Node.js with Emscripten (fallback mode)"; default: return "Unknown environment"; } } function canLoadWasmType(wasmType) { const result = detectRuntime(); if (wasmType === "wasi") { return result.environment === "deno-wasi" || result.environment === "node-wasi"; } return true; } function _forceRuntime(result) { globalThis.__taglib_wasm_runtime_override = result; } function _clearRuntimeOverride() { delete globalThis.__taglib_wasm_runtime_override; } function _getDetectionResult() { const override = globalThis.__taglib_wasm_runtime_override; return override || detectRuntime(); } export { _clearRuntimeOverride, _forceRuntime, _getDetectionResult, canLoadWasmType, detectRuntime, getEnvironmentDescription };