| 
 | |
| /** | |
|  * Module exports. | |
|  */ | |
| 
 | |
| module.exports = deprecate; | |
| 
 | |
| /** | |
|  * Mark that a method should not be used. | |
|  * Returns a modified function which warns once by default. | |
|  * | |
|  * If `localStorage.noDeprecation = true` is set, then it is a no-op. | |
|  * | |
|  * If `localStorage.throwDeprecation = true` is set, then deprecated functions | |
|  * will throw an Error when invoked. | |
|  * | |
|  * If `localStorage.traceDeprecation = true` is set, then deprecated functions | |
|  * will invoke `console.trace()` instead of `console.error()`. | |
|  * | |
|  * @param {Function} fn - the function to deprecate | |
|  * @param {String} msg - the string to print to the console when `fn` is invoked | |
|  * @returns {Function} a new "deprecated" version of `fn` | |
|  * @api public | |
|  */ | |
| 
 | |
| function deprecate (fn, msg) { | |
|   if (config('noDeprecation')) { | |
|     return fn; | |
|   } | |
| 
 | |
|   var warned = false; | |
|   function deprecated() { | |
|     if (!warned) { | |
|       if (config('throwDeprecation')) { | |
|         throw new Error(msg); | |
|       } else if (config('traceDeprecation')) { | |
|         console.trace(msg); | |
|       } else { | |
|         console.warn(msg); | |
|       } | |
|       warned = true; | |
|     } | |
|     return fn.apply(this, arguments); | |
|   } | |
| 
 | |
|   return deprecated; | |
| } | |
| 
 | |
| /** | |
|  * Checks `localStorage` for boolean values for the given `name`. | |
|  * | |
|  * @param {String} name | |
|  * @returns {Boolean} | |
|  * @api private | |
|  */ | |
| 
 | |
| function config (name) { | |
|   // accessing global.localStorage can trigger a DOMException in sandboxed iframes | |
|   try { | |
|     if (!global.localStorage) return false; | |
|   } catch (_) { | |
|     return false; | |
|   } | |
|   var val = global.localStorage[name]; | |
|   if (null == val) return false; | |
|   return String(val).toLowerCase() === 'true'; | |
| }
 |