updated bundled node_modules

This commit is contained in:
Steve Gill 2017-09-05 11:04:12 -07:00
parent 2377aa7ac2
commit e7a972df77
73 changed files with 3553 additions and 915 deletions

3
node_modules/abbrev/package.json generated vendored
View File

@ -77,7 +77,8 @@
], ],
"name": "abbrev", "name": "abbrev",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# abbrev-js\n\nJust like [ruby's Abbrev](http://apidock.com/ruby/Abbrev).\n\nUsage:\n\n var abbrev = require(\"abbrev\");\n abbrev(\"foo\", \"fool\", \"folding\", \"flop\");\n \n // returns:\n { fl: 'flop'\n , flo: 'flop'\n , flop: 'flop'\n , fol: 'folding'\n , fold: 'folding'\n , foldi: 'folding'\n , foldin: 'folding'\n , folding: 'folding'\n , foo: 'foo'\n , fool: 'fool'\n }\n\nThis is handy for command-line scripts, or other cases where you want to be able to accept shorthands.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+ssh://git@github.com/isaacs/abbrev-js.git" "url": "git+ssh://git@github.com/isaacs/abbrev-js.git"

3
node_modules/ansi/package.json generated vendored
View File

@ -83,7 +83,8 @@
], ],
"name": "ansi", "name": "ansi",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "ansi.js\n=========\n### Advanced ANSI formatting tool for Node.js\n\n`ansi.js` is a module for Node.js that provides an easy-to-use API for\nwriting ANSI escape codes to `Stream` instances. ANSI escape codes are used to do\nfancy things in a terminal window, like render text in colors, delete characters,\nlines, the entire window, or hide and show the cursor, and lots more!\n\n#### Features:\n\n * 256 color support for the terminal!\n * Make a beep sound from your terminal!\n * Works with *any* writable `Stream` instance.\n * Allows you to move the cursor anywhere on the terminal window.\n * Allows you to delete existing contents from the terminal window.\n * Allows you to hide and show the cursor.\n * Converts CSS color codes and RGB values into ANSI escape codes.\n * Low-level; you are in control of when escape codes are used, it's not abstracted.\n\n\nInstallation\n------------\n\nInstall with `npm`:\n\n``` bash\n$ npm install ansi\n```\n\n\nExample\n-------\n\n``` js\nvar ansi = require('ansi')\n , cursor = ansi(process.stdout)\n\n// You can chain your calls forever:\ncursor\n .red() // Set font color to red\n .bg.grey() // Set background color to grey\n .write('Hello World!') // Write 'Hello World!' to stdout\n .bg.reset() // Reset the bgcolor before writing the trailing \\n,\n // to avoid Terminal glitches\n .write('\\n') // And a final \\n to wrap things up\n\n// Rendering modes are persistent:\ncursor.hex('#660000').bold().underline()\n\n// You can use the regular logging functions, text will be green:\nconsole.log('This is blood red, bold text')\n\n// To reset just the foreground color:\ncursor.fg.reset()\n\nconsole.log('This will still be bold')\n\n// to go to a location (x,y) on the console\n// note: 1-indexed, not 0-indexed:\ncursor.goto(10, 5).write('Five down, ten over')\n\n// to clear the current line:\ncursor.horizontalAbsolute(0).eraseLine().write('Starting again')\n\n// to go to a different column on the current line:\ncursor.horizontalAbsolute(5).write('column five')\n\n// Clean up after yourself!\ncursor.reset()\n```\n\n\nLicense\n-------\n\n(The MIT License)\n\nCopyright (c) 2012 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n'Software'), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\nIN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY\nCLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,\nTORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE\nSOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/TooTallNate/ansi.js.git" "url": "git://github.com/TooTallNate/ansi.js.git"

View File

@ -1,3 +1,4 @@
'use strict';
module.exports = balanced; module.exports = balanced;
function balanced(a, b, str) { function balanced(a, b, str) {
if (a instanceof RegExp) a = maybeMatch(a, str); if (a instanceof RegExp) a = maybeMatch(a, str);

View File

@ -2,48 +2,48 @@
"_args": [ "_args": [
[ [
{ {
"raw": "balanced-match@^0.4.1", "raw": "balanced-match@^1.0.0",
"scope": null, "scope": null,
"escapedName": "balanced-match", "escapedName": "balanced-match",
"name": "balanced-match", "name": "balanced-match",
"rawSpec": "^0.4.1", "rawSpec": "^1.0.0",
"spec": ">=0.4.1 <0.5.0", "spec": ">=1.0.0 <2.0.0",
"type": "range" "type": "range"
}, },
"/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion" "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion"
] ]
], ],
"_from": "balanced-match@>=0.4.1 <0.5.0", "_from": "balanced-match@>=1.0.0 <2.0.0",
"_id": "balanced-match@0.4.2", "_id": "balanced-match@1.0.0",
"_inCache": true, "_inCache": true,
"_location": "/balanced-match", "_location": "/balanced-match",
"_nodeVersion": "4.4.7", "_nodeVersion": "7.8.0",
"_npmOperationalInternal": { "_npmOperationalInternal": {
"host": "packages-16-east.internal.npmjs.com", "host": "s3://npm-registry-packages",
"tmp": "tmp/balanced-match-0.4.2.tgz_1468834991581_0.6590619895141572" "tmp": "tmp/balanced-match-1.0.0.tgz_1497251909645_0.8755026108119637"
}, },
"_npmUser": { "_npmUser": {
"name": "juliangruber", "name": "juliangruber",
"email": "julian@juliangruber.com" "email": "julian@juliangruber.com"
}, },
"_npmVersion": "2.15.8", "_npmVersion": "4.2.0",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"raw": "balanced-match@^0.4.1", "raw": "balanced-match@^1.0.0",
"scope": null, "scope": null,
"escapedName": "balanced-match", "escapedName": "balanced-match",
"name": "balanced-match", "name": "balanced-match",
"rawSpec": "^0.4.1", "rawSpec": "^1.0.0",
"spec": ">=0.4.1 <0.5.0", "spec": ">=1.0.0 <2.0.0",
"type": "range" "type": "range"
}, },
"_requiredBy": [ "_requiredBy": [
"/brace-expansion" "/brace-expansion"
], ],
"_resolved": "http://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz", "_resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"_shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838", "_shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
"_shrinkwrap": null, "_shrinkwrap": null,
"_spec": "balanced-match@^0.4.1", "_spec": "balanced-match@^1.0.0",
"_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion", "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/brace-expansion",
"author": { "author": {
"name": "Julian Gruber", "name": "Julian Gruber",
@ -56,14 +56,15 @@
"dependencies": {}, "dependencies": {},
"description": "Match balanced character pairs, like \"{\" and \"}\"", "description": "Match balanced character pairs, like \"{\" and \"}\"",
"devDependencies": { "devDependencies": {
"matcha": "^0.7.0",
"tape": "^4.6.0" "tape": "^4.6.0"
}, },
"directories": {}, "directories": {},
"dist": { "dist": {
"shasum": "cb3f3e3c732dc0f01ee70b403f302e61d7709838", "shasum": "89b4d199ab2bee49de164ea02b89ce462d71b767",
"tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz" "tarball": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
}, },
"gitHead": "57c2ea29d89a2844ae3bdcc637c6e2cbb73725e2", "gitHead": "d701a549a7653a874eebce7eca25d3577dc868ac",
"homepage": "https://github.com/juliangruber/balanced-match", "homepage": "https://github.com/juliangruber/balanced-match",
"keywords": [ "keywords": [
"match", "match",
@ -82,12 +83,14 @@
], ],
"name": "balanced-match", "name": "balanced-match",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# balanced-match\n\nMatch balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!\n\n[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)\n[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)\n\n[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)\n\n## Example\n\nGet the first matching pair of braces:\n\n```js\nvar balanced = require('balanced-match');\n\nconsole.log(balanced('{', '}', 'pre{in{nested}}post'));\nconsole.log(balanced('{', '}', 'pre{first}between{second}post'));\nconsole.log(balanced(/\\s+\\{\\s+/, /\\s+\\}\\s+/, 'pre { in{nest} } post'));\n```\n\nThe matches are:\n\n```bash\n$ node example.js\n{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }\n{ start: 3,\n end: 9,\n pre: 'pre',\n body: 'first',\n post: 'between{second}post' }\n{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }\n```\n\n## API\n\n### var m = balanced(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\nobject with those keys:\n\n* **start** the index of the first match of `a`\n* **end** the index of the matching `b`\n* **pre** the preamble, `a` and `b` not included\n* **body** the match, `a` and `b` not included\n* **post** the postscript, `a` and `b` not included\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.\n\n### var r = balanced.range(a, b, str)\n\nFor the first non-nested matching pair of `a` and `b` in `str`, return an\narray with indexes: `[ <a index>, <b index> ]`.\n\nIf there's no match, `undefined` will be returned.\n\nIf the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install balanced-match\n```\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/juliangruber/balanced-match.git" "url": "git://github.com/juliangruber/balanced-match.git"
}, },
"scripts": { "scripts": {
"bench": "make bench",
"test": "make test" "test": "make test"
}, },
"testling": { "testling": {
@ -106,5 +109,5 @@
"android-browser/4.2..latest" "android-browser/4.2..latest"
] ]
}, },
"version": "0.4.2" "version": "1.0.0"
} }

View File

@ -36,7 +36,7 @@
"_requiredBy": [ "_requiredBy": [
"/plist" "/plist"
], ],
"_resolved": "http://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", "_resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
"_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978", "_shasum": "1101e9544f4a76b1bc3b26d452ca96d7a35e7978",
"_shrinkwrap": null, "_shrinkwrap": null,
"_spec": "base64-js@0.0.8", "_spec": "base64-js@0.0.8",
@ -62,7 +62,7 @@
"node": ">= 0.4" "node": ">= 0.4"
}, },
"gitHead": "b4a8a5fa9b0caeddb5ad94dd1108253d8f2a315f", "gitHead": "b4a8a5fa9b0caeddb5ad94dd1108253d8f2a315f",
"homepage": "https://github.com/beatgammit/base64-js", "homepage": "https://github.com/beatgammit/base64-js#readme",
"license": "MIT", "license": "MIT",
"main": "lib/b64.js", "main": "lib/b64.js",
"maintainers": [ "maintainers": [
@ -77,7 +77,8 @@
], ],
"name": "base64-js", "name": "base64-js",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "base64-js\n=========\n\n`base64-js` does basic base64 encoding/decoding in pure JS.\n\n[![build status](https://secure.travis-ci.org/beatgammit/base64-js.png)](http://travis-ci.org/beatgammit/base64-js)\n\n[![testling badge](https://ci.testling.com/beatgammit/base64-js.png)](https://ci.testling.com/beatgammit/base64-js)\n\nMany browsers already have base64 encoding/decoding functionality, but it is for text data, not all-purpose binary data.\n\nSometimes encoding/decoding binary data in the browser is useful, and that is what this module does.\n\n## install\n\nWith [npm](https://npmjs.org) do:\n\n`npm install base64-js`\n\n## methods\n\n`var base64 = require('base64-js')`\n\n`base64` has two exposed functions, `toByteArray` and `fromByteArray`, which both take a single argument.\n\n* `toByteArray` - Takes a base64 string and returns a byte array\n* `fromByteArray` - Takes a byte array and returns a base64 string\n\n## license\n\nMIT",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/beatgammit/base64-js.git" "url": "git://github.com/beatgammit/base64-js.git"

2364
node_modules/big-integer/BigInteger.d.ts generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1038,14 +1038,31 @@ var bigInt = (function (undefined) {
} }
var parseBase = function (text, base) { var parseBase = function (text, base) {
var length = text.length; var length = text.length;
var i;
var absBase = Math.abs(base);
for(var i = 0; i < length; i++) {
var c = text[i].toLowerCase();
if(c === "-") continue;
if(/[a-z0-9]/.test(c)) {
if(/[0-9]/.test(c) && +c >= absBase) {
if(c === "1" && absBase === 1) continue;
throw new Error(c + " is not a valid digit in base " + base + ".");
} else if(c.charCodeAt(0) - 87 >= absBase) {
throw new Error(c + " is not a valid digit in base " + base + ".");
}
}
}
if (2 <= base && base <= 36) { if (2 <= base && base <= 36) {
if (length <= LOG_MAX_INT / Math.log(base)) { if (length <= LOG_MAX_INT / Math.log(base)) {
var result = parseInt(text, base);
if(isNaN(result)) {
throw new Error(c + " is not a valid digit in base " + base + ".");
}
return new SmallInteger(parseInt(text, base)); return new SmallInteger(parseInt(text, base));
} }
} }
base = parseValue(base); base = parseValue(base);
var digits = []; var digits = [];
var i;
var isNegative = text[0] === "-"; var isNegative = text[0] === "-";
for (i = isNegative ? 1 : 0; i < text.length; i++) { for (i = isNegative ? 1 : 0; i < text.length; i++) {
var c = text[i].toLowerCase(), var c = text[i].toLowerCase(),

File diff suppressed because one or more lines are too long

2
node_modules/big-integer/README.md generated vendored
View File

@ -211,7 +211,7 @@ Returns `true` if the number is prime, `false` otherwise.
#### `isProbablePrime([iterations])` #### `isProbablePrime([iterations])`
Returns `true` if the number is very likely to be positive, `false` otherwise. Returns `true` if the number is very likely to be prime, `false` otherwise.
Argument is optional and determines the amount of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive. Argument is optional and determines the amount of iterations of the test (default: `5`). The more iterations, the lower chance of getting a false positive.
This uses the [Fermat primality test](https://en.wikipedia.org/wiki/Fermat_primality_test). This uses the [Fermat primality test](https://en.wikipedia.org/wiki/Fermat_primality_test).

View File

@ -24,7 +24,6 @@
"bower_components", "bower_components",
"test", "test",
"coverage", "coverage",
"spec",
"tests" "tests"
] ]
} }

File diff suppressed because one or more lines are too long

25
node_modules/big-integer/tsconfig.json generated vendored Normal file
View File

@ -0,0 +1,25 @@
{
"compilerOptions": {
"module": "commonjs",
"lib": [
"es6"
],
"noImplicitAny": true,
"noImplicitThis": true,
"strictNullChecks": false,
"baseUrl": "./",
"moduleResolution": "node",
"allowJs": true,
"typeRoots": [
"./"
],
"types": [
"node"
],
"forceConsistentCasingInFileNames": true
},
"files": [
"BigInteger.d.ts",
"spec/tsDefinitions.ts"
]
}

View File

@ -77,7 +77,8 @@
], ],
"name": "bplist-parser", "name": "bplist-parser",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "bplist-parser\n=============\n\nBinary Mac OS X Plist (property list) parser.\n\n## Installation\n\n```bash\n$ npm install bplist-parser\n```\n\n## Quick Examples\n\n```javascript\nvar bplist = require('bplist-parser');\n\nbplist.parseFile('myPlist.bplist', function(err, obj) {\n if (err) throw err;\n\n console.log(JSON.stringify(obj));\n});\n```\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2012 Near Infinity Corporation\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/nearinfinity/node-bplist-parser.git" "url": "git+https://github.com/nearinfinity/node-bplist-parser.git"

View File

