UNPKG

synapse-storage

Version:

Набор инструментов для управления состоянием и апи-запросами

42 lines (37 loc) 2.19 kB
import { handleOperationError } from "../../_utils/error-handling.util.js"; const DEFAULT_DEPENDENCY_TIMEOUT = 30000; /** * Извлекает IStorageBase из любого формата зависимости: * - IStorageBase напрямую (есть waitForReady) * - { storage: IStorageBase } — обёртка * - готовый synapse — результат createSynapse (тоже имеет .storage) */ function extractStorage(dep) { if (typeof dep.waitForReady === 'function') return dep; if (dep.storage && typeof dep.storage.waitForReady === 'function') return dep.storage; throw new Error('Invalid dependency: expected IStorageBase or { storage: IStorageBase }'); } async function waitForDependencies(dependencies = [], timeoutMs = DEFAULT_DEPENDENCY_TIMEOUT) { if (dependencies.length === 0) { return; } // Намеренно БЕЗ безусловного лога «Waiting for N dependencies»: при нормальном старте это чистый // шум (по строке на каждый зависящий модуль). Единственный actionable сигнал — таймаут ниже, // который называет конкретный зависший dependency. await Promise.all(dependencies.map(async (dependencyOrPromise, index)=>{ try { const resolved = await dependencyOrPromise; const storage = extractStorage(resolved); const name = storage.name || 'unnamed'; // initialize() идемпотентен — повторный вызов безопасен await storage.initialize(); await Promise.race([ storage.waitForReady(), new Promise((_, reject)=>globalThis.setTimeout(()=>reject(new Error(`Dependency ${index} ("${name}") timed out after ${timeoutMs}ms. Check that it initializes correctly.`)), timeoutMs)) ]); } catch (error) { handleOperationError(`createSynapse: dependency ${index} failed to initialize`, error); } })); } export { waitForDependencies }; //# sourceMappingURL=waitForDependencies.js.map