| # depd | 
 |  | 
 | [![NPM Version][npm-version-image]][npm-url] | 
 | [![NPM Downloads][npm-downloads-image]][npm-url] | 
 | [![Node.js Version][node-image]][node-url] | 
 | [![Linux Build][travis-image]][travis-url] | 
 | [![Windows Build][appveyor-image]][appveyor-url] | 
 | [![Coverage Status][coveralls-image]][coveralls-url] | 
 |  | 
 | Deprecate all the things | 
 |  | 
 | > With great modules comes great responsibility; mark things deprecated! | 
 |  | 
 | ## Install | 
 |  | 
 | This module is installed directly using `npm`: | 
 |  | 
 | ```sh | 
 | $ npm install depd | 
 | ``` | 
 |  | 
 | This module can also be bundled with systems like | 
 | [Browserify](http://browserify.org/) or [webpack](https://webpack.github.io/), | 
 | though by default this module will alter it's API to no longer display or | 
 | track deprecations. | 
 |  | 
 | ## API | 
 |  | 
 | <!-- eslint-disable no-unused-vars --> | 
 |  | 
 | ```js | 
 | var deprecate = require('depd')('my-module') | 
 | ``` | 
 |  | 
 | This library allows you to display deprecation messages to your users. | 
 | This library goes above and beyond with deprecation warnings by | 
 | introspection of the call stack (but only the bits that it is interested | 
 | in). | 
 |  | 
 | Instead of just warning on the first invocation of a deprecated | 
 | function and never again, this module will warn on the first invocation | 
 | of a deprecated function per unique call site, making it ideal to alert | 
 | users of all deprecated uses across the code base, rather than just | 
 | whatever happens to execute first. | 
 |  | 
 | The deprecation warnings from this module also include the file and line | 
 | information for the call into the module that the deprecated function was | 
 | in. | 
 |  | 
 | **NOTE** this library has a similar interface to the `debug` module, and | 
 | this module uses the calling file to get the boundary for the call stacks, | 
 | so you should always create a new `deprecate` object in each file and not | 
 | within some central file. | 
 |  | 
 | ### depd(namespace) | 
 |  | 
 | Create a new deprecate function that uses the given namespace name in the | 
 | messages and will display the call site prior to the stack entering the | 
 | file this function was called from. It is highly suggested you use the | 
 | name of your module as the namespace. | 
 |  | 
 | ### deprecate(message) | 
 |  | 
 | Call this function from deprecated code to display a deprecation message. | 
 | This message will appear once per unique caller site. Caller site is the | 
 | first call site in the stack in a different file from the caller of this | 
 | function. | 
 |  | 
 | If the message is omitted, a message is generated for you based on the site | 
 | of the `deprecate()` call and will display the name of the function called, | 
 | similar to the name displayed in a stack trace. | 
 |  | 
 | ### deprecate.function(fn, message) | 
 |  | 
 | Call this function to wrap a given function in a deprecation message on any | 
 | call to the function. An optional message can be supplied to provide a custom | 
 | message. | 
 |  | 
 | ### deprecate.property(obj, prop, message) | 
 |  | 
 | Call this function to wrap a given property on object in a deprecation message | 
 | on any accessing or setting of the property. An optional message can be supplied | 
 | to provide a custom message. | 
 |  | 
 | The method must be called on the object where the property belongs (not | 
 | inherited from the prototype). | 
 |  | 
 | If the property is a data descriptor, it will be converted to an accessor | 
 | descriptor in order to display the deprecation message. | 
 |  | 
 | ### process.on('deprecation', fn) | 
 |  | 
 | This module will allow easy capturing of deprecation errors by emitting the | 
 | errors as the type "deprecation" on the global `process`. If there are no | 
 | listeners for this type, the errors are written to STDERR as normal, but if | 
 | there are any listeners, nothing will be written to STDERR and instead only | 
 | emitted. From there, you can write the errors in a different format or to a | 
 | logging source. | 
 |  | 
 | The error represents the deprecation and is emitted only once with the same | 
 | rules as writing to STDERR. The error has the following properties: | 
 |  | 
 |   - `message` - This is the message given by the library | 
 |   - `name` - This is always `'DeprecationError'` | 
 |   - `namespace` - This is the namespace the deprecation came from | 
 |   - `stack` - This is the stack of the call to the deprecated thing | 
 |  | 
 | Example `error.stack` output: | 
 |  | 
 | ``` | 
 | DeprecationError: my-cool-module deprecated oldfunction | 
 |     at Object.<anonymous> ([eval]-wrapper:6:22) | 
 |     at Module._compile (module.js:456:26) | 
 |     at evalScript (node.js:532:25) | 
 |     at startup (node.js:80:7) | 
 |     at node.js:902:3 | 
 | ``` | 
 |  | 
 | ### process.env.NO_DEPRECATION | 
 |  | 
 | As a user of modules that are deprecated, the environment variable `NO_DEPRECATION` | 
 | is provided as a quick solution to silencing deprecation warnings from being | 
 | output. The format of this is similar to that of `DEBUG`: | 
 |  | 
 | ```sh | 
 | $ NO_DEPRECATION=my-module,othermod node app.js | 
 | ``` | 
 |  | 
 | This will suppress deprecations from being output for "my-module" and "othermod". | 
 | The value is a list of comma-separated namespaces. To suppress every warning | 
 | across all namespaces, use the value `*` for a namespace. | 
 |  | 
 | Providing the argument `--no-deprecation` to the `node` executable will suppress | 
 | all deprecations (only available in Node.js 0.8 or higher). | 
 |  | 
 | **NOTE** This will not suppress the deperecations given to any "deprecation" | 
 | event listeners, just the output to STDERR. | 
 |  | 
 | ### process.env.TRACE_DEPRECATION | 
 |  | 
 | As a user of modules that are deprecated, the environment variable `TRACE_DEPRECATION` | 
 | is provided as a solution to getting more detailed location information in deprecation | 
 | warnings by including the entire stack trace. The format of this is the same as | 
 | `NO_DEPRECATION`: | 
 |  | 
 | ```sh | 
 | $ TRACE_DEPRECATION=my-module,othermod node app.js | 
 | ``` | 
 |  | 
 | This will include stack traces for deprecations being output for "my-module" and | 
 | "othermod". The value is a list of comma-separated namespaces. To trace every | 
 | warning across all namespaces, use the value `*` for a namespace. | 
 |  | 
 | Providing the argument `--trace-deprecation` to the `node` executable will trace | 
 | all deprecations (only available in Node.js 0.8 or higher). | 
 |  | 
 | **NOTE** This will not trace the deperecations silenced by `NO_DEPRECATION`. | 
 |  | 
 | ## Display | 
 |  | 
 |  | 
 |  | 
 | When a user calls a function in your library that you mark deprecated, they | 
 | will see the following written to STDERR (in the given colors, similar colors | 
 | and layout to the `debug` module): | 
 |  | 
 | ``` | 
 | bright cyan    bright yellow | 
 | |              |          reset       cyan | 
 | |              |          |           | | 
 | ▼              ▼          ▼           ▼ | 
 | my-cool-module deprecated oldfunction [eval]-wrapper:6:22 | 
 | ▲              ▲          ▲           ▲ | 
 | |              |          |           | | 
 | namespace      |          |           location of mycoolmod.oldfunction() call | 
 |                |          deprecation message | 
 |                the word "deprecated" | 
 | ``` | 
 |  | 
 | If the user redirects their STDERR to a file or somewhere that does not support | 
 | colors, they see (similar layout to the `debug` module): | 
 |  | 
 | ``` | 
 | Sun, 15 Jun 2014 05:21:37 GMT my-cool-module deprecated oldfunction at [eval]-wrapper:6:22 | 
 | ▲                             ▲              ▲          ▲              ▲ | 
 | |                             |              |          |              | | 
 | timestamp of message          namespace      |          |             location of mycoolmod.oldfunction() call | 
 |                                              |          deprecation message | 
 |                                              the word "deprecated" | 
 | ``` | 
 |  | 
 | ## Examples | 
 |  | 
 | ### Deprecating all calls to a function | 
 |  | 
 | This will display a deprecated message about "oldfunction" being deprecated | 
 | from "my-module" on STDERR. | 
 |  | 
 | ```js | 
 | var deprecate = require('depd')('my-cool-module') | 
 |  | 
 | // message automatically derived from function name | 
 | // Object.oldfunction | 
 | exports.oldfunction = deprecate.function(function oldfunction () { | 
 |   // all calls to function are deprecated | 
 | }) | 
 |  | 
 | // specific message | 
 | exports.oldfunction = deprecate.function(function () { | 
 |   // all calls to function are deprecated | 
 | }, 'oldfunction') | 
 | ``` | 
 |  | 
 | ### Conditionally deprecating a function call | 
 |  | 
 | This will display a deprecated message about "weirdfunction" being deprecated | 
 | from "my-module" on STDERR when called with less than 2 arguments. | 
 |  | 
 | ```js | 
 | var deprecate = require('depd')('my-cool-module') | 
 |  | 
 | exports.weirdfunction = function () { | 
 |   if (arguments.length < 2) { | 
 |     // calls with 0 or 1 args are deprecated | 
 |     deprecate('weirdfunction args < 2') | 
 |   } | 
 | } | 
 | ``` | 
 |  | 
 | When calling `deprecate` as a function, the warning is counted per call site | 
 | within your own module, so you can display different deprecations depending | 
 | on different situations and the users will still get all the warnings: | 
 |  | 
 | ```js | 
 | var deprecate = require('depd')('my-cool-module') | 
 |  | 
 | exports.weirdfunction = function () { | 
 |   if (arguments.length < 2) { | 
 |     // calls with 0 or 1 args are deprecated | 
 |     deprecate('weirdfunction args < 2') | 
 |   } else if (typeof arguments[0] !== 'string') { | 
 |     // calls with non-string first argument are deprecated | 
 |     deprecate('weirdfunction non-string first arg') | 
 |   } | 
 | } | 
 | ``` | 
 |  | 
 | ### Deprecating property access | 
 |  | 
 | This will display a deprecated message about "oldprop" being deprecated | 
 | from "my-module" on STDERR when accessed. A deprecation will be displayed | 
 | when setting the value and when getting the value. | 
 |  | 
 | ```js | 
 | var deprecate = require('depd')('my-cool-module') | 
 |  | 
 | exports.oldprop = 'something' | 
 |  | 
 | // message automatically derives from property name | 
 | deprecate.property(exports, 'oldprop') | 
 |  | 
 | // explicit message | 
 | deprecate.property(exports, 'oldprop', 'oldprop >= 0.10') | 
 | ``` | 
 |  | 
 | ## License | 
 |  | 
 | [MIT](LICENSE) | 
 |  | 
 | [npm-version-image]: https://img.shields.io/npm/v/depd.svg | 
 | [npm-downloads-image]: https://img.shields.io/npm/dm/depd.svg | 
 | [npm-url]: https://npmjs.org/package/depd | 
 | [travis-image]: https://img.shields.io/travis/dougwilson/nodejs-depd/master.svg?label=linux | 
 | [travis-url]: https://travis-ci.org/dougwilson/nodejs-depd | 
 | [appveyor-image]: https://img.shields.io/appveyor/ci/dougwilson/nodejs-depd/master.svg?label=windows | 
 | [appveyor-url]: https://ci.appveyor.com/project/dougwilson/nodejs-depd | 
 | [coveralls-image]: https://img.shields.io/coveralls/dougwilson/nodejs-depd/master.svg | 
 | [coveralls-url]: https://coveralls.io/r/dougwilson/nodejs-depd?branch=master | 
 | [node-image]: https://img.shields.io/node/v/depd.svg | 
 | [node-url]: https://nodejs.org/en/download/ |