|
|
- # 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
-
- ![message](files/message.png)
-
- 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/
|