@duyquangnvx/edge-tts-universal
Version:
Universal text-to-speech library using Microsoft Edge's online TTS service. Works in Node.js and browsers WITHOUT needing Microsoft Edge, Windows, or an API key
1 lines • 6.52 kB
Source Map (JSON)
{"version":3,"sources":["../src/runtime-detection.ts"],"names":[],"mappings":"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","file":"runtime-detection.cjs","sourcesContent":["/**\r\n * Runtime detection utilities for cross-platform compatibility\r\n */\r\n\r\nexport interface RuntimeInfo {\r\n name: 'node' | 'deno' | 'bun' | 'browser' | 'webworker' | 'unknown';\r\n version?: string;\r\n isNode: boolean;\r\n isDeno: boolean;\r\n isBun: boolean;\r\n isBrowser: boolean;\r\n isWebWorker: boolean;\r\n}\r\n\r\n/**\r\n * Detect the current JavaScript runtime environment\r\n */\r\nexport function detectRuntime(): RuntimeInfo {\r\n const info: RuntimeInfo = {\r\n name: 'unknown',\r\n isNode: false,\r\n isDeno: false,\r\n isBun: false,\r\n isBrowser: false,\r\n isWebWorker: false,\r\n };\r\n\r\n // Check for Deno\r\n if (typeof (globalThis as any).Deno !== 'undefined') {\r\n info.name = 'deno';\r\n info.isDeno = true;\r\n info.version = (globalThis as any).Deno.version?.deno;\r\n return info;\r\n }\r\n\r\n // Check for Bun\r\n if (typeof (globalThis as any).Bun !== 'undefined') {\r\n info.name = 'bun';\r\n info.isBun = true;\r\n info.version = (globalThis as any).Bun.version;\r\n return info;\r\n }\r\n\r\n // Check for Node.js\r\n if (typeof process !== 'undefined' && process.versions && process.versions.node) {\r\n info.name = 'node';\r\n info.isNode = true;\r\n info.version = process.versions.node;\r\n return info;\r\n }\r\n\r\n // Check for Web Worker\r\n if (typeof (globalThis as any).importScripts === 'function' && typeof (globalThis as any).WorkerGlobalScope !== 'undefined') {\r\n info.name = 'webworker';\r\n info.isWebWorker = true;\r\n return info;\r\n }\r\n\r\n // Check for Browser\r\n if (typeof window !== 'undefined') {\r\n info.name = 'browser';\r\n info.isBrowser = true;\r\n return info;\r\n }\r\n\r\n return info;\r\n}\r\n\r\n/**\r\n * Get the appropriate fetch implementation for the current runtime\r\n */\r\nexport function getFetch(): typeof fetch {\r\n const runtime = detectRuntime();\r\n\r\n if (runtime.isDeno || runtime.isBrowser || runtime.isWebWorker) {\r\n return globalThis.fetch;\r\n }\r\n\r\n if (runtime.isNode || runtime.isBun) {\r\n try {\r\n // Try using built-in fetch first (Node 18+, Bun)\r\n if (typeof globalThis.fetch !== 'undefined') {\r\n return globalThis.fetch;\r\n }\r\n // Fallback to cross-fetch for older Node versions\r\n return require('cross-fetch');\r\n } catch {\r\n throw new Error('No fetch implementation available. Please install cross-fetch.');\r\n }\r\n }\r\n\r\n throw new Error('Unsupported runtime environment');\r\n}\r\n\r\n/**\r\n * Get the appropriate WebSocket implementation for the current runtime\r\n */\r\nexport function getWebSocket(): any {\r\n const runtime = detectRuntime();\r\n\r\n if (runtime.isDeno || runtime.isBrowser || runtime.isWebWorker) {\r\n return globalThis.WebSocket;\r\n }\r\n\r\n if (runtime.isNode || runtime.isBun) {\r\n try {\r\n return require('isomorphic-ws');\r\n } catch {\r\n throw new Error('No WebSocket implementation available. Please install isomorphic-ws.');\r\n }\r\n }\r\n\r\n throw new Error('Unsupported runtime environment');\r\n}\r\n\r\n/**\r\n * Get runtime-specific crypto implementation\r\n * Note: Node.js 16+ (and our minimum version of 18.17+) has native globalThis.crypto support\r\n */\r\nexport function getCrypto(): Crypto {\r\n const runtime = detectRuntime();\r\n\r\n if (runtime.isDeno || runtime.isBrowser || runtime.isWebWorker) {\r\n return globalThis.crypto;\r\n }\r\n\r\n if (runtime.isNode || runtime.isBun) {\r\n // Node.js 18.17+ and Bun have built-in crypto\r\n if (typeof globalThis.crypto !== 'undefined') {\r\n return globalThis.crypto;\r\n }\r\n throw new Error('No crypto implementation available. Please upgrade to Node.js 18.17+.');\r\n }\r\n\r\n throw new Error('Unsupported runtime environment');\r\n} "]}