mirror of https://github.com/lukechilds/node.git
Browse Source
PR-URL: https://github.com/nodejs/node/pull/3310 Reviewed-By: Jeremiah Senkpiel <fishrock123@rocketmail.com>process-exit-stdio-flushing
Rebecca Turner
9 years ago
committed by
Jeremiah Senkpiel
2005 changed files with 55441 additions and 53824 deletions
File diff suppressed because it is too large
@ -1,22 +1,24 @@ |
|||||
var argv = process.argv |
var argv = process.argv |
||||
if (argv.length < 3) { |
if (argv.length < 3) { |
||||
console.error("Usage: read-package.json <file> [<fields> ...]") |
console.error('Usage: read-package.json <file> [<fields> ...]') |
||||
process.exit(1) |
process.exit(1) |
||||
} |
} |
||||
|
|
||||
var fs = require("fs") |
var file = argv[2] |
||||
, file = argv[2] |
var readJson = require('read-package-json') |
||||
, readJson = require("read-package-json") |
|
||||
|
|
||||
readJson(file, function (er, data) { |
readJson(file, function (er, data) { |
||||
if (er) throw er |
if (er) throw er |
||||
if (argv.length === 3) console.log(data) |
if (argv.length === 3) { |
||||
else argv.slice(3).forEach(function (field) { |
console.log(data) |
||||
field = field.split(".") |
} else { |
||||
|
argv.slice(3).forEach(function (field) { |
||||
|
field = field.split('.') |
||||
var val = data |
var val = data |
||||
field.forEach(function (f) { |
field.forEach(function (f) { |
||||
val = val[f] |
val = val[f] |
||||
}) |
}) |
||||
console.log(val) |
console.log(val) |
||||
}) |
}) |
||||
|
} |
||||
}) |
}) |
||||
|
@ -1,2 +1,2 @@ |
|||||
#!/usr/bin/env node
|
#!/usr/bin/env node
|
||||
require("./bin/npm-cli.js") |
require('./bin/npm-cli.js') |
||||
|
@ -1,13 +0,0 @@ |
|||||
npm-bin(3) -- Display npm bin folder |
|
||||
==================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.bin(args, cb) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Print the folder where npm will install executables. |
|
||||
|
|
||||
This function should not be used programmatically. Instead, just refer |
|
||||
to the `npm.bin` property. |
|
@ -1,19 +0,0 @@ |
|||||
npm-bugs(3) -- Bugs for a package in a web browser maybe |
|
||||
======================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.bugs(package, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command tries to guess at the likely location of a package's |
|
||||
bug tracker URL, and then tries to open it using the `--browser` |
|
||||
config param. |
|
||||
|
|
||||
Like other commands, the first parameter is an array. This command only |
|
||||
uses the first element, which is expected to be a package name with an |
|
||||
optional version number. |
|
||||
|
|
||||
This command will launch a browser, so this command may not be the most |
|
||||
friendly for programmatic use. |
|
@ -1,30 +0,0 @@ |
|||||
npm-cache(3) -- manage the npm cache programmatically |
|
||||
===================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.cache([args], callback) |
|
||||
|
|
||||
// helpers |
|
||||
npm.commands.cache.clean([args], callback) |
|
||||
npm.commands.cache.add([args], callback) |
|
||||
npm.commands.cache.read(name, version, forceBypass, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This acts much the same ways as the npm-cache(1) command line |
|
||||
functionality. |
|
||||
|
|
||||
The callback is called with the package.json data of the thing that is |
|
||||
eventually added to or read from the cache. |
|
||||
|
|
||||
The top level `npm.commands.cache(...)` functionality is a public |
|
||||
interface, and like all commands on the `npm.commands` object, it will |
|
||||
match the command line behavior exactly. |
|
||||
|
|
||||
However, the cache folder structure and the cache helper functions are |
|
||||
considered **internal** API surface, and as such, may change in future |
|
||||
releases of npm, potentially without warning or significant version |
|
||||
incrementation. |
|
||||
|
|
||||
Use at your own risk. |
|
@ -1,22 +0,0 @@ |
|||||
npm-commands(3) -- npm commands |
|
||||
=============================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands[<command>](args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
npm comes with a full set of commands, and each of the commands takes a |
|
||||
similar set of arguments. |
|
||||
|
|
||||
In general, all commands on the command object take an **array** of positional |
|
||||
argument **strings**. The last argument to any function is a callback. Some |
|
||||
commands are special and take other optional arguments. |
|
||||
|
|
||||
All commands have their own man page. See `man npm-<command>` for command-line |
|
||||
usage, or `man 3 npm-<command>` for programmatic usage. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-index(7) |
|
@ -1,45 +0,0 @@ |
|||||
npm-config(3) -- Manage the npm configuration files |
|
||||
=================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.config(args, callback) |
|
||||
var val = npm.config.get(key) |
|
||||
npm.config.set(key, val) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This function acts much the same way as the command-line version. The first |
|
||||
element in the array tells config what to do. Possible values are: |
|
||||
|
|
||||
* `set` |
|
||||
|
|
||||
Sets a config parameter. The second element in `args` is interpreted as the |
|
||||
key, and the third element is interpreted as the value. |
|
||||
|
|
||||
* `get` |
|
||||
|
|
||||
Gets the value of a config parameter. The second element in `args` is the |
|
||||
key to get the value of. |
|
||||
|
|
||||
* `delete` (`rm` or `del`) |
|
||||
|
|
||||
Deletes a parameter from the config. The second element in `args` is the |
|
||||
key to delete. |
|
||||
|
|
||||
* `list` (`ls`) |
|
||||
|
|
||||
Show all configs that aren't secret. No parameters necessary. |
|
||||
|
|
||||
* `edit`: |
|
||||
|
|
||||
Opens the config file in the default editor. This command isn't very useful |
|
||||
programmatically, but it is made available. |
|
||||
|
|
||||
To programmatically access npm configuration settings, or set them for |
|
||||
the duration of a program, use the `npm.config.set` and `npm.config.get` |
|
||||
functions instead. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm(3) |
|
@ -1,34 +0,0 @@ |
|||||
npm-deprecate(3) -- Deprecate a version of a package |
|
||||
==================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.deprecate(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command will update the npm registry entry for a package, providing |
|
||||
a deprecation warning to all who attempt to install it. |
|
||||
|
|
||||
The 'args' parameter must have exactly two elements: |
|
||||
|
|
||||
* `package[@version]` |
|
||||
|
|
||||
The `version` portion is optional, and may be either a range, or a |
|
||||
specific version, or a tag. |
|
||||
|
|
||||
* `message` |
|
||||
|
|
||||
The warning message that will be printed whenever a user attempts to |
|
||||
install the package. |
|
||||
|
|
||||
Note that you must be the package owner to deprecate something. See the |
|
||||
`owner` and `adduser` help topics. |
|
||||
|
|
||||
To un-deprecate a package, specify an empty string (`""`) for the `message` argument. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-publish(3) |
|
||||
* npm-unpublish(3) |
|
||||
* npm-registry(7) |
|
@ -1,19 +0,0 @@ |
|||||
npm-docs(3) -- Docs for a package in a web browser maybe |
|
||||
======================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.docs(package, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command tries to guess at the likely location of a package's |
|
||||
documentation URL, and then tries to open it using the `--browser` |
|
||||
config param. |
|
||||
|
|
||||
Like other commands, the first parameter is an array. This command only |
|
||||
uses the first element, which is expected to be a package name with an |
|
||||
optional version number. |
|
||||
|
|
||||
This command will launch a browser, so this command may not be the most |
|
||||
friendly for programmatic use. |
|
@ -1,24 +0,0 @@ |
|||||
npm-edit(3) -- Edit an installed package |
|
||||
======================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.edit(package, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Opens the package folder in the default editor (or whatever you've |
|
||||
configured as the npm `editor` config -- see `npm help config`.) |
|
||||
|
|
||||
After it has been edited, the package is rebuilt so as to pick up any |
|
||||
changes in compiled packages. |
|
||||
|
|
||||
For instance, you can do `npm install connect` to install connect |
|
||||
into your package, and then `npm.commands.edit(["connect"], callback)` |
|
||||
to make a few changes to your locally installed copy. |
|
||||
|
|
||||
The first parameter is a string array with a single element, the package |
|
||||
to open. The package can optionally have a version number attached. |
|
||||
|
|
||||
Since this command opens an editor in a new process, be careful about where |
|
||||
and how this is used. |
|
@ -1,18 +0,0 @@ |
|||||
npm-explore(3) -- Browse an installed package |
|
||||
============================================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.explore(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Spawn a subshell in the directory of the installed package specified. |
|
||||
|
|
||||
If a command is specified, then it is run in the subshell, which then |
|
||||
immediately terminates. |
|
||||
|
|
||||
Note that the package is *not* automatically rebuilt afterwards, so be |
|
||||
sure to use `npm rebuild <pkg>` if you make any changes. |
|
||||
|
|
||||
The first element in the 'args' parameter must be a package name. After that is the optional command, which can be any number of strings. All of the strings will be combined into one, space-delimited command. |
|
@ -1,30 +0,0 @@ |
|||||
npm-help-search(3) -- Search the help pages |
|
||||
=========================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.helpSearch(args, [silent,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command is rarely useful, but it exists in the rare case that it is. |
|
||||
|
|
||||
This command takes an array of search terms and returns the help pages that |
|
||||
match in order of best match. |
|
||||
|
|
||||
If there is only one match, then npm displays that help section. If there |
|
||||
are multiple results, the results are printed to the screen formatted and the |
|
||||
array of results is returned. Each result is an object with these properties: |
|
||||
|
|
||||
* hits: |
|
||||
A map of args to number of hits on that arg. For example, {"npm": 3} |
|
||||
* found: |
|
||||
Total number of unique args that matched. |
|
||||
* totalHits: |
|
||||
Total number of hits. |
|
||||
* lines: |
|
||||
An array of all matching lines (and some adjacent lines). |
|
||||
* file: |
|
||||
Name of the file that matched |
|
||||
|
|
||||
The silent parameter is not necessary not used, but it may in the future. |
|
@ -1,29 +0,0 @@ |
|||||
npm init(3) -- Interactively create a package.json file |
|
||||
======================================================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.init(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This will ask you a bunch of questions, and then write a package.json for you. |
|
||||
|
|
||||
It attempts to make reasonable guesses about what you want things to be set to, |
|
||||
and then writes a package.json file with the options you've selected. |
|
||||
|
|
||||
If you already have a package.json file, it'll read that first, and default to |
|
||||
the options in there. |
|
||||
|
|
||||
It is strictly additive, so it does not delete options from your package.json |
|
||||
without a really good reason to do so. |
|
||||
|
|
||||
Since this function expects to be run on the command-line, it doesn't work very |
|
||||
well as a programmatically. The best option is to roll your own, and since |
|
||||
JavaScript makes it stupid simple to output formatted JSON, that is the |
|
||||
preferred method. If you're sure you want to handle command-line prompting, |
|
||||
then go ahead and use this programmatically. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
package.json(5) |
|
@ -1,19 +0,0 @@ |
|||||
npm-install(3) -- install a package programmatically |
|
||||
==================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.install([where,] packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This acts much the same ways as installing on the command-line. |
|
||||
|
|
||||
The 'where' parameter is optional and only used internally, and it specifies |
|
||||
where the packages should be installed to. |
|
||||
|
|
||||
The 'packages' parameter is an array of strings. Each element in the array is |
|
||||
the name of a package to be installed. |
|
||||
|
|
||||
Finally, 'callback' is a function that will be called when all packages have been |
|
||||
installed or when an error has been encountered. |
|
@ -1,33 +0,0 @@ |
|||||
npm-link(3) -- Symlink a package folder |
|
||||
======================================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.link(callback) |
|
||||
npm.commands.link(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Package linking is a two-step process. |
|
||||
|
|
||||
Without parameters, link will create a globally-installed |
|
||||
symbolic link from `prefix/package-name` to the current folder. |
|
||||
|
|
||||
With a parameters, link will create a symlink from the local `node_modules` |
|
||||
folder to the global symlink. |
|
||||
|
|
||||
When creating tarballs for `npm publish`, the linked packages are |
|
||||
"snapshotted" to their current state by resolving the symbolic links. |
|
||||
|
|
||||
This is |
|
||||
handy for installing your own stuff, so that you can work on it and test it |
|
||||
iteratively without having to continually rebuild. |
|
||||
|
|
||||
For example: |
|
||||
|
|
||||
npm.commands.link(cb) # creates global link from the cwd |
|
||||
# (say redis package) |
|
||||
npm.commands.link('redis', cb) # link-install the package |
|
||||
|
|
||||
Now, any changes to the redis package will be reflected in |
|
||||
the package in the current working directory |
|
@ -1,26 +0,0 @@ |
|||||
npm-load(3) -- Load config settings |
|
||||
=================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.load(conf, cb) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
npm.load() must be called before any other function call. Both parameters are |
|
||||
optional, but the second is recommended. |
|
||||
|
|
||||
The first parameter is an object containing command-line config params, and the |
|
||||
second parameter is a callback that will be called when npm is loaded and ready |
|
||||
to serve. |
|
||||
|
|
||||
The first parameter should follow a similar structure as the package.json |
|
||||
config object. |
|
||||
|
|
||||
For example, to emulate the --dev flag, pass an object that looks like this: |
|
||||
|
|
||||
{ |
|
||||
"dev": true |
|
||||
} |
|
||||
|
|
||||
For a list of all the available command-line configs, see `npm help config` |
|
@ -1,56 +0,0 @@ |
|||||
npm-ls(3) -- List installed packages |
|
||||
====================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.ls(args, [silent,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command will print to stdout all the versions of packages that are |
|
||||
installed, as well as their dependencies, in a tree-structure. It will also |
|
||||
return that data using the callback. |
|
||||
|
|
||||
This command does not take any arguments, but args must be defined. |
|
||||
Beyond that, if any arguments are passed in, npm will politely warn that it |
|
||||
does not take positional arguments, though you may set config flags |
|
||||
like with any other command, such as `global` to list global packages. |
|
||||
|
|
||||
It will print out extraneous, missing, and invalid packages. |
|
||||
|
|
||||
If the silent parameter is set to true, nothing will be output to the screen, |
|
||||
but the data will still be returned. |
|
||||
|
|
||||
Callback is provided an error if one occurred, the full data about which |
|
||||
packages are installed and which dependencies they will receive, and a |
|
||||
"lite" data object which just shows which versions are installed where. |
|
||||
Note that the full data object is a circular structure, so care must be |
|
||||
taken if it is serialized to JSON. |
|
||||
|
|
||||
## CONFIGURATION |
|
||||
|
|
||||
### long |
|
||||
|
|
||||
* Default: false |
|
||||
* Type: Boolean |
|
||||
|
|
||||
Show extended information. |
|
||||
|
|
||||
### parseable |
|
||||
|
|
||||
* Default: false |
|
||||
* Type: Boolean |
|
||||
|
|
||||
Show parseable output instead of tree view. |
|
||||
|
|
||||
### global |
|
||||
|
|
||||
* Default: false |
|
||||
* Type: Boolean |
|
||||
|
|
||||
List packages in the global install prefix instead of in the current |
|
||||
project. |
|
||||
|
|
||||
Note, if parseable is set or long isn't set, then duplicates will be trimmed. |
|
||||
This means that if a submodule has the same dependency as a parent module, then the |
|
||||
dependency will only be output once. |
|
@ -1,13 +0,0 @@ |
|||||
npm-outdated(3) -- Check for outdated packages |
|
||||
============================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.outdated([packages,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command will check the registry to see if the specified packages are |
|
||||
currently outdated. |
|
||||
|
|
||||
If the 'packages' parameter is left out, npm will check all packages. |
|
@ -1,31 +0,0 @@ |
|||||
npm-owner(3) -- Manage package owners |
|
||||
===================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.owner(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
The first element of the 'args' parameter defines what to do, and the subsequent |
|
||||
elements depend on the action. Possible values for the action are (order of |
|
||||
parameters are given in parenthesis): |
|
||||
|
|
||||
* ls (package): |
|
||||
List all the users who have access to modify a package and push new versions. |
|
||||
Handy when you need to know who to bug for help. |
|
||||
* add (user, package): |
|
||||
Add a new user as a maintainer of a package. This user is enabled to modify |
|
||||
metadata, publish new versions, and add other owners. |
|
||||
* rm (user, package): |
|
||||
Remove a user from the package owner list. This immediately revokes their |
|
||||
privileges. |
|
||||
|
|
||||
Note that there is only one level of access. Either you can modify a package, |
|
||||
or you can't. Future versions may contain more fine-grained access levels, but |
|
||||
that is not implemented at this time. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-publish(3) |
|
||||
* npm-registry(7) |
|
@ -1,19 +0,0 @@ |
|||||
npm-pack(3) -- Create a tarball from a package |
|
||||
============================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.pack([packages,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
For anything that's installable (that is, a package folder, tarball, |
|
||||
tarball url, name@tag, name@version, or name), this command will fetch |
|
||||
it to the cache, and then copy the tarball to the current working |
|
||||
directory as `<name>-<version>.tgz`, and then write the filenames out to |
|
||||
stdout. |
|
||||
|
|
||||
If the same package is specified multiple times, then the file will be |
|
||||
overwritten the second time. |
|
||||
|
|
||||
If no arguments are supplied, then npm packs the current package folder. |
|
@ -1,14 +0,0 @@ |
|||||
npm-ping(3) -- Ping npm registry |
|
||||
================================ |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.registry.ping(registry, options, function (er, pong)) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Attempts to connect to the given registry, returning a `pong` |
|
||||
object with various metadata if it succeeds. |
|
||||
|
|
||||
This function is primarily useful for debugging connection issues |
|
||||
to npm registries. |
|
@ -1,15 +0,0 @@ |
|||||
npm-prefix(3) -- Display prefix |
|
||||
=============================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.prefix(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Print the prefix to standard out. |
|
||||
|
|
||||
'args' is never used and callback is never called with data. |
|
||||
'args' must be present or things will break. |
|
||||
|
|
||||
This function is not useful programmatically |
|
@ -1,17 +0,0 @@ |
|||||
npm-prune(3) -- Remove extraneous packages |
|
||||
========================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.prune([packages,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command removes "extraneous" packages. |
|
||||
|
|
||||
The first parameter is optional, and it specifies packages to be removed. |
|
||||
|
|
||||
No packages are specified, then all packages will be checked. |
|
||||
|
|
||||
Extraneous packages are packages that are not listed on the parent |
|
||||
package's dependencies list. |
|
@ -1,30 +0,0 @@ |
|||||
npm-publish(3) -- Publish a package |
|
||||
=================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.publish([packages,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Publishes a package to the registry so that it can be installed by name. |
|
||||
Possible values in the 'packages' array are: |
|
||||
|
|
||||
* `<folder>`: |
|
||||
A folder containing a package.json file |
|
||||
|
|
||||
* `<tarball>`: |
|
||||
A url or file path to a gzipped tar archive containing a single folder |
|
||||
with a package.json file inside. |
|
||||
|
|
||||
If the package array is empty, npm will try to publish something in the |
|
||||
current working directory. |
|
||||
|
|
||||
This command could fails if one of the packages specified already exists in |
|
||||
the registry. Overwrites when the "force" environment variable is set. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-registry(7) |
|
||||
* npm-adduser(1) |
|
||||
* npm-owner(3) |
|
@ -1,16 +0,0 @@ |
|||||
npm-rebuild(3) -- Rebuild a package |
|
||||
=================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.rebuild([packages,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command runs the `npm build` command on each of the matched packages. This is useful |
|
||||
when you install a new version of node, and must recompile all your C++ addons with |
|
||||
the new binary. If no 'packages' parameter is specify, every package will be rebuilt. |
|
||||
|
|
||||
## CONFIGURATION |
|
||||
|
|
||||
See `npm help build` |
|
@ -1,19 +0,0 @@ |
|||||
npm-repo(3) -- Open package repository page in the browser |
|
||||
======================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.repo(package, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command tries to guess at the likely location of a package's |
|
||||
repository URL, and then tries to open it using the `--browser` |
|
||||
config param. |
|
||||
|
|
||||
Like other commands, the first parameter is an array. This command only |
|
||||
uses the first element, which is expected to be a package name with an |
|
||||
optional version number. |
|
||||
|
|
||||
This command will launch a browser, so this command may not be the most |
|
||||
friendly for programmatic use. |
|
@ -1,41 +0,0 @@ |
|||||
npm-restart(3) -- Restart a package |
|
||||
=================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.restart(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This restarts a package (or multiple packages). |
|
||||
|
|
||||
This runs a package's "stop", "restart", and "start" scripts, and associated |
|
||||
pre- and post- scripts, in the order given below: |
|
||||
|
|
||||
1. prerestart |
|
||||
2. prestop |
|
||||
3. stop |
|
||||
4. poststop |
|
||||
5. restart |
|
||||
6. prestart |
|
||||
7. start |
|
||||
8. poststart |
|
||||
9. postrestart |
|
||||
|
|
||||
If no version is specified, then it restarts the "active" version. |
|
||||
|
|
||||
npm can restart multiple packages. Just specify multiple packages in |
|
||||
the `packages` parameter. |
|
||||
|
|
||||
## NOTE |
|
||||
|
|
||||
Note that the "restart" script is run **in addition to** the "stop" |
|
||||
and "start" scripts, not instead of them. |
|
||||
|
|
||||
This is the behavior as of `npm` major version 2. A change in this |
|
||||
behavior will be accompanied by an increase in major version number |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-start(3) |
|
||||
* npm-stop(3) |
|
@ -1,15 +0,0 @@ |
|||||
npm-root(3) -- Display npm root |
|
||||
=============================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.root(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Print the effective `node_modules` folder to standard out. |
|
||||
|
|
||||
'args' is never used and callback is never called with data. |
|
||||
'args' must be present or things will break. |
|
||||
|
|
||||
This function is not useful programmatically. |
|
@ -1,27 +0,0 @@ |
|||||
npm-run-script(3) -- Run arbitrary package scripts |
|
||||
================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.run-script(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This runs an arbitrary command from a package's "scripts" object. |
|
||||
|
|
||||
It is used by the test, start, restart, and stop commands, but can be |
|
||||
called directly, as well. |
|
||||
|
|
||||
The 'args' parameter is an array of strings. Behavior depends on the number |
|
||||
of elements. If there is only one element, npm assumes that the element |
|
||||
represents a command to be run on the local repository. If there is more than |
|
||||
one element, then the first is assumed to be the package and the second is |
|
||||
assumed to be the command to run. All other elements are ignored. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-scripts(7) |
|
||||
* npm-test(3) |
|
||||
* npm-start(3) |
|
||||
* npm-restart(3) |
|
||||
* npm-stop(3) |
|
@ -1,35 +0,0 @@ |
|||||
npm-search(3) -- Search for packages |
|
||||
==================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.search(searchTerms, [silent,] [staleness,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Search the registry for packages matching the search terms. The available parameters are: |
|
||||
|
|
||||
* searchTerms: |
|
||||
Array of search terms. These terms are case-insensitive. |
|
||||
* silent: |
|
||||
If true, npm will not log anything to the console. |
|
||||
* staleness: |
|
||||
This is the threshold for stale packages. "Fresh" packages are not refreshed |
|
||||
from the registry. This value is measured in seconds. |
|
||||
* callback: |
|
||||
Returns an object where each key is the name of a package, and the value |
|
||||
is information about that package along with a 'words' property, which is |
|
||||
a space-delimited string of all of the interesting words in that package. |
|
||||
The only properties included are those that are searched, which generally include: |
|
||||
|
|
||||
* name |
|
||||
* description |
|
||||
* maintainers |
|
||||
* url |
|
||||
* keywords |
|
||||
|
|
||||
A search on the registry excludes any result that does not match all of the |
|
||||
search terms. It also removes any items from the results that contain an |
|
||||
excluded term (the "searchexclude" config). The search is case insensitive |
|
||||
and doesn't try to read your mind (it doesn't do any verb tense matching or the |
|
||||
like). |
|
@ -1,20 +0,0 @@ |
|||||
npm-shrinkwrap(3) -- programmatically generate package shrinkwrap file |
|
||||
==================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.shrinkwrap(args, [silent,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This acts much the same ways as shrinkwrapping on the command-line. |
|
||||
|
|
||||
This command does not take any arguments, but 'args' must be defined. |
|
||||
Beyond that, if any arguments are passed in, npm will politely warn that it |
|
||||
does not take positional arguments. |
|
||||
|
|
||||
If the 'silent' parameter is set to true, nothing will be output to the screen, |
|
||||
but the shrinkwrap file will still be written. |
|
||||
|
|
||||
Finally, 'callback' is a function that will be called when the shrinkwrap has |
|
||||
been saved. |
|
@ -1,13 +0,0 @@ |
|||||
npm-start(3) -- Start a package |
|
||||
=============================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.start(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This runs a package's "start" script, if one was provided. |
|
||||
|
|
||||
npm can start multiple packages. Just specify multiple packages in the |
|
||||
`packages` parameter. |
|
@ -1,13 +0,0 @@ |
|||||
npm-stop(3) -- Stop a package |
|
||||
============================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.stop(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This runs a package's "stop" script, if one was provided. |
|
||||
|
|
||||
npm can run stop on multiple packages. Just specify multiple packages |
|
||||
in the `packages` parameter. |
|
@ -1,23 +0,0 @@ |
|||||
npm-tag(3) -- Tag a published version |
|
||||
===================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.tag(package@version, tag, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Tags the specified version of the package with the specified tag, or the |
|
||||
`--tag` config if not specified. |
|
||||
|
|
||||
The 'package@version' is an array of strings, but only the first two elements are |
|
||||
currently used. |
|
||||
|
|
||||
The first element must be in the form package@version, where package |
|
||||
is the package name and version is the version number (much like installing a |
|
||||
specific version). |
|
||||
|
|
||||
The second element is the name of the tag to tag this version with. If this |
|
||||
parameter is missing or falsey (empty), the default from the config will be |
|
||||
used. For more information about how to set this config, check |
|
||||
`man 3 npm-config` for programmatic usage or `man npm-config` for cli usage. |
|
@ -1,16 +0,0 @@ |
|||||
npm-test(3) -- Test a package |
|
||||
============================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.test(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This runs a package's "test" script, if one was provided. |
|
||||
|
|
||||
To run tests as a condition of installation, set the `npat` config to |
|
||||
true. |
|
||||
|
|
||||
npm can run tests on multiple packages. Just specify multiple packages |
|
||||
in the `packages` parameter. |
|
@ -1,16 +0,0 @@ |
|||||
npm-uninstall(3) -- uninstall a package programmatically |
|
||||
======================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.uninstall(packages, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This acts much the same ways as uninstalling on the command-line. |
|
||||
|
|
||||
The 'packages' parameter is an array of strings. Each element in the array is |
|
||||
the name of a package to be uninstalled. |
|
||||
|
|
||||
Finally, 'callback' is a function that will be called when all packages have been |
|
||||
uninstalled or when an error has been encountered. |
|
@ -1,20 +0,0 @@ |
|||||
npm-unpublish(3) -- Remove a package from the registry |
|
||||
====================================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.unpublish(package, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This removes a package version from the registry, deleting its |
|
||||
entry and removing the tarball. |
|
||||
|
|
||||
The package parameter must be defined. |
|
||||
|
|
||||
Only the first element in the package parameter is used. If there is no first |
|
||||
element, then npm assumes that the package at the current working directory |
|
||||
is what is meant. |
|
||||
|
|
||||
If no version is specified, or if all versions are removed then |
|
||||
the root package entry is removed from the registry entirely. |
|
@ -1,18 +0,0 @@ |
|||||
npm-update(3) -- Update a package |
|
||||
================================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.update(packages, callback) |
|
||||
|
|
||||
# DESCRIPTION |
|
||||
|
|
||||
Updates a package, upgrading it to the latest version. It also installs any |
|
||||
missing packages. |
|
||||
|
|
||||
The `packages` argument is an array of packages to update. The `callback` |
|
||||
parameter will be called when done or when an error occurs. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-update(1) |
|
@ -1,18 +0,0 @@ |
|||||
npm-version(3) -- Bump a package version |
|
||||
======================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.version(newversion, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Run this in a package directory to bump the version and write the new |
|
||||
data back to the package.json file. |
|
||||
|
|
||||
If run in a git repo, it will also create a version commit and tag, and |
|
||||
fail if the repo is not clean. |
|
||||
|
|
||||
Like all other commands, this function takes a string array as its first |
|
||||
parameter. The difference, however, is this function will fail if it does |
|
||||
not have exactly one element. The only element should be a version number. |
|
@ -1,93 +0,0 @@ |
|||||
npm-view(3) -- View registry info |
|
||||
================================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.view(args, [silent,] callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This command shows data about a package and prints it to the stream |
|
||||
referenced by the `outfd` config, which defaults to stdout. |
|
||||
|
|
||||
The "args" parameter is an ordered list that closely resembles the command-line |
|
||||
usage. The elements should be ordered such that the first element is |
|
||||
the package and version (package@version). The version is optional. After that, |
|
||||
the rest of the parameters are fields with optional subfields ("field.subfield") |
|
||||
which can be used to get only the information desired from the registry. |
|
||||
|
|
||||
The callback will be passed all of the data returned by the query. |
|
||||
|
|
||||
For example, to get the package registry entry for the `connect` package, |
|
||||
you can do this: |
|
||||
|
|
||||
npm.commands.view(["connect"], callback) |
|
||||
|
|
||||
If no version is specified, "latest" is assumed. |
|
||||
|
|
||||
Field names can be specified after the package descriptor. |
|
||||
For example, to show the dependencies of the `ronn` package at version |
|
||||
0.3.5, you could do the following: |
|
||||
|
|
||||
npm.commands.view(["ronn@0.3.5", "dependencies"], callback) |
|
||||
|
|
||||
You can view child field by separating them with a period. |
|
||||
To view the git repository URL for the latest version of npm, you could |
|
||||
do this: |
|
||||
|
|
||||
npm.commands.view(["npm", "repository.url"], callback) |
|
||||
|
|
||||
For fields that are arrays, requesting a non-numeric field will return |
|
||||
all of the values from the objects in the list. For example, to get all |
|
||||
the contributor names for the "express" project, you can do this: |
|
||||
|
|
||||
npm.commands.view(["express", "contributors.email"], callback) |
|
||||
|
|
||||
You may also use numeric indices in square braces to specifically select |
|
||||
an item in an array field. To just get the email address of the first |
|
||||
contributor in the list, you can do this: |
|
||||
|
|
||||
npm.commands.view(["express", "contributors[0].email"], callback) |
|
||||
|
|
||||
Multiple fields may be specified, and will be printed one after another. |
|
||||
For exampls, to get all the contributor names and email addresses, you |
|
||||
can do this: |
|
||||
|
|
||||
npm.commands.view(["express", "contributors.name", "contributors.email"], callback) |
|
||||
|
|
||||
"Person" fields are shown as a string if they would be shown as an |
|
||||
object. So, for example, this will show the list of npm contributors in |
|
||||
the shortened string format. (See `npm help json` for more on this.) |
|
||||
|
|
||||
npm.commands.view(["npm", "contributors"], callback) |
|
||||
|
|
||||
If a version range is provided, then data will be printed for every |
|
||||
matching version of the package. This will show which version of jsdom |
|
||||
was required by each matching version of yui3: |
|
||||
|
|
||||
npm.commands.view(["yui3@>0.5.4", "dependencies.jsdom"], callback) |
|
||||
|
|
||||
## OUTPUT |
|
||||
|
|
||||
If only a single string field for a single version is output, then it |
|
||||
will not be colorized or quoted, so as to enable piping the output to |
|
||||
another command. |
|
||||
|
|
||||
If the version range matches multiple versions, than each printed value |
|
||||
will be prefixed with the version it applies to. |
|
||||
|
|
||||
If multiple fields are requested, than each of them are prefixed with |
|
||||
the field name. |
|
||||
|
|
||||
Console output can be disabled by setting the 'silent' parameter to true. |
|
||||
|
|
||||
## RETURN VALUE |
|
||||
|
|
||||
The data returned will be an object in this formation: |
|
||||
|
|
||||
{ <version>: |
|
||||
{ <field>: <value> |
|
||||
, ... } |
|
||||
, ... } |
|
||||
|
|
||||
corresponding to the list of fields selected. |
|
@ -1,15 +0,0 @@ |
|||||
npm-whoami(3) -- Display npm username |
|
||||
===================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm.commands.whoami(args, callback) |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
Print the `username` config to standard output. |
|
||||
|
|
||||
'args' is never used and callback is never called with data. |
|
||||
'args' must be present or things will break. |
|
||||
|
|
||||
This function is not useful programmatically |
|
@ -1,115 +0,0 @@ |
|||||
npm(3) -- javascript package manager |
|
||||
==================================== |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
var npm = require("npm") |
|
||||
npm.load([configObject, ]function (er, npm) { |
|
||||
// use the npm object, now that it's loaded. |
|
||||
|
|
||||
npm.config.set(key, val) |
|
||||
val = npm.config.get(key) |
|
||||
|
|
||||
console.log("prefix = %s", npm.prefix) |
|
||||
|
|
||||
npm.commands.install(["package"], cb) |
|
||||
}) |
|
||||
|
|
||||
## VERSION |
|
||||
|
|
||||
@VERSION@ |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This is the API documentation for npm. |
|
||||
To find documentation of the command line |
|
||||
client, see `npm(1)`. |
|
||||
|
|
||||
Prior to using npm's commands, `npm.load()` must be called. If you provide |
|
||||
`configObject` as an object map of top-level configs, they override the values |
|
||||
stored in the various config locations. In the npm command line client, this |
|
||||
set of configs is parsed from the command line options. Additional |
|
||||
configuration params are loaded from two configuration files. See |
|
||||
`npm-config(1)`, `npm-config(7)`, and `npmrc(5)` for more information. |
|
||||
|
|
||||
After that, each of the functions are accessible in the |
|
||||
commands object: `npm.commands.<cmd>`. See `npm-index(7)` for a list of |
|
||||
all possible commands. |
|
||||
|
|
||||
All commands on the command object take an **array** of positional argument |
|
||||
**strings**. The last argument to any function is a callback. Some |
|
||||
commands take other optional arguments. |
|
||||
|
|
||||
Configs cannot currently be set on a per function basis, as each call to |
|
||||
npm.config.set will change the value for *all* npm commands in that process. |
|
||||
|
|
||||
To find API documentation for a specific command, run the `npm apihelp` |
|
||||
command. |
|
||||
|
|
||||
## METHODS AND PROPERTIES |
|
||||
|
|
||||
* `npm.load(configs, cb)` |
|
||||
|
|
||||
Load the configuration params, and call the `cb` function once the |
|
||||
globalconfig and userconfig files have been loaded as well, or on |
|
||||
nextTick if they've already been loaded. |
|
||||
|
|
||||
* `npm.config` |
|
||||
|
|
||||
An object for accessing npm configuration parameters. |
|
||||
|
|
||||
* `npm.config.get(key)` |
|
||||
* `npm.config.set(key, val)` |
|
||||
* `npm.config.del(key)` |
|
||||
|
|
||||
* `npm.dir` or `npm.root` |
|
||||
|
|
||||
The `node_modules` directory where npm will operate. |
|
||||
|
|
||||
* `npm.prefix` |
|
||||
|
|
||||
The prefix where npm is operating. (Most often the current working |
|
||||
directory.) |
|
||||
|
|
||||
* `npm.cache` |
|
||||
|
|
||||
The place where npm keeps JSON and tarballs it fetches from the |
|
||||
registry (or uploads to the registry). |
|
||||
|
|
||||
* `npm.tmp` |
|
||||
|
|
||||
npm's temporary working directory. |
|
||||
|
|
||||
* `npm.deref` |
|
||||
|
|
||||
Get the "real" name for a command that has either an alias or |
|
||||
abbreviation. |
|
||||
|
|
||||
## MAGIC |
|
||||
|
|
||||
For each of the methods in the `npm.commands` object, a method is added to the |
|
||||
npm object, which takes a set of positional string arguments rather than an |
|
||||
array and a callback. |
|
||||
|
|
||||
If the last argument is a callback, then it will use the supplied |
|
||||
callback. However, if no callback is provided, then it will print out |
|
||||
the error or results. |
|
||||
|
|
||||
For example, this would work in a node repl: |
|
||||
|
|
||||
> npm = require("npm") |
|
||||
> npm.load() // wait a sec... |
|
||||
> npm.install("dnode", "express") |
|
||||
|
|
||||
Note that that *won't* work in a node program, since the `install` |
|
||||
method will get called before the configuration load is completed. |
|
||||
|
|
||||
## ABBREVS |
|
||||
|
|
||||
In order to support `npm ins foo` instead of `npm install foo`, the |
|
||||
`npm.commands` object has a set of abbreviations as well as the full |
|
||||
method names. Use the `npm.deref` method to find the real name. |
|
||||
|
|
||||
For example: |
|
||||
|
|
||||
var cmd = npm.deref("unp") // cmd === "unpublish" |
|
@ -1,23 +0,0 @@ |
|||||
npm-rm(1) -- Remove a package |
|
||||
============================= |
|
||||
|
|
||||
## SYNOPSIS |
|
||||
|
|
||||
npm rm <name> |
|
||||
npm r <name> |
|
||||
npm uninstall <name> |
|
||||
npm un <name> |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
This uninstalls a package, completely removing everything npm installed |
|
||||
on its behalf. |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-prune(1) |
|
||||
* npm-install(1) |
|
||||
* npm-folders(5) |
|
||||
* npm-config(1) |
|
||||
* npm-config(7) |
|
||||
* npmrc(5) |
|
@ -1,90 +0,0 @@ |
|||||
npm-orgs(7) -- Working with Teams & Orgs |
|
||||
======================================== |
|
||||
|
|
||||
## DESCRIPTION |
|
||||
|
|
||||
There are three levels of org users: |
|
||||
|
|
||||
1. Super admin, controls billing & adding people to the org. |
|
||||
2. Team admin, manages team membership & package access. |
|
||||
3. Developer, works on packages they are given access to. |
|
||||
|
|
||||
The super admin is the only person who can add users to the org because it impacts the monthly bill. The super admin will use the website to manage membership. Every org has a `developers` team that all users are automatically added to. |
|
||||
|
|
||||
The team admin is the person who manages team creation, team membership, and package access for teams. The team admin grants package access to teams, not individuals. |
|
||||
|
|
||||
The developer will be able to access packages based on the teams they are on. Access is either read-write or read-only. |
|
||||
|
|
||||
There are two main commands: |
|
||||
|
|
||||
1. `npm team` see npm-access(1) for more details |
|
||||
2. `npm access` see npm-team(1) for more details |
|
||||
|
|
||||
## Team Admins create teams |
|
||||
|
|
||||
* Check who you’ve added to your org: |
|
||||
|
|
||||
``` |
|
||||
npm team ls <org>:developers |
|
||||
``` |
|
||||
|
|
||||
* Each org is automatically given a `developers` team, so you can see the whole list of team members in your org. This team automatically gets read-write access to all packages, but you can change that with the `access` command. |
|
||||
|
|
||||
* Create a new team: |
|
||||
|
|
||||
``` |
|
||||
npm team create <org:team> |
|
||||
``` |
|
||||
|
|
||||
* Add members to that team: |
|
||||
|
|
||||
``` |
|
||||
npm team add <org:team> <user> |
|
||||
``` |
|
||||
|
|
||||
## Publish a package and adjust package access |
|
||||
|
|
||||
* In package directory, run |
|
||||
|
|
||||
``` |
|
||||
npm init --scope=<org> |
|
||||
``` |
|
||||
to scope it for your org & publish as usual |
|
||||
|
|
||||
* Grant access: |
|
||||
|
|
||||
``` |
|
||||
npm access grant <read-only|read-write> <org:team> [<package>] |
|
||||
``` |
|
||||
|
|
||||
* Revoke access: |
|
||||
|
|
||||
``` |
|
||||
npm access revoke <org:team> [<package>] |
|
||||
``` |
|
||||
|
|
||||
## Monitor your package access |
|
||||
|
|
||||
* See what org packages a team member can access: |
|
||||
|
|
||||
``` |
|
||||
npm access ls-packages <org> <user> |
|
||||
``` |
|
||||
|
|
||||
* See packages available to a specific team: |
|
||||
|
|
||||
``` |
|
||||
npm access ls-packages <org:team> |
|
||||
``` |
|
||||
|
|
||||
* Check which teams are collaborating on a package: |
|
||||
|
|
||||
``` |
|
||||
npm access ls-collaborators <pkg> |
|
||||
``` |
|
||||
|
|
||||
## SEE ALSO |
|
||||
|
|
||||
* npm-team(1) |
|
||||
* npm-access(1) |
|
||||
* npm-scope(7) |
|
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue