mirror of
https://github.com/zhigang1992/npm.git
synced 2026-05-20 04:12:06 +08:00
This commit is contained in:
2
node_modules/node-gyp/README.md
generated
vendored
2
node_modules/node-gyp/README.md
generated
vendored
@@ -9,7 +9,7 @@ program which is removed for node `v0.8`. If you have a native addon for node th
|
||||
still has a `wscript` file, then you should definitely add a `binding.gyp` file
|
||||
to support the latest versions of node.
|
||||
|
||||
Multiple target versions of node are supported (i.e. `0.6`, `0.7`,..., `1.0`,
|
||||
Multiple target versions of node are supported (i.e. `0.8`, `0.9`, `0.10`, ..., `1.0`,
|
||||
etc.), regardless of what version of node is actually installed on your system
|
||||
(`node-gyp` downloads the necessary development files for the target version).
|
||||
|
||||
|
||||
83
node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
generated
vendored
83
node_modules/node-gyp/gyp/pylib/gyp/xcode_emulation.py
generated
vendored
@@ -11,13 +11,16 @@ import gyp.common
|
||||
import os.path
|
||||
import re
|
||||
import shlex
|
||||
import subprocess
|
||||
import sys
|
||||
from gyp.common import GypError
|
||||
|
||||
class XcodeSettings(object):
|
||||
"""A class that understands the gyp 'xcode_settings' object."""
|
||||
|
||||
# Computed lazily by _GetSdkBaseDir(). Shared by all XcodeSettings, so cached
|
||||
# Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
|
||||
# at class-level for efficiency.
|
||||
_sdk_base_dir = None
|
||||
_sdk_path_cache = {}
|
||||
|
||||
def __init__(self, spec):
|
||||
self.spec = spec
|
||||
@@ -219,34 +222,34 @@ class XcodeSettings(object):
|
||||
else:
|
||||
return self._GetStandaloneBinaryPath()
|
||||
|
||||
def _GetSdkBaseDir(self):
|
||||
"""Returns the root of the 'Developer' directory. On Xcode 4.2 and prior,
|
||||
this is usually just /Developer. Xcode 4.3 moved that folder into the Xcode
|
||||
bundle."""
|
||||
if not XcodeSettings._sdk_base_dir:
|
||||
import subprocess
|
||||
job = subprocess.Popen(['xcode-select', '-print-path'],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT)
|
||||
out, err = job.communicate()
|
||||
if job.returncode != 0:
|
||||
print out
|
||||
raise Exception('Error %d running xcode-select' % job.returncode)
|
||||
# The Developer folder moved in Xcode 4.3.
|
||||
xcode43_sdk_path = os.path.join(
|
||||
out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs')
|
||||
if os.path.isdir(xcode43_sdk_path):
|
||||
XcodeSettings._sdk_base_dir = xcode43_sdk_path
|
||||
else:
|
||||
XcodeSettings._sdk_base_dir = os.path.join(out.rstrip(), 'SDKs')
|
||||
return XcodeSettings._sdk_base_dir
|
||||
def _GetSdkVersionInfoItem(self, sdk, infoitem):
|
||||
job = subprocess.Popen(['xcodebuild', '-version', '-sdk', sdk, infoitem],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.STDOUT)
|
||||
out = job.communicate()[0]
|
||||
if job.returncode != 0:
|
||||
sys.stderr.write(out + '\n')
|
||||
raise GypError('Error %d running xcodebuild' % job.returncode)
|
||||
return out.rstrip('\n')
|
||||
|
||||
def _SdkPath(self):
|
||||
sdk_root = self.GetPerTargetSetting('SDKROOT', default='macosx10.5')
|
||||
if sdk_root.startswith('macosx'):
|
||||
return os.path.join(self._GetSdkBaseDir(),
|
||||
'MacOSX' + sdk_root[len('macosx'):] + '.sdk')
|
||||
return sdk_root
|
||||
sdk_root = self.GetPerTargetSetting('SDKROOT', default='macosx')
|
||||
if sdk_root not in XcodeSettings._sdk_path_cache:
|
||||
XcodeSettings._sdk_path_cache[sdk_root] = self._GetSdkVersionInfoItem(
|
||||
sdk_root, 'Path')
|
||||
return XcodeSettings._sdk_path_cache[sdk_root]
|
||||
|
||||
def _AppendPlatformVersionMinFlags(self, lst):
|
||||
self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
|
||||
if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings():
|
||||
# TODO: Implement this better?
|
||||
sdk_path_basename = os.path.basename(self._SdkPath())
|
||||
if sdk_path_basename.lower().startswith('iphonesimulator'):
|
||||
self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
|
||||
'-mios-simulator-version-min=%s')
|
||||
else:
|
||||
self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
|
||||
'-miphoneos-version-min=%s')
|
||||
|
||||
def GetCflags(self, configname):
|
||||
"""Returns flags that need to be added to .c, .cc, .m, and .mm
|
||||
@@ -261,6 +264,9 @@ class XcodeSettings(object):
|
||||
if 'SDKROOT' in self._Settings():
|
||||
cflags.append('-isysroot %s' % sdk_root)
|
||||
|
||||
if self._Test('CLANG_WARN_CONSTANT_CONVERSION', 'YES', default='NO'):
|
||||
cflags.append('-Wconstant-conversion')
|
||||
|
||||
if self._Test('GCC_CHAR_IS_UNSIGNED_CHAR', 'YES', default='NO'):
|
||||
cflags.append('-funsigned-char')
|
||||
|
||||
@@ -301,7 +307,7 @@ class XcodeSettings(object):
|
||||
if self._Test('GCC_WARN_ABOUT_MISSING_NEWLINE', 'YES', default='NO'):
|
||||
cflags.append('-Wnewline-eof')
|
||||
|
||||
self._Appendf(cflags, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
|
||||
self._AppendPlatformVersionMinFlags(cflags)
|
||||
|
||||
# TODO:
|
||||
if self._Test('COPY_PHASE_STRIP', 'YES', default='NO'):
|
||||
@@ -354,6 +360,18 @@ class XcodeSettings(object):
|
||||
"""Returns flags that need to be added to .cc, and .mm compilations."""
|
||||
self.configname = configname
|
||||
cflags_cc = []
|
||||
|
||||
clang_cxx_language_standard = self._Settings().get(
|
||||
'CLANG_CXX_LANGUAGE_STANDARD')
|
||||
if clang_cxx_language_standard == 'c++0x':
|
||||
cflags_cc.append('-std=c++11')
|
||||
elif clang_cxx_language_standard == 'gnu++0x':
|
||||
cflags_cc.append('-std=gnu++11')
|
||||
elif clang_cxx_language_standard:
|
||||
cflags_cc.append('-std=%s' % clang_cxx_language_standard)
|
||||
|
||||
self._Appendf(cflags_cc, 'CLANG_CXX_LIBRARY', '-stdlib=%s')
|
||||
|
||||
if self._Test('GCC_ENABLE_CPP_RTTI', 'NO', default='YES'):
|
||||
cflags_cc.append('-fno-rtti')
|
||||
if self._Test('GCC_ENABLE_CPP_EXCEPTIONS', 'NO', default='YES'):
|
||||
@@ -524,8 +542,9 @@ class XcodeSettings(object):
|
||||
ldflags, 'DYLIB_COMPATIBILITY_VERSION', '-compatibility_version %s')
|
||||
self._Appendf(
|
||||
ldflags, 'DYLIB_CURRENT_VERSION', '-current_version %s')
|
||||
self._Appendf(
|
||||
ldflags, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
|
||||
|
||||
self._AppendPlatformVersionMinFlags(ldflags)
|
||||
|
||||
if 'SDKROOT' in self._Settings():
|
||||
ldflags.append('-isysroot ' + self._SdkPath())
|
||||
|
||||
@@ -1042,7 +1061,7 @@ def _TopologicallySortedEnvVarKeys(env):
|
||||
order.reverse()
|
||||
return order
|
||||
except gyp.common.CycleError, e:
|
||||
raise Exception(
|
||||
raise GypError(
|
||||
'Xcode environment variables are cyclically dependent: ' + str(e.nodes))
|
||||
|
||||
|
||||
|
||||
4
node_modules/node-gyp/lib/install.js
generated
vendored
4
node_modules/node-gyp/lib/install.js
generated
vendored
@@ -60,7 +60,7 @@ function install (gyp, argv, callback) {
|
||||
}
|
||||
|
||||
// 0.x.y-pre versions are not published yet and cannot be installed. Bail.
|
||||
if (version[5] && version[5].match(/\-pre$/)) {
|
||||
if (version.prerelease[0] === 'pre') {
|
||||
log.verbose('detected "pre" node version', versionStr)
|
||||
if (gyp.opts.nodedir) {
|
||||
log.verbose('--nodedir flag was passed; skipping install', gyp.opts.nodedir)
|
||||
@@ -72,7 +72,7 @@ function install (gyp, argv, callback) {
|
||||
}
|
||||
|
||||
// flatten version into String
|
||||
version = version.slice(1, 4).join('.')
|
||||
version = version.version
|
||||
log.verbose('install', 'installing version: %s', version)
|
||||
|
||||
// the directory where the dev files will be installed
|
||||
|
||||
1
node_modules/node-gyp/node_modules/.bin/semver
generated
vendored
1
node_modules/node-gyp/node_modules/.bin/semver
generated
vendored
@@ -1 +0,0 @@
|
||||
../semver/bin/semver
|
||||
31
node_modules/node-gyp/node_modules/semver/README.md
generated
vendored
31
node_modules/node-gyp/node_modules/semver/README.md
generated
vendored
@@ -1,31 +0,0 @@
|
||||
# semver
|
||||
|
||||
The semantic versioner for npm.
|
||||
|
||||
## Usage
|
||||
|
||||
$ npm install semver
|
||||
|
||||
semver.valid('1.2.3') // true
|
||||
semver.valid('a.b.c') // false
|
||||
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true
|
||||
semver.gt('1.2.3', '9.8.7') // false
|
||||
semver.lt('1.2.3', '9.8.7') // true
|
||||
|
||||
As a command-line utility:
|
||||
|
||||
$ semver -h
|
||||
|
||||
Usage: semver -v <version> [-r <range>]
|
||||
Test if version(s) satisfy the supplied range(s),
|
||||
and sort them.
|
||||
|
||||
Multiple versions or ranges may be supplied.
|
||||
|
||||
Program exits successfully if all versions satisfy all
|
||||
ranges and are valid, and prints all satisfying versions.
|
||||
If no versions are valid, or ranges are not satisfied,
|
||||
then exits failure.
|
||||
|
||||
Versions are printed in ascending order, so supplying
|
||||
multiple versions to the utility will just sort them.
|
||||
69
node_modules/node-gyp/node_modules/semver/bin/semver
generated
vendored
69
node_modules/node-gyp/node_modules/semver/bin/semver
generated
vendored
@@ -1,69 +0,0 @@
|
||||
#!/usr/bin/env node
|
||||
// Standalone semver comparison program.
|
||||
// Exits successfully and prints matching version(s) if
|
||||
// any supplied version is valid and passes all tests.
|
||||
|
||||
var argv = process.argv.slice(2)
|
||||
, versions = []
|
||||
, range = []
|
||||
, gt = []
|
||||
, lt = []
|
||||
, eq = []
|
||||
, semver = require("../semver")
|
||||
|
||||
main()
|
||||
|
||||
function main () {
|
||||
if (!argv.length) return help()
|
||||
while (argv.length) {
|
||||
var a
|
||||
switch (a = argv.shift()) {
|
||||
case "-v": case "--version":
|
||||
versions.push(argv.shift())
|
||||
break
|
||||
case "-r" : case "--range":
|
||||
range.push(argv.shift())
|
||||
break
|
||||
default:
|
||||
versions.push(a)
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
versions = versions.filter(semver.valid)
|
||||
for (var i = 0, l = range.length; i < l ; i ++) {
|
||||
versions = versions.filter(function (v) {
|
||||
return semver.satisfies(v, range[i])
|
||||
})
|
||||
if (!versions.length) return fail()
|
||||
}
|
||||
return success(versions)
|
||||
}
|
||||
|
||||
function fail () { process.exit(1) }
|
||||
|
||||
function success () {
|
||||
versions.sort(semver.compare)
|
||||
.map(semver.clean)
|
||||
.forEach(function (v,i,_) { console.log(v) })
|
||||
}
|
||||
|
||||
function help () {
|
||||
console.log(["Usage: semver -v <version> [-r <range>]"
|
||||
,"Test if version(s) satisfy the supplied range(s),"
|
||||
,"and sort them."
|
||||
,""
|
||||
,"Multiple versions or ranges may be supplied."
|
||||
,""
|
||||
,"Program exits successfully if any versions satisfy all"
|
||||
,"ranges and is valid, and prints all satisfying versions."
|
||||
,""
|
||||
,"If no versions are valid, or ranges are not satisfied,"
|
||||
,"then exits failure."
|
||||
,""
|
||||
,"Versions are printed in ascending order, so supplying"
|
||||
,"multiple versions to the utility will just sort them."
|
||||
].join("\n"))
|
||||
}
|
||||
|
||||
|
||||
20
node_modules/node-gyp/node_modules/semver/package.json
generated
vendored
20
node_modules/node-gyp/node_modules/semver/package.json
generated
vendored
@@ -1,20 +0,0 @@
|
||||
{
|
||||
"name": "semver",
|
||||
"version": "1.0.0",
|
||||
"description": "The semantic version parser used by npm.",
|
||||
"main": "semver.js",
|
||||
"scripts": {
|
||||
"test": "node semver.js"
|
||||
},
|
||||
"bin": {
|
||||
"semver": "./bin/semver"
|
||||
},
|
||||
"readme": "# semver\n\nThe semantic versioner for npm.\n\n## Usage\n\n $ npm install semver\n\n semver.valid('1.2.3') // true\n semver.valid('a.b.c') // false\n semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true\n semver.gt('1.2.3', '9.8.7') // false\n semver.lt('1.2.3', '9.8.7') // true\n\nAs a command-line utility:\n\n $ semver -h\n\n Usage: semver -v <version> [-r <range>]\n Test if version(s) satisfy the supplied range(s),\n and sort them.\n\n Multiple versions or ranges may be supplied.\n\n Program exits successfully if all versions satisfy all\n ranges and are valid, and prints all satisfying versions.\n If no versions are valid, or ranges are not satisfied,\n then exits failure.\n\n Versions are printed in ascending order, so supplying\n multiple versions to the utility will just sort them.\n",
|
||||
"readmeFilename": "README.md",
|
||||
"_id": "semver@1.0.0",
|
||||
"dist": {
|
||||
"shasum": "64967ea4095c091ca0f1fd6bc77852aef60d2416"
|
||||
},
|
||||
"_from": "semver@1",
|
||||
"_resolved": "https://registry.npmjs.org/semver/-/semver-1.0.0.tgz"
|
||||
}
|
||||
331
node_modules/node-gyp/node_modules/semver/semver.js
generated
vendored
331
node_modules/node-gyp/node_modules/semver/semver.js
generated
vendored
@@ -1,331 +0,0 @@
|
||||
|
||||
// See http://semver.org/
|
||||
// This implementation is a *hair* less strict in that it allows
|
||||
// v1.2.3 things, and also tags that don't begin with a char.
|
||||
|
||||
var semver = "[v=]*([0-9]+)" // major
|
||||
+ "\\.([0-9]+)" // minor
|
||||
+ "\\.([0-9]+)" // patch
|
||||
+ "(-[0-9]+-?)?" // build
|
||||
+ "([a-zA-Z-][a-zA-Z0-9-\.:]*)?" // tag
|
||||
, exprComparator = "^((<|>)?=?)("+semver+")$|^$"
|
||||
, xRange = "((?:<|>)?=?)([0-9]+|x|X)(?:\\.([0-9]+|x|X)(?:\\.([0-9]+|x|X))?)?"
|
||||
, exprSpermy = "(?:~>?)"+xRange
|
||||
, expressions = exports.expressions =
|
||||
{ parse : new RegExp("^\\s*"+semver+"\\s*$")
|
||||
, parsePackage : new RegExp("^\\s*([^\/]+)[-@](" +semver+")\\s*$")
|
||||
, parseRange : new RegExp(
|
||||
"^\\s*(" + semver + ")\\s+-\\s+(" + semver + ")\\s*$")
|
||||
, validComparator : new RegExp("^"+exprComparator+"$")
|
||||
, parseXRange : new RegExp("^"+xRange+"$")
|
||||
, parseSpermy : new RegExp("^"+exprSpermy+"$")
|
||||
}
|
||||
Object.getOwnPropertyNames(expressions).forEach(function (i) {
|
||||
exports[i] = function (str) { return (str || "").match(expressions[i]) }
|
||||
})
|
||||
|
||||
exports.rangeReplace = ">=$1 <=$7"
|
||||
exports.clean = clean
|
||||
exports.compare = compare
|
||||
exports.satisfies = satisfies
|
||||
exports.gt = gt
|
||||
exports.lt = lt
|
||||
exports.valid = valid
|
||||
exports.validPackage = validPackage
|
||||
exports.validRange = validRange
|
||||
exports.maxSatisfying = maxSatisfying
|
||||
|
||||
function clean (ver) {
|
||||
v = exports.parse(ver)
|
||||
if (!v) return v
|
||||
return [v[1]||'', v[2]||'', v[3]||''].join(".") + (v[4]||'') + (v[5]||'')
|
||||
}
|
||||
function valid (version) {
|
||||
return exports.parse(version) && version.trim().replace(/^[v=]+/, '')
|
||||
}
|
||||
function validPackage (version) {
|
||||
return version.match(expressions.parsePackage) && version.trim()
|
||||
}
|
||||
|
||||
// range can be one of:
|
||||
// "1.0.3 - 2.0.0" range, inclusive, like ">=1.0.3 <=2.0.0"
|
||||
// ">1.0.2" like 1.0.3 - 9999.9999.9999
|
||||
// ">=1.0.2" like 1.0.2 - 9999.9999.9999
|
||||
// "<2.0.0" like 0.0.0 - 1.9999.9999
|
||||
// ">1.0.2 <2.0.0" like 1.0.3 - 1.9999.9999
|
||||
var starExpression = /(<|>)?=?\s*\*/g
|
||||
, starReplace = ""
|
||||
, compTrimExpression = new RegExp("((<|>)?=?)\\s*("+semver+")", "g")
|
||||
, compTrimReplace = "$1$3"
|
||||
|
||||
function toComparators (range) {
|
||||
return range.trim()
|
||||
.replace(expressions.parseRange, exports.rangeReplace)
|
||||
.split(/\s+/)
|
||||
.map(replaceSpermies)
|
||||
.map(replaceXRanges)
|
||||
.join(" ")
|
||||
.replace(compTrimExpression, compTrimReplace)
|
||||
.replace(starExpression, starReplace)
|
||||
.split("||")
|
||||
.map(function (orchunk) {
|
||||
return orchunk
|
||||
.trim()
|
||||
.split(/\s+/)
|
||||
.filter(function (c) { return c.match(expressions.validComparator) })
|
||||
})
|
||||
.filter(function (c) { return c.length })
|
||||
}
|
||||
|
||||
// "2.x","2.x.x" --> ">=2.0.0 <2.1"
|
||||
// "2.3.x" --> ">=2.3.0 <2.4.0"
|
||||
function replaceXRanges (ranges) {
|
||||
return ranges.split(/\s+/)
|
||||
.map(replaceXRange)
|
||||
.join(" ")
|
||||
}
|
||||
function replaceXRange (version) {
|
||||
return version.trim().replace(expressions.parseXRange,
|
||||
function (v, gtlt, M, m, p) {
|
||||
var anyX = !M || M.toLowerCase() === "x"
|
||||
|| !m || m.toLowerCase() === "x"
|
||||
|| !p || p.toLowerCase() === "x"
|
||||
|
||||
if (gtlt && anyX) {
|
||||
// just replace x'es with zeroes
|
||||
;(!M || M.toLowerCase() === "x") && (M = 0)
|
||||
;(!m || m.toLowerCase() === "x") && (m = 0)
|
||||
;(!p || p.toLowerCase() === "x") && (p = 0)
|
||||
return gtlt + M+"."+m+"."+p
|
||||
}
|
||||
|
||||
if (!M || M.toLowerCase() === "x") {
|
||||
return "*" // allow any
|
||||
}
|
||||
if (!m || m.toLowerCase() === "x") {
|
||||
return ">="+M+".0.0 <"+(+M+1)+".0.0"
|
||||
}
|
||||
if (!p || p.toLowerCase() === "x") {
|
||||
return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0"
|
||||
}
|
||||
return v // impossible?
|
||||
})
|
||||
}
|
||||
|
||||
// ~, ~> --> * (any, kinda silly)
|
||||
// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0
|
||||
// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0
|
||||
// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0
|
||||
// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0
|
||||
// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0
|
||||
function replaceSpermies (version) {
|
||||
return version.trim().replace(expressions.parseSpermy,
|
||||
function (v, gtlt, M, m, p) {
|
||||
if (gtlt) throw new Error(
|
||||
"Using '"+gtlt+"' with ~ makes no sense. Don't do it.")
|
||||
if (!M || M.toLowerCase() === "x") {
|
||||
return "*"
|
||||
}
|
||||
if (!m || m.toLowerCase() === "x") {
|
||||
return ">="+M+".0.0 <"+(+M+1)+".0.0"
|
||||
}
|
||||
if (!p || p.toLowerCase() === "x") {
|
||||
return ">="+M+"."+m+".0 <"+M+"."+(+m+1)+".0"
|
||||
}
|
||||
return ">="+M+"."+m+"."+p+" <"+M+"."+(+m+1)+".0"
|
||||
})
|
||||
}
|
||||
|
||||
function validRange (range) {
|
||||
range = range.trim().replace(starExpression, starReplace)
|
||||
var c = toComparators(range)
|
||||
return (c.length === 0)
|
||||
? null
|
||||
: c.map(function (c) { return c.join(" ") }).join("||")
|
||||
}
|
||||
|
||||
// returns the highest satisfying version in the list, or undefined
|
||||
function maxSatisfying (versions, range) {
|
||||
return versions
|
||||
.filter(function (v) { return satisfies(v, range) })
|
||||
.sort(compare)
|
||||
.pop()
|
||||
}
|
||||
function satisfies (version, range) {
|
||||
version = valid(version)
|
||||
if (!version) return false
|
||||
range = toComparators(range)
|
||||
for (var i = 0, l = range.length ; i < l ; i ++) {
|
||||
var ok = false
|
||||
for (var j = 0, ll = range[i].length ; j < ll ; j ++) {
|
||||
var r = range[i][j]
|
||||
, gtlt = r.charAt(0) === ">" ? gt
|
||||
: r.charAt(0) === "<" ? lt
|
||||
: false
|
||||
, eq = r.charAt(!!gtlt) === "="
|
||||
, sub = (!!eq) + (!!gtlt)
|
||||
if (!gtlt) eq = true
|
||||
r = r.substr(sub)
|
||||
r = (r === "") ? r : valid(r)
|
||||
ok = (r === "") || (eq && r === version) || (gtlt && gtlt(version, r))
|
||||
if (!ok) break
|
||||
}
|
||||
if (ok) return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
// return v1 > v2 ? 1 : -1
|
||||
function compare (v1, v2) {
|
||||
return v1 === v2 ? 0 : gt(v1, v2) ? 1 : -1
|
||||
}
|
||||
|
||||
function lt (v1, v2) { return gt(v2, v1) }
|
||||
|
||||
// return v1 > v2
|
||||
function num (v) { return parseInt((v||"0").replace(/[^0-9]+/g, ''), 10) }
|
||||
function gt (v1, v2) {
|
||||
v1 = exports.parse(v1)
|
||||
v2 = exports.parse(v2)
|
||||
if (!v1 || !v2) return false
|
||||
|
||||
for (var i = 1; i < 5; i ++) {
|
||||
v1[i] = num(v1[i])
|
||||
v2[i] = num(v2[i])
|
||||
if (v1[i] > v2[i]) return true
|
||||
else if (v1[i] !== v2[i]) return false
|
||||
}
|
||||
// no tag is > than any tag, or use lexicographical order.
|
||||
var tag1 = v1[5] || ""
|
||||
, tag2 = v2[5] || ""
|
||||
return tag2 && (!tag1 || tag1 > tag2)
|
||||
}
|
||||
|
||||
if (module === require.main) { // tests below
|
||||
var assert = require("assert")
|
||||
|
||||
; [ ["0.0.0", "0.0.0foo"]
|
||||
, ["0.0.1", "0.0.0"]
|
||||
, ["1.0.0", "0.9.9"]
|
||||
, ["0.10.0", "0.9.0"]
|
||||
, ["0.99.0", "0.10.0"]
|
||||
, ["2.0.0", "1.2.3"]
|
||||
, ["v0.0.0", "0.0.0foo"]
|
||||
, ["v0.0.1", "0.0.0"]
|
||||
, ["v1.0.0", "0.9.9"]
|
||||
, ["v0.10.0", "0.9.0"]
|
||||
, ["v0.99.0", "0.10.0"]
|
||||
, ["v2.0.0", "1.2.3"]
|
||||
, ["0.0.0", "v0.0.0foo"]
|
||||
, ["0.0.1", "v0.0.0"]
|
||||
, ["1.0.0", "v0.9.9"]
|
||||
, ["0.10.0", "v0.9.0"]
|
||||
, ["0.99.0", "v0.10.0"]
|
||||
, ["2.0.0", "v1.2.3"]
|
||||
, ["1.2.3", "1.2.3-asdf"]
|
||||
, ["1.2.3-4", "1.2.3"]
|
||||
, ["1.2.3-4-foo", "1.2.3"]
|
||||
, ["1.2.3-5", "1.2.3-5-foo"]
|
||||
, ["1.2.3-5", "1.2.3-4"]
|
||||
].forEach(function (v) {
|
||||
assert.ok(gt(v[0], v[1]), "gt('"+v[0]+"', '"+v[1]+"')")
|
||||
assert.ok(lt(v[1], v[0]), "lt('"+v[1]+"', '"+v[0]+"')")
|
||||
assert.ok(!gt(v[1], v[0]), "!gt('"+v[1]+"', '"+v[0]+"')")
|
||||
assert.ok(!lt(v[0], v[1]), "!lt('"+v[0]+"', '"+v[1]+"')")
|
||||
})
|
||||
|
||||
|
||||
; [ ["1.0.0 - 2.0.0", "1.2.3"]
|
||||
, ["1.0.0", "1.0.0"]
|
||||
, [">=*", "0.2.4"]
|
||||
, ["", "1.0.0"]
|
||||
, ["*", "1.2.3"]
|
||||
, ["*", "v1.2.3-foo"]
|
||||
, [">=1.0.0", "1.0.0"]
|
||||
, [">=1.0.0", "1.0.1"]
|
||||
, [">=1.0.0", "1.1.0"]
|
||||
, [">1.0.0", "1.0.1"]
|
||||
, [">1.0.0", "1.1.0"]
|
||||
, ["<=2.0.0", "2.0.0"]
|
||||
, ["<=2.0.0", "1.9999.9999"]
|
||||
, ["<=2.0.0", "0.2.9"]
|
||||
, ["<2.0.0", "1.9999.9999"]
|
||||
, ["<2.0.0", "0.2.9"]
|
||||
, [">= 1.0.0", "1.0.0"]
|
||||
, [">= 1.0.0", "1.0.1"]
|
||||
, [">= 1.0.0", "1.1.0"]
|
||||
, ["> 1.0.0", "1.0.1"]
|
||||
, ["> 1.0.0", "1.1.0"]
|
||||
, ["<= 2.0.0", "2.0.0"]
|
||||
, ["<= 2.0.0", "1.9999.9999"]
|
||||
, ["<= 2.0.0", "0.2.9"]
|
||||
, ["< 2.0.0", "1.9999.9999"]
|
||||
, ["<\t2.0.0", "0.2.9"]
|
||||
, [">=0.1.97", "v0.1.97"]
|
||||
, [">=0.1.97", "0.1.97"]
|
||||
, ["0.1.20 || 1.2.4", "1.2.4"]
|
||||
, [">=0.2.3 || <0.0.1", "0.0.0"]
|
||||
, [">=0.2.3 || <0.0.1", "0.2.3"]
|
||||
, [">=0.2.3 || <0.0.1", "0.2.4"]
|
||||
, ["||", "1.3.4"]
|
||||
, ["2.x.x", "2.1.3"]
|
||||
, ["1.2.x", "1.2.3"]
|
||||
, ["1.2.x || 2.x", "2.1.3"]
|
||||
, ["1.2.x || 2.x", "1.2.3"]
|
||||
, ["x", "1.2.3"]
|
||||
, ["2", "2.1.2"]
|
||||
, ["2.3", "2.3.1"]
|
||||
, ["~2.4", "2.4.0"] // >=2.4.0 <2.5.0
|
||||
, ["~2.4", "2.4.5"]
|
||||
, ["~>3.2.1", "3.2.2"] // >=3.2.1 <3.3.0
|
||||
, ["~1", "1.2.3"] // >=1.0.0 <2.0.0
|
||||
, ["~>1", "1.2.3"]
|
||||
, ["~1.0", "1.0.2"] // >=1.0.0 <1.1.0
|
||||
, ["<1", "1.0.0beta"]
|
||||
, [">=1", "1.0.0"]
|
||||
, ["<1.2", "1.1.1"]
|
||||
].forEach(function (v) {
|
||||
assert.ok(satisfies(v[1], v[0]), v[0]+" satisfied by "+v[1])
|
||||
})
|
||||
|
||||
|
||||
// negative tests
|
||||
; [ ["1.0.0 - 2.0.0", "2.2.3"]
|
||||
, ["1.0.0", "1.0.1"]
|
||||
, [">=1.0.0", "0.0.0"]
|
||||
, [">=1.0.0", "0.0.1"]
|
||||
, [">=1.0.0", "0.1.0"]
|
||||
, [">1.0.0", "0.0.1"]
|
||||
, [">1.0.0", "0.1.0"]
|
||||
, ["<=2.0.0", "3.0.0"]
|
||||
, ["<=2.0.0", "2.9999.9999"]
|
||||
, ["<=2.0.0", "2.2.9"]
|
||||
, ["<2.0.0", "2.9999.9999"]
|
||||
, ["<2.0.0", "2.2.9"]
|
||||
, [">=0.1.97", "v0.1.93"]
|
||||
, [">=0.1.97", "0.1.93"]
|
||||
, ["0.1.20 || 1.2.4", "1.2.3"]
|
||||
, [">=0.2.3 || <0.0.1", "0.0.3"]
|
||||
, [">=0.2.3 || <0.0.1", "0.2.2"]
|
||||
, ["2.x.x", "1.1.3"]
|
||||
, ["2.x.x", "3.1.3"]
|
||||
, ["1.2.x", "1.3.3"]
|
||||
, ["1.2.x || 2.x", "3.1.3"]
|
||||
, ["1.2.x || 2.x", "1.1.3"]
|
||||
, ["2", "1.1.2"]
|
||||
, ["2.3", "2.4.1"]
|
||||
, ["~2.4", "2.5.0"] // >=2.4.0 <2.5.0
|
||||
, ["~2.4", "2.3.9"]
|
||||
, ["~>3.2.1", "3.3.2"] // >=3.2.1 <3.3.0
|
||||
, ["~>3.2.1", "3.2.0"] // >=3.2.1 <3.3.0
|
||||
, ["~1", "0.2.3"] // >=1.0.0 <2.0.0
|
||||
, ["~>1", "2.2.3"]
|
||||
, ["~1.0", "1.1.0"] // >=1.0.0 <1.1.0
|
||||
, [">=1", "1.0.0beta"]
|
||||
, ["<1", "1.0.0"]
|
||||
, [">=1.2", "1.1.1"]
|
||||
].forEach(function (v) {
|
||||
assert.ok(!satisfies(v[1], v[0]), v[0]+" not satisfied by "+v[1])
|
||||
})
|
||||
|
||||
}
|
||||
14
node_modules/node-gyp/package.json
generated
vendored
14
node_modules/node-gyp/package.json
generated
vendored
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user