UNPKG

@ai2070/l0

Version:

L0: The Missing Reliability Substrate for AI

92 lines (91 loc) 3.13 kB
const registeredAdapters = []; const DEFAULT_ADAPTER_PRIORITY = 0; function registerAdapter(adapter, options = {}) { const { silent = false, priority = DEFAULT_ADAPTER_PRIORITY } = options; if (!adapter.detect) { if (!silent && typeof process !== "undefined" && process.env?.NODE_ENV !== "production") { console.warn( `\u26A0\uFE0F Adapter "${adapter.name}" has no detect() method. It will not be used for auto-detection. Use explicit \`adapter: myAdapter\` instead, or add a detect() method.` ); } } if (registeredAdapters.some((entry2) => entry2.adapter.name === adapter.name)) { throw new Error(`Adapter "${adapter.name}" is already registered`); } const entry = { adapter, priority }; const insertIndex = registeredAdapters.findIndex( (e) => e.priority < priority ); if (insertIndex === -1) { registeredAdapters.push(entry); } else { registeredAdapters.splice(insertIndex, 0, entry); } } function unregisterAdapter(name) { const index = registeredAdapters.findIndex( (entry) => entry.adapter.name === name ); if (index === -1) return false; registeredAdapters.splice(index, 1); return true; } function getAdapter(name) { const entry = registeredAdapters.find((e) => e.adapter.name === name); return entry?.adapter; } function getRegisteredStreamAdapters() { return registeredAdapters.map((entry) => entry.adapter.name); } function clearAdapters() { registeredAdapters.length = 0; } function unregisterAllExcept(except = []) { const exceptSet = new Set(except); const toRemove = registeredAdapters.filter((entry) => !exceptSet.has(entry.adapter.name)).map((entry) => entry.adapter.name); for (const name of toRemove) { unregisterAdapter(name); } return toRemove; } function detectAdapter(input) { const detectableAdapters = registeredAdapters.filter( (entry) => entry.adapter.detect ); const matches = detectableAdapters.filter( (entry) => entry.adapter.detect(input) ); if (matches.length === 0) { const registered = getRegisteredStreamAdapters(); const detectable = detectableAdapters.map((entry) => entry.adapter.name); const adapterList = detectable.length > 0 ? `[${detectable.join(", ")}]` : "(none)"; const hint = registered.length > detectable.length ? ` (${registered.length - detectable.length} adapter(s) without detect() were skipped)` : ""; throw new Error( `No registered adapter detected for stream. Detectable adapters: ${adapterList}${hint}. Use explicit \`adapter: myAdapter\` or register an adapter with detect().` ); } return matches[0].adapter; } function hasMatchingAdapter(input) { const detectableAdapters = registeredAdapters.filter( (entry) => entry.adapter.detect ); const matches = detectableAdapters.filter( (entry) => entry.adapter.detect(input) ); return matches.length >= 1; } export { DEFAULT_ADAPTER_PRIORITY, clearAdapters, detectAdapter, getAdapter, getRegisteredStreamAdapters, hasMatchingAdapter, registerAdapter, unregisterAdapter, unregisterAllExcept }; //# sourceMappingURL=registry.js.map