|   | 
| /** | 
|  * 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'; | 
| } |