@ -2,25 +2,25 @@
"_args": [ "_args": [
[ [
{ {
"raw": "brace-expansion@^1.0.0", "raw": "brace-expansion@^1.1.7",
"scope": null, "scope": null,
"escapedName": "brace-expansion", "escapedName": "brace-expansion",
"name": "brace-expansion", "name": "brace-expansion",
"rawSpec": "^1.0.0", "rawSpec": "^1.1.7",
"spec": ">=1.0.0 <2.0.0", "spec": ">=1.1.7 <2.0.0",
"type": "range" "type": "range"
}, },
"/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch" "/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch"
] ]
], ],
"_from": "brace-expansion@>=1.0.0 <2.0.0", "_from": "brace-expansion@>=1.1.7 <2.0.0",
"_id": "brace-expansion@1.1.7", "_id": "brace-expansion@1.1.8",
"_inCache": true, "_inCache": true,
"_location": "/brace-expansion", "_location": "/brace-expansion",
"_nodeVersion": "7.8.0", "_nodeVersion": "7.8.0",
"_npmOperationalInternal": { "_npmOperationalInternal": {
"host": "packages-12-west.internal.npmjs.com", "host": "s3://npm-registry-packages",
"tmp": "tmp/brace-expansion-1.1.7.tgz_1491552830231_0.7213963181711733" "tmp": "tmp/brace-expansion-1.1.8.tgz_1497251980593_0.6575565172825009"
}, },
"_npmUser": { "_npmUser": {
"name": "juliangruber", "name": "juliangruber",
@ -29,21 +29,21 @@
"_npmVersion": "4.2.0", "_npmVersion": "4.2.0",
"_phantomChildren": {}, "_phantomChildren": {},
"_requested": { "_requested": {
"raw": "brace-expansion@^1.0.0", "raw": "brace-expansion@^1.1.7",
"scope": null, "scope": null,
"escapedName": "brace-expansion", "escapedName": "brace-expansion",
"name": "brace-expansion", "name": "brace-expansion",
"rawSpec": "^1.0.0", "rawSpec": "^1.1.7",
"spec": ">=1.0.0 <2.0.0", "spec": ">=1.1.7 <2.0.0",
"type": "range" "type": "range"
}, },
"_requiredBy": [ "_requiredBy": [
"/minimatch" "/minimatch"
], ],
"_resolved": "http://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz", "_resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz",
"_shasum": "3effc3c50e000531fb720eaff80f0ae8ef23cf59", "_shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
"_shrinkwrap": null, "_shrinkwrap": null,
"_spec": "brace-expansion@^1.0.0", "_spec": "brace-expansion@^1.1.7",
"_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch", "_where": "/Users/steveng/repo/cordova/cordova-android/node_modules/minimatch",
"author": { "author": {
"name": "Julian Gruber", "name": "Julian Gruber",
@ -54,7 +54,7 @@
"url": "https://github.com/juliangruber/brace-expansion/issues" "url": "https://github.com/juliangruber/brace-expansion/issues"
}, },
"dependencies": { "dependencies": {
"balanced-match": "^0.4.1", "balanced-match": "^1.0.0",
"concat-map": "0.0.1" "concat-map": "0.0.1"
}, },
"description": "Brace expansion as known from sh/bash", "description": "Brace expansion as known from sh/bash",
@ -64,10 +64,10 @@
}, },
"directories": {}, "directories": {},
"dist": { "dist": {
"shasum": "3effc3c50e000531fb720eaff80f0ae8ef23cf59", "shasum": "c07b211c7c952ec1f8efd51a77ef0d1d3990a292",
"tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz" "tarball": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz"
}, },
"gitHead": "892512024872ca7680554be90f6e8ce065053372", "gitHead": "8f59e68bd5c915a0d624e8e39354e1ccf672edf6",
"homepage": "https://github.com/juliangruber/brace-expansion", "homepage": "https://github.com/juliangruber/brace-expansion",
"keywords": [], "keywords": [],
"license": "MIT", "license": "MIT",
@ -84,7 +84,8 @@
], ],
"name": "brace-expansion", "name": "brace-expansion",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# brace-expansion\n\n[Brace expansion](https://www.gnu.org/software/bash/manual/html_node/Brace-Expansion.html), \nas known from sh/bash, in JavaScript.\n\n[![build status](https://secure.travis-ci.org/juliangruber/brace-expansion.svg)](http://travis-ci.org/juliangruber/brace-expansion)\n[![downloads](https://img.shields.io/npm/dm/brace-expansion.svg)](https://www.npmjs.org/package/brace-expansion)\n[![Greenkeeper badge](https://badges.greenkeeper.io/juliangruber/brace-expansion.svg)](https://greenkeeper.io/)\n\n[![testling badge](https://ci.testling.com/juliangruber/brace-expansion.png)](https://ci.testling.com/juliangruber/brace-expansion)\n\n## Example\n\n```js\nvar expand = require('brace-expansion');\n\nexpand('file-{a,b,c}.jpg')\n// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']\n\nexpand('-v{,,}')\n// => ['-v', '-v', '-v']\n\nexpand('file{0..2}.jpg')\n// => ['file0.jpg', 'file1.jpg', 'file2.jpg']\n\nexpand('file-{a..c}.jpg')\n// => ['file-a.jpg', 'file-b.jpg', 'file-c.jpg']\n\nexpand('file{2..0}.jpg')\n// => ['file2.jpg', 'file1.jpg', 'file0.jpg']\n\nexpand('file{0..4..2}.jpg')\n// => ['file0.jpg', 'file2.jpg', 'file4.jpg']\n\nexpand('file-{a..e..2}.jpg')\n// => ['file-a.jpg', 'file-c.jpg', 'file-e.jpg']\n\nexpand('file{00..10..5}.jpg')\n// => ['file00.jpg', 'file05.jpg', 'file10.jpg']\n\nexpand('{{A..C},{a..c}}')\n// => ['A', 'B', 'C', 'a', 'b', 'c']\n\nexpand('ppp{,config,oe{,conf}}')\n// => ['ppp', 'pppconfig', 'pppoe', 'pppoeconf']\n```\n\n## API\n\n```js\nvar expand = require('brace-expansion');\n```\n\n### var expanded = expand(str)\n\nReturn an array of all possible and valid expansions of `str`. If none are\nfound, `[str]` is returned.\n\nValid expansions are:\n\n```js\n/^(.*,)+(.+)?$/\n// {a,b,...}\n```\n\nA comma seperated list of options, like `{a,b}` or `{a,{b,c}}` or `{,a,}`.\n\n```js\n/^-?\\d+\\.\\.-?\\d+(\\.\\.-?\\d+)?$/\n// {x..y[..incr]}\n```\n\nA numeric sequence from `x` to `y` inclusive, with optional increment.\nIf `x` or `y` start with a leading `0`, all the numbers will be padded\nto have equal length. Negative numbers and backwards iteration work too.\n\n```js\n/^-?\\d+\\.\\.-?\\d+(\\.\\.-?\\d+)?$/\n// {x..y[..incr]}\n```\n\nAn alphabetic sequence from `x` to `y` inclusive, with optional increment.\n`x` and `y` must be exactly one character, and if given, `incr` must be a\nnumber.\n\nFor compatibility reasons, the string `${` is not eligible for brace expansion.\n\n## Installation\n\nWith [npm](https://npmjs.org) do:\n\n```bash\nnpm install brace-expansion\n```\n\n## Contributors\n\n- [Julian Gruber](https://github.com/juliangruber)\n- [Isaac Z. Schlueter](https://github.com/isaacs)\n\n## License\n\n(MIT)\n\nCopyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/juliangruber/brace-expansion.git" "url": "git://github.com/juliangruber/brace-expansion.git"
@ -110,5 +111,5 @@
"android-browser/4.2..latest" "android-browser/4.2..latest"
] ]
}, },
"version": "1.1.7" "version": "1.1.8"
} }

View File

@ -61,7 +61,7 @@
"shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b", "shasum": "d8a96bd77fd68df7793a73036a3ba0d5405d477b",
"tarball": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" "tarball": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
}, },
"homepage": "https://github.com/substack/node-concat-map", "homepage": "https://github.com/substack/node-concat-map#readme",
"keywords": [ "keywords": [
"concat", "concat",
"concatMap", "concatMap",
@ -79,7 +79,8 @@
], ],
"name": "concat-map", "name": "concat-map",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "concat-map\n==========\n\nConcatenative mapdashery.\n\n[![browser support](http://ci.testling.com/substack/node-concat-map.png)](http://ci.testling.com/substack/node-concat-map)\n\n[![build status](https://secure.travis-ci.org/substack/node-concat-map.png)](http://travis-ci.org/substack/node-concat-map)\n\nexample\n=======\n\n``` js\nvar concatMap = require('concat-map');\nvar xs = [ 1, 2, 3, 4, 5, 6 ];\nvar ys = concatMap(xs, function (x) {\n return x % 2 ? [ x - 0.1, x, x + 0.1 ] : [];\n});\nconsole.dir(ys);\n```\n\n***\n\n```\n[ 0.9, 1, 1.1, 2.9, 3, 3.1, 4.9, 5, 5.1 ]\n```\n\nmethods\n=======\n\n``` js\nvar concatMap = require('concat-map')\n```\n\nconcatMap(xs, fn)\n-----------------\n\nReturn an array of concatenated elements by calling `fn(x, i)` for each element\n`x` and each index `i` in the array `xs`.\n\nWhen `fn(x, i)` returns an array, its result will be concatenated with the\nresult array. If `fn(x, i)` returns anything else, that value will be pushed\nonto the end of the result array.\n\ninstall\n=======\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install concat-map\n```\n\nlicense\n=======\n\nMIT\n\nnotes\n=====\n\nThis module was written while sitting high above the ground in a tree.\n",
"readmeFilename": "README.markdown",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/substack/node-concat-map.git" "url": "git://github.com/substack/node-concat-map.git"

1
node_modules/cordova-common/.eslintignore generated vendored Normal file
View File

@ -0,0 +1 @@
spec/fixtures/*

11
node_modules/cordova-common/.eslintrc.yml generated vendored Normal file
View File

@ -0,0 +1,11 @@
root: true
extends: semistandard
rules:
indent:
- error
- 4
camelcase: off
padded-blocks: off
operator-linebreak: off
no-throw-literal: off

View File

@ -1 +0,0 @@
spec/fixtures/*

View File

@ -1,3 +1,4 @@
fixtures fixtures
coverage coverage
jasmine.json jasmine.json
appveyor.yml

15
node_modules/cordova-common/.travis.yml generated vendored Normal file
View File

@ -0,0 +1,15 @@
language: node_js
sudo: false
git:
depth: 10
node_js:
- "4"
- "6"
install:
- npm install
- npm install -g codecov
script:
- npm test
- npm run cover
after_script:
- codecov

View File

@ -19,6 +19,10 @@
# #
--> -->
[![Build status](https://ci.appveyor.com/api/projects/status/wxkmo0jalsr8gane?svg=true)](https://ci.appveyor.com/project/ApacheSoftwareFoundation/cordova-common/branch/master)
[![Build Status](https://travis-ci.org/apache/cordova-common.svg?branch=master)](https://travis-ci.org/apache/cordova-common)
[![NPM](https://nodei.co/npm/cordova-common.png)](https://nodei.co/npm/cordova-common/)
# cordova-common # cordova-common
Expoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms. Expoeses shared functionality used by [cordova-lib](https://github.com/apache/cordova-lib/) and Cordova platforms.
## Exposed APIs ## Exposed APIs

View File

@ -20,6 +20,21 @@
--> -->
# Cordova-common Release Notes # Cordova-common Release Notes
### 2.1.0 (August 30, 2017)
* [CB-13145](https://issues.apache.org/jira/browse/CB-13145) added variable replacing to `framework` tag
* [CB-13211](https://issues.apache.org/jira/browse/CB-13211) Add `allows-arbitrary-loads-for-media` attribute parsing for `getAccesses`
* [CB-11968](https://issues.apache.org/jira/browse/CB-11968) Added support for `<config-file>` in `config.xml`
* [CB-12895](https://issues.apache.org/jira/browse/CB-12895) set up `eslint` and removed `jshint`
* [CB-12785](https://issues.apache.org/jira/browse/CB-12785) added `.gitignore`, `travis`, and `appveyor` support
* [CB-12250](https://issues.apache.org/jira/browse/CB-12250) & [CB-12409](https://issues.apache.org/jira/browse/CB-12409) *iOS*: Fix bug with escaping properties from `plist` file
* [CB-12762](https://issues.apache.org/jira/browse/CB-12762) updated `common`, `fetch`, and `serve` `pkgJson` to point `pkgJson` repo items to github mirrors
* [CB-12766](https://issues.apache.org/jira/browse/CB-12766) Consistently write `JSON` with 2 spaces indentation
### 2.0.3 (May 02, 2017)
* [CB-8978](https://issues.apache.org/jira/browse/CB-8978) Add option to get `resource-file` from `root`
* [CB-11908](https://issues.apache.org/jira/browse/CB-11908) Add tests for `edit-config` in `config.xml`
* [CB-12665](https://issues.apache.org/jira/browse/CB-12665) removed `enginestrict` since it is deprecated
### 2.0.2 (Apr 14, 2017) ### 2.0.2 (Apr 14, 2017)
* [CB-11233](https://issues.apache.org/jira/browse/CB-11233) - Support installing frameworks into 'Embedded Binaries' section of the Xcode project * [CB-11233](https://issues.apache.org/jira/browse/CB-11233) - Support installing frameworks into 'Embedded Binaries' section of the Xcode project
* [CB-10438](https://issues.apache.org/jira/browse/CB-10438) - Install correct dependency version. Removed shell.remove, added pkg.json to dependency tests 1-3, and updated install.js (.replace) to fix tests in uninstall.spec.js and update to workw with jasmine 2.0 * [CB-10438](https://issues.apache.org/jira/browse/CB-10438) - Install correct dependency version. Removed shell.remove, added pkg.json to dependency tests 1-3, and updated install.js (.replace) to fix tests in uninstall.spec.js and update to workw with jasmine 2.0

18
node_modules/cordova-common/appveyor.yml generated vendored Normal file
View File

@ -0,0 +1,18 @@
# appveyor file
# http://www.appveyor.com/docs/appveyor-yml
environment:
matrix:
- nodejs_version: "4"
- nodejs_version: "6"
install:
- ps: Install-Product node $env:nodejs_version
- npm install
build: off
test_script:
- node --version
- npm --version
- npm test

File diff suppressed because one or more lines are too long

View File

@ -1,10 +0,0 @@
{
"node": true
, "bitwise": true
, "undef": true
, "trailing": true
, "quotmark": true
, "indent": 4
, "unused": "vars"
, "latedef": "nofunc"
}

View File

@ -19,8 +19,8 @@
/* jshint quotmark:false */ /* jshint quotmark:false */
var events = require('./events'), var events = require('./events');
Q = require('q'); var Q = require('q');
function ActionStack () { function ActionStack () {
this.stack = []; this.stack = [];

View File

@ -29,12 +29,10 @@
* reference counts. * reference counts.
*/ */
/* jshint sub:true */ var path = require('path');
var et = require('elementtree');
var path = require('path'), var ConfigKeeper = require('./ConfigKeeper');
et = require('elementtree'), var CordovaLogger = require('../CordovaLogger');
ConfigKeeper = require('./ConfigKeeper'),
CordovaLogger = require('../CordovaLogger');
var mungeutil = require('./munge-util'); var mungeutil = require('./munge-util');
var xml_helpers = require('../util/xml-helpers'); var xml_helpers = require('../util/xml-helpers');
@ -86,7 +84,6 @@ function PlatformMunger_apply_file_munge(file, munge, remove) {
} }
} }
PlatformMunger.prototype.remove_plugin_changes = remove_plugin_changes; PlatformMunger.prototype.remove_plugin_changes = remove_plugin_changes;
function remove_plugin_changes (pluginInfo, is_top_level) { function remove_plugin_changes (pluginInfo, is_top_level) {
var self = this; var self = this;
@ -114,7 +111,6 @@ function remove_plugin_changes(pluginInfo, is_top_level) {
return self; return self;
} }
PlatformMunger.prototype.add_plugin_changes = add_plugin_changes; PlatformMunger.prototype.add_plugin_changes = add_plugin_changes;
function add_plugin_changes (pluginInfo, plugin_vars, is_top_level, should_increment, plugin_force) { function add_plugin_changes (pluginInfo, plugin_vars, is_top_level, should_increment, plugin_force) {
var self = this; var self = this;
@ -130,8 +126,7 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
if (!edit_config_changes || edit_config_changes.length === 0) { if (!edit_config_changes || edit_config_changes.length === 0) {
// get config munge, aka how should this plugin change various config files // get config munge, aka how should this plugin change various config files
config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars); config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars);
} } else {
else {
var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, plugin_force); var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, plugin_force);
if (isConflictingInfo.conflictWithConfigxml) { if (isConflictingInfo.conflictWithConfigxml) {
@ -149,13 +144,11 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
// force add new munges // force add new munges
config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes); config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
} } else if (isConflictingInfo.conflictFound) {
else if(isConflictingInfo.conflictFound) {
throw new Error('There was a conflict trying to modify attributes with <edit-config> in plugin ' + pluginInfo.id + throw new Error('There was a conflict trying to modify attributes with <edit-config> in plugin ' + pluginInfo.id +
'. The conflicting plugin, ' + isConflictingInfo.conflictingPlugin + ', already modified the same attributes. The conflict must be resolved before ' + '. The conflicting plugin, ' + isConflictingInfo.conflictingPlugin + ', already modified the same attributes. The conflict must be resolved before ' +
pluginInfo.id + ' can be added. You may use --force to add the plugin and overwrite the conflicting attributes.'); pluginInfo.id + ' can be added. You may use --force to add the plugin and overwrite the conflicting attributes.');
} } else {
else {
// no conflicts, will handle edit-config // no conflicts, will handle edit-config
config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes); config_munge = self.generate_plugin_config_munge(pluginInfo, plugin_vars, edit_config_changes);
} }
@ -168,7 +161,6 @@ function add_plugin_changes(pluginInfo, plugin_vars, is_top_level, should_increm
return self; return self;
} }
// Handle edit-config changes from config.xml // Handle edit-config changes from config.xml
PlatformMunger.prototype.add_config_changes = add_config_changes; PlatformMunger.prototype.add_config_changes = add_config_changes;
function add_config_changes (config, should_increment) { function add_config_changes (config, should_increment) {
@ -176,18 +168,24 @@ function add_config_changes(config, should_increment) {
var platform_config = self.platformJson.root; var platform_config = self.platformJson.root;
var config_munge; var config_munge;
var edit_config_changes = null; var changes = [];
if (config.getEditConfigs) { if (config.getEditConfigs) {
edit_config_changes = config.getEditConfigs(self.platform); var edit_config_changes = config.getEditConfigs(self.platform);
if (edit_config_changes) {
changes = changes.concat(edit_config_changes);
}
} }
if (!edit_config_changes || edit_config_changes.length === 0) { if (config.getConfigFiles) {
// There are no edit-config changes to add, return here var config_files_changes = config.getConfigFiles(self.platform);
return self; if (config_files_changes) {
changes = changes.concat(config_files_changes);
}
} }
else {
var isConflictingInfo = is_conflicting(edit_config_changes, platform_config.config_munge, self, true /*always force overwrite other edit-config*/);
if (changes && changes.length > 0) {
var isConflictingInfo = is_conflicting(changes, platform_config.config_munge, self, true /* always force overwrite other edit-config */);
if (isConflictingInfo.conflictFound) { if (isConflictingInfo.conflictFound) {
var conflict_munge; var conflict_munge;
var conflict_file; var conflict_file;
@ -209,10 +207,10 @@ function add_config_changes(config, should_increment) {
} }
} }
} }
// Add config.xml edit-config munges
config_munge = self.generate_config_xml_munge(config, edit_config_changes, 'config.xml');
} }
// Add config.xml edit-config and config-file munges
config_munge = self.generate_config_xml_munge(config, changes, 'config.xml');
self = munge_helper(should_increment, self, platform_config, config_munge); self = munge_helper(should_increment, self, platform_config, config_munge);
// Move to installed/dependent_plugins // Move to installed/dependent_plugins
@ -241,7 +239,6 @@ function munge_helper(should_increment, self, platform_config, config_munge) {
return self; return self;
} }
// Load the global munge from platform json and apply all of it. // Load the global munge from platform json and apply all of it.
// Used by cordova prepare to re-generate some config file from platform // Used by cordova prepare to re-generate some config file from platform
// defaults and the global munge. // defaults and the global munge.
@ -261,37 +258,35 @@ function reapply_global_munge () {
// generate_plugin_config_munge // generate_plugin_config_munge
// Generate the munge object from config.xml // Generate the munge object from config.xml
PlatformMunger.prototype.generate_config_xml_munge = generate_config_xml_munge; PlatformMunger.prototype.generate_config_xml_munge = generate_config_xml_munge;
function generate_config_xml_munge(config, edit_config_changes, type) { function generate_config_xml_munge (config, config_changes, type) {
var munge = { files: {} }; var munge = { files: {} };
var changes = edit_config_changes;
var id; var id;
if(!changes) { if (!config_changes) {
return munge; return munge;
} }
if (type === 'config.xml') { if (type === 'config.xml') {
id = type; id = type;
} } else {
else {
id = config.id; id = config.id;
} }
changes.forEach(function(change) { config_changes.forEach(function (change) {
change.xmls.forEach(function (xml) { change.xmls.forEach(function (xml) {
// 1. stringify each xml // 1. stringify each xml
var stringified = (new et.ElementTree(xml)).write({xml_declaration: false}); var stringified = (new et.ElementTree(xml)).write({xml_declaration: false});
// 2. add into munge // 2. add into munge
if (change.mode) { if (change.mode) {
mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, id: id }); mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, id: id });
} else {
mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
} }
}); });
}); });
return munge; return munge;
} }
// generate_plugin_config_munge // generate_plugin_config_munge
// Generate the munge object from plugin.xml + vars // Generate the munge object from plugin.xml + vars
PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge; PlatformMunger.prototype.generate_plugin_config_munge = generate_plugin_config_munge;
@ -322,8 +317,7 @@ function generate_plugin_config_munge(pluginInfo, vars, edit_config_changes) {
if (change.mode !== 'remove') { if (change.mode !== 'remove') {
mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, plugin: pluginInfo.id }); mungeutil.deep_add(munge, change.file, change.target, { xml: stringified, count: 1, mode: change.mode, plugin: pluginInfo.id });
} }
} } else {
else {
mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after }); mungeutil.deep_add(munge, change.target, change.parent, { xml: stringified, count: 1, after: change.after });
} }
}); });
@ -361,8 +355,7 @@ function is_conflicting(editchanges, config_munge, self, force) {
} }
} }
} }
} } else {
else {
conflictingParent = editchange.target; conflictingParent = editchange.target;
} }
@ -374,13 +367,11 @@ function is_conflicting(editchanges, config_munge, self, force) {
if (target[0].id === 'config.xml') { if (target[0].id === 'config.xml') {
// Keep track of config.xml/config.xml edit-config conflicts // Keep track of config.xml/config.xml edit-config conflicts
mungeutil.deep_add(configxmlMunge, editchange.file, conflictingParent, target[0]); mungeutil.deep_add(configxmlMunge, editchange.file, conflictingParent, target[0]);
} } else {
else {
// Keep track of config.xml x plugin.xml edit-config conflicts // Keep track of config.xml x plugin.xml edit-config conflicts
mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]); mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]);
} }
} } else {
else {
if (target[0].id === 'config.xml') { if (target[0].id === 'config.xml') {
// plugin.xml cannot overwrite config.xml changes even if --force is used // plugin.xml cannot overwrite config.xml changes even if --force is used
conflictWithConfigxml = true; conflictWithConfigxml = true;
@ -390,19 +381,21 @@ function is_conflicting(editchanges, config_munge, self, force) {
if (force) { if (force) {
// Need to find all conflicts when --force is used, track conflicting munges // Need to find all conflicts when --force is used, track conflicting munges
mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]); mungeutil.deep_add(conflictingMunge, editchange.file, conflictingParent, target[0]);
} } else {
else {
// plugin cannot overwrite other plugin changes without --force // plugin cannot overwrite other plugin changes without --force
conflictingPlugin = target[0].plugin; conflictingPlugin = target[0].plugin;
return;
} }
} }
} }
} }
}); });
return {conflictFound: conflictFound, conflictingPlugin: conflictingPlugin, conflictingMunge: conflictingMunge, return {conflictFound: conflictFound,
configxmlMunge: configxmlMunge, conflictWithConfigxml:conflictWithConfigxml}; conflictingPlugin: conflictingPlugin,
conflictingMunge: conflictingMunge,
configxmlMunge: configxmlMunge,
conflictWithConfigxml: conflictWithConfigxml};
} }
// Go over the prepare queue and apply the config munges for each plugin // Go over the prepare queue and apply the config munges for each plugin

