75 lines
1.9 KiB
JavaScript
75 lines
1.9 KiB
JavaScript
/**
|
|
* PR-C Deprecation Warning Utility
|
|
* Provides `warnOnce(key, message)` — same key won't print twice.
|
|
* Used by deprecation checks across all modules.
|
|
*/
|
|
|
|
const _warned = new Set();
|
|
|
|
/**
|
|
* Emit a deprecation warning once per process lifetime.
|
|
* @param {string} key - unique key for this warning (e.g. "active-memory.blocking")
|
|
* @param {string} message - human-readable message
|
|
* @param {object} [opts]
|
|
* @param {boolean} [opts.force] - if true, emit even if already warned
|
|
* @returns {boolean} true if warning was emitted, false if skipped (duplicate)
|
|
*/
|
|
export function warnOnce(key, message, opts = {}) {
|
|
if (!opts.force && _warned.has(key)) {
|
|
return false;
|
|
}
|
|
_warned.add(key);
|
|
console.warn(`[DEPRECATED][OpenClaw v2] ${key}: ${message}`);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Reset all warned keys (for testing).
|
|
*/
|
|
export function resetWarnings() {
|
|
_warned.clear();
|
|
}
|
|
|
|
/**
|
|
* Get count of unique warnings emitted so far.
|
|
*/
|
|
export function getWarningCount() {
|
|
return _warned.size;
|
|
}
|
|
|
|
/**
|
|
* Get all warned keys.
|
|
*/
|
|
export function getWarnedKeys() {
|
|
return [..._warned];
|
|
}
|
|
|
|
/**
|
|
* Emit multiple deprecation warnings with deduplication.
|
|
* @param {Array<{key: string, message: string}>} warnings
|
|
*/
|
|
export function warnMany(warnings) {
|
|
const emitted = [];
|
|
for (const w of warnings) {
|
|
if (warnOnce(w.key, w.message)) {
|
|
emitted.push(w);
|
|
}
|
|
}
|
|
return emitted;
|
|
}
|
|
|
|
/**
|
|
* Run a deprecation check function and collect warnings.
|
|
* @param {string} checkName - name of the check
|
|
* @param {() => Array<{key:string, message:string}>} fn - check function
|
|
* @returns {{ name: string, warnings: Array<{key:string, message:string}> }}
|
|
*/
|
|
export function runDeprecationCheck(checkName, fn) {
|
|
try {
|
|
const warnings = fn();
|
|
return { name: checkName, warnings };
|
|
} catch (e) {
|
|
return { name: checkName, warnings: [{ key: checkName, message: `Check failed: ${e.message}` }] };
|
|
}
|
|
}
|