| 
				
					
						 | 
			8 years ago | |
|---|---|---|
| .. | ||
| LICENSE | 8 years ago | |
| README.md | 8 years ago | |
| npa.js | 8 years ago | |
| package.json | 8 years ago | |
		
			
				
				README.md
			
		
		
	
	npm-package-arg
Parse package name and specifier passed to commands like npm install or
npm cache add.  This just parses the text given-- it's worth noting that
npm has further logic it applies by looking at your disk to figure out
what ambiguous specifiers are.  If you want that logic, please see
realize-package-specifier.
Arguments look like: foo@1.2, @bar/foo@1.2, foo@user/foo, http://x.com/foo.tgz,
git+https://github.com/user/foo, bitbucket:user/foo, foo.tar.gz or bar
EXAMPLES
var assert = require("assert")
var npa = require("npm-package-arg")
// Pass in the descriptor, and it'll return an object
var parsed = npa("@bar/foo@1.2")
// Returns an object like:
{
  raw: '@bar/foo@1.2',       // what was passed in
  name: '@bar/foo',          // the name of the package
  escapedName: '@bar%2ffoo', // the escaped name, for making requests against a registry
  scope: '@bar',             // the scope of the package, or null
  type: 'range',             // the type of specifier this is
  spec: '>=1.2.0 <1.3.0',    // the expanded specifier
  rawSpec: '1.2'             // the specifier as passed in
 }
// Parsing urls pointing at hosted git services produces a variation:
var parsed = npa("git+https://github.com/user/foo")
// Returns an object like:
{
  raw: 'git+https://github.com/user/foo',
  scope: null,
  name: null,
  escapedName: null,
  rawSpec: 'git+https://github.com/user/foo',
  spec: 'user/foo',
  type: 'hosted',
  hosted: {
    type: 'github',
    ssh: 'git@github.com:user/foo.git',
    sshurl: 'git+ssh://git@github.com/user/foo.git',
    https: 'https://github.com/user/foo.git',
    directUrl: 'https://raw.githubusercontent.com/user/foo/master/package.json'
  }
}
// Completely unreasonable invalid garbage throws an error
// Make sure you wrap this in a try/catch if you have not
// already sanitized the inputs!
assert.throws(function() {
  npa("this is not \0 a valid package name or url")
})
USING
var npa = require('npm-package-arg')
- var result = npa(arg)
 
Parses arg and returns a result object detailing what arg is.
arg -- a package descriptor, like: foo@1.2, or foo@user/foo, or
http://x.com/foo.tgz, or git+https://github.com/user/foo
RESULT OBJECT
The objects that are returned by npm-package-arg contain the following keys:
name- If known, thenamefield expected in the resulting pkg.type- One of the following strings:git- A git repohosted- A hosted project, from github, bitbucket or gitlab. Originally either a full url pointing at one of these services or a shorthand likeuser/projectorgithub:user/projectfor github orbitbucket:user/projectfor bitbucket.tag- A tagged version, like"foo@latest"version- A specific version number, like"foo@1.2.3"range- A version range, like"foo@2.x"local- A local file or folder pathremote- An http url (presumably to a tgz)
spec- The "thing". URL, the range, git repo, etc.hosted- If type=hosted this will be an object with the following keys:type- github, bitbucket or gitlabssh- The ssh path for this git reposshUrl- The ssh URL for this git repohttpsUrl- The HTTPS URL for this git repodirectUrl- The URL for the package.json in this git repo
raw- The original un-modified string that was provided.rawSpec- The part after thename@..., as it was originally provided.scope- If a name is something like@org/modulethen thescopefield will be set to@org. If it doesn't have a scoped name, then scope isnull.escapedName- A version ofnameescaped to match the npm scoped packages specification. Mostly used when making requests against a registry. Whennameisnull,escapedNamewill also benull.
If you only include a name and no specifier part, eg, foo or foo@ then
a default of latest will be used (as of 4.1.0). This is contrast with
previous behavior where * was used.