View File

@ -14,6 +14,8 @@
* *
*/ */
/* eslint no-control-regex: 0 */
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
@ -69,7 +71,7 @@ function ConfigFile_load() {
var ext = path.extname(filepath); var ext = path.extname(filepath);
// Windows8 uses an appxmanifest, and wp8 will likely use // Windows8 uses an appxmanifest, and wp8 will likely use
// the same in a future release // the same in a future release
if (ext == '.xml' || ext == '.appxmanifest') { if (ext === '.xml' || ext === '.appxmanifest') {
self.type = 'xml'; self.type = 'xml';
self.data = modules.xml_helpers.parseElementtreeSync(filepath); self.data = modules.xml_helpers.parseElementtreeSync(filepath);
} else { } else {
@ -111,7 +113,7 @@ ConfigFile.prototype.graft_child = function ConfigFile_graft_child(selector, xml
result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, selector, xml_child); result = modules.xml_helpers.graftXMLOverwrite(self.data, xml_to_graft, selector, xml_child);
break; break;
case 'remove': case 'remove':
result= true; result = modules.xml_helpers.pruneXMLRemove(self.data, selector, xml_to_graft);
break; break;
default: default:
result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after); result = modules.xml_helpers.graftXML(self.data, xml_to_graft, selector, xml_child.after);
@ -141,7 +143,7 @@ ConfigFile.prototype.prune_child = function ConfigFile_prune_child(selector, xml
result = modules.xml_helpers.pruneXMLRestore(self.data, selector, xml_child); result = modules.xml_helpers.pruneXMLRestore(self.data, selector, xml_child);
break; break;
case 'remove': case 'remove':
result = modules.xml_helpers.prunXMLRemove(self.data, selector, xml_to_graft); result = modules.xml_helpers.pruneXMLRemove(self.data, selector, xml_to_graft);
break; break;
default: default:
result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector); result = modules.xml_helpers.pruneXML(self.data, xml_to_graft, selector);
@ -184,13 +186,13 @@ function resolveConfigFilePath(project_dir, platform, file) {
// special-case config.xml target that is just "config.xml". This should be resolved to the real location of the file. // special-case config.xml target that is just "config.xml". This should be resolved to the real location of the file.
// TODO: move the logic that contains the locations of config.xml from cordova CLI into plugman. // TODO: move the logic that contains the locations of config.xml from cordova CLI into plugman.
if (file == 'config.xml') { if (file === 'config.xml') {
if (platform == 'ubuntu') { if (platform === 'ubuntu') {
filepath = path.join(project_dir, 'config.xml'); filepath = path.join(project_dir, 'config.xml');
} else if (platform == 'ios') { } else if (platform === 'ios') {
var iospath = getIOSProjectname(project_dir); var iospath = getIOSProjectname(project_dir);
filepath = path.join(project_dir, iospath, 'config.xml'); filepath = path.join(project_dir, iospath, 'config.xml');
} else if (platform == 'android') { } else if (platform === 'android') {
filepath = path.join(project_dir, 'res', 'xml', 'config.xml'); filepath = path.join(project_dir, 'res', 'xml', 'config.xml');
} else { } else {
matches = modules.glob.sync(path.join(project_dir, '**', 'config.xml')); matches = modules.glob.sync(path.join(project_dir, '**', 'config.xml'));

View File

@ -39,7 +39,7 @@ ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, fi
// This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml // This fixes a bug with older plugins - when specifying config xml instead of res/xml/config.xml
// https://issues.apache.org/jira/browse/CB-6414 // https://issues.apache.org/jira/browse/CB-6414
if(file == 'config.xml' && platform == 'android'){ if (file === 'config.xml' && platform === 'android') {
file = 'res/xml/config.xml'; file = 'res/xml/config.xml';
} }
var fake_path = path.join(project_dir, platform, file); var fake_path = path.join(project_dir, platform, file);
@ -53,7 +53,6 @@ ConfigKeeper.prototype.get = function ConfigKeeper_get(project_dir, platform, fi
return config_file; return config_file;
}; };
ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all () { ConfigKeeper.prototype.save_all = function ConfigKeeper_save_all () {
var self = this; var self = this;
Object.keys(self._cached).forEach(function (fake_path) { Object.keys(self._cached).forEach(function (fake_path) {

View File

@ -26,7 +26,7 @@ exports.deep_add = function deep_add(obj, keys /* or key1, key2 .... */ ) {
return exports.process_munge(obj, true/* createParents */, function (parentArray, k) { return exports.process_munge(obj, true/* createParents */, function (parentArray, k) {
var found = _.find(parentArray, function (element) { var found = _.find(parentArray, function (element) {
return element.xml == k.xml; return element.xml === k.xml;
}); });
if (found) { if (found) {
found.after = found.after || k.after; found.after = found.after || k.after;
@ -49,7 +49,7 @@ exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ )
var index = -1; var index = -1;
var found = _.find(parentArray, function (element) { var found = _.find(parentArray, function (element) {
index++; index++;
return element.xml == k.xml; return element.xml === k.xml;
}); });
if (found) { if (found) {
if (parentArray[index].oldAttrib) { if (parentArray[index].oldAttrib) {
@ -58,8 +58,7 @@ exports.deep_remove = function deep_remove(obj, keys /* or key1, key2 .... */ )
found.count -= k.count; found.count -= k.count;
if (found.count > 0) { if (found.count > 0) {
return false; return false;
} } else {
else {
parentArray.splice(index, 1); parentArray.splice(index, 1);
} }
} }
@ -78,7 +77,7 @@ exports.deep_find = function deep_find(obj, keys /* or key1, key2 .... */ ) {
return exports.process_munge(obj, false/* createParents? */, function (parentArray, k) { return exports.process_munge(obj, false/* createParents? */, function (parentArray, k) {
return _.find(parentArray, function (element) { return _.find(parentArray, function (element) {
return element.xml == (k.xml || k); return element.xml === (k.xml || k);
}); });
}, keys); }, keys);
}; };
@ -92,15 +91,15 @@ exports.process_munge = function process_munge(obj, createParents, func, keys /*
keys = Array.prototype.slice.call(arguments, 1); keys = Array.prototype.slice.call(arguments, 1);
} }
var k = keys[0]; var k = keys[0];
if (keys.length == 1) { if (keys.length === 1) {
return func(obj, k); return func(obj, k);
} else if (keys.length == 2) { } else if (keys.length === 2) {
if (!obj.parents[k] && !createParents) { if (!obj.parents[k] && !createParents) {
return undefined; return undefined;
} }
obj.parents[k] = obj.parents[k] || []; obj.parents[k] = obj.parents[k] || [];
return exports.process_munge(obj.parents[k], createParents, func, keys.slice(1)); return exports.process_munge(obj.parents[k], createParents, func, keys.slice(1));
} else if (keys.length == 3){ } else if (keys.length === 3) {
if (!obj.files[k] && !createParents) { if (!obj.files[k] && !createParents) {
return undefined; return undefined;
} }

View File

@ -17,14 +17,11 @@
under the License. under the License.
*/ */
/* jshint sub:true */ var et = require('elementtree');
var xml = require('../util/xml-helpers');
var et = require('elementtree'), var CordovaError = require('../CordovaError/CordovaError');
xml= require('../util/xml-helpers'), var fs = require('fs');
CordovaError = require('../CordovaError/CordovaError'), var events = require('../events');
fs = require('fs'),
events = require('../events');
/** Wraps a config.xml file */ /** Wraps a config.xml file */
function ConfigParser (path) { function ConfigParser (path) {
@ -86,7 +83,7 @@ function findElementAttributeValue(attributeName, elems) {
return filteredElems.attrib.value; return filteredElems.attrib.value;
}).pop(); }).pop();
return value ? value : ''; return value || '';
} }
ConfigParser.prototype = { ConfigParser.prototype = {
@ -174,7 +171,7 @@ ConfigParser.prototype = {
platformPreference = this.getPlatformPreference(name, platform); platformPreference = this.getPlatformPreference(name, platform);
} }
return platformPreference ? platformPreference : this.getGlobalPreference(name); return platformPreference || this.getGlobalPreference(name);
}, },
/** /**
@ -185,8 +182,8 @@ ConfigParser.prototype = {
* @return {Array} Resources for the platform specified. * @return {Array} Resources for the platform specified.
*/ */
getStaticResources: function (platform, resourceName) { getStaticResources: function (platform, resourceName) {
var ret = [], var ret = [];
staticResources = []; var staticResources = [];
if (platform) { // platform specific icons if (platform) { // platform specific icons
this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function (elt) { this.doc.findall('platform[@name=\'' + platform + '\']/' + resourceName).forEach(function (elt) {
elt.platform = platform; // mark as platform specific resource elt.platform = platform; // mark as platform specific resource
@ -224,8 +221,8 @@ ConfigParser.prototype = {
if (!res.width && !res.height) { if (!res.width && !res.height) {
return false; return false;
} }
return ((!res.width || (width == res.width)) && return ((!res.width || (width === res.width)) &&
(!res.height || (height == res.height))); (!res.height || (height === res.height)));
})[0] || null; })[0] || null;
}; };
@ -236,7 +233,7 @@ ConfigParser.prototype = {
*/ */
ret.getByDensity = function (density) { ret.getByDensity = function (density) {
return ret.filter(function (res) { return ret.filter(function (res) {
return res.density == density; return res.density === density;
})[0] || null; })[0] || null;
}; };
@ -269,9 +266,11 @@ ConfigParser.prototype = {
/** /**
* Returns all resource-files for a specific platform. * Returns all resource-files for a specific platform.
* @param {string} platform Platform name * @param {string} platform Platform name
* @param {boolean} includeGlobal Whether to return resource-files at the
* root level.
* @return {Resource[]} Array of resource file objects. * @return {Resource[]} Array of resource file objects.
*/ */
getFileResources: function(platform) { getFileResources: function (platform, includeGlobal) {
var fileResources = []; var fileResources = [];
if (platform) { // platform specific resources if (platform) { // platform specific resources
@ -287,6 +286,19 @@ ConfigParser.prototype = {
}); });
} }
if (includeGlobal) {
this.doc.findall('resource-file').forEach(function (tag) {
fileResources.push({
platform: platform || null,
src: tag.attrib.src,
target: tag.attrib.target,
versions: tag.attrib.versions,
deviceTarget: tag.attrib['device-target'],
arch: tag.attrib.arch
});
});
}
return fileResources; return fileResources;
}, },
@ -383,7 +395,7 @@ ConfigParser.prototype = {
return undefined; return undefined;
} }
var pluginElement = this.doc.find('./plugin/[@name="' + id + '"]'); var pluginElement = this.doc.find('./plugin/[@name="' + id + '"]');
if (null === pluginElement) { if (pluginElement === null) {
var legacyFeature = this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..'); var legacyFeature = this.doc.find('./feature/param[@name="id"][@value="' + id + '"]/..');
if (legacyFeature) { if (legacyFeature) {
events.emit('log', 'Found deprecated feature entry for ' + id + ' in config.xml.'); events.emit('log', 'Found deprecated feature entry for ' + id + ' in config.xml.');
@ -472,7 +484,7 @@ ConfigParser.prototype = {
var spec = engine.attrib.spec || engine.attrib.version; var spec = engine.attrib.spec || engine.attrib.version;
return { return {
'name': engine.attrib.name, 'name': engine.attrib.name,
'spec': spec ? spec : null 'spec': spec || null
}; };
}); });
}, },
@ -484,7 +496,8 @@ ConfigParser.prototype = {
var requires_forward_secrecy = access.attrib['requires-forward-secrecy']; /* Boolean */ var requires_forward_secrecy = access.attrib['requires-forward-secrecy']; /* Boolean */
var requires_certificate_transparency = access.attrib['requires-certificate-transparency']; /* Boolean */ var requires_certificate_transparency = access.attrib['requires-certificate-transparency']; /* Boolean */
var allows_arbitrary_loads_in_web_content = access.attrib['allows-arbitrary-loads-in-web-content']; /* Boolean */ var allows_arbitrary_loads_in_web_content = access.attrib['allows-arbitrary-loads-in-web-content']; /* Boolean */
var allows_arbitrary_loads_in_media = access.attrib['allows-arbitrary-loads-in-media']; /* Boolean */ var allows_arbitrary_loads_in_media = access.attrib['allows-arbitrary-loads-in-media']; /* Boolean (DEPRECATED) */
var allows_arbitrary_loads_for_media = access.attrib['allows-arbitrary-loads-for-media']; /* Boolean */
var allows_local_networking = access.attrib['allows-local-networking']; /* Boolean */ var allows_local_networking = access.attrib['allows-local-networking']; /* Boolean */
return { return {
@ -494,6 +507,7 @@ ConfigParser.prototype = {
'requires_certificate_transparency': requires_certificate_transparency, 'requires_certificate_transparency': requires_certificate_transparency,
'allows_arbitrary_loads_in_web_content': allows_arbitrary_loads_in_web_content, 'allows_arbitrary_loads_in_web_content': allows_arbitrary_loads_in_web_content,
'allows_arbitrary_loads_in_media': allows_arbitrary_loads_in_media, 'allows_arbitrary_loads_in_media': allows_arbitrary_loads_in_media,
'allows_arbitrary_loads_for_media': allows_arbitrary_loads_for_media,
'allows_local_networking': allows_local_networking 'allows_local_networking': allows_local_networking
}; };
}); });
@ -542,6 +556,29 @@ ConfigParser.prototype = {
return editConfig; return editConfig;
}); });
}, },
/* Get all config-file tags */
getConfigFiles: function (platform) {
var platform_tag = this.doc.find('./platform[@name="' + platform + '"]');
var platform_config_files = platform_tag ? platform_tag.findall('config-file') : [];
var config_files = this.doc.findall('config-file').concat(platform_config_files);
return config_files.map(function (tag) {
var configFile =
{
target: tag.attrib['target'],
parent: tag.attrib['parent'],
after: tag.attrib['after'],
xmls: tag.getchildren(),
// To support demuxing via versions
versions: tag.attrib['versions'],
deviceTarget: tag.attrib['device-target']
};
return configFile;
});
},
write: function () { write: function () {
fs.writeFileSync(this.path, this.doc.write({indent: 4}), 'utf-8'); fs.writeFileSync(this.path, this.doc.write({indent: 4}), 'utf-8');
} }

View File

@ -17,8 +17,8 @@
under the License. under the License.
*/ */
var fs = require('fs'), var fs = require('fs');
path = require('path'); var path = require('path');
function isRootDir (dir) { function isRootDir (dir) {
if (fs.existsSync(path.join(dir, 'www'))) { if (fs.existsSync(path.join(dir, 'www'))) {
@ -46,7 +46,7 @@ function isCordova(dir) {
// Prefer PWD over cwd so that symlinked dirs within your PWD work correctly (CB-5687). // Prefer PWD over cwd so that symlinked dirs within your PWD work correctly (CB-5687).
var pwd = process.env.PWD; var pwd = process.env.PWD;
var cwd = process.cwd(); var cwd = process.cwd();
if (pwd && pwd != cwd && pwd != 'undefined') { if (pwd && pwd !== cwd && pwd !== 'undefined') {
return isCordova(pwd) || isCordova(cwd); return isCordova(pwd) || isCordova(cwd);
} }
return isCordova(cwd); return isCordova(cwd);
@ -62,7 +62,7 @@ function isCordova(dir) {
} }
var parentDir = path.normalize(path.join(dir, '..')); var parentDir = path.normalize(path.join(dir, '..'));
// Detect fs root. // Detect fs root.
if (parentDir == dir) { if (parentDir === dir) {
return bestReturnValueSoFar; return bestReturnValueSoFar;
} }
dir = parentDir; dir = parentDir;

View File

@ -17,7 +17,7 @@
under the License. under the License.
*/ */
/* jshint proto:true */ /* eslint no-proto: 0 */
var EOL = require('os').EOL; var EOL = require('os').EOL;
@ -64,7 +64,8 @@ CordovaError.prototype.getErrorCodeName = function() {
* @return {String} Stringified error representation * @return {String} Stringified error representation
*/ */
CordovaError.prototype.toString = function (isVerbose) { CordovaError.prototype.toString = function (isVerbose) {
var message = '', codePrefix = ''; var message = '';
var codePrefix = '';
if (this.code !== CordovaError.UNKNOWN_ERROR) { if (this.code !== CordovaError.UNKNOWN_ERROR) {
codePrefix = 'code: ' + this.code + (isVerbose ? (' (' + this.getErrorCodeName() + ')') : '') + ' '; codePrefix = 'code: ' + this.code + (isVerbose ? (' (' + this.getErrorCodeName() + ')') : '') + ' ';

View File

@ -82,9 +82,10 @@ CordovaLogger.RESULTS = 'results';
CordovaLogger.prototype.log = function (logLevel, message) { CordovaLogger.prototype.log = function (logLevel, message) {
// if there is no such logLevel defined, or provided level has // if there is no such logLevel defined, or provided level has
// less severity than active level, then just ignore this call and return // less severity than active level, then just ignore this call and return
if (!this.levels[logLevel] || this.levels[logLevel] < this.levels[this.logLevel]) if (!this.levels[logLevel] || this.levels[logLevel] < this.levels[this.logLevel]) {
// return instance to allow to chain calls // return instance to allow to chain calls
return this; return this;
}
var isVerbose = this.logLevel === 'verbose'; var isVerbose = this.logLevel === 'verbose';
var cursor = this.stdoutCursor; var cursor = this.stdoutCursor;
@ -179,8 +180,7 @@ CordovaLogger.prototype.adjustLevel = function (opts) {
*/ */
CordovaLogger.prototype.subscribe = function (eventEmitter) { CordovaLogger.prototype.subscribe = function (eventEmitter) {
if (!(eventEmitter instanceof EventEmitter)) if (!(eventEmitter instanceof EventEmitter)) { throw new Error('Subscribe method only accepts an EventEmitter instance as argument'); }
throw new Error('Subscribe method only accepts an EventEmitter instance as argument');
eventEmitter.on('verbose', this.verbose) eventEmitter.on('verbose', this.verbose)
.on('log', this.normal) .on('log', this.normal)

View File

@ -17,12 +17,12 @@
under the License. under the License.
*/ */
"use strict"; 'use strict';
var fs = require("fs"); var fs = require('fs');
var path = require("path"); var path = require('path');
var shell = require("shelljs"); var shell = require('shelljs');
var minimatch = require("minimatch"); var minimatch = require('minimatch');
/** /**
* Logging callback used in the FileUpdater methods. * Logging callback used in the FileUpdater methods.
@ -58,24 +58,24 @@ var minimatch = require("minimatch");
function updatePathWithStats (sourcePath, sourceStats, targetPath, targetStats, options, log) { function updatePathWithStats (sourcePath, sourceStats, targetPath, targetStats, options, log) {
var updated = false; var updated = false;
var rootDir = (options && options.rootDir) || ""; var rootDir = (options && options.rootDir) || '';
var copyAll = (options && options.all) || false; var copyAll = (options && options.all) || false;
var targetFullPath = path.join(rootDir || "", targetPath); var targetFullPath = path.join(rootDir || '', targetPath);
if (sourceStats) { if (sourceStats) {
var sourceFullPath = path.join(rootDir || "", sourcePath); var sourceFullPath = path.join(rootDir || '', sourcePath);
if (targetStats) { if (targetStats) {
// The target exists. But if the directory status doesn't match the source, delete it. // The target exists. But if the directory status doesn't match the source, delete it.
if (targetStats.isDirectory() && !sourceStats.isDirectory()) { if (targetStats.isDirectory() && !sourceStats.isDirectory()) {
log("rmdir " + targetPath + " (source is a file)"); log('rmdir ' + targetPath + ' (source is a file)');
shell.rm("-rf", targetFullPath); shell.rm('-rf', targetFullPath);
targetStats = null; targetStats = null;
updated = true; updated = true;
} else if (!targetStats.isDirectory() && sourceStats.isDirectory()) { } else if (!targetStats.isDirectory() && sourceStats.isDirectory()) {
log("delete " + targetPath + " (source is a directory)"); log('delete ' + targetPath + ' (source is a directory)');
shell.rm("-f", targetFullPath); shell.rm('-f', targetFullPath);
targetStats = null; targetStats = null;
updated = true; updated = true;
} }
@ -84,21 +84,21 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
if (!targetStats) { if (!targetStats) {
if (sourceStats.isDirectory()) { if (sourceStats.isDirectory()) {
// The target directory does not exist, so it should be created. // The target directory does not exist, so it should be created.
log("mkdir " + targetPath); log('mkdir ' + targetPath);
shell.mkdir("-p", targetFullPath); shell.mkdir('-p', targetFullPath);
updated = true; updated = true;
} else if (sourceStats.isFile()) { } else if (sourceStats.isFile()) {
// The target file does not exist, so it should be copied from the source. // The target file does not exist, so it should be copied from the source.
log("copy " + sourcePath + " " + targetPath + (copyAll ? "" : " (new file)")); log('copy ' + sourcePath + ' ' + targetPath + (copyAll ? '' : ' (new file)'));
shell.cp("-f", sourceFullPath, targetFullPath); shell.cp('-f', sourceFullPath, targetFullPath);
updated = true; updated = true;
} }
} else if (sourceStats.isFile() && targetStats.isFile()) { } else if (sourceStats.isFile() && targetStats.isFile()) {
// The source and target paths both exist and are files. // The source and target paths both exist and are files.
if (copyAll) { if (copyAll) {
// The caller specified all files should be copied. // The caller specified all files should be copied.
log("copy " + sourcePath + " " + targetPath); log('copy ' + sourcePath + ' ' + targetPath);
shell.cp("-f", sourceFullPath, targetFullPath); shell.cp('-f', sourceFullPath, targetFullPath);
updated = true; updated = true;
} else { } else {
// Copy if the source has been modified since it was copied to the target, or if // Copy if the source has been modified since it was copied to the target, or if
@ -107,8 +107,8 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
// for timestamps lacking sub-second precision in some filesystems. // for timestamps lacking sub-second precision in some filesystems.
if (sourceStats.mtime.getTime() >= targetStats.mtime.getTime() || if (sourceStats.mtime.getTime() >= targetStats.mtime.getTime() ||
sourceStats.size !== targetStats.size) { sourceStats.size !== targetStats.size) {
log("copy " + sourcePath + " " + targetPath + " (updated file)"); log('copy ' + sourcePath + ' ' + targetPath + ' (updated file)');
shell.cp("-f", sourceFullPath, targetFullPath); shell.cp('-f', sourceFullPath, targetFullPath);
updated = true; updated = true;
} }
} }
@ -116,11 +116,11 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
} else if (targetStats) { } else if (targetStats) {
// The target exists but the source is null, so the target should be deleted. // The target exists but the source is null, so the target should be deleted.
if (targetStats.isDirectory()) { if (targetStats.isDirectory()) {
log("rmdir " + targetPath + (copyAll ? "" : " (no source)")); log('rmdir ' + targetPath + (copyAll ? '' : ' (no source)'));
shell.rm("-rf", targetFullPath); shell.rm('-rf', targetFullPath);
} else { } else {
log("delete " + targetPath + (copyAll ? "" : " (no source)")); log('delete ' + targetPath + (copyAll ? '' : ' (no source)'));
shell.rm("-f", targetFullPath); shell.rm('-f', targetFullPath);
} }
updated = true; updated = true;
} }
@ -133,7 +133,7 @@ function updatePathWithStats(sourcePath, sourceStats, targetPath, targetStats, o
* and ensures target directory exists before copying a file. * and ensures target directory exists before copying a file.
*/ */
function updatePathInternal (sourcePath, targetPath, options, log) { function updatePathInternal (sourcePath, targetPath, options, log) {
var rootDir = (options && options.rootDir) || ""; var rootDir = (options && options.rootDir) || '';
var targetFullPath = path.join(rootDir, targetPath); var targetFullPath = path.join(rootDir, targetPath);
var targetStats = fs.existsSync(targetFullPath) ? fs.statSync(targetFullPath) : null; var targetStats = fs.existsSync(targetFullPath) ? fs.statSync(targetFullPath) : null;
var sourceStats = null; var sourceStats = null;
@ -142,7 +142,7 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
// A non-null source path was specified. It should exist. // A non-null source path was specified. It should exist.
var sourceFullPath = path.join(rootDir, sourcePath); var sourceFullPath = path.join(rootDir, sourcePath);
if (!fs.existsSync(sourceFullPath)) { if (!fs.existsSync(sourceFullPath)) {
throw new Error("Source path does not exist: " + sourcePath); throw new Error('Source path does not exist: ' + sourcePath);
} }
sourceStats = fs.statSync(sourceFullPath); sourceStats = fs.statSync(sourceFullPath);
@ -150,7 +150,7 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
// Create the target's parent directory if it doesn't exist. // Create the target's parent directory if it doesn't exist.
var parentDir = path.dirname(targetFullPath); var parentDir = path.dirname(targetFullPath);
if (!fs.existsSync(parentDir)) { if (!fs.existsSync(parentDir)) {
shell.mkdir("-p", parentDir); shell.mkdir('-p', parentDir);
} }
} }
@ -178,12 +178,12 @@ function updatePathInternal(sourcePath, targetPath, options, log) {
* and everything was up to date * and everything was up to date
*/ */
function updatePath (sourcePath, targetPath, options, log) { function updatePath (sourcePath, targetPath, options, log) {
if (sourcePath !== null && typeof sourcePath !== "string") { if (sourcePath !== null && typeof sourcePath !== 'string') {
throw new Error("A source path (or null) is required."); throw new Error('A source path (or null) is required.');
} }
if (!targetPath || typeof targetPath !== "string") { if (!targetPath || typeof targetPath !== 'string') {
throw new Error("A target path is required."); throw new Error('A target path is required.');
} }
log = log || function (message) { }; log = log || function (message) { };
@ -209,8 +209,8 @@ function updatePath(sourcePath, targetPath, options, log) {
* and everything was up to date * and everything was up to date
*/ */
function updatePaths (pathMap, options, log) { function updatePaths (pathMap, options, log) {
if (!pathMap || typeof pathMap !== "object" || Array.isArray(pathMap)) { if (!pathMap || typeof pathMap !== 'object' || Array.isArray(pathMap)) {
throw new Error("An object mapping from target paths to source paths is required."); throw new Error('An object mapping from target paths to source paths is required.');
} }
log = log || function (message) { }; log = log || function (message) { };
@ -256,32 +256,32 @@ function updatePaths(pathMap, options, log) {
* and everything was up to date * and everything was up to date
*/ */
function mergeAndUpdateDir (sourceDirs, targetDir, options, log) { function mergeAndUpdateDir (sourceDirs, targetDir, options, log) {
if (sourceDirs && typeof sourceDirs === "string") { if (sourceDirs && typeof sourceDirs === 'string') {
sourceDirs = [ sourceDirs ]; sourceDirs = [ sourceDirs ];
} else if (!Array.isArray(sourceDirs)) { } else if (!Array.isArray(sourceDirs)) {
throw new Error("A source directory path or array of paths is required."); throw new Error('A source directory path or array of paths is required.');
} }
if (!targetDir || typeof targetDir !== "string") { if (!targetDir || typeof targetDir !== 'string') {
throw new Error("A target directory path is required."); throw new Error('A target directory path is required.');
} }
log = log || function (message) { }; log = log || function (message) { };
var rootDir = (options && options.rootDir) || ""; var rootDir = (options && options.rootDir) || '';
var include = (options && options.include) || [ "**" ]; var include = (options && options.include) || [ '**' ];
if (typeof include === "string") { if (typeof include === 'string') {
include = [ include ]; include = [ include ];
} else if (!Array.isArray(include)) { } else if (!Array.isArray(include)) {
throw new Error("Include parameter must be a glob string or array of glob strings."); throw new Error('Include parameter must be a glob string or array of glob strings.');
} }
var exclude = (options && options.exclude) || []; var exclude = (options && options.exclude) || [];
if (typeof exclude === "string") { if (typeof exclude === 'string') {
exclude = [ exclude ]; exclude = [ exclude ];
} else if (!Array.isArray(exclude)) { } else if (!Array.isArray(exclude)) {
throw new Error("Exclude parameter must be a glob string or array of glob strings."); throw new Error('Exclude parameter must be a glob string or array of glob strings.');
} }
// Scan the files in each of the source directories. // Scan the files in each of the source directories.
@ -289,7 +289,7 @@ function mergeAndUpdateDir(sourceDirs, targetDir, options, log) {
return path.join(rootDir, sourceDir); return path.join(rootDir, sourceDir);
}).map(function (sourcePath) { }).map(function (sourcePath) {
if (!fs.existsSync(sourcePath)) { if (!fs.existsSync(sourcePath)) {
throw new Error("Source directory does not exist: " + sourcePath); throw new Error('Source directory does not exist: ' + sourcePath);
} }
return mapDirectory(rootDir, path.relative(rootDir, sourcePath), include, exclude); return mapDirectory(rootDir, path.relative(rootDir, sourcePath), include, exclude);
}); });
@ -324,8 +324,8 @@ function mergeAndUpdateDir(sourceDirs, targetDir, options, log) {
* Creates a dictionary map of all files and directories under a path. * Creates a dictionary map of all files and directories under a path.
*/ */
function mapDirectory (rootDir, subDir, include, exclude) { function mapDirectory (rootDir, subDir, include, exclude) {
var dirMap = { "": { subDir: subDir, stats: fs.statSync(path.join(rootDir, subDir)) } }; var dirMap = { '': { subDir: subDir, stats: fs.statSync(path.join(rootDir, subDir)) } };
mapSubdirectory(rootDir, subDir, "", include, exclude, dirMap); mapSubdirectory(rootDir, subDir, '', include, exclude, dirMap);
return dirMap; return dirMap;
function mapSubdirectory (rootDir, subDir, relativeDir, include, exclude, dirMap) { function mapSubdirectory (rootDir, subDir, relativeDir, include, exclude, dirMap) {
@ -413,4 +413,3 @@ module.exports = {
updatePaths: updatePaths, updatePaths: updatePaths,
mergeAndUpdateDir: mergeAndUpdateDir mergeAndUpdateDir: mergeAndUpdateDir
}; };

View File

@ -13,7 +13,6 @@
* under the License. * under the License.
* *
*/ */
/* jshint sub:true */
var fs = require('fs'); var fs = require('fs');
var path = require('path'); var path = require('path');
@ -39,7 +38,7 @@ PlatformJson.load = function(plugins_dir, platform) {
PlatformJson.prototype.save = function () { PlatformJson.prototype.save = function () {
shelljs.mkdir('-p', path.dirname(this.filePath)); shelljs.mkdir('-p', path.dirname(this.filePath));
fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 4), 'utf-8'); fs.writeFileSync(this.filePath, JSON.stringify(this.root, null, 2), 'utf-8');
}; };
/** /**
@ -195,10 +194,10 @@ PlatformJson.prototype.makeTopLevel = function(pluginId) {
PlatformJson.prototype.generateMetadata = function () { PlatformJson.prototype.generateMetadata = function () {
return [ return [
'cordova.define(\'cordova/plugin_list\', function(require, exports, module) {', 'cordova.define(\'cordova/plugin_list\', function(require, exports, module) {',
'module.exports = ' + JSON.stringify(this.root.modules, null, 4) + ';', 'module.exports = ' + JSON.stringify(this.root.modules, null, 2) + ';',
'module.exports.metadata = ', 'module.exports.metadata = ',
'// TOP OF METADATA', '// TOP OF METADATA',
JSON.stringify(this.root.plugin_metadata, null, 4) + ';', JSON.stringify(this.root.plugin_metadata, null, 2) + ';',
'// BOTTOM OF METADATA', '// BOTTOM OF METADATA',
'});' // Close cordova.define. '});' // Close cordova.define.
].join('\n'); ].join('\n');
@ -260,7 +259,7 @@ function ModuleMetadata (pluginId, jsModule) {
if (!pluginId) throw new TypeError('pluginId argument must be a valid plugin id'); if (!pluginId) throw new TypeError('pluginId argument must be a valid plugin id');
if (!jsModule.src && !jsModule.name) throw new TypeError('jsModule argument must contain src or/and name properties'); if (!jsModule.src && !jsModule.name) throw new TypeError('jsModule argument must contain src or/and name properties');
this.id = pluginId + '.' + ( jsModule.name || jsModule.src.match(/([^\/]+)\.js/)[1] ); this.id = pluginId + '.' + (jsModule.name || jsModule.src.match(/([^\/]+)\.js/)[1]); /* eslint no-useless-escape: 0 */
this.file = ['plugins', pluginId, jsModule.src].join('/'); this.file = ['plugins', pluginId, jsModule.src].join('/');
this.pluginId = pluginId; this.pluginId = pluginId;

View File

@ -17,8 +17,6 @@
under the License. under the License.
*/ */
/* jshint sub:true, laxcomma:true, laxbreak:true */
/* /*
A class for holidng the information currently stored in plugin.xml A class for holidng the information currently stored in plugin.xml
It should also be able to answer questions like whether the plugin It should also be able to answer questions like whether the plugin
@ -27,12 +25,10 @@ is compatible with a given engine version.
TODO (kamrik): refactor this to not use sync functions and return promises. TODO (kamrik): refactor this to not use sync functions and return promises.
*/ */
var path = require('path');
var path = require('path') var fs = require('fs');
, fs = require('fs') var xml_helpers = require('../util/xml-helpers');
, xml_helpers = require('../util/xml-helpers') var CordovaError = require('../CordovaError/CordovaError');
, CordovaError = require('../CordovaError/CordovaError')
;
function PluginInfo (dirname) { function PluginInfo (dirname) {
var self = this; var self = this;
@ -87,7 +83,6 @@ function PluginInfo(dirname) {
return asset; return asset;
} }
// <dependency> // <dependency>
// Example: // Example:
// <dependency id="com.plugin.id" // <dependency id="com.plugin.id"
@ -107,11 +102,11 @@ function PluginInfo(dirname) {
function _parseDependency (tag) { function _parseDependency (tag) {
var dep = var dep =
{ id : tag.attrib.id { id: tag.attrib.id,
, version: tag.attrib.version || '' version: tag.attrib.version || '',
, url : tag.attrib.url || '' url: tag.attrib.url || '',
, subdir : tag.attrib.subdir || '' subdir: tag.attrib.subdir || '',
, commit : tag.attrib.commit commit: tag.attrib.commit
}; };
dep.git_ref = dep.commit; dep.git_ref = dep.commit;
@ -126,7 +121,6 @@ function PluginInfo(dirname) {
return dep; return dep;
} }
// <config-file> tag // <config-file> tag
self.getConfigFiles = getConfigFiles; self.getConfigFiles = getConfigFiles;
function getConfigFiles (platform) { function getConfigFiles (platform) {
@ -136,13 +130,13 @@ function PluginInfo(dirname) {
function _parseConfigFile (tag) { function _parseConfigFile (tag) {
var configFile = var configFile =
{ target : tag.attrib['target'] { target: tag.attrib['target'],
, parent : tag.attrib['parent'] parent: tag.attrib['parent'],
, after : tag.attrib['after'] after: tag.attrib['after'],
, xmls : tag.getchildren() xmls: tag.getchildren(),
// To support demuxing via versions // To support demuxing via versions
, versions : tag.attrib['versions'] versions: tag.attrib['versions'],
, deviceTarget: tag.attrib['device-target'] deviceTarget: tag.attrib['device-target']
}; };
return configFile; return configFile;
} }
@ -155,10 +149,10 @@ function PluginInfo(dirname) {
function _parseEditConfigs (tag) { function _parseEditConfigs (tag) {
var editConfig = var editConfig =
{ file : tag.attrib['file'] { file: tag.attrib['file'],
, target : tag.attrib['target'] target: tag.attrib['target'],
, mode : tag.attrib['mode'] mode: tag.attrib['mode'],
, xmls : tag.getchildren() xmls: tag.getchildren()
}; };
return editConfig; return editConfig;
} }
@ -312,15 +306,29 @@ function PluginInfo(dirname) {
return n.attrib.name; return n.attrib.name;
}); });
}; };
self.getFrameworks = function(platform) {
self.getFrameworks = function (platform, options) {
return _getTags(self._et, 'framework', platform, function (el) { return _getTags(self._et, 'framework', platform, function (el) {
var src = el.attrib.src;
if (options) {
var vars = options.cli_variables || {};
var regExp;
// Iterate over plugin variables.
// Replace them in framework src if they exist
Object.keys(vars).forEach(function (name) {
if (vars[name]) {
regExp = new RegExp('\\$' + name, 'g');
src = src.replace(regExp, vars[name]);
}
});
}
var ret = { var ret = {
itemType: 'framework', itemType: 'framework',
type: el.attrib.type, type: el.attrib.type,
parent: el.attrib.parent, parent: el.attrib.parent,
custom: isStrTrue(el.attrib.custom), custom: isStrTrue(el.attrib.custom),
embed: isStrTrue(el.attrib.embed), embed: isStrTrue(el.attrib.embed),
src: el.attrib.src, src: src,
spec: el.attrib.spec, spec: el.attrib.spec,
weak: isStrTrue(el.attrib.weak), weak: isStrTrue(el.attrib.weak),
versions: el.attrib.versions, versions: el.attrib.versions,
@ -334,21 +342,20 @@ function PluginInfo(dirname) {
}; };
self.getFilesAndFrameworks = getFilesAndFrameworks; self.getFilesAndFrameworks = getFilesAndFrameworks;
function getFilesAndFrameworks(platform) { function getFilesAndFrameworks (platform, options) {
// Please avoid changing the order of the calls below, files will be // Please avoid changing the order of the calls below, files will be
// installed in this order. // installed in this order.
var items = [].concat( var items = [].concat(
self.getSourceFiles(platform), self.getSourceFiles(platform),
self.getHeaderFiles(platform), self.getHeaderFiles(platform),
self.getResourceFiles(platform), self.getResourceFiles(platform),
self.getFrameworks(platform), self.getFrameworks(platform, options),
self.getLibFiles(platform) self.getLibFiles(platform)
); );
return items; return items;
} }
/// // End of PluginInfo methods ///// /// // End of PluginInfo methods /////
/// // PluginInfo Constructor logic ///// /// // PluginInfo Constructor logic /////
self.filepath = path.join(dirname, 'plugin.xml'); self.filepath = path.join(dirname, 'plugin.xml');
if (!fs.existsSync(self.filepath)) { if (!fs.existsSync(self.filepath)) {
@ -415,7 +422,7 @@ function _getTagsInPlatform(pelem, tag, platform, transform) {
// Check if x is a string 'true'. // Check if x is a string 'true'.
function isStrTrue (x) { function isStrTrue (x) {
return String(x).toLowerCase() == 'true'; return String(x).toLowerCase() === 'true';
} }
module.exports = PluginInfo; module.exports = PluginInfo;

View File

@ -45,7 +45,6 @@ function PluginManager(platform, locations, ideProject) {
this.munger = new PlatformMunger(platform, locations.root, platformJson, new PluginInfoProvider()); this.munger = new PlatformMunger(platform, locations.root, platformJson, new PluginInfoProvider());
} }
/** /**
* @constructs PluginManager * @constructs PluginManager
* A convenience shortcut to new PluginManager(...) * A convenience shortcut to new PluginManager(...)
@ -82,11 +81,9 @@ module.exports = PluginManager;
* @returns {Promise} Returns a Q promise, either resolved in case of success, rejected otherwise. * @returns {Promise} Returns a Q promise, either resolved in case of success, rejected otherwise.
*/ */
PluginManager.prototype.doOperation = function (operation, plugin, options) { PluginManager.prototype.doOperation = function (operation, plugin, options) {
if (operation !== PluginManager.INSTALL && operation !== PluginManager.UNINSTALL) if (operation !== PluginManager.INSTALL && operation !== PluginManager.UNINSTALL) { return Q.reject(new CordovaError('The parameter is incorrect. The opeation must be either "add" or "remove"')); }
return Q.reject(new CordovaError('The parameter is incorrect. The opeation must be either "add" or "remove"'));
if (!plugin || plugin.constructor.name !== 'PluginInfo') if (!plugin || plugin.constructor.name !== 'PluginInfo') { return Q.reject(new CordovaError('The parameter is incorrect. The first parameter should be a PluginInfo instance')); }
return Q.reject(new CordovaError('The parameter is incorrect. The first parameter should be a PluginInfo instance'));
// Set default to empty object to play safe when accesing properties // Set default to empty object to play safe when accesing properties
options = options || {}; options = options || {};
@ -95,7 +92,7 @@ PluginManager.prototype.doOperation = function (operation, plugin, options) {
var actions = new ActionStack(); var actions = new ActionStack();
// gather all files need to be handled during operation ... // gather all files need to be handled during operation ...
plugin.getFilesAndFrameworks(this.platform) plugin.getFilesAndFrameworks(this.platform, options)
.concat(plugin.getAssets(this.platform)) .concat(plugin.getAssets(this.platform))
.concat(plugin.getJsModules(this.platform)) .concat(plugin.getJsModules(this.platform))
// ... put them into stack ... // ... put them into stack ...
@ -106,9 +103,9 @@ PluginManager.prototype.doOperation = function (operation, plugin, options) {
var action; var action;
if (operation === PluginManager.INSTALL) { if (operation === PluginManager.INSTALL) {
action = actions.createAction.apply(actions, [installer, actionArgs, uninstaller, actionArgs]); action = actions.createAction.apply(actions, [installer, actionArgs, uninstaller, actionArgs]); /* eslint no-useless-call: 0 */
} else /* op === PluginManager.UNINSTALL */{ } else /* op === PluginManager.UNINSTALL */{
action = actions.createAction.apply(actions, [uninstaller, actionArgs, installer, actionArgs]); action = actions.createAction.apply(actions, [uninstaller, actionArgs, installer, actionArgs]); /* eslint no-useless-call: 0 */
} }
actions.push(action); actions.push(action);
}); });

View File

@ -40,8 +40,7 @@ module.exports.forwardEventsTo = function (eventEmitter) {
return; return;
} }
if (!(eventEmitter instanceof EventEmitter)) if (!(eventEmitter instanceof EventEmitter)) { throw new Error('Cordova events can be redirected to another EventEmitter instance only'); }
throw new Error('Cordova events can be redirected to another EventEmitter instance only');
// CB-10940 Skipping forwarding to self to avoid infinite recursion. // CB-10940 Skipping forwarding to self to avoid infinite recursion.
// This is the case when the modules are npm-linked. // This is the case when the modules are npm-linked.

View File

@ -24,7 +24,7 @@ var _ = require('underscore');
var Q = require('q'); var Q = require('q');
var shell = require('shelljs'); var shell = require('shelljs');
var events = require('./events'); var events = require('./events');
var iswin32 = process.platform == 'win32'; var iswin32 = process.platform === 'win32';
// On Windows, spawn() for batch files requires absolute path & having the extension. // On Windows, spawn() for batch files requires absolute path & having the extension.
function resolveWindowsExe (cmd) { function resolveWindowsExe (cmd) {
@ -95,7 +95,7 @@ exports.spawn = function(cmd, args, opts) {
cmd = resolveWindowsExe(cmd); cmd = resolveWindowsExe(cmd);
// If we couldn't find the file, likely we'll end up failing, // If we couldn't find the file, likely we'll end up failing,
// but for things like "del", cmd will do the trick. // but for things like "del", cmd will do the trick.
if (path.extname(cmd) != '.exe') { if (path.extname(cmd) !== '.exe') {
var cmdArgs = '"' + [cmd].concat(args).map(maybeQuote).join(' ') + '"'; var cmdArgs = '"' + [cmd].concat(args).map(maybeQuote).join(' ') + '"';
// We need to use /s to ensure that spaces are parsed properly with cmd spawned content // We need to use /s to ensure that spaces are parsed properly with cmd spawned content
args = [['/s', '/c', cmdArgs].join(' ')]; args = [['/s', '/c', cmdArgs].join(' ')];
@ -156,7 +156,7 @@ exports.spawn = function(cmd, args, opts) {
function whenDone (arg) { function whenDone (arg) {
child.removeListener('close', whenDone); child.removeListener('close', whenDone);
child.removeListener('error', whenDone); child.removeListener('error', whenDone);
var code = typeof arg == 'number' ? arg : arg && arg.code; var code = typeof arg === 'number' ? arg : arg && arg.code;
events.emit('verbose', 'Command finished with error code ' + code + ': ' + cmd + ' ' + args); events.emit('verbose', 'Command finished with error code ' + code + ': ' + cmd + ' ' + args);
if (code === 0) { if (code === 0) {
@ -187,4 +187,3 @@ exports.maybeSpawn = function(cmd, args, opts) {
} }
return Q(null); return Q(null);
}; };

View File

@ -16,6 +16,7 @@
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
/* eslint no-useless-escape: 0 */
// contains PLIST utility functions // contains PLIST utility functions
var __ = require('underscore'); var __ = require('underscore');
@ -31,8 +32,7 @@ function graftPLIST(doc, xml, selector) {
node = node.concat(obj); node = node.concat(obj);
for (var i = 0; i < node.length; i++) { for (var i = 0; i < node.length; i++) {
for (var j = i + 1; j < node.length; ++j) { for (var j = i + 1; j < node.length; ++j) {
if (nodeEqual(node[i], node[j])) if (nodeEqual(node[i], node[j])) { node.splice(j--, 1); }
node.splice(j--,1);
} }
} }
doc[selector] = node; doc[selector] = node;
@ -66,13 +66,11 @@ function pruneOBJECT(doc, selector, fragment) {
empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty; empty = pruneOBJECT(doc[selector], j, fragment[i]) && empty;
} }
} }
if (empty) if (empty) {
{
delete doc[selector]; delete doc[selector];
return true; return true;
} }
} } else if (nodeEqual(doc[selector], fragment)) {
else if (nodeEqual(doc[selector], fragment)) {
delete doc[selector]; delete doc[selector];
return true; return true;
} }
@ -81,13 +79,10 @@ function pruneOBJECT(doc, selector, fragment) {
} }
function nodeEqual (node1, node2) { function nodeEqual (node1, node2) {
if (typeof node1 != typeof node2) if (typeof node1 !== typeof node2) { return false; } else if (typeof node1 === 'string') {
return false; node2 = escapeRE(node2).replace(/\\\$\S+/gm, '(.*?)');
else if (typeof node1 == 'string') {
node2 = escapeRE(node2).replace(new RegExp('\\$[a-zA-Z0-9-_]+','gm'),'(.*?)');
return new RegExp('^' + node2 + '$').test(node1); return new RegExp('^' + node2 + '$').test(node1);
} } else {
else {
for (var key in node2) { for (var key in node2) {
if (!nodeEqual(node1[key], node2[key])) return false; if (!nodeEqual(node1[key], node2[key])) return false;
} }
@ -97,5 +92,5 @@ function nodeEqual(node1, node2) {
// escape string for use in regex // escape string for use in regex
function escapeRE (str) { function escapeRE (str) {
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '$&'); return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&');
} }

View File

@ -17,30 +17,29 @@
under the License. under the License.
*/ */
/* jshint sub:true, laxcomma:true */
/** /**
* contains XML utility functions, some of which are specific to elementtree * contains XML utility functions, some of which are specific to elementtree
*/ */
var fs = require('fs') var fs = require('fs');
, path = require('path') var path = require('path');
, _ = require('underscore') var _ = require('underscore');
, et = require('elementtree') var et = require('elementtree');
;
var ROOT = /^\/([^\/]*)/, /* eslint-disable no-useless-escape */
ABSOLUTE = /^\/([^\/]*)\/(.*)/; var ROOT = /^\/([^\/]*)/;
var ABSOLUTE = /^\/([^\/]*)\/(.*)/;
/* eslint-enable no-useless-escape */
module.exports = { module.exports = {
// compare two et.XML nodes, see if they match // compare two et.XML nodes, see if they match
// compares tagName, text, attributes and children (recursively) // compares tagName, text, attributes and children (recursively)
equalNodes: function (one, two) { equalNodes: function (one, two) {
if (one.tag != two.tag) { if (one.tag !== two.tag) {
return false; return false;
} else if (one.text.trim() != two.text.trim()) { } else if (one.text.trim() !== two.text.trim()) {
return false; return false;
} else if (one._children.length != two._children.length) { } else if (one._children.length !== two._children.length) {
return false; return false;
} }
@ -61,8 +60,8 @@ module.exports = {
if (!parent) { if (!parent) {
// Try to create the parent recursively if necessary // Try to create the parent recursively if necessary
try { try {
var parentToCreate = et.XML('<' + path.basename(selector) + '>'), var parentToCreate = et.XML('<' + path.basename(selector) + '>');
parentSelector = path.dirname(selector); var parentSelector = path.dirname(selector);
this.graftXML(doc, [parentToCreate], parentSelector); this.graftXML(doc, [parentToCreate], parentSelector);
} catch (e) { } catch (e) {
@ -160,7 +159,7 @@ module.exports = {
return true; return true;
}, },
prunXMLRemove: function(doc, selector, nodes) { pruneXMLRemove: function (doc, selector, nodes) {
var target = module.exports.resolveParent(doc, selector); var target = module.exports.resolveParent(doc, selector);
if (!target) return false; if (!target) return false;
@ -177,7 +176,6 @@ module.exports = {
}, },
parseElementtreeSync: function (filename) { parseElementtreeSync: function (filename) {
var contents = fs.readFileSync(filename, 'utf-8'); var contents = fs.readFileSync(filename, 'utf-8');
if (contents) { if (contents) {
@ -194,7 +192,7 @@ module.exports = {
if (ROOT.test(selector)) { if (ROOT.test(selector)) {
tagName = selector.match(ROOT)[1]; tagName = selector.match(ROOT)[1];
// test for wildcard "any-tag" root selector // test for wildcard "any-tag" root selector
if (tagName == '*' || tagName === doc._root.tag) { if (tagName === '*' || tagName === doc._root.tag) {
parent = doc._root; parent = doc._root;
// could be an absolute path, but not selecting the root // could be an absolute path, but not selecting the root
@ -213,8 +211,9 @@ module.exports = {
}; };
function findChild (node, parent) { function findChild (node, parent) {
var matchingKids = parent.findall(node.tag) var matchingKids = parent.findall(node.tag);
, i, j; var i;
var j;
for (i = 0, j = matchingKids.length; i < j; i++) { for (i = 0, j = matchingKids.length; i < j; i++) {
if (module.exports.equalNodes(node, matchingKids[i])) { if (module.exports.equalNodes(node, matchingKids[i])) {
@ -225,8 +224,8 @@ function findChild(node, parent) {
} }
function uniqueChild (node, parent) { function uniqueChild (node, parent) {
var matchingKids = parent.findall(node.tag) var matchingKids = parent.findall(node.tag);
, i = 0; var i = 0;
if (matchingKids.length === 0) { if (matchingKids.length === 0) {
return true; return true;
@ -248,7 +247,7 @@ function findInsertIdx(children, after) {
var childrenTags = children.map(function (child) { return child.tag; }); var childrenTags = children.map(function (child) { return child.tag; });
var afters = after.split(';'); var afters = after.split(';');
var afterIndexes = afters.map(function (current) { return childrenTags.lastIndexOf(current); }); var afterIndexes = afters.map(function (current) { return childrenTags.lastIndexOf(current); });
var foundIndex = _.find(afterIndexes, function(index) { return index != -1; }); var foundIndex = _.find(afterIndexes, function (index) { return index !== -1; });
// add to the beginning if no matching nodes are found // add to the beginning if no matching nodes are found
return typeof foundIndex === 'undefined' ? 0 : foundIndex + 1; return typeof foundIndex === 'undefined' ? 0 : foundIndex + 1;
@ -258,7 +257,7 @@ var BLACKLIST = ['platform', 'feature','plugin','engine'];
var SINGLETONS = ['content', 'author', 'name']; var SINGLETONS = ['content', 'author', 'name'];
function mergeXml (src, dest, platform, clobber) { function mergeXml (src, dest, platform, clobber) {
// Do nothing for blacklisted tags. // Do nothing for blacklisted tags.
if (BLACKLIST.indexOf(src.tag) != -1) return; if (BLACKLIST.indexOf(src.tag) !== -1) return;
// Handle attributes // Handle attributes
Object.getOwnPropertyNames(src.attrib).forEach(function (attribute) { Object.getOwnPropertyNames(src.attrib).forEach(function (attribute) {
@ -284,11 +283,11 @@ function mergeXml(src, dest, platform, clobber) {
removeDuplicatePreferences(dest); removeDuplicatePreferences(dest);
function mergeChild (srcChild) { function mergeChild (srcChild) {
var srcTag = srcChild.tag, var srcTag = srcChild.tag;
destChild = new et.Element(srcTag), var destChild = new et.Element(srcTag);
foundChild, var foundChild;
query = srcTag + '', var query = srcTag + '';
shouldMerge = true; var shouldMerge = true;
if (BLACKLIST.indexOf(srcTag) !== -1) return; if (BLACKLIST.indexOf(srcTag) !== -1) return;
@ -341,8 +340,8 @@ function mergeXml(src, dest, platform, clobber) {
module.exports.mergeXml = mergeXml; module.exports.mergeXml = mergeXml;
function textMatch (elm1, elm2) { function textMatch (elm1, elm2) {
var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '', var text1 = elm1.text ? elm1.text.replace(/\s+/, '') : '';
text2 = elm2.text ? elm2.text.replace(/\s+/, '') : ''; var text2 = elm2.text ? elm2.text.replace(/\s+/, '') : '';
return (text1 === '' || text1 === text2); return (text1 === '' || text1 === text2);
} }
@ -350,14 +349,14 @@ function attribMatch(one, two) {
var oneAttribKeys = Object.keys(one.attrib); var oneAttribKeys = Object.keys(one.attrib);
var twoAttribKeys = Object.keys(two.attrib); var twoAttribKeys = Object.keys(two.attrib);
if (oneAttribKeys.length != twoAttribKeys.length) { if (oneAttribKeys.length !== twoAttribKeys.length) {
return false; return false;
} }
for (var i = 0; i < oneAttribKeys.length; i++) { for (var i = 0; i < oneAttribKeys.length; i++) {
var attribName = oneAttribKeys[i]; var attribName = oneAttribKeys[i];
if (one.attrib[attribName] != two.attrib[attribName]) { if (one.attrib[attribName] !== two.attrib[attribName]) {
return false; return false;
} }
} }

View File

@ -73,7 +73,8 @@
], ],
"name": "cordova-registry-mapper", "name": "cordova-registry-mapper",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "[![Build Status](https://travis-ci.org/stevengill/cordova-registry-mapper.svg?branch=master)](https://travis-ci.org/stevengill/cordova-registry-mapper)\n\n#Cordova Registry Mapper\n\nThis module is used to map Cordova plugin ids to package names and vice versa.\n\nWhen Cordova users add plugins to their projects using ids\n(e.g. `cordova plugin add org.apache.cordova.device`),\nthis module will map that id to the corresponding package name so `cordova-lib` knows what to fetch from **npm**.\n\nThis module was created so the Apache Cordova project could migrate its plugins from\nthe [Cordova Registry](http://registry.cordova.io/)\nto [npm](https://registry.npmjs.com/)\ninstead of having to maintain a registry.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/stevengill/cordova-registry-mapper.git" "url": "git+https://github.com/stevengill/cordova-registry-mapper.git"

View File

@ -97,7 +97,8 @@
], ],
"name": "elementtree", "name": "elementtree",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "node-elementtree\n====================\n\nnode-elementtree is a [Node.js](http://nodejs.org) XML parser and serializer based upon the [Python ElementTree v1.3](http://effbot.org/zone/element-index.htm) module.\n\nInstallation\n====================\n\n $ npm install elementtree\n \nUsing the library\n====================\n\nFor the usage refer to the Python ElementTree library documentation - [http://effbot.org/zone/element-index.htm#usage](http://effbot.org/zone/element-index.htm#usage).\n\nSupported XPath expressions in `find`, `findall` and `findtext` methods are listed on [http://effbot.org/zone/element-xpath.htm](http://effbot.org/zone/element-xpath.htm).\n\nExample 1 Creating An XML Document\n====================\n\nThis example shows how to build a valid XML document that can be published to\nAtom Hopper. Atom Hopper is used internally as a bridge from products all the\nway to collecting revenue, called “Usage.” MaaS and other products send similar\nevents to it every time user performs an action on a resource\n(e.g. creates,updates or deletes). Below is an example of leveraging the API\nto create a new XML document.\n\n```javascript\nvar et = require('elementtree');\nvar XML = et.XML;\nvar ElementTree = et.ElementTree;\nvar element = et.Element;\nvar subElement = et.SubElement;\n\nvar date, root, tenantId, serviceName, eventType, usageId, dataCenter, region,\nchecks, resourceId, category, startTime, resourceName, etree, xml;\n\ndate = new Date();\n\nroot = element('entry');\nroot.set('xmlns', 'http://www.w3.org/2005/Atom');\n\ntenantId = subElement(root, 'TenantId');\ntenantId.text = '12345';\n\nserviceName = subElement(root, 'ServiceName');\nserviceName.text = 'MaaS';\n\nresourceId = subElement(root, 'ResourceID');\nresourceId.text = 'enAAAA';\n\nusageId = subElement(root, 'UsageID');\nusageId.text = '550e8400-e29b-41d4-a716-446655440000';\n\neventType = subElement(root, 'EventType');\neventType.text = 'create';\n\ncategory = subElement(root, 'category');\ncategory.set('term', 'monitoring.entity.create');\n\ndataCenter = subElement(root, 'DataCenter');\ndataCenter.text = 'global';\n\nregion = subElement(root, 'Region');\nregion.text = 'global';\n\nstartTime = subElement(root, 'StartTime');\nstartTime.text = date;\n\nresourceName = subElement(root, 'ResourceName');\nresourceName.text = 'entity';\n\netree = new ElementTree(root);\nxml = etree.write({'xml_declaration': false});\nconsole.log(xml);\n```\n\nAs you can see, both et.Element and et.SubElement are factory methods which\nreturn a new instance of Element and SubElement class, respectively.\nWhen you create a new element (tag) you can use set method to set an attribute.\nTo set the tag value, assign a value to the .text attribute.\n\nThis example would output a document that looks like this:\n\n```xml\n<entry xmlns=\"http://www.w3.org/2005/Atom\">\n <TenantId>12345</TenantId>\n <ServiceName>MaaS</ServiceName>\n <ResourceID>enAAAA</ResourceID>\n <UsageID>550e8400-e29b-41d4-a716-446655440000</UsageID>\n <EventType>create</EventType>\n <category term=\"monitoring.entity.create\"/>\n <DataCenter>global</DataCenter>\n <Region>global</Region>\n <StartTime>Sun Apr 29 2012 16:37:32 GMT-0700 (PDT)</StartTime>\n <ResourceName>entity</ResourceName>\n</entry>\n```\n\nExample 2 Parsing An XML Document\n====================\n\nThis example shows how to parse an XML document and use simple XPath selectors.\nFor demonstration purposes, we will use the XML document located at\nhttps://gist.github.com/2554343.\n\nBehind the scenes, node-elementtree uses Isaacs sax library for parsing XML,\nbut the library has a concept of “parsers,” which means its pretty simple to\nadd support for a different parser.\n\n```javascript\nvar fs = require('fs');\n\nvar et = require('elementtree');\n\nvar XML = et.XML;\nvar ElementTree = et.ElementTree;\nvar element = et.Element;\nvar subElement = et.SubElement;\n\nvar data, etree;\n\ndata = fs.readFileSync('document.xml').toString();\netree = et.parse(data);\n\nconsole.log(etree.findall('./entry/TenantId').length); // 2\nconsole.log(etree.findtext('./entry/ServiceName')); // MaaS\nconsole.log(etree.findall('./entry/category')[0].get('term')); // monitoring.entity.create\nconsole.log(etree.findall('*/category/[@term=\"monitoring.entity.update\"]').length); // 1\n```\n\nBuild status\n====================\n\n[![Build Status](https://secure.travis-ci.org/racker/node-elementtree.png)](http://travis-ci.org/racker/node-elementtree)\n\n\nLicense\n====================\n\nnode-elementtree is distributed under the [Apache license](http://www.apache.org/licenses/LICENSE-2.0.html).\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/racker/node-elementtree.git" "url": "git://github.com/racker/node-elementtree.git"

3
node_modules/glob/package.json generated vendored

File diff suppressed because one or more lines are too long

3
node_modules/inflight/package.json generated vendored
View File

@ -93,7 +93,8 @@
], ],
"name": "inflight", "name": "inflight",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# inflight\n\nAdd callbacks to requests in flight to avoid async duplication\n\n## USAGE\n\n```javascript\nvar inflight = require('inflight')\n\n// some request that does some stuff\nfunction req(key, callback) {\n // key is any random string. like a url or filename or whatever.\n //\n // will return either a falsey value, indicating that the\n // request for this key is already in flight, or a new callback\n // which when called will call all callbacks passed to inflightk\n // with the same key\n callback = inflight(key, callback)\n\n // If we got a falsey value back, then there's already a req going\n if (!callback) return\n\n // this is where you'd fetch the url or whatever\n // callback is also once()-ified, so it can safely be assigned\n // to multiple events etc. First call wins.\n setTimeout(function() {\n callback(null, key)\n }, 100)\n}\n\n// only assigns a single setTimeout\n// when it dings, all cbs get called\nreq('foo', cb1)\nreq('foo', cb2)\nreq('foo', cb3)\nreq('foo', cb4)\n```\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/npm/inflight.git" "url": "git+https://github.com/npm/inflight.git"

3
node_modules/inherits/package.json generated vendored
View File

@ -85,7 +85,8 @@
], ],
"name": "inherits", "name": "inherits",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "Browser-friendly inheritance fully compatible with standard node.js\n[inherits](http://nodejs.org/api/util.html#util_util_inherits_constructor_superconstructor).\n\nThis package exports standard `inherits` from node.js `util` module in\nnode environment, but also provides alternative browser-friendly\nimplementation through [browser\nfield](https://gist.github.com/shtylman/4339901). Alternative\nimplementation is a literal copy of standard one located in standalone\nmodule to avoid requiring of `util`. It also has a shim for old\nbrowsers with no `Object.create` support.\n\nWhile keeping you sure you are using standard `inherits`\nimplementation in node.js environment, it allows bundlers such as\n[browserify](https://github.com/substack/node-browserify) to not\ninclude full `util` package to your client code if all you need is\njust `inherits` function. It worth, because browser shim for `util`\npackage is large and `inherits` is often the single function you need\nfrom it.\n\nIt's recommended to use this package instead of\n`require('util').inherits` for any code that has chances to be used\nnot only in node.js but in browser too.\n\n## usage\n\n```js\nvar inherits = require('inherits');\n// then use exactly as the standard one\n```\n\n## note on version ~1.0\n\nVersion ~1.0 had completely different motivation and is not compatible\nneither with 2.0 nor with standard node.js `inherits`.\n\nIf you are using version ~1.0 and planning to switch to ~2.0, be\ncareful:\n\n* new version uses `super_` instead of `super` for referencing\n superclass\n* new version overwrites current prototype while old one preserves any\n existing fields on it\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/isaacs/inherits.git" "url": "git://github.com/isaacs/inherits.git"

3
node_modules/lodash/package.json generated vendored

File diff suppressed because one or more lines are too long

37
node_modules/minimatch/package.json generated vendored

File diff suppressed because one or more lines are too long

3
node_modules/nopt/package.json generated vendored

File diff suppressed because one or more lines are too long

3
node_modules/once/package.json generated vendored
View File

@ -89,7 +89,8 @@
], ],
"name": "once", "name": "once",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# once\n\nOnly call a function once.\n\n## usage\n\n```javascript\nvar once = require('once')\n\nfunction load (file, cb) {\n cb = once(cb)\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nOr add to the Function.prototype in a responsible way:\n\n```javascript\n// only has to be done once\nrequire('once').proto()\n\nfunction load (file, cb) {\n cb = cb.once()\n loader.load('file')\n loader.once('load', cb)\n loader.once('error', cb)\n}\n```\n\nIronically, the prototype feature makes this module twice as\ncomplicated as necessary.\n\nTo check whether you function has been called, use `fn.called`. Once the\nfunction is called for the first time the return value of the original\nfunction is saved in `fn.value` and subsequent calls will continue to\nreturn this value.\n\n```javascript\nvar once = require('once')\n\nfunction load (cb) {\n cb = once(cb)\n var stream = createStream()\n stream.once('data', cb)\n stream.once('end', function () {\n if (!cb.called) cb(new Error('not found'))\n })\n}\n```\n\n## `once.strict(func)`\n\nThrow an error if the function is called twice.\n\nSome functions are expected to be called only once. Using `once` for them would\npotentially hide logical errors.\n\nIn the example below, the `greet` function has to call the callback only once:\n\n```javascript\nfunction greet (name, cb) {\n // return is missing from the if statement\n // when no name is passed, the callback is called twice\n if (!name) cb('Hello anonymous')\n cb('Hello ' + name)\n}\n\nfunction log (msg) {\n console.log(msg)\n}\n\n// this will print 'Hello anonymous' but the logical error will be missed\ngreet(null, once(msg))\n\n// once.strict will print 'Hello anonymous' and throw an error when the callback will be called the second time\ngreet(null, once.strict(msg))\n```\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/isaacs/once.git" "url": "git://github.com/isaacs/once.git"

View File

@ -97,7 +97,8 @@
], ],
"name": "os-homedir", "name": "os-homedir",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# os-homedir [![Build Status](https://travis-ci.org/sindresorhus/os-homedir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-homedir)\n\n> Node.js 4 [`os.homedir()`](https://nodejs.org/api/os.html#os_os_homedir) [ponyfill](https://ponyfill.com)\n\n\n## Install\n\n```\n$ npm install --save os-homedir\n```\n\n\n## Usage\n\n```js\nconst osHomedir = require('os-homedir');\n\nconsole.log(osHomedir());\n//=> '/Users/sindresorhus'\n```\n\n\n## Related\n\n- [user-home](https://github.com/sindresorhus/user-home) - Same as this module but caches the result\n- [home-or-tmp](https://github.com/sindresorhus/home-or-tmp) - Get the user home directory with fallback to the system temp directory\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n",
"readmeFilename": "readme.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/sindresorhus/os-homedir.git" "url": "git+https://github.com/sindresorhus/os-homedir.git"

View File

@ -97,7 +97,8 @@
], ],
"name": "os-tmpdir", "name": "os-tmpdir",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# os-tmpdir [![Build Status](https://travis-ci.org/sindresorhus/os-tmpdir.svg?branch=master)](https://travis-ci.org/sindresorhus/os-tmpdir)\n\n> Node.js [`os.tmpdir()`](https://nodejs.org/api/os.html#os_os_tmpdir) [ponyfill](https://ponyfill.com)\n\nUse this instead of `require('os').tmpdir()` to get a consistent behavior on different Node.js versions (even 0.8).\n\n\n## Install\n\n```\n$ npm install --save os-tmpdir\n```\n\n\n## Usage\n\n```js\nconst osTmpdir = require('os-tmpdir');\n\nosTmpdir();\n//=> '/var/folders/m3/5574nnhn0yj488ccryqr7tc80000gn/T'\n```\n\n\n## API\n\nSee the [`os.tmpdir()` docs](https://nodejs.org/api/os.html#os_os_tmpdir).\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n",
"readmeFilename": "readme.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/sindresorhus/os-tmpdir.git" "url": "git+https://github.com/sindresorhus/os-tmpdir.git"

3
node_modules/osenv/package.json generated vendored
View File

@ -101,7 +101,8 @@
], ],
"name": "osenv", "name": "osenv",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# osenv\n\nLook up environment settings specific to different operating systems.\n\n## Usage\n\n```javascript\nvar osenv = require('osenv')\nvar path = osenv.path()\nvar user = osenv.user()\n// etc.\n\n// Some things are not reliably in the env, and have a fallback command:\nvar h = osenv.hostname(function (er, hostname) {\n h = hostname\n})\n// This will still cause it to be memoized, so calling osenv.hostname()\n// is now an immediate operation.\n\n// You can always send a cb, which will get called in the nextTick\n// if it's been memoized, or wait for the fallback data if it wasn't\n// found in the environment.\nosenv.hostname(function (er, hostname) {\n if (er) console.error('error looking up hostname')\n else console.log('this machine calls itself %s', hostname)\n})\n```\n\n## osenv.hostname()\n\nThe machine name. Calls `hostname` if not found.\n\n## osenv.user()\n\nThe currently logged-in user. Calls `whoami` if not found.\n\n## osenv.prompt()\n\nEither PS1 on unix, or PROMPT on Windows.\n\n## osenv.tmpdir()\n\nThe place where temporary files should be created.\n\n## osenv.home()\n\nNo place like it.\n\n## osenv.path()\n\nAn array of the places that the operating system will search for\nexecutables.\n\n## osenv.editor() \n\nReturn the executable name of the editor program. This uses the EDITOR\nand VISUAL environment variables, and falls back to `vi` on Unix, or\n`notepad.exe` on Windows.\n\n## osenv.shell()\n\nThe SHELL on Unix, which Windows calls the ComSpec. Defaults to 'bash'\nor 'cmd'.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/npm/osenv.git" "url": "git+https://github.com/npm/osenv.git"

View File

@ -99,7 +99,8 @@
], ],
"name": "path-is-absolute", "name": "path-is-absolute",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# path-is-absolute [![Build Status](https://travis-ci.org/sindresorhus/path-is-absolute.svg?branch=master)](https://travis-ci.org/sindresorhus/path-is-absolute)\n\n> Node.js 0.12 [`path.isAbsolute()`](http://nodejs.org/api/path.html#path_path_isabsolute_path) [ponyfill](https://ponyfill.com)\n\n\n## Install\n\n```\n$ npm install --save path-is-absolute\n```\n\n\n## Usage\n\n```js\nconst pathIsAbsolute = require('path-is-absolute');\n\n// Running on Linux\npathIsAbsolute('/home/foo');\n//=> true\npathIsAbsolute('C:/Users/foo');\n//=> false\n\n// Running on Windows\npathIsAbsolute('C:/Users/foo');\n//=> true\npathIsAbsolute('/home/foo');\n//=> false\n\n// Running on any OS\npathIsAbsolute.posix('/home/foo');\n//=> true\npathIsAbsolute.posix('C:/Users/foo');\n//=> false\npathIsAbsolute.win32('C:/Users/foo');\n//=> true\npathIsAbsolute.win32('/home/foo');\n//=> false\n```\n\n\n## API\n\nSee the [`path.isAbsolute()` docs](http://nodejs.org/api/path.html#path_path_isabsolute_path).\n\n### pathIsAbsolute(path)\n\n### pathIsAbsolute.posix(path)\n\nPOSIX specific version.\n\n### pathIsAbsolute.win32(path)\n\nWindows specific version.\n\n\n## License\n\nMIT © [Sindre Sorhus](https://sindresorhus.com)\n",
"readmeFilename": "readme.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/sindresorhus/path-is-absolute.git" "url": "git+https://github.com/sindresorhus/path-is-absolute.git"

3
node_modules/plist/package.json generated vendored
View File

@ -113,7 +113,8 @@
], ],
"name": "plist", "name": "plist",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "plist.js\n========\n### Mac OS X Plist parser/builder for Node.js and browsers\n\n[![Sauce Test Status](https://saucelabs.com/browser-matrix/plistjs.svg)](https://saucelabs.com/u/plistjs)\n\n[![Build Status](https://travis-ci.org/TooTallNate/plist.js.svg?branch=master)](https://travis-ci.org/TooTallNate/plist.js)\n\nProvides facilities for reading and writing Mac OS X Plist (property list)\nfiles. These are often used in programming OS X and iOS applications, as\nwell as the iTunes configuration XML file.\n\nPlist files represent stored programming \"object\"s. They are very similar\nto JSON. A valid Plist file is representable as a native JavaScript Object\nand vice-versa.\n\n\n## Usage\n\n### Node.js\n\nInstall using `npm`:\n\n``` bash\n$ npm install --save plist\n```\n\nThen `require()` the _plist_ module in your file:\n\n``` js\nvar plist = require('plist');\n\n// now use the `parse()` and `build()` functions\nvar val = plist.parse('<plist><string>Hello World!</string></plist>');\nconsole.log(val); // \"Hello World!\"\n```\n\n\n### Browser\n\nInclude the `dist/plist.js` in a `<script>` tag in your HTML file:\n\n``` html\n<script src=\"plist.js\"></script>\n<script>\n // now use the `parse()` and `build()` functions\n var val = plist.parse('<plist><string>Hello World!</string></plist>');\n console.log(val); // \"Hello World!\"\n</script>\n```\n\n\n## API\n\n### Parsing\n\nParsing a plist from filename:\n\n``` javascript\nvar fs = require('fs');\nvar plist = require('plist');\n\nvar obj = plist.parse(fs.readFileSync('myPlist.plist', 'utf8'));\nconsole.log(JSON.stringify(obj));\n```\n\nParsing a plist from string payload:\n\n``` javascript\nvar plist = require('plist');\n\nvar obj = plist.parse('<plist><string>Hello World!</string></plist>');\nconsole.log(obj); // Hello World!\n```\n\n### Building\n\nGiven an existing JavaScript Object, you can turn it into an XML document\nthat complies with the plist DTD:\n\n``` javascript\nvar plist = require('plist');\n\nconsole.log(plist.build({ foo: 'bar' }));\n```\n\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2010-2014 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/TooTallNate/node-plist.git" "url": "git://github.com/TooTallNate/node-plist.git"

View File

@ -54,7 +54,7 @@
"engines": { "engines": {
"node": ">= 0.3.1" "node": ">= 0.3.1"
}, },
"homepage": "https://github.com/xavi-/node-properties-parser", "homepage": "https://github.com/xavi-/node-properties-parser#readme",
"keywords": [ "keywords": [
"parser", "parser",
".properties", ".properties",
@ -66,13 +66,15 @@
"main": "./index.js", "main": "./index.js",
"maintainers": [ "maintainers": [
{ {
"name": "xavi", "name": "Xavi",
"email": "xavi.rmz@gmail.com" "email": "xavi.rmz@gmail.com",
"url": "http://xavi.co"
} }
], ],
"name": "properties-parser", "name": "properties-parser",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# node-properties-parser\n\nA parser for [.properties](http://en.wikipedia.org/wiki/.properties) files written in javascript. Properties files store key-value pairs. They are typically used for configuration and internationalization in Java applications as well as in Actionscript projects. Here's an example of the format:\n\n\t# You are reading the \".properties\" entry.\n\t! The exclamation mark can also mark text as comments.\n\twebsite = http://en.wikipedia.org/\n\tlanguage = English\n\t# The backslash below tells the application to continue reading\n\t# the value onto the next line.\n\tmessage = Welcome to \\\n\t Wikipedia!\n\t# Add spaces to the key\n\tkey\\ with\\ spaces = This is the value that could be looked up with the key \"key with spaces\".\n\t# Unicode\n\ttab : \\u0009\n*(taken from [Wikipedia](http://en.wikipedia.org/wiki/.properties#Format))*\n\nCurrently works with any version of node.js.\n\n## The API\n\n- `parse(text)`: Parses `text` into key-value pairs. Returns an object containing the key-value pairs.\n- `read(path[, callback])`: Opens the file specified by `path` and calls `parse` on its content. If the optional `callback` parameter is provided, the result is then passed to it as the second parameter. If an error occurs, the error object is passed to `callback` as the first parameter. If `callback` is not provided, the file specified by `path` is synchronously read and calls `parse` on its contents. The resulting object is immediately returned.\n- `createEditor([path[, callback]])`: If neither `path` or `callback` are provided an empty editor object is returned synchronously. If only `path` is provided, the file specified by `path` is synchronously read and parsed. An editor object with the results in then immediately returned. If both `path` and `callback` are provided, the file specified by `path` is read and parsed asynchronously. An editor object with the results are then passed to `callback` as the second parameters. If an error occurs, the error object is passed to `callback` as the first parameter.\n- `Editor`: The editor object is returned by `createEditor`. Has the following API:\n\t- `get(key)`: Returns the value currently associated with `key`.\n\t- `set(key, [value[, comment]])`: Associates `key` with `value`. An optional comment can be provided. If `value` is not specified or is `null`, then `key` is unset.\n\t- `unset(key)`: Unsets the specified `key`.\n\t- `save([path][, callback]])`: Writes the current contents of this editor object to a file specified by `path`. If `path` is not provided, then it'll be defaulted to the `path` value passed to `createEditor`. The `callback` parameter is called when the file has been written to disk.\n\t- `addHeadComment`: Added a comment to the head of the file.\n\t- `toString`: Returns the string representation of this properties editor object. This string will be written to a file if `save` is called.\n\n## Getting node-properties-parser\n\nThe easiest way to get node-properties-parser is with [npm](http://npmjs.org/):\n\n\tnpm install properties-parser\n\nAlternatively you can clone this git repository:\n\n\tgit://github.com/xavi-/node-properties-parser.git\n\n## Developed by\n* Xavi Ramirez\n\n## License\nThis project is released under [The MIT License](http://www.opensource.org/licenses/mit-license.php).",
"readmeFilename": "README.markdown",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/xavi-/node-properties-parser.git" "url": "git+https://github.com/xavi-/node-properties-parser.git"

3
node_modules/q/package.json generated vendored

File diff suppressed because one or more lines are too long

5
node_modules/sax/package.json generated vendored

File diff suppressed because one or more lines are too long

32
node_modules/semver/README.md generated vendored
View File

@ -1,11 +1,18 @@
semver(1) -- The semantic versioner for npm semver(1) -- The semantic versioner for npm
=========================================== ===========================================
## Install
```bash
npm install --save semver
````
## Usage ## Usage
$ npm install semver As a node module:
$ node
var semver = require('semver') ```js
const semver = require('semver')
semver.valid('1.2.3') // '1.2.3' semver.valid('1.2.3') // '1.2.3'
semver.valid('a.b.c') // null semver.valid('a.b.c') // null
@ -13,12 +20,14 @@ semver(1) -- The semantic versioner for npm
semver.satisfies('1.2.3', '1.x || >=2.5.0 || 5.0.0 - 7.2.3') // true 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.gt('1.2.3', '9.8.7') // false
semver.lt('1.2.3', '9.8.7') // true semver.lt('1.2.3', '9.8.7') // true
```
As a command-line utility: As a command-line utility:
```
$ semver -h $ semver -h
SemVer 5.1.0 SemVer 5.3.0
A JavaScript implementation of the http://semver.org/ specification A JavaScript implementation of the http://semver.org/ specification
Copyright Isaac Z. Schlueter Copyright Isaac Z. Schlueter
@ -50,6 +59,7 @@ As a command-line utility:
Versions are printed in ascending order, so supplying Versions are printed in ascending order, so supplying
multiple versions to the utility will just sort them. multiple versions to the utility will just sort them.
```
## Versions ## Versions
@ -126,20 +136,20 @@ The method `.inc` takes an additional `identifier` string argument that
will append the value of the string as a prerelease identifier: will append the value of the string as a prerelease identifier:
```javascript ```javascript
> semver.inc('1.2.3', 'prerelease', 'beta') semver.inc('1.2.3', 'prerelease', 'beta')
'1.2.4-beta.0' // '1.2.4-beta.0'
``` ```
command-line example: command-line example:
```shell ```bash
$ semver 1.2.3 -i prerelease --preid beta $ semver 1.2.3 -i prerelease --preid beta
1.2.4-beta.0 1.2.4-beta.0
``` ```
Which then can be used to increment further: Which then can be used to increment further:
```shell ```bash
$ semver 1.2.4-beta.0 -i prerelease $ semver 1.2.4-beta.0 -i prerelease
1.2.4-beta.1 1.2.4-beta.1
``` ```
@ -296,6 +306,8 @@ strings that they parse.
* `major(v)`: Return the major version number. * `major(v)`: Return the major version number.
* `minor(v)`: Return the minor version number. * `minor(v)`: Return the minor version number.
* `patch(v)`: Return the patch version number. * `patch(v)`: Return the patch version number.
* `intersects(r1, r2, loose)`: Return true if the two supplied ranges
or comparators intersect.
### Comparison ### Comparison
@ -319,6 +331,9 @@ strings that they parse.
(`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`), (`major`, `premajor`, `minor`, `preminor`, `patch`, `prepatch`, or `prerelease`),
or null if the versions are the same. or null if the versions are the same.
### Comparators
* `intersects(comparator)`: Return true if the comparators intersect
### Ranges ### Ranges
@ -337,6 +352,7 @@ strings that they parse.
the bounds of the range in either the high or low direction. The the bounds of the range in either the high or low direction. The
`hilo` argument must be either the string `'>'` or `'<'`. (This is `hilo` argument must be either the string `'>'` or `'<'`. (This is
the function called by `gtr` and `ltr`.) the function called by `gtr` and `ltr`.)
* `intersects(range)`: Return true if any of the ranges comparators intersect
Note that, since ranges may be non-contiguous, a version might not be Note that, since ranges may be non-contiguous, a version might not be
greater than a range, less than a range, *or* satisfy a range! For greater than a range, less than a range, *or* satisfy a range! For

32
node_modules/semver/package.json generated vendored

File diff suppressed because one or more lines are too long

117
node_modules/semver/semver.js generated vendored
View File

@ -563,7 +563,7 @@ function patch(a, loose) {
exports.compare = compare; exports.compare = compare;
function compare(a, b, loose) { function compare(a, b, loose) {
return new SemVer(a, loose).compare(b); return new SemVer(a, loose).compare(new SemVer(b, loose));
} }
exports.compareLoose = compareLoose; exports.compareLoose = compareLoose;
@ -704,11 +704,59 @@ Comparator.prototype.test = function(version) {
return cmp(version, this.operator, this.semver, this.loose); return cmp(version, this.operator, this.semver, this.loose);
}; };
Comparator.prototype.intersects = function(comp, loose) {
if (!(comp instanceof Comparator)) {
throw new TypeError('a Comparator is required');
}
var rangeTmp;
if (this.operator === '') {
rangeTmp = new Range(comp.value, loose);
return satisfies(this.value, rangeTmp, loose);
} else if (comp.operator === '') {
rangeTmp = new Range(this.value, loose);
return satisfies(comp.semver, rangeTmp, loose);
}
var sameDirectionIncreasing =
(this.operator === '>=' || this.operator === '>') &&
(comp.operator === '>=' || comp.operator === '>');
var sameDirectionDecreasing =
(this.operator === '<=' || this.operator === '<') &&
(comp.operator === '<=' || comp.operator === '<');
var sameSemVer = this.semver.version === comp.semver.version;
var differentDirectionsInclusive =
(this.operator === '>=' || this.operator === '<=') &&
(comp.operator === '>=' || comp.operator === '<=');
var oppositeDirectionsLessThan =
cmp(this.semver, '<', comp.semver, loose) &&
((this.operator === '>=' || this.operator === '>') &&
(comp.operator === '<=' || comp.operator === '<'));
var oppositeDirectionsGreaterThan =
cmp(this.semver, '>', comp.semver, loose) &&
((this.operator === '<=' || this.operator === '<') &&
(comp.operator === '>=' || comp.operator === '>'));
return sameDirectionIncreasing || sameDirectionDecreasing ||
(sameSemVer && differentDirectionsInclusive) ||
oppositeDirectionsLessThan || oppositeDirectionsGreaterThan;
};
exports.Range = Range; exports.Range = Range;
function Range(range, loose) { function Range(range, loose) {
if ((range instanceof Range) && range.loose === loose) if (range instanceof Range) {
if (range.loose === loose) {
return range; return range;
} else {
return new Range(range.raw, loose);
}
}
if (range instanceof Comparator) {
return new Range(range.value, loose);
}
if (!(this instanceof Range)) if (!(this instanceof Range))
return new Range(range, loose); return new Range(range, loose);
@ -783,6 +831,22 @@ Range.prototype.parseRange = function(range) {
return set; return set;
}; };
Range.prototype.intersects = function(range, loose) {
if (!(range instanceof Range)) {
throw new TypeError('a Range is required');
}
return this.set.some(function(thisComparators) {
return thisComparators.every(function(thisComparator) {
return range.set.some(function(rangeComparators) {
return rangeComparators.every(function(rangeComparator) {
return thisComparator.intersects(rangeComparator, loose);
});
});
});
});
};
// Mostly just for testing and legacy API reasons // Mostly just for testing and legacy API reasons
exports.toComparators = toComparators; exports.toComparators = toComparators;
function toComparators(range, loose) { function toComparators(range, loose) {
@ -1087,20 +1151,42 @@ function satisfies(version, range, loose) {
exports.maxSatisfying = maxSatisfying; exports.maxSatisfying = maxSatisfying;
function maxSatisfying(versions, range, loose) { function maxSatisfying(versions, range, loose) {
return versions.filter(function(version) { var max = null;
return satisfies(version, range, loose); var maxSV = null;
}).sort(function(a, b) { try {
return rcompare(a, b, loose); var rangeObj = new Range(range, loose);
})[0] || null; } catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, loose)
if (!max || maxSV.compare(v) === -1) { // compare(max, v, true)
max = v;
maxSV = new SemVer(max, loose);
}
}
})
return max;
} }
exports.minSatisfying = minSatisfying; exports.minSatisfying = minSatisfying;
function minSatisfying(versions, range, loose) { function minSatisfying(versions, range, loose) {
return versions.filter(function(version) { var min = null;
return satisfies(version, range, loose); var minSV = null;
}).sort(function(a, b) { try {
return compare(a, b, loose); var rangeObj = new Range(range, loose);
})[0] || null; } catch (er) {
return null;
}
versions.forEach(function (v) {
if (rangeObj.test(v)) { // satisfies(v, range, loose)
if (!min || minSV.compare(v) === 1) { // compare(min, v, true)
min = v;
minSV = new SemVer(min, loose);
}
}
})
return min;
} }
exports.validRange = validRange; exports.validRange = validRange;
@ -1201,3 +1287,10 @@ function prerelease(version, loose) {
var parsed = parse(version, loose); var parsed = parse(version, loose);
return (parsed && parsed.prerelease.length) ? parsed.prerelease : null; return (parsed && parsed.prerelease.length) ? parsed.prerelease : null;
} }
exports.intersects = intersects;
function intersects(r1, r2, loose) {
r1 = new Range(r1, loose)
r2 = new Range(r2, loose)
return r1.intersects(r2)
}

3
node_modules/shelljs/package.json generated vendored

File diff suppressed because one or more lines are too long

View File

@ -87,7 +87,8 @@
], ],
"name": "underscore", "name": "underscore",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": " __\n /\\ \\ __\n __ __ ___ \\_\\ \\ __ _ __ ____ ___ ___ _ __ __ /\\_\\ ____\n /\\ \\/\\ \\ /' _ `\\ /'_ \\ /'__`\\/\\ __\\/ ,__\\ / ___\\ / __`\\/\\ __\\/'__`\\ \\/\\ \\ /',__\\\n \\ \\ \\_\\ \\/\\ \\/\\ \\/\\ \\ \\ \\/\\ __/\\ \\ \\//\\__, `\\/\\ \\__//\\ \\ \\ \\ \\ \\//\\ __/ __ \\ \\ \\/\\__, `\\\n \\ \\____/\\ \\_\\ \\_\\ \\___,_\\ \\____\\\\ \\_\\\\/\\____/\\ \\____\\ \\____/\\ \\_\\\\ \\____\\/\\_\\ _\\ \\ \\/\\____/\n \\/___/ \\/_/\\/_/\\/__,_ /\\/____/ \\/_/ \\/___/ \\/____/\\/___/ \\/_/ \\/____/\\/_//\\ \\_\\ \\/___/\n \\ \\____/\n \\/___/\n\nUnderscore.js is a utility-belt library for JavaScript that provides\nsupport for the usual functional suspects (each, map, reduce, filter...)\nwithout extending any core JavaScript objects.\n\nFor Docs, License, Tests, and pre-packed downloads, see:\nhttp://underscorejs.org\n\nUnderscore is an open-sourced component of DocumentCloud:\nhttps://github.com/documentcloud\n\nMany thanks to our contributors:\nhttps://github.com/jashkenas/underscore/contributors\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/jashkenas/underscore.git" "url": "git://github.com/jashkenas/underscore.git"

5
node_modules/unorm/package.json generated vendored
View File

@ -80,7 +80,7 @@
"node": ">= 0.4.0" "node": ">= 0.4.0"
}, },
"gitHead": "e802d0d7844cf74b03742bce1147a82ace218396", "gitHead": "e802d0d7844cf74b03742bce1147a82ace218396",
"homepage": "https://github.com/walling/unorm", "homepage": "https://github.com/walling/unorm#readme",
"license": "MIT or GPL-2.0", "license": "MIT or GPL-2.0",
"main": "./lib/unorm.js", "main": "./lib/unorm.js",
"maintainers": [ "maintainers": [
@ -91,7 +91,8 @@
], ],
"name": "unorm", "name": "unorm",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "This is [Unicode Normalizer] in a Common JS module. I'm not affiliated with Matsuza, the original author of Unicode Normalizer.\n\n[![Build Status](https://travis-ci.org/walling/unorm.png?branch=master)](https://travis-ci.org/walling/unorm)\n\n\nInstallation\n------------\n\n```bash\nnpm install unorm\n```\n\nPolyfill\n--------\n\nYou can use this module as a polyfill for [String.prototype.normalize], for example:\n\n```javascript\nconsole.log('æøåäüö'.normalize('NFKD'));\n```\n\nThe module uses some [EcmaScript 5](http://kangax.github.io/es5-compat-table/) features. Other browsers should use a compability shim, e.g. [es5-shim](https://github.com/kriskowal/es5-shim).\n\nFunctions\n---------\n\nThis module exports four functions: `nfc`, `nfd`, `nfkc`, and `nfkd`; one for each Unicode normalization. In the browser the functions are exported in the `unorm` global. In CommonJS environments you just require the module. Functions:\n\n * `unorm.nfd(str)` Canonical Decomposition\n * `unorm.nfc(str)` Canonical Decomposition, followed by Canonical Composition\n * `unorm.nfkd(str)` Compatibility Decomposition\n * `unorm.nfkc(str)` Compatibility Decomposition, followed by Canonical Composition\n\n\nNode.JS example\n---------------\n\nFor a longer example, see `examples` directory.\n\n```javascript\nvar unorm = require('unorm');\n\nvar text =\n 'The \\u212B symbol invented by A. J. \\u00C5ngstr\\u00F6m ' +\n '(1814, L\\u00F6gd\\u00F6, \\u2013 1874) denotes the length ' +\n '10\\u207B\\u00B9\\u2070 m.';\n\nvar combining = /[\\u0300-\\u036F]/g; // Use XRegExp('\\\\p{M}', 'g'); see example.js.\n\nconsole.log('Regular: ' + text);\nconsole.log('NFC: ' + unorm.nfc(text));\nconsole.log('NFD: ' + unorm.nfd(text));\nconsole.log('NFKC: ' + unorm.nfkc(text));\nconsole.log('NFKD: * ' + unorm.nfkd(text).replace(combining, ''));\nconsole.log(' * = Combining characters removed from decomposed form.');\n```\n\n\nRoad map\n--------\n\nAs of November 2013. Longer term:\n\n- Look at possible optimizations (speed primarely, module size secondarily)\n- Adding functions to quick check normalizations: `is_nfc`, `is_nfd`, etc.\n\n\nContributers\n------------\n\n - **Oleg Grenrus** is helping to maintain this library. He cleaned up the code base, fixed JSHint errors, created a test suite and updated the normalization data to Unicode 6.3.\n\n\nDevelopment notes\n-----------------\n\n- [Unicode normalization forms report](http://www.unicode.org/reports/tr15/)\n- Unicode data can be found from http://www.unicode.org/Public/UCD/latest/ucd\n\nTo generate new unicode data, run:\n```sh\ncd src/data/src\njavac UnormNormalizerBuilder.java\njava UnormNormalizerBuilder\n```\nproduced `unormdata.js` contains needed table\n\nExecute `node benchmark/benchmark.js` to run simple benchmarks, if you do any changes which may affect performance.\n\nLicense\n-------\n\nThis project includes the software package **Unicode Normalizer 1.0.0**. The\nsoftware dual licensed under the MIT and GPL licenses. Here is the MIT license:\n\n Copyright (c) 2008-2013 Matsuza <matsuza@gmail.com>, Bjarke Walling <bwp@bwp.dk>\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to\n deal in the Software without restriction, including without limitation the\n rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n sell copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n IN THE SOFTWARE.\n\n\n[Unicode Normalizer]: http://coderepos.org/share/browser/lang/javascript/UnicodeNormalizer\n[String.prototype.normalize]: http://people.mozilla.org/~jorendorff/es6-draft.html#sec-15.5.3.26\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+ssh://git@github.com/walling/unorm.git" "url": "git+ssh://git@github.com/walling/unorm.git"

View File

@ -36,7 +36,7 @@
"_requiredBy": [ "_requiredBy": [
"/plist" "/plist"
], ],
"_resolved": "http://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", "_resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf", "_shasum": "450d4dc9fa70de732762fbd2d4a28981419a0ccf",
"_shrinkwrap": null, "_shrinkwrap": null,
"_spec": "util-deprecate@1.0.2", "_spec": "util-deprecate@1.0.2",
@ -77,7 +77,8 @@
], ],
"name": "util-deprecate", "name": "util-deprecate",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "util-deprecate\n==============\n### The Node.js `util.deprecate()` function with browser support\n\nIn Node.js, this module simply re-exports the `util.deprecate()` function.\n\nIn the web browser (i.e. via browserify), a browser-specific implementation\nof the `util.deprecate()` function is used.\n\n\n## API\n\nA `deprecate()` function is the only thing exposed by this module.\n\n``` javascript\n// setup:\nexports.foo = deprecate(foo, 'foo() is deprecated, use bar() instead');\n\n\n// users see:\nfoo();\n// foo() is deprecated, use bar() instead\nfoo();\nfoo();\n```\n\n\n## License\n\n(The MIT License)\n\nCopyright (c) 2014 Nathan Rajlich <nathan@tootallnate.net>\n\nPermission is hereby granted, free of charge, to any person\nobtaining a copy of this software and associated documentation\nfiles (the \"Software\"), to deal in the Software without\nrestriction, including without limitation the rights to use,\ncopy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the\nSoftware is furnished to do so, subject to the following\nconditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES\nOF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT\nHOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\nFROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\nOTHER DEALINGS IN THE SOFTWARE.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/TooTallNate/util-deprecate.git" "url": "git://github.com/TooTallNate/util-deprecate.git"

3
node_modules/wrappy/package.json generated vendored
View File

@ -85,7 +85,8 @@
], ],
"name": "wrappy", "name": "wrappy",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# wrappy\n\nCallback wrapping utility\n\n## USAGE\n\n```javascript\nvar wrappy = require(\"wrappy\")\n\n// var wrapper = wrappy(wrapperFunction)\n\n// make sure a cb is called only once\n// See also: http://npm.im/once for this specific use case\nvar once = wrappy(function (cb) {\n var called = false\n return function () {\n if (called) return\n called = true\n return cb.apply(this, arguments)\n }\n})\n\nfunction printBoo () {\n console.log('boo')\n}\n// has some rando property\nprintBoo.iAmBooPrinter = true\n\nvar onlyPrintOnce = once(printBoo)\n\nonlyPrintOnce() // prints 'boo'\nonlyPrintOnce() // does nothing\n\n// random property is retained!\nassert.equal(onlyPrintOnce.iAmBooPrinter, true)\n```\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git+https://github.com/npm/wrappy.git" "url": "git+https://github.com/npm/wrappy.git"

View File

@ -35,7 +35,7 @@
"_requiredBy": [ "_requiredBy": [
"/plist" "/plist"
], ],
"_resolved": "http://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz", "_resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-4.0.0.tgz",
"_shasum": "98b8f651ca30aa624036f127d11cc66dc7b907a3", "_shasum": "98b8f651ca30aa624036f127d11cc66dc7b907a3",
"_shrinkwrap": null, "_shrinkwrap": null,
"_spec": "xmlbuilder@4.0.0", "_spec": "xmlbuilder@4.0.0",
@ -83,7 +83,8 @@
], ],
"name": "xmlbuilder", "name": "xmlbuilder",
"optionalDependencies": {}, "optionalDependencies": {},
"readme": "ERROR: No README data found!", "readme": "# xmlbuilder-js\n\nAn XML builder for [node.js](https://nodejs.org/) similar to \n[java-xmlbuilder](https://github.com/jmurty/java-xmlbuilder).\n\n[![License](http://img.shields.io/npm/l/xmlbuilder.svg?style=flat-square)](http://opensource.org/licenses/MIT)\n[![NPM Version](http://img.shields.io/npm/v/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder)\n[![NPM Downloads](https://img.shields.io/npm/dm/xmlbuilder.svg?style=flat-square)](https://npmjs.com/package/xmlbuilder)\n\n[![Build Status](http://img.shields.io/travis/oozcitak/xmlbuilder-js.svg?style=flat-square)](http://travis-ci.org/oozcitak/xmlbuilder-js)\n[![Dependency Status](http://img.shields.io/david/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js)\n[![Dev Dependency Status](http://img.shields.io/david/dev/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://david-dm.org/oozcitak/xmlbuilder-js)\n[![Code Coverage](https://img.shields.io/coveralls/oozcitak/xmlbuilder-js.svg?style=flat-square)](https://coveralls.io/github/oozcitak/xmlbuilder-js)\n\n### Installation:\n\n``` sh\nnpm install xmlbuilder\n```\n\n### Usage:\n\n``` js\nvar builder = require('xmlbuilder');\nvar xml = builder.create('root')\n .ele('xmlbuilder')\n .ele('repo', {'type': 'git'}, 'git://github.com/oozcitak/xmlbuilder-js.git')\n .end({ pretty: true});\n \nconsole.log(xml);\n```\n\nwill result in:\n\n``` xml\n<?xml version=\"1.0\"?>\n<root>\n <xmlbuilder>\n <repo type=\"git\">git://github.com/oozcitak/xmlbuilder-js.git</repo>\n </xmlbuilder>\n</root>\n```\n\nIt is also possible to convert objects into nodes:\n\n``` js\nbuilder.create({\n root: {\n xmlbuilder: {\n repo: {\n '@type': 'git', // attributes start with @\n '#text': 'git://github.com/oozcitak/xmlbuilder-js.git' // text node\n }\n }\n }\n});\n```\n\nIf you need to do some processing:\n\n``` js\nvar root = builder.create('squares');\nroot.com('f(x) = x^2');\nfor(var i = 1; i <= 5; i++)\n{\n var item = root.ele('data');\n item.att('x', i);\n item.att('y', i * i);\n}\n```\n\nThis will result in:\n\n``` xml\n<?xml version=\"1.0\"?>\n<squares>\n <!-- f(x) = x^2 -->\n <data x=\"1\" y=\"1\"/>\n <data x=\"2\" y=\"4\"/>\n <data x=\"3\" y=\"9\"/>\n <data x=\"4\" y=\"16\"/>\n <data x=\"5\" y=\"25\"/>\n</squares>\n```\n\nSee the [wiki](https://github.com/oozcitak/xmlbuilder-js/wiki) for details.\n",
"readmeFilename": "README.md",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "git://github.com/oozcitak/xmlbuilder-js.git" "url": "git://github.com/oozcitak/xmlbuilder-js.git"

22
node_modules/xmldom/package.json generated vendored

File diff suppressed because one or more lines are too long

View File

@ -28,7 +28,7 @@
"author": "Apache Software Foundation", "author": "Apache Software Foundation",
"license": "Apache-2.0", "license": "Apache-2.0",
"dependencies": { "dependencies": {
"cordova-common": "^2.0.1", "cordova-common": "^2.1.0",
"elementtree": "0.1.6", "elementtree": "0.1.6",
"nopt": "^3.0.1", "nopt": "^3.0.1",
"properties-parser": "^0.2.3", "properties-parser": "^0.2.3",