diff --git a/CHANGELOG.md b/CHANGELOG.md index 82b56d1..9033fde 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,25 @@ [![Share via Facebook](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Facebook.png)](https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded"e=vscode-deploy-reloaded) [![Share via Twitter](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Twitter.png)](https://twitter.com/intent/tweet?source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&text=vscode-deploy-reloaded:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&via=mjkloubert) [![Share via Google+](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Google+.png)](https://plus.google.com/share?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded) [![Share via Pinterest](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Pinterest.png)](https://pinterest.com/pin/create/button/?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&media=https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo1.gif&description=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.) [![Share via Reddit](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Reddit.png)](https://www.reddit.com/submit?url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&title=vscode-deploy-reloaded) [![Share via LinkedIn](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/LinkedIn.png)](https://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded&title=vscode-deploy-reloaded&summary=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.&source=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded) [![Share via Wordpress](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Wordpress.png)](https://wordpress.com/press-this.php?u=https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded"e=vscode-deploy-reloaded&s=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20%27vs-deploy%27%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.&i=https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo1.gif) [![Share via Email](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/share/Email.png)](mailto:?subject=vscode-deploy-reloaded&body=Recoded%20version%20of%20Visual%20Studio%20Code%20extension%20'vs-deploy'%2C%20which%20provides%20commands%20to%20deploy%20files%20to%20one%20or%20more%20destinations.:%20https%3A%2F%2Fmarketplace.visualstudio.com%2Fitems%3FitemName%3Dmkloubert.vscode-deploy-reloaded) +## 0.21.0 (January 5th, 2018; copy remote directory to clipboard) + +* can copy directory path to clipboard, when [list of remote directory](https://github.com/mkloubert/vscode-deploy-reloaded#list-remote-files-), now, s. [issue #10](https://github.com/mkloubert/vscode-deploy-reloaded/issues/10) + +![Demo Copy remote directory path to clipboard](https://raw.githubusercontent.com/mkloubert/vscode-deploy-reloaded/master/img/demo14.gif) + +* last remote directory is cached now +* updated [npm packages](https://www.npmjs.com): + * [@slack/client](https://www.npmjs.com/package/@slack/client) to `^3.15.0` + * [aws-sdk](https://www.npmjs.com/package/aws-sdk) to `^2.176.0` + * [azure-storage](https://www.npmjs.com/package/azure-storage) to `^2.7.0` + * [coffeescript](https://www.npmjs.com/package/coffeescript) to `"^2.1.1` + * [dropbox](https://www.npmjs.com/package/dropbox) to `"^2.5.13` + * [fs-extra](https://www.npmjs.com/package/fs-extra) to `^4.0.3` + * [i18next](https://www.npmjs.com/package/i18next) to `^10.2.2` + * [marked](https://www.npmjs.com/package/marked) to `"^0.3.9` + * [moment](https://www.npmjs.com/package/moment) to `"^2.20.1` + * [uglify-js](https://www.npmjs.com/package/uglify-js) to `^3.3.4` + ## 0.20.0 (January 4th, 2018; 'prepare' target operations) * [exec target operation](https://github.com/mkloubert/vscode-deploy-reloaded/wiki/target_operations#exec-) now displays output in output channel by default, s. [issue #6](https://github.com/mkloubert/vscode-deploy-reloaded/issues/6) diff --git a/img/demo14.gif b/img/demo14.gif new file mode 100644 index 0000000..4afbc28 Binary files /dev/null and b/img/demo14.gif differ diff --git a/package-lock.json b/package-lock.json index 9652dfe..d22cd68 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "vscode-deploy-reloaded", - "version": "0.20.0", + "version": "0.21.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -10,9 +10,9 @@ "integrity": "sha1-OD9Faya8lseInwMyB59DWLFsWNw=" }, "@slack/client": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/@slack/client/-/client-3.14.2.tgz", - "integrity": "sha512-Rs95C+yC2cJ81qydH8uH0beH/5wp60aCmX4k0Hj2v1vG4ntjHARyr8Dbeq/G2n9l8dkwdCwDS09KyLEyermmrg==", + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/@slack/client/-/client-3.15.0.tgz", + "integrity": "sha512-MIgf5s9PrcxFaPlkJ2cFOhrfh9/KOmUKK5GG/Eka1IJK7+oBCscJFnQ6FfYnZICwIQxWkkuiXmeWYWNevZhCLg==", "requires": { "async": "1.5.2", "bluebird": "3.5.1", @@ -26,40 +26,6 @@ "url-join": "0.0.1", "winston": "2.4.0", "ws": "1.1.5" - }, - "dependencies": { - "node-uuid": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", - "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" - }, - "request": { - "version": "2.76.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.76.0.tgz", - "integrity": "sha1-vkRQWv73A2CgQ2lVEGvjlF2VVg4=", - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.11.0", - "combined-stream": "1.0.5", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "2.0.6", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.17", - "node-uuid": "1.4.8", - "oauth-sign": "0.8.2", - "qs": "6.3.2", - "stringstream": "0.0.5", - "tough-cookie": "2.3.3", - "tunnel-agent": "0.4.3" - } - } } }, "@types/clean-css": { @@ -68,6 +34,18 @@ "integrity": "sha1-AFLBNvUkgAJCjjY4s33ko5gYZB0=", "dev": true }, + "@types/copy-paste": { + "version": "1.1.30", + "resolved": "https://registry.npmjs.org/@types/copy-paste/-/copy-paste-1.1.30.tgz", + "integrity": "sha1-p9RUyeHkVCMo9/Huz1Mzvoz7UO0=", + "dev": true + }, + "@types/events": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/events/-/events-1.1.0.tgz", + "integrity": "sha512-y3bR98mzYOo0pAZuiLari+cQyiKk3UXRuT45h1RjhfeCzqkjaVsfZJNaxdgtk7/3tzOm1ozLTqEqMP3VbI48jw==", + "dev": true + }, "@types/filesize": { "version": "3.2.15", "resolved": "https://registry.npmjs.org/@types/filesize/-/filesize-3.2.15.tgz", @@ -75,12 +53,12 @@ "dev": true }, "@types/fs-extra": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.5.tgz", - "integrity": "sha512-tIG0GpHum5IFb8Qze/cSv0w/0gNzHB+MUDftTQaxenx46z50g51/MPkNLssLz9+uZLzCDd35bT9qtWOTXZ21Gw==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-4.0.7.tgz", + "integrity": "sha512-BN48b/2F3kL0Ual7tjcHjj0Fl+nuYKtHa0G/xT3Q43HuCpN7rQD5vIx6Aqnl9x10oBI5xMJh8Ly+FQpP205JlA==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/ftp": { @@ -89,17 +67,18 @@ "integrity": "sha1-ZhI4WHuexlPHEla9IThUW+e6c5M=", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/glob": { - "version": "5.0.33", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.33.tgz", - "integrity": "sha512-BcD4yyWz+qmCggaYMSFF0Xn7GkO6tgwm3Fh9Gxk/kQmEU3Z7flQTnVlMyKBUNvXXNTCCyjqK4XT4/2hLd1gQ2A==", + "version": "5.0.34", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.34.tgz", + "integrity": "sha512-sUvpieq+HsWTLdkeOI8Mi8u22Ag3AoGuM3sv+XMP1bKtbaIAHpEA2f52K2mz6vK5PVhTa3bFyRZLZMqTxOo2Cw==", "dev": true, "requires": { - "@types/minimatch": "3.0.1", - "@types/node": "7.0.48" + "@types/events": "1.1.0", + "@types/minimatch": "3.0.3", + "@types/node": "7.0.52" } }, "@types/html-entities": { @@ -109,14 +88,14 @@ "dev": true }, "@types/html-minifier": { - "version": "1.1.30", - "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-1.1.30.tgz", - "integrity": "sha1-OzgXwn3yOSL3taqH7/RbOrk0rsk=", + "version": "1.1.31", + "resolved": "https://registry.npmjs.org/@types/html-minifier/-/html-minifier-1.1.31.tgz", + "integrity": "sha512-L/935PXha1hm+J0A+T7b5+5O/a/tUbLuTWvK379a2G2b9wHy/TJZtIm61GwxWphsiqzODseZHaMvvykQZEFzhg==", "dev": true, "requires": { "@types/clean-css": "3.4.30", "@types/relateurl": "0.2.28", - "@types/uglify-js": "2.6.29" + "@types/uglify-js": "2.6.30" } }, "@types/i18next": { @@ -131,7 +110,7 @@ "integrity": "sha512-jkZatu4QVbR60mpIzjINmtS1ZF4a/FqdTUTBeQDVOQ2PYyidtwFKr0B5G6ERukKwliq+7mIXvxyppwzG5EgRYg==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/less": { @@ -153,15 +132,15 @@ "dev": true }, "@types/minimatch": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.1.tgz", - "integrity": "sha512-rUO/jz10KRSyA9SHoCWQ8WX9BICyj5jZYu1/ucKEJKb4KzLZCKMURdYbadP157Q6Zl1x0vHsrU+Z/O0XlhYQDw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", + "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, "@types/mocha": { - "version": "2.2.44", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.44.tgz", - "integrity": "sha512-k2tWTQU8G4+iSMvqKi0Q9IIsWAp/n8xzdZS4Q4YVIltApoMA00wFBFdlJnmoaK1/z7B0Cy0yPe6GgXteSmdUNw==", + "version": "2.2.46", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.46.tgz", + "integrity": "sha512-fwTTP5QLf4xHMkv7ovcKvmlLWX3GrxCa5DRQDOilVyYGCp+arZTAQJCy7/4GKezzYJjfWMpB/Cy4e8nrc9XioA==", "dev": true }, "@types/moment-timezone": { @@ -170,7 +149,7 @@ "integrity": "sha512-FdnK7nZZXkSDO2InIBociTYbsEOLN/NijlNevFcB1vexHuh9lRGwdbClTQAI3eH1clJmwdQ7Q+jOSv9H3EJTJw==", "dev": true, "requires": { - "moment": "2.19.3" + "moment": "2.20.1" } }, "@types/mssql": { @@ -179,7 +158,7 @@ "integrity": "sha512-59tGR0k2cygPsK1zxFi6zdCRHfriLWQ7Prsk+LMYXdkFq/4hw3KgcMIOlprGPz+mqIQr8LukV1GYPHK+PQ4EEw==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/mysql": { @@ -188,13 +167,13 @@ "integrity": "sha512-5U5pYZd+UMGfDJfmNLYJ6+PBEfjZbHqd0kzDDItFPB2COPmFmlmMsV6t6om/loorx1XMWY3rYTQn7wLipmt4JA==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/node": { - "version": "7.0.48", - "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.48.tgz", - "integrity": "sha512-LLlXafM3BD52MH056tHxTXO8JFCnpJJQkdzIU3+m8ew+CXJY/5zIXgDNb4TK/QFvlI8QexLS5tL+sE0Qhegr1w==", + "version": "7.0.52", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.52.tgz", + "integrity": "sha512-jjpyQsKGsOF/wUElNjfPULk+d8PKvJOIXk3IUeBYYmNCy5dMWfrI+JiixYNw8ppKOlcRwWTXFl0B+i5oGrf95Q==", "dev": true }, "@types/nodemailer": { @@ -203,7 +182,7 @@ "integrity": "sha512-6Y+W44okdSco6w3zhahnwJXbONrCrfgi0LnF/aQAdHFnrel4VYwfF0u81NNKHTbweKacu2TVDv/2BIZhgutxIA==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/public-ip": { @@ -230,19 +209,13 @@ "integrity": "sha1-uqGPXOQzD8uz6nti9lVQlj2aqgc=", "dev": true }, - "@types/source-map": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/source-map/-/source-map-0.5.2.tgz", - "integrity": "sha512-++w4WmMbk3dS3UeHGzAG+xJOSz5Xqtjys/TBkqG3qp3SeWE7Wwezqe5eB7B51cxUyh4PW7bwVotpsLdBK0D8cw==", - "dev": true - }, "@types/ssh2": { "version": "0.5.35", "resolved": "https://registry.npmjs.org/@types/ssh2/-/ssh2-0.5.35.tgz", "integrity": "sha1-1uYNWbf8ItsQq/RzCqdEi6vefjs=", "dev": true, "requires": { - "@types/node": "7.0.48", + "@types/node": "7.0.52", "@types/ssh2-streams": "0.1.2" } }, @@ -261,7 +234,7 @@ "integrity": "sha1-eqGLjCRQ8XaZ6eoYp278g4GI1Y0=", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "@types/tmp": { @@ -271,12 +244,12 @@ "dev": true }, "@types/uglify-js": { - "version": "2.6.29", - "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-2.6.29.tgz", - "integrity": "sha512-BdFLCZW0GTl31AbqXSak8ss/MqEZ3DN2MH9rkAyGoTuzK7ifGUlX+u0nfbWeTsa7IPcZhtn8BlpYBXSV+vqGhQ==", + "version": "2.6.30", + "resolved": "https://registry.npmjs.org/@types/uglify-js/-/uglify-js-2.6.30.tgz", + "integrity": "sha512-NjiBNGFl58vHJeijl63w1fWRIjLnrfOvimsXF5b3lTzEzkTV1BnVsbqQeLejg54upsHPWIF63aiub5TEwH619A==", "dev": true, "requires": { - "@types/source-map": "0.5.2" + "source-map": "0.6.1" } }, "@types/uuid": { @@ -285,7 +258,7 @@ "integrity": "sha512-5fRLCYhLtDb3hMWqQyH10qtF+Ud2JnNCXTCZ+9ktNdCcgslcuXkDTkFcJNk++MT29yDntDnlF1+jD+uVGumsbw==", "dev": true, "requires": { - "@types/node": "7.0.48" + "@types/node": "7.0.52" } }, "acorn": { @@ -325,15 +298,12 @@ } }, "ajv": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.0.tgz", - "integrity": "sha1-6yhAdG6dxIvV4GOjbj/UAMXqtak=", - "dev": true, + "version": "4.11.8", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", + "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", "requires": { "co": "4.6.0", - "fast-deep-equal": "1.0.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "json-stable-stringify": "1.0.1" } }, "align-text": { @@ -351,6 +321,33 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" }, + "ansi-cyan": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-cyan/-/ansi-cyan-0.1.1.tgz", + "integrity": "sha1-U4rlKK+JgvKK4w2G8vF0VtJgmHM=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-gray": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz", + "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, + "ansi-red": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ansi-red/-/ansi-red-0.1.1.tgz", + "integrity": "sha1-jGOPnRCAgAo1PJwoyKgcpHBdlGw=", + "dev": true, + "requires": { + "ansi-wrap": "0.1.0" + } + }, "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", @@ -361,13 +358,20 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "ansi-wrap": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz", + "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=", + "dev": true + }, "arr-diff": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-1.1.0.tgz", + "integrity": "sha1-aHwydYFjWI/vfeezb6vklesaOZo=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "1.1.0", + "array-slice": "0.2.3" } }, "arr-flatten": { @@ -387,6 +391,12 @@ "integrity": "sha1-7/UuN1gknTO+QCuLuOVkuytdQDE=", "dev": true }, + "array-slice": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-0.2.3.tgz", + "integrity": "sha1-3Tz7gO15c6dRF82sabC5nshhhvU=", + "dev": true + }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", @@ -445,9 +455,9 @@ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "aws-sdk": { - "version": "2.165.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.165.0.tgz", - "integrity": "sha1-Sub3MRHD6DrLcPraxXkcSJK4TT0=", + "version": "2.176.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.176.0.tgz", + "integrity": "sha1-JyPBThxiOsRcW4kKP8c27ugIX2c=", "requires": { "buffer": "4.9.1", "crypto-browserify": "1.0.9", @@ -472,9 +482,9 @@ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=" }, "azure-storage": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.6.0.tgz", - "integrity": "sha1-hHR+5UpL0ZS7lg+J8+/4nWes8c8=", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/azure-storage/-/azure-storage-2.7.0.tgz", + "integrity": "sha1-EGw18LpsVR+Si9OUwCbkTQQB/88=", "requires": { "browserify-mime": "1.2.9", "extend": "1.2.1", @@ -489,15 +499,6 @@ "xmlbuilder": "0.4.3" }, "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - }, "caseless": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", @@ -508,11 +509,6 @@ "resolved": "https://registry.npmjs.org/extend/-/extend-1.2.1.tgz", "integrity": "sha1-oPX9bPyDpf5J72mNYOyKYk3UV2w=" }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" - }, "har-validator": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", @@ -522,11 +518,6 @@ "har-schema": "1.0.5" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" - }, "qs": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", @@ -847,9 +838,9 @@ } }, "clone": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", - "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", + "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", "dev": true }, "clone-buffer": { @@ -901,9 +892,15 @@ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=" }, "coffeescript": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.1.0.tgz", - "integrity": "sha512-RuEF4gFUV9QSFPREl8gx6w0vS6Ncnr0Nd71lOmxSHfKQFQI66meE54Y636TACbe55j2Lwi6R1O8lOa0dD550GA==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-2.1.1.tgz", + "integrity": "sha512-Tl2z6/rNMqJ2LqWlVxLKwLF9FniwJpweonfSLCwhX8NFCEsGBcFIErtfKd8+t4XHDSYRshj9FXxPX53BT3lC9w==" + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true }, "colors": { "version": "1.0.3", @@ -958,6 +955,15 @@ "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=" }, + "copy-paste": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-paste/-/copy-paste-1.3.0.tgz", + "integrity": "sha1-p+bEocKP3t8rCB5yuX3y75X0ce0=", + "requires": { + "iconv-lite": "0.4.19", + "sync-exec": "0.6.2" + } + }, "core-js": { "version": "2.5.3", "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.3.tgz", @@ -1101,13 +1107,13 @@ "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" }, "dropbox": { - "version": "2.5.12", - "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-2.5.12.tgz", - "integrity": "sha1-nwC7g10ZjAQQaqYL8mL18ks770I=", + "version": "2.5.13", + "resolved": "https://registry.npmjs.org/dropbox/-/dropbox-2.5.13.tgz", + "integrity": "sha1-VGwTDh2Ff3gDXN0mUIVK1SBukHM=", "requires": { - "es6-promise": "4.1.1", - "mime": "2.0.3", - "superagent": "3.8.1", + "es6-promise": "4.2.2", + "mime": "2.2.0", + "superagent": "3.8.2", "superagent-proxy": "1.0.2" } }, @@ -1196,16 +1202,16 @@ } }, "es6-promise": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.1.1.tgz", - "integrity": "sha512-OaU1hHjgJf+b0NzsxCg7NdIYERD6Hy/PEmFLTjw+b65scuisG3Kt4QoTvJ66BBkPZ581gr0kpoVzKnxniM8nng==" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.2.tgz", + "integrity": "sha512-LSas5vsuA6Q4nEdf9wokY5/AJYXry98i0IzXsv49rYsgDGDNDPbqAYR1Pe23iFxygfbGZNR/5VrHXBCh2BhvUQ==" }, "es6-promisify": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", "requires": { - "es6-promise": "4.1.1" + "es6-promise": "4.2.2" } }, "escape-string-regexp": { @@ -1297,12 +1303,20 @@ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=" }, "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-1.1.4.tgz", + "integrity": "sha1-Gda/lN/AnXa6cR85uHLSH/TdkHE=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "kind-of": "1.1.0" + }, + "dependencies": { + "kind-of": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-1.1.0.tgz", + "integrity": "sha1-FAo9LUGjbS78+pN3tiwk+ElaXEQ=", + "dev": true + } } }, "extglob": { @@ -1333,12 +1347,13 @@ "integrity": "sha1-Ys8SAjTGg3hdkCNIqADvPgzCC8A=" }, "fancy-log": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.0.tgz", - "integrity": "sha1-Rb4X0Cu5kX1gzP/UmVyZnmyMmUg=", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.2.tgz", + "integrity": "sha1-9BEl49hPLn2JpD0G2VjI94vha+E=", "dev": true, "requires": { - "chalk": "1.1.3", + "ansi-gray": "0.1.1", + "color-support": "1.1.3", "time-stamp": "1.1.0" } }, @@ -1452,9 +1467,9 @@ } }, "fs-extra": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.2.tgz", - "integrity": "sha1-+RcExT0bRh+JNFKwwwfZmXZHq2s=", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", "requires": { "graceful-fs": "4.1.11", "jsonfile": "4.0.0", @@ -1792,14 +1807,14 @@ } }, "gulp-filter": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.0.1.tgz", - "integrity": "sha512-5olRzAhFdXB2klCu1lnazP65aO9YdA/5WfC9VdInIc8PrUeDIoZfaA3Edb0yUBGhVdHv4eHKL9Fg5tUoEJ9z5A==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/gulp-filter/-/gulp-filter-5.1.0.tgz", + "integrity": "sha1-oF4Rr/sHz33PQafeHLe2OsN4PnM=", "dev": true, "requires": { - "gulp-util": "3.0.8", "multimatch": "2.1.0", - "streamfilter": "1.0.5" + "plugin-error": "0.1.2", + "streamfilter": "1.0.7" } }, "gulp-gunzip": { @@ -1812,12 +1827,6 @@ "vinyl": "0.4.6" }, "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, "isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", @@ -1851,16 +1860,6 @@ "readable-stream": "1.0.34", "xtend": "4.0.1" } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } } } }, @@ -1877,18 +1876,18 @@ "vinyl": "2.0.2" }, "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, "clone-stats": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", "dev": true }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "request": { "version": "2.79.0", "resolved": "https://registry.npmjs.org/request/-/request-2.79.0.tgz", @@ -1947,6 +1946,18 @@ "vinyl": "1.2.0" }, "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, "vinyl": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", @@ -1996,7 +2007,7 @@ "beeper": "1.1.1", "chalk": "1.1.3", "dateformat": "2.2.0", - "fancy-log": "1.3.0", + "fancy-log": "1.3.2", "gulplog": "1.0.0", "has-gulplog": "0.1.0", "lodash._reescape": "3.0.0", @@ -2009,6 +2020,37 @@ "replace-ext": "0.0.1", "through2": "2.0.3", "vinyl": "0.5.3" + }, + "dependencies": { + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "object-assign": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", + "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "dev": true + }, + "vinyl": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", + "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "dev": true, + "requires": { + "clone": "1.0.3", + "clone-stats": "0.0.1", + "replace-ext": "0.0.1" + } + } } }, "gulp-vinyl-zip": { @@ -2047,12 +2089,6 @@ "inherits": "2.0.3" } }, - "replace-ext": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", - "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", - "dev": true - }, "vinyl": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", @@ -2079,10 +2115,9 @@ } }, "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", + "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=" }, "har-validator": { "version": "2.0.6", @@ -2091,7 +2126,7 @@ "requires": { "chalk": "1.1.3", "commander": "2.12.2", - "is-my-json-valid": "2.16.1", + "is-my-json-valid": "2.17.1", "pinkie-promise": "2.0.1" } }, @@ -2292,9 +2327,9 @@ } }, "i18next": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-10.2.1.tgz", - "integrity": "sha512-7h/ILxepsAjQCMabPvevDZcn+Nxc4/5v52NkMtrzgVOe14BGlGQDs2ygRPki+45VFmRsz2e/In6veRIKQEBGkQ==" + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-10.2.2.tgz", + "integrity": "sha512-sWazkOEWjPxfcFEATDaZsHNkIbcCTFzee+qNoJyBWl1jHz0Haabhfk+/j2KVrZcDp2v7tZ9FDSUj3kh6G/IF0Q==" }, "iconv-lite": { "version": "0.4.19", @@ -2416,9 +2451,9 @@ } }, "is-my-json-valid": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz", - "integrity": "sha512-ochPsqWS1WXj8ZnMIV0vnNXooaMhp7cyL4FMSIPKTtnV0Ha/T19G2b9kkhcNsabV9bxYkze7/aLZJb/bYuFduQ==", + "version": "2.17.1", + "resolved": "https://registry.npmjs.org/is-my-json-valid/-/is-my-json-valid-2.17.1.tgz", + "integrity": "sha512-Q2khNw+oBlWuaYvEEHtKSw/pCxD2L5Rc1C+UQme9X6JdRDh7m5D7HkozA0qa3DUkQ6VzCnEm8mVIQPyIRkI5sQ==", "requires": { "generate-function": "2.0.0", "generate-object-property": "1.2.0", @@ -2999,9 +3034,9 @@ "dev": true }, "marked": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.7.tgz", - "integrity": "sha512-zBEP4qO1YQp5aXHt8S5wTiOv9i2X74V/LQL0zhUNvVaklt6Ywa6lChxIvS+ibYlCGgADwKwZFhjC3+XfpsvQvQ==" + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.9.tgz", + "integrity": "sha512-nW5u0dxpXxHfkHzzrveY45gCbi+R4PaO4WRZYqZNl+vB0hVGeqlFn0aOg1c8AKL63TrNFn9Bm2UP4AdiZ9TPLw==" }, "md5.js": { "version": "1.3.4", @@ -3058,6 +3093,15 @@ "regex-cache": "0.4.4" }, "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", @@ -3076,9 +3120,9 @@ } }, "mime": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.0.3.tgz", - "integrity": "sha512-TrpAd/vX3xaLPDgVRm6JkZwLR0KHfukMdU2wTEbqMDdCnY6Yo3mE+mjs9YE6oMNw2QRfXVeBEYpmpO94BIqiug==" + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz", + "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==" }, "mime-db": { "version": "1.30.0", @@ -3144,9 +3188,9 @@ } }, "mocha": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.0.1.tgz", - "integrity": "sha512-evDmhkoA+cBNiQQQdSKZa2b9+W2mpLoj50367lhy+Klnx9OV8XlCIhigUnn1gaTFLQCa0kdNhEGDr0hCXOQFDw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-4.1.0.tgz", + "integrity": "sha512-0RVnjg1HJsXY2YFDoTNzcc1NKhYuXKRrBAG2gDygmJJA136Cs2QlRliZG1mA0ap7cuaT30mw16luAeln+4RiNA==", "dev": true, "requires": { "browser-stdout": "1.3.0", @@ -3179,16 +3223,16 @@ } }, "moment": { - "version": "2.19.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.19.3.tgz", - "integrity": "sha1-vbmdJw1tf9p4zA+6zoVeJ/59pp8=" + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.20.1.tgz", + "integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg==" }, "moment-timezone": { "version": "0.5.14", "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", "requires": { - "moment": "2.19.3" + "moment": "2.20.1" } }, "ms": { @@ -3337,9 +3381,9 @@ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=" }, "object-assign": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", - "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "dev": true }, "object.omit": { @@ -3551,10 +3595,9 @@ "dev": true }, "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", + "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=" }, "pify": { "version": "3.0.0", @@ -3579,6 +3622,27 @@ "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", "integrity": "sha1-tUGO8EOd5UJfxJlQQtztFPsqhP8=" }, + "plugin-error": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-0.1.2.tgz", + "integrity": "sha1-O5uzM1zPAPQl4HQ34ZJ2ln2kes4=", + "dev": true, + "requires": { + "ansi-cyan": "0.1.1", + "ansi-red": "0.1.1", + "arr-diff": "1.1.0", + "arr-union": "2.1.0", + "extend-shallow": "1.1.4" + }, + "dependencies": { + "arr-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-2.1.0.tgz", + "integrity": "sha1-IPnqtexw9cfSFbEHexw5Fh0pLH0=", + "dev": true + } + } + }, "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", @@ -3964,161 +4028,42 @@ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" }, "replace-ext": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", - "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", "dev": true }, "request": { - "version": "2.83.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", - "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", - "dev": true, + "version": "2.76.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.76.0.tgz", + "integrity": "sha1-vkRQWv73A2CgQ2lVEGvjlF2VVg4=", "requires": { - "aws-sign2": "0.7.0", + "aws-sign2": "0.6.0", "aws4": "1.6.0", - "caseless": "0.12.0", + "caseless": "0.11.0", "combined-stream": "1.0.5", "extend": "3.0.1", "forever-agent": "0.6.1", - "form-data": "2.3.1", - "har-validator": "5.0.3", - "hawk": "6.0.2", - "http-signature": "1.2.0", + "form-data": "2.1.4", + "har-validator": "2.0.6", + "hawk": "3.1.3", + "http-signature": "1.1.1", "is-typedarray": "1.0.0", "isstream": "0.1.2", "json-stringify-safe": "5.0.1", "mime-types": "2.1.17", + "node-uuid": "1.4.8", "oauth-sign": "0.8.2", - "performance-now": "2.1.0", - "qs": "6.5.1", - "safe-buffer": "5.1.1", + "qs": "6.3.2", "stringstream": "0.0.5", "tough-cookie": "2.3.3", - "tunnel-agent": "0.6.0", - "uuid": "3.1.0" + "tunnel-agent": "0.4.3" }, "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true - }, - "boom": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", - "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, - "cryptiles": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", - "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", - "dev": true, - "requires": { - "boom": "5.2.0" - }, - "dependencies": { - "boom": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", - "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - } - } - }, - "form-data": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", - "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.5", - "mime-types": "2.1.17" - } - }, - "har-validator": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", - "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", - "dev": true, - "requires": { - "ajv": "5.5.0", - "har-schema": "2.0.0" - } - }, - "hawk": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", - "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", - "dev": true, - "requires": { - "boom": "4.3.1", - "cryptiles": "3.1.2", - "hoek": "4.2.0", - "sntp": "2.1.0" - } - }, - "hoek": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", - "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", - "dev": true - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, - "qs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", - "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", - "dev": true - }, - "sntp": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", - "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", - "dev": true, - "requires": { - "hoek": "4.2.0" - } - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } + "node-uuid": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.8.tgz", + "integrity": "sha1-sEDrCSOWivq/jTL7HxfxFn/auQc=" } } }, @@ -4379,9 +4324,9 @@ "dev": true }, "streamfilter": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.5.tgz", - "integrity": "sha1-h1BxEb644phFFxe1Ec/tjwAqv1M=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/streamfilter/-/streamfilter-1.0.7.tgz", + "integrity": "sha512-Gk6KZM+yNA1JpW0KzlZIhjo3EaBJDkYfXtYSbOwNIQ7Zd6006E6+sCFlW1NDvFG/vnXhKmw6TJJgiEQg/8lXfQ==", "dev": true, "requires": { "readable-stream": "2.3.3" @@ -4444,9 +4389,9 @@ } }, "superagent": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.1.tgz", - "integrity": "sha512-VMBFLYgFuRdfeNQSMLbxGSLfmXL/xc+OO+BZp41Za/NRDBet/BNbkRJrYzCUu0u4GU0i/ml2dtT8b9qgkw9z6Q==", + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-3.8.2.tgz", + "integrity": "sha512-gVH4QfYHcY3P0f/BZzavLreHW3T1v7hG9B+hpMQotGQqurOvhv87GcMCd6LWySmBuf+BDR44TQd0aISjVHLeNQ==", "requires": { "component-emitter": "1.2.1", "cookiejar": "2.1.1", @@ -4506,6 +4451,12 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=" }, + "sync-exec": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/sync-exec/-/sync-exec-0.6.2.tgz", + "integrity": "sha1-cX0izFPwzh3vVZQ2LzqJouu5EQU=", + "optional": true + }, "tar": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", @@ -4586,6 +4537,17 @@ "dev": true, "requires": { "extend-shallow": "2.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "0.1.1" + } + } } }, "token-stream": { @@ -4635,9 +4597,9 @@ "dev": true }, "uglify-js": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.2.2.tgz", - "integrity": "sha512-++1NO/zZIEdWf6cDIGceSJQPX31SqIpbVAHwFG5+240MtZqPG/NIPoinj8zlXQtAfMBqEt1Jyv2FiLP3n9gVhQ==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.3.4.tgz", + "integrity": "sha512-hfIwuAQI5dlXP30UtdmWoYF9k+ypVqBXIdmd6ZKBiaNHHvA8ty7ZloMe3+7S5AEKVkxHbjByl4DfRHQ7QpZquw==", "requires": { "commander": "2.12.2", "source-map": "0.6.1" @@ -4777,14 +4739,13 @@ } }, "vinyl": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", - "integrity": "sha1-sEVbOPxeDPMNQyUTLkYZcMIJHN4=", + "version": "0.4.6", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", + "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", "dev": true, "requires": { - "clone": "1.0.3", - "clone-stats": "0.0.1", - "replace-ext": "0.0.1" + "clone": "0.2.0", + "clone-stats": "0.0.1" } }, "vinyl-fs": { @@ -4812,10 +4773,16 @@ "vinyl": "1.2.0" }, "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "clone": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.3.tgz", + "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", + "dev": true + }, + "replace-ext": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz", + "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, "vinyl": { @@ -4832,65 +4799,13 @@ } }, "vinyl-source-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.0.tgz", - "integrity": "sha1-RMvlEIIFJ53rDFZTwJSiiHk4sas=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vinyl-source-stream/-/vinyl-source-stream-1.1.2.tgz", + "integrity": "sha1-YrU6E1YQqJbpjKlr7jqH8Aio54A=", "dev": true, "requires": { - "through2": "0.6.5", + "through2": "2.0.3", "vinyl": "0.4.6" - }, - "dependencies": { - "clone": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/clone/-/clone-0.2.0.tgz", - "integrity": "sha1-xhJqkK1Pctv1rNskPMN3JP6T/B8=", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", - "dev": true - }, - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "0.0.1", - "string_decoder": "0.10.31" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", - "dev": true, - "requires": { - "readable-stream": "1.0.34", - "xtend": "4.0.1" - } - }, - "vinyl": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.4.6.tgz", - "integrity": "sha1-LzVsh6VQolVGHza76ypbqL94SEc=", - "dev": true, - "requires": { - "clone": "0.2.0", - "clone-stats": "0.0.1" - } - } } }, "void-elements": { @@ -4899,25 +4814,202 @@ "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" }, "vscode": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.9.tgz", - "integrity": "sha512-xhSh410NntYViiBYIPimAwF0U6NZgORtqQenlpTI/qKBGwHMtZSCJcL3/JIhfCw43HBXqPg59kA947OT3UvZKQ==", + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/vscode/-/vscode-1.1.10.tgz", + "integrity": "sha512-MvFXXSGuhw0Q6GC6dQrnRc0ES+63wpttGIoYGBMQnoS9JFCCNC/rWfX0lBCHJyuKL2Q8CYg0ROsMEHbHVwEtVw==", "dev": true, "requires": { "glob": "7.1.2", "gulp-chmod": "2.0.0", - "gulp-filter": "5.0.1", + "gulp-filter": "5.1.0", "gulp-gunzip": "1.0.0", "gulp-remote-src": "0.4.3", "gulp-symdest": "1.1.0", "gulp-untar": "0.0.6", "gulp-vinyl-zip": "2.1.0", - "mocha": "4.0.1", + "mocha": "4.1.0", "request": "2.83.0", "semver": "5.4.1", "source-map-support": "0.5.0", "url-parse": "1.2.0", - "vinyl-source-stream": "1.1.0" + "vinyl-source-stream": "1.1.2" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.1.0" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } } }, "window-size": { diff --git a/package.json b/package.json index b12392b..ee59d9c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "vscode-deploy-reloaded", "displayName": "Deploy (Reloaded)", "description": "Deploys files of a workspace to a destination.", - "version": "0.20.0", + "version": "0.21.0", "publisher": "mkloubert", "engines": { "vscode": "^1.19.0" @@ -54539,23 +54539,24 @@ "test": "npm run compile && node ./node_modules/vscode/bin/test" }, "devDependencies": { + "@types/copy-paste": "^1.1.30", "@types/filesize": "^3.2.15", - "@types/fs-extra": "^4.0.5", + "@types/fs-extra": "^4.0.7", "@types/ftp": "^0.3.29", - "@types/glob": "^5.0.33", + "@types/glob": "^5.0.34", "@types/html-entities": "^1.2.16", - "@types/html-minifier": "^1.1.30", + "@types/html-minifier": "^1.1.31", "@types/i18next": "^8.4.2", "@types/is-stream": "^1.1.0", "@types/less": "0.0.32", "@types/marked": "^0.3.0", "@types/mime-types": "^2.1.0", - "@types/minimatch": "^3.0.1", - "@types/mocha": "^2.2.42", + "@types/minimatch": "^3.0.3", + "@types/mocha": "^2.2.46", "@types/moment-timezone": "^0.5.3", "@types/mssql": "^4.0.6", "@types/mysql": "^2.15.2", - "@types/node": "^7.0.43", + "@types/node": "^7.0.52", "@types/nodemailer": "^4.3.1", "@types/public-ip": "^2.3.0", "@types/pug": "^2.0.4", @@ -54564,7 +54565,7 @@ "@types/tmp": "0.0.33", "@types/uuid": "^3.4.3", "typescript": "^2.6.1", - "vscode": "^1.1.6" + "vscode": "^1.1.10" }, "icon": "icon.png", "badges": [ @@ -54586,29 +54587,30 @@ }, "readmeFilename": "README.md", "dependencies": { - "@slack/client": "^3.14.2", - "aws-sdk": "^2.165.0", - "azure-storage": "^2.6.0", - "coffeescript": "^2.1.0", + "@slack/client": "^3.15.0", + "aws-sdk": "^2.176.0", + "azure-storage": "^2.7.0", + "coffeescript": "^2.1.1", "compare-versions": "^3.1.0", - "dropbox": "^2.5.12", + "copy-paste": "^1.3.0", + "dropbox": "^2.5.13", "filesize": "^3.5.11", - "fs-extra": "^4.0.2", + "fs-extra": "^4.0.3", "ftp": "^0.3.10", "glob": "^7.1.2", "hexy": "^0.2.10", "html-entities": "^1.2.1", "html-minifier": "^3.5.8", - "i18next": "^10.2.1", + "i18next": "^10.2.2", "is-stream": "^1.1.0", "isbinaryfile": "^3.0.2", "jsftp": "^2.1.2", "less": "^2.7.3", - "marked": "^0.3.7", + "marked": "^0.3.9", "merge-deep": "^3.0.0", "mime-types": "^2.1.17", "minimatch": "^3.0.4", - "moment": "^2.19.3", + "moment": "^2.20.1", "moment-timezone": "^0.5.14", "mssql": "^4.1.0", "mysql": "^2.15.0", @@ -54623,7 +54625,7 @@ "sanitize-filename": "^1.6.1", "ssh2-sftp-client": "^2.0.1", "tmp": "0.0.33", - "uglify-js": "^3.2.2", + "uglify-js": "^3.3.4", "uuid": "^3.1.0" } } diff --git a/src/clients/azureblob.ts b/src/clients/azureblob.ts index ce08c86..9feb281 100644 --- a/src/clients/azureblob.ts +++ b/src/clients/azureblob.ts @@ -205,6 +205,7 @@ export class AzureBlobClient extends deploy_clients.AsyncFileListBase { let existingDir = DIRS_ALREADY_ADDED[DIR]; if (!existingDir) { const DI: deploy_files.DirectoryInfo = { + //TODO: exportPath: false, name: DIR, path: path, type: deploy_files.FileSystemType.Directory, @@ -223,6 +224,7 @@ export class AzureBlobClient extends deploy_clients.AsyncFileListBase { path + '/' + NAME_WITHOUT_PATH ); }, + //TODO: exportPath: false, name: NAME_WITHOUT_PATH, path: path, size: parseInt( deploy_helpers.toStringSafe(R.contentLength).trim() ), diff --git a/src/clients/dropbox.ts b/src/clients/dropbox.ts index 0d0650f..6ba14cd 100644 --- a/src/clients/dropbox.ts +++ b/src/clients/dropbox.ts @@ -115,6 +115,7 @@ export class DropBoxClient extends deploy_clients.AsyncFileListBase { ) ); }, + //TODO: exportPath: false, name: ENTRY.name, path: normalizePath(path), size: ENTRY.size, @@ -129,6 +130,7 @@ export class DropBoxClient extends deploy_clients.AsyncFileListBase { case 'folder': { const DI: deploy_files.DirectoryInfo = { + //TODO: exportPath: false, name: ENTRY.name, path: normalizePath(path), type: deploy_files.FileSystemType.Directory, @@ -141,6 +143,7 @@ export class DropBoxClient extends deploy_clients.AsyncFileListBase { default: { const FSI: deploy_files.FileSystemInfo = { + //TODO: exportPath: false, name: ENTRY.name, path: normalizePath(path), }; diff --git a/src/clients/ftp.ts b/src/clients/ftp.ts index a2eae29..b053f5a 100644 --- a/src/clients/ftp.ts +++ b/src/clients/ftp.ts @@ -418,10 +418,11 @@ class FtpClient extends FTPClientBase { } } }, - time: time, + //TODO: exportPath: false, name: ITEM.name, path: dir, size: size, + time: time, type: deploy_files.FileSystemType.File, }; @@ -433,9 +434,10 @@ class FtpClient extends FTPClientBase { // folder { const DI: deploy_files.DirectoryInfo = { - time: time, + //TODO: exportPath: false, name: ITEM.name, path: dir, + time: time, type: deploy_files.FileSystemType.Directory, }; @@ -447,6 +449,7 @@ class FtpClient extends FTPClientBase { // unknown { const FSI: deploy_files.FileSystemInfo = { + //TODO: exportPath: false, time: time, name: ITEM.name, path: dir, @@ -777,10 +780,11 @@ class JsFTPClient extends FTPClientBase { } } }, - time: time, + //TODO: exportPath: false, name: ITEM.name, path: dir, size: size, + time: time, type: deploy_files.FileSystemType.File, }; @@ -792,9 +796,10 @@ class JsFTPClient extends FTPClientBase { // folder { const DI: deploy_files.DirectoryInfo = { - time: time, + //TODO: exportPath: false, name: ITEM.name, path: dir, + time: time, type: deploy_files.FileSystemType.Directory, }; @@ -806,9 +811,10 @@ class JsFTPClient extends FTPClientBase { // unknown { const FSI: deploy_files.FileSystemInfo = { - time: time, + //TODO: exportPath: false, name: ITEM.name, path: dir, + time: time, }; newFSIItem = FSI; diff --git a/src/clients/s3bucket.ts b/src/clients/s3bucket.ts index 74b0eb8..d956a6d 100644 --- a/src/clients/s3bucket.ts +++ b/src/clients/s3bucket.ts @@ -391,6 +391,7 @@ export class S3BucketClient extends deploy_clients.AsyncFileListBase { let existingDir = DIRS_ALREADY_ADDED[DIR]; if (!existingDir) { const DI: deploy_files.DirectoryInfo = { + //TODO: exportPath: false, name: DIR, path: path, type: deploy_files.FileSystemType.Directory, @@ -409,6 +410,7 @@ export class S3BucketClient extends deploy_clients.AsyncFileListBase { path + '/' + KEY_WITHOUT_PATH ); }, + //TODO: exportPath: false, name: KEY_WITHOUT_PATH, path: path, size: O.Size, diff --git a/src/clients/sftp.ts b/src/clients/sftp.ts index 7b97e15..e89848e 100644 --- a/src/clients/sftp.ts +++ b/src/clients/sftp.ts @@ -227,6 +227,7 @@ export class SFTPClient extends deploy_clients.AsyncFileListBase { if ('d' === FI.type) { RESULT.push( { + //TODO: exportPath: false, name: FI.name, path: normalizePath(path), size: FI.size, @@ -256,6 +257,7 @@ export class SFTPClient extends deploy_clients.AsyncFileListBase { } } }, + //TODO: exportPath: false, name: FI.name, path: normalizePath(path), size: FI.size, @@ -268,6 +270,7 @@ export class SFTPClient extends deploy_clients.AsyncFileListBase { else { RESULT.push( { + //TODO: exportPath: false, name: FI.name, path: normalizePath(path), size: FI.size, diff --git a/src/clients/slack.ts b/src/clients/slack.ts index 22e139b..a945f72 100644 --- a/src/clients/slack.ts +++ b/src/clients/slack.ts @@ -85,6 +85,7 @@ export class SlackClient extends deploy_clients.AsyncFileListBase { return await deploy_http.readBody(RESPONSE); }, + //TODO: exportPath: false, internal_name: obj.id, name: obj.name, path: path, @@ -237,6 +238,7 @@ export class SlackClient extends deploy_clients.AsyncFileListBase { } const DI: deploy_files.DirectoryInfo = { + //TODO: exportPath: false, icon: 'book', internal_name: CHANNEL.id, name: CHANNEL.name, diff --git a/src/files.ts b/src/files.ts index 32de4ec..c8fb3c0 100644 --- a/src/files.ts +++ b/src/files.ts @@ -15,9 +15,21 @@ * along with this program. If not, see . */ +import * as deploy_helpers from './helpers'; +import * as Path from 'path'; import * as Moment from 'moment'; +/** + * Additional options for 'createDefaultDirectoryInfo()' function. + */ +export interface CreateDefaultDirectoryInfoOptions { + /** + * The custom export path. + */ + readonly exportPath?: string; +} + /** * Information about a directory. */ @@ -52,6 +64,11 @@ export interface FileSystemInfo { * An optional method to compare that object with another. */ readonly compareTo?: (other: FileSystemInfo) => number; + /** + * A value that can be used to export the path + * to clipboard, e.g. + */ + readonly exportPath?: string; /** * A custom icon to use. */ @@ -95,3 +112,49 @@ export enum FileSystemType { */ File = 2, } + + +/** + * Creates a default directory info object from a path. + * + * @param {string} dir The path of the directory. + * @param {CreateDefaultDirectoryInfoOptions} [opts] Additional options. + * + * @return {DirectoryInfo} The created object. + */ +export function createDefaultDirectoryInfo(dir: string, opts?: CreateDefaultDirectoryInfoOptions): DirectoryInfo { + dir = deploy_helpers.normalizePath(dir); + + if (!opts) { + opts = {}; + } + + let name: string; + let path: string; + let exportPath = deploy_helpers.toStringSafe(opts.exportPath); + if (!deploy_helpers.isEmptyString(dir)) { + path = Path.dirname(dir); + if ('.' === path) { + path = ''; + } + + name = Path.basename(dir); + } + + if (deploy_helpers.isEmptyString(name)) { + name = ''; + } + if (deploy_helpers.isEmptyString(path)) { + path = ''; + } + if (deploy_helpers.isEmptyString(exportPath)) { + exportPath = '/'; + } + + return { + exportPath: exportPath, + name: name, + path: path, + type: FileSystemType.Directory, + }; +} diff --git a/src/i18.ts b/src/i18.ts index ecddbea..fbb864e 100644 --- a/src/i18.ts +++ b/src/i18.ts @@ -179,6 +179,13 @@ export interface Translation { file?: string; }; listDirectory?: { + copyPathToClipboard?: { + description?: string; + errors?: { + failed?: string; + }; + label?: string; + }; currentDirectory?: string; directoryIsEmpty?: string; errors?: { diff --git a/src/lang/de.ts b/src/lang/de.ts index d6c9431..ccb65ae 100644 --- a/src/lang/de.ts +++ b/src/lang/de.ts @@ -36,7 +36,7 @@ export const translation: Translation = { label: "Aktuelle Datei ...", }, errors: { - operationFailed: "Konnte Vergleich nicht durchführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte Vergleich nicht durchführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, title: "Vergleich{0:trim,surround,leading_space}", }, @@ -67,7 +67,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "Die Datei{0:trim,surround,leading_space} is nicht Teil des Arbeitsbereiches{1:trim,surround,leading_space}!", invalidWorkspaceForPackage: "Das Paket{0:trim,surround,leading_space} ist nicht Teil des Arbeitsbereiches{1:trim,surround,leading_space}!", - operationFailed: "Konnte das Löschen nicht durchführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte das Löschen nicht durchführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, finishedOperation: "Das Löschen der Dateien in{0:trim,surround,leading_space} wurde erfolgreich abgeschlossen.", finishedOperationWithErrors: "[FEHLER] Konnte Dateien nicht in{0:trim,surround,leading_space} löschen:{1:trim,surround,leading_space}", @@ -106,7 +106,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "Die Datei{0:trim,surround,leading_space} kann nicht über den Arbeitsbereich{1:trim,surround,leading_space} bereitgestellt werden!", invalidWorkspaceForPackage: "Das Paket{0:trim,surround,leading_space} kann nicht über den Arbeitsbereich{1:trim,surround,leading_space} bereitgestellt werden!", - operationFailed: "Konnte das Bereitstellen nicht durchführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte das Bereitstellen nicht durchführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", operationToTargetFailed: "Das Bereitstellen der Datei(en) ins Ziel{0:trim,surround,leading_space} schlug fehl:{1:trim,surround,leading_space}", }, finishedOperation: "Das Bereitstellen der Dateien in{0:trim,surround,leading_space} wurde erfolgreich abgeschlossen.", @@ -172,10 +172,17 @@ export const translation: Translation = { file: "{0:trim,surround,ending_space}ist keine Datei!", }, listDirectory: { + copyPathToClipboard: { + description: "Kopiert den aktuellen Pfad in die Zwischenablage", + errors: { + failed: "Konnte Pfad nicht in Zwischenablage speichern (s. Debugkonsole 'STRG/CMD + SHIFT + Y'): {0}", + }, + label: "Pfad kopieren ...", + }, currentDirectory: "Aktuelles Verzeichnis:{0:trim,surround,leading_space} ({1:trim,surround})", directoryIsEmpty: "(Verzeichnis ist leer)", errors: { - operationFailed: "Konnte das Auflisten eines Verzeichnisses nicht durchführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte das Auflisten eines Verzeichnisses nicht durchführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, lastModified: "Letzte Änderung:{0:trim,leading_space}", loading: "Lade Verzeichnis{0:trim,surround,leading_space} ({1:trim} / {2:trim})...", @@ -221,8 +228,8 @@ export const translation: Translation = { invalidDirectory: "{0:trim,surround,ending_space}ist ein ungültiges Verzeichnis!", }, errors: { - initializationFailed: "Die Initialisierung des Plugins{0:trim,surround,leading_space} ist fehlgeschlagen (s. Debugkonsole 'STRG + SHIFT + Y')!", - loadingFailed: "Fehler beim Laden von{0:trim,surround,leading_space} (s. Debugkonsole 'STRG + SHIFT + Y')!", + initializationFailed: "Die Initialisierung des Plugins{0:trim,surround,leading_space} ist fehlgeschlagen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", + loadingFailed: "Fehler beim Laden von{0:trim,surround,leading_space} (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", noFactoryFunction: "Das Plugin-Modul{0:trim,surround,leading_space} beinhaltet keine Factory-Funktion!", noModule: "Das Plugin{0:trim,surround,leading_space} enthält kein Modul!", noneFoundIn: "Es wurden keine Plugins in{0:trim,surround,leading_space} gefunden!", @@ -304,7 +311,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "Die Datei{0:trim,surround,leading_space} kann nicht in den Arbeitsbereich{1:trim,surround,leading_space} geladen werden!", invalidWorkspaceForPackage: "Das Paket{0:trim,surround,leading_space} kann nicht in den Arbeitsbereich{1:trim,surround,leading_space} geladen werden!", - operationFailed: "Konnte das Laden nicht durchführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte das Laden nicht durchführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", operationForSourceFailed: "Das Laden der Datei(en) aus der Quelle{0:trim,surround,leading_space} schlug fehl:{1:trim,surround,leading_space}", }, finishedOperation: "Das Laden der Dateien von{0:trim,surround,leading_space} wurde erfolgreich abgeschlossen.", @@ -356,7 +363,7 @@ export const translation: Translation = { }, switches: { errors: { - operationFailed: "Schalter-Operation ist fehlgeschlagen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Schalter-Operation ist fehlgeschlagen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, }, sync: { @@ -453,7 +460,7 @@ export const translation: Translation = { selectTarget: "Wählen Sie ein Ziel ...", }, errors: { - operationFailed: "Konnte Funktion nicht ausführen (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "Konnte Funktion nicht ausführen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, npm: { description: "Werkzeuge für das einfache Arbeiten mit 'npm'", @@ -543,7 +550,7 @@ export const translation: Translation = { workspaces: { active: { errors: { - selectWorkspaceFailed: "Das Selektieren des aktiven Arbeitsbereiches ist fehlgeschlagen (s. Debugkonsole 'STRG + SHIFT + Y')!", + selectWorkspaceFailed: "Das Selektieren des aktiven Arbeitsbereiches ist fehlgeschlagen (s. Debugkonsole 'STRG/CMD + SHIFT + Y')!", }, noneFound: "Keine aktiven Arbeitsbereiche gefunden!", selectWorkspace: "Wählen Sie den aktiven Arbeitsbereich aus ...", diff --git a/src/lang/en.ts b/src/lang/en.ts index e4f69d1..0242c11 100644 --- a/src/lang/en.ts +++ b/src/lang/en.ts @@ -36,7 +36,7 @@ export const translation: Translation = { label: "Current file ...", }, errors: { - operationFailed: "Compare operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Compare operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, title: "Diff{0:trim,surround,leading_space}", }, @@ -67,7 +67,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "File{0:trim,surround,leading_space} is not part of workspace{1:trim,surround,leading_space}!", invalidWorkspaceForPackage: "Package{0:trim,surround,leading_space} is not part of workspace{1:trim,surround,leading_space}!", - operationFailed: "Delete operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Delete operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, finishedOperation: "Deleting files in{0:trim,surround,leading_space} has been finished.", finishedOperationWithErrors: "[ERROR] Could not delete files in{0:trim,surround,leading_space}:{1:trim,surround,leading_space}", @@ -108,7 +108,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "Cannot deploy file{0:trim,surround,leading_space} from workspace{1:trim,surround,leading_space}!", invalidWorkspaceForPackage: "Cannot deploy package{0:trim,surround,leading_space} from workspace{1:trim,surround,leading_space}!", - operationFailed: "Deploy operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Deploy operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", operationToTargetFailed: "Deploying to target{0:trim,surround,leading_space} failed:{1:trim,surround,leading_space}", }, gitCommit: { @@ -172,10 +172,17 @@ export const translation: Translation = { file: "{0:trim,surround,ending_space}is no file!", }, listDirectory: { + copyPathToClipboard: { + description: "Copies the current path to clipboard", + errors: { + failed: "Could not save path to clipboard (s. debug console 'CTRL/CMD + SHIFT + Y'): {0}", + }, + label: "Copy path ...", + }, currentDirectory: "Current directory:{0:trim,surround,leading_space} ({1:trim,surround})", directoryIsEmpty: "(directory is empty)", errors: { - operationFailed: "List directory operation failed (s. Debugkonsole 'STRG + SHIFT + Y')!", + operationFailed: "List directory operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, lastModified: "Last modified:{0:trim,leading_space}", loading: "Loading directory{0:trim,surround,leading_space} ({1:trim} / {2:trim})...", @@ -222,8 +229,8 @@ export const translation: Translation = { invalidDirectory: "{0:trim,surround,ending_space}is an invalid directory!", }, errors: { - initializationFailed: "Initialization of plugin{0:trim,surround,leading_space} failed (s. debug output 'CTRL + SHIFT + Y')!", - loadingFailed: "Error while loading{0:trim,surround,leading_space} (s. debug output 'CTRL + SHIFT + Y')!", + initializationFailed: "Initialization of plugin{0:trim,surround,leading_space} failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", + loadingFailed: "Error while loading{0:trim,surround,leading_space} (s. debug console 'CTRL/CMD + SHIFT + Y')!", noFactoryFunction: "Plugin module{0:trim,surround,leading_space} contains no factory function!", noModule: "Plugin{0:trim,surround,leading_space} contains no module!", noneFoundIn: "No plugins found in{0:trim,surround,leading_space}!", @@ -305,7 +312,7 @@ export const translation: Translation = { errors: { invalidWorkspace: "Cannot pull file{0:trim,surround,leading_space} to workspace{1:trim,surround,leading_space}!", invalidWorkspaceForPackage: "Cannot pull package{0:trim,surround,leading_space} to workspace{1:trim,surround,leading_space}!", - operationFailed: "Pull operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Pull operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", operationForSourceFailed: "Pulling file(s) from source{0:trim,surround,leading_space} failed:{1:trim,surround,leading_space}", }, finishedOperation: "Pulling files from{0:trim,surround,leading_space} has been finished.", @@ -357,7 +364,7 @@ export const translation: Translation = { }, switches: { errors: { - operationFailed: "Switch operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Switch operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, }, sync: { @@ -454,7 +461,7 @@ export const translation: Translation = { selectTarget: "Select a target ...", }, errors: { - operationFailed: "Tool operation failed (s. debug output 'CTRL + SHIFT + Y')!", + operationFailed: "Tool operation failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, npm: { description: "Tools for simple use of 'npm'", @@ -544,7 +551,7 @@ export const translation: Translation = { workspaces: { active: { errors: { - selectWorkspaceFailed: "Selecting active workspace failed (s. debug output 'CTRL + SHIFT + Y')!", + selectWorkspaceFailed: "Selecting active workspace failed (s. debug console 'CTRL/CMD + SHIFT + Y')!", }, noneFound: "No active workspaces found!", selectWorkspace: "Select the active workspace ...", diff --git a/src/list.ts b/src/list.ts index ee03aec..d8d2033 100644 --- a/src/list.ts +++ b/src/list.ts @@ -15,9 +15,12 @@ * along with this program. If not, see . */ +import * as CopyPaste from 'copy-paste'; +import * as Crypto from 'crypto'; import * as deploy_contracts from './contracts'; import * as deploy_files from './files'; import * as deploy_helpers from './helpers'; +import * as deploy_log from './log'; import * as deploy_plugins from './plugins'; import * as deploy_targets from './targets'; import * as deploy_workspaces from './workspaces'; @@ -73,250 +76,330 @@ export async function listDirectory(target: deploy_targets.Target, dir?: string) return; } - const TARGET_NAME = deploy_targets.getTargetName(target); + let fromCache = false; - dir = deploy_helpers.toStringSafe(dir); + const LAST_DIR_CACHE = ME.workspaceSessionState['list']['lastDirectories']; - const PLUGINS = ME.getListPlugins(target); - if (PLUGINS.length < 1) { - ME.showWarningMessage( - ME.t('targets.noPluginsFound') - ); + const TARGET_NAME = deploy_targets.getTargetName(target); + const TARGET_CACHE_KEY = target.__index + '::' + Crypto.createHash('sha256') + .update( new Buffer(deploy_helpers.toStringSafe(target.__id), 'utf8') ) + .digest('hex'); - return; - } + if (arguments.length < 2) { + // try to get last directory + // from cache - let displayDir = dir; - if (deploy_helpers.isEmptyString(displayDir)) { - displayDir = '/'; - } + const LAST_DIR = LAST_DIR_CACHE[TARGET_CACHE_KEY]; + if (!deploy_helpers.isEmptyString(LAST_DIR)) { + fromCache = true; - const FILES_AND_FOLDERS = await deploy_helpers.withProgress(async (ctx) => { - const CANCELLATION_SOURCE = new vscode.CancellationTokenSource(); - try { - const LOADED_FILES_AND_FILES: deploy_files.FileSystemInfo[] = []; + dir = LAST_DIR; + } + } - let index = -1; - const TOTAL_COUNT = PLUGINS.length; - while (PLUGINS.length > 0) { - ++index; + dir = deploy_helpers.toStringSafe(dir); - if (CANCELLATION_SOURCE.token.isCancellationRequested) { - return false; - } + let wholeOperationHasFailed = false; + try { + const PLUGINS = ME.getListPlugins(target); + if (PLUGINS.length < 1) { + ME.showWarningMessage( + ME.t('targets.noPluginsFound') + ); - const PI = PLUGINS.shift(); + return; + } - ctx.message = ME.t('listDirectory.loading', - displayDir, index + 1, TOTAL_COUNT); + let displayDir = dir; + if (deploy_helpers.isEmptyString(displayDir)) { + displayDir = '/'; + } - const CTX: deploy_plugins.ListDirectoryContext = { - cancellationToken: CANCELLATION_SOURCE.token, - dir: dir, - isCancelling: undefined, - target: target, - workspace: ME, - }; + let selfInfo: deploy_files.DirectoryInfo; + const FILES_AND_FOLDERS = await deploy_helpers.withProgress(async (ctx) => { + const CANCELLATION_SOURCE = new vscode.CancellationTokenSource(); + try { + const LOADED_FILES_AND_FILES: deploy_files.FileSystemInfo[] = []; - // CTX.isCancelling - Object.defineProperty(CTX, 'isCancelling', { - enumerable: true, + let index = -1; + const TOTAL_COUNT = PLUGINS.length; + while (PLUGINS.length > 0) { + ++index; - get: () => { - return CTX.cancellationToken.isCancellationRequested; + if (CANCELLATION_SOURCE.token.isCancellationRequested) { + return false; } - }); - - const ITEMS = await PI.listDirectory(CTX); - if (ITEMS) { - const LOADED_ITEMS: deploy_files.FileSystemInfo[] = deploy_helpers.asArray( - ITEMS.dirs, - ).concat( - deploy_helpers.asArray( - ITEMS.files - ) - ).concat( - deploy_helpers.asArray( - ITEMS.others - ) - ); - LOADED_FILES_AND_FILES.push - .apply(LOADED_FILES_AND_FILES, LOADED_ITEMS); + const PI = PLUGINS.shift(); + + ctx.message = ME.t('listDirectory.loading', + displayDir, index + 1, TOTAL_COUNT); + + const CTX: deploy_plugins.ListDirectoryContext = { + cancellationToken: CANCELLATION_SOURCE.token, + dir: dir, + isCancelling: undefined, + target: target, + workspace: ME, + }; + + // CTX.isCancelling + Object.defineProperty(CTX, 'isCancelling', { + enumerable: true, + + get: () => { + return CTX.cancellationToken.isCancellationRequested; + } + }); + + const ITEMS = await PI.listDirectory(CTX); + if (ITEMS) { + selfInfo = ITEMS.info; + + const LOADED_ITEMS: deploy_files.FileSystemInfo[] = deploy_helpers.asArray( + ITEMS.dirs, + ).concat( + deploy_helpers.asArray( + ITEMS.files + ) + ).concat( + deploy_helpers.asArray( + ITEMS.others + ) + ); + + LOADED_FILES_AND_FILES.push + .apply(LOADED_FILES_AND_FILES, LOADED_ITEMS); + } } + + return LOADED_FILES_AND_FILES; + } + finally { + deploy_helpers.tryDispose(CANCELLATION_SOURCE); } + }, { + title: `[${TARGET_NAME}]`, + }); - return LOADED_FILES_AND_FILES; + if (false === FILES_AND_FOLDERS) { + return; } - finally { - deploy_helpers.tryDispose(CANCELLATION_SOURCE); - } - }, { - title: `[${TARGET_NAME}]`, - }); - if (false === FILES_AND_FOLDERS) { - return; - } - - const QUICK_PICK_ITEMS: deploy_contracts.ActionQuickPick[] = []; + const QUICK_PICK_ITEMS: deploy_contracts.ActionQuickPick[] = []; - const LIST_DIRECTORY = async (d: string) => { - listDirectory.apply( - ME, - [ target, d ] - ); - }; + const LIST_DIRECTORY = async (d: string) => { + listDirectory.apply( + ME, + [ target, d ] + ); + }; - FILES_AND_FOLDERS.sort((x, y) => { - // first by type: - // - // 1. directories - // 2. others - const COMP0 = deploy_helpers.compareValuesBy(x, y, (f) => { - return deploy_files.FileSystemType.Directory == f.type ? 0 : 1; - }); - if (0 !== COMP0) { - return COMP0; - } + FILES_AND_FOLDERS.sort((x, y) => { + // first by type: + // + // 1. directories + // 2. others + const COMP0 = deploy_helpers.compareValuesBy(x, y, (f) => { + return deploy_files.FileSystemType.Directory == f.type ? 0 : 1; + }); + if (0 !== COMP0) { + return COMP0; + } - // custom comparer? - if (x.type == y.type) { - if (x.compareTo) { - const COMP1 = x.compareTo(y); - if (0 != COMP1) { - return COMP1; + // custom comparer? + if (x.type == y.type) { + if (x.compareTo) { + const COMP1 = x.compareTo(y); + if (0 != COMP1) { + return COMP1; + } } } - } - // then by name - const COMP2 = deploy_helpers.compareValuesBy(x, y, (f) => { - return deploy_helpers.normalizeString(f.name); - }); - if (0 !== COMP2) { - return COMP2; - } + // then by name + const COMP2 = deploy_helpers.compareValuesBy(x, y, (f) => { + return deploy_helpers.normalizeString(f.name); + }); + if (0 !== COMP2) { + return COMP2; + } - // then by timestamp (DESC) - return deploy_helpers.compareValuesBy(y, x, (f) => { - const LT = deploy_helpers.asLocalTime(f.time); - if (LT) { - return LT.unix(); + // then by timestamp (DESC) + return deploy_helpers.compareValuesBy(y, x, (f) => { + const LT = deploy_helpers.asLocalTime(f.time); + if (LT) { + return LT.unix(); + } + }); + }).forEach(f => { + let label = deploy_helpers.toStringSafe(f.name).trim(); + if ('' === label) { + label = ME.t('listDirectory.noName'); } - }); - }).forEach(f => { - let label = deploy_helpers.toStringSafe(f.name).trim(); - if ('' === label) { - label = ME.t('listDirectory.noName'); - } - const DETAIL_ITEMS: string[] = []; + const DETAIL_ITEMS: string[] = []; - const GET_ICON_SAFE = (defaultIcon: string) => { - let icon = deploy_helpers.toStringSafe(f.icon).trim(); - if ('' === icon) { - icon = defaultIcon; - } + const GET_ICON_SAFE = (defaultIcon: string) => { + let icon = deploy_helpers.toStringSafe(f.icon).trim(); + if ('' === icon) { + icon = defaultIcon; + } - return '$(' + icon + ') '; - }; + return '$(' + icon + ') '; + }; - let action: () => any; - if (deploy_files.FileSystemType.Directory == f.type) { - // directory + let action: () => any; + if (deploy_files.FileSystemType.Directory == f.type) { + // directory - label = GET_ICON_SAFE('file-directory') + label; + label = GET_ICON_SAFE('file-directory') + label; - action = async () => { - let pathPart = f.internal_name; - if (deploy_helpers.isEmptyString(pathPart)) { - pathPart = f.name; + action = async () => { + let pathPart = f.internal_name; + if (deploy_helpers.isEmptyString(pathPart)) { + pathPart = f.name; + } + + LIST_DIRECTORY( + dir + '/' + pathPart, + ); + }; + } + else if (deploy_files.FileSystemType.File == f.type) { + // file + + label = GET_ICON_SAFE('file-binary') + label; + + action = createSelectFileAction( + f + ); + } + else { + label = GET_ICON_SAFE('question') + label; + } + + if (deploy_files.FileSystemType.Directory != f.type) { + if (!isNaN(f.size)) { + DETAIL_ITEMS.push( + ME.t('listDirectory.size', + FileSize(f.size, {round: 2})) + ); } + } - LIST_DIRECTORY( - dir + '/' + pathPart, + const LOCAL_TIME = deploy_helpers.asLocalTime(f.time); + if (LOCAL_TIME && LOCAL_TIME.isValid()) { + DETAIL_ITEMS.push( + ME.t('listDirectory.lastModified', + LOCAL_TIME.format( ME.t('time.dateTimeWithSeconds') )) ); - }; - } - else if (deploy_files.FileSystemType.File == f.type) { - // file + } - label = GET_ICON_SAFE('file-binary') + label; - - action = createSelectFileAction( - f - ); + QUICK_PICK_ITEMS.push({ + label: label, + description: '', + detail: DETAIL_ITEMS.join(', '), + action: action, + }); + }); + + if (!deploy_helpers.isEmptyString(dir)) { + let parentDir = Enumerable.from( + dir.split('/') + ).skipLast() + .joinToString('/'); + + QUICK_PICK_ITEMS.unshift({ + label: '..', + description: '', + detail: ME.t('listDirectory.parentDirectory'), + + action: async () => { + LIST_DIRECTORY( + parentDir + ); + } + }); } - else { - label = GET_ICON_SAFE('question') + label; + + if (QUICK_PICK_ITEMS.length < 1) { + QUICK_PICK_ITEMS.push({ + label: ME.t('listDirectory.directoryIsEmpty'), + description: '', + }); } - if (deploy_files.FileSystemType.Directory != f.type) { - if (!isNaN(f.size)) { - DETAIL_ITEMS.push( - ME.t('listDirectory.size', - FileSize(f.size, {round: 2})) - ); + // functions + { + if (deploy_helpers.isObject(selfInfo)) { + let exportPath = deploy_helpers.toStringSafe(selfInfo.exportPath); + if (deploy_helpers.isEmptyString(exportPath)) { + exportPath = dir; + } + + if (!deploy_helpers.isEmptyString(exportPath)) { + // copy path to clipboard + QUICK_PICK_ITEMS.push({ + action: async () => { + try { + await Promise.resolve( + CopyPaste.copy(exportPath) + ); + } + catch (e) { + deploy_log.CONSOLE + .trace(e, 'list.listDirectory(1)'); + + ME.showWarningMessage( + ME.t('listDirectory.copyPathToClipboard.errors.failed', + exportPath) + ); + } + }, + + label: '$(clippy) ' + ME.t('listDirectory.copyPathToClipboard.label'), + description: ME.t('listDirectory.copyPathToClipboard.description'), + }); + } } } - const LOCAL_TIME = deploy_helpers.asLocalTime(f.time); - if (LOCAL_TIME && LOCAL_TIME.isValid()) { - DETAIL_ITEMS.push( - ME.t('listDirectory.lastModified', - LOCAL_TIME.format( ME.t('time.dateTimeWithSeconds') )) - ); + let placeHolder = dir.trim(); + if (!placeHolder.startsWith('/')) { + placeHolder = '/' + placeHolder; } - QUICK_PICK_ITEMS.push({ - label: label, - description: '', - detail: DETAIL_ITEMS.join(', '), - action: action, + const SELECTED_ITEM = await vscode.window.showQuickPick(QUICK_PICK_ITEMS, { + placeHolder: ME.t('listDirectory.currentDirectory', + placeHolder, TARGET_NAME), }); - }); - - if (!deploy_helpers.isEmptyString(dir)) { - let parentDir = Enumerable.from( - dir.split('/') - ).skipLast() - .joinToString('/'); - - QUICK_PICK_ITEMS.unshift({ - label: '..', - description: '', - detail: ME.t('listDirectory.parentDirectory'), - - action: async () => { - LIST_DIRECTORY( - parentDir + if (SELECTED_ITEM) { + if (SELECTED_ITEM.action) { + await Promise.resolve( + SELECTED_ITEM.action() ); } - }); + } } + catch (e) { + wholeOperationHasFailed = true; - if (QUICK_PICK_ITEMS.length < 1) { - QUICK_PICK_ITEMS.push({ - label: ME.t('listDirectory.directoryIsEmpty'), - description: '', - }); - } + if (fromCache) { + // reset and retry - let placeHolder = dir.trim(); - if (!placeHolder.startsWith('/')) { - placeHolder = '/' + placeHolder; - } + delete LAST_DIR_CACHE[TARGET_CACHE_KEY]; - const SELECTED_ITEM = await vscode.window.showQuickPick(QUICK_PICK_ITEMS, { - placeHolder: ME.t('listDirectory.currentDirectory', - placeHolder, TARGET_NAME), - }); - if (SELECTED_ITEM) { - if (SELECTED_ITEM.action) { - await Promise.resolve( - SELECTED_ITEM.action() - ); + await listDirectory.apply(this, arguments); + } + else { + throw e; + } + } + finally { + if (!wholeOperationHasFailed) { + // cache + LAST_DIR_CACHE[TARGET_CACHE_KEY] = dir; } } } diff --git a/src/plugins.ts b/src/plugins.ts index e6f8550..db984e8 100644 --- a/src/plugins.ts +++ b/src/plugins.ts @@ -29,6 +29,7 @@ import * as deploy_values from './values'; import * as deploy_workspaces from './workspaces'; import * as Events from 'events'; import * as i18 from './i18'; +import * as Path from 'path'; import * as Stream from 'stream'; import * as vscode from 'vscode'; @@ -195,6 +196,10 @@ export interface ListDirectoryResult string; + /** + * Returns the "real" path of a sub directory, which can be exported. + * + * @param {string} subDir The sub directory. + * + * @return {string} The "export" path. + */ + readonly getExportPath?: (subDir: string) => string; /** * The underlying target. */ @@ -888,14 +901,31 @@ export abstract class AsyncFileClientPluginBase { + const DIR = conn.getDir(context.dir); + + let exportPath: string; + if (conn.getExportPath) { + exportPath = conn.getExportPath(context.dir); + } + if (deploy_helpers.isEmptyString(exportPath)) { + exportPath = DIR; + } + exportPath = deploy_helpers.toStringSafe(exportPath); + if (!exportPath.trim().startsWith('/')) { + exportPath = '/' + exportPath; + } + const RESULT: ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: exportPath, + }), others: [], target: context.target, }; - const LIST = await conn.client.listDirectory(conn.getDir(context.dir)); + const LIST = await conn.client.listDirectory(DIR); if (LIST) { for (const FSI of LIST) { if (!FSI) { @@ -1402,6 +1432,7 @@ export abstract class IterablePluginBase { const RESULT: deploy_plugins.ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: targetDir, + }), others: [], target: context.target, }; @@ -462,6 +465,9 @@ class AppPlugin extends deploy_plugins.PluginBase { if (STATS.isDirectory()) { const DI: deploy_files.DirectoryInfo = { + exportPath: Path.resolve( + Path.join(OUT_DIR, F) + ), name: F, path: relativePath, size: SIZE, @@ -476,6 +482,9 @@ class AppPlugin extends deploy_plugins.PluginBase { download: async () => { return deploy_helpers.readFile(fullPath); }, + exportPath: Path.resolve( + Path.join(OUT_DIR, F) + ), name: F, path: relativePath, size: SIZE, @@ -487,6 +496,9 @@ class AppPlugin extends deploy_plugins.PluginBase { } else { const FSI: deploy_files.FileSystemInfo = { + exportPath: Path.resolve( + Path.join(OUT_DIR, F) + ), name: F, path: relativePath, size: SIZE, diff --git a/src/plugins/compiler.ts b/src/plugins/compiler.ts index ebd16bd..d8c719a 100644 --- a/src/plugins/compiler.ts +++ b/src/plugins/compiler.ts @@ -223,6 +223,9 @@ class CompilerPlugin extends deploy_plugins.PluginBase { const RESULT: deploy_plugins.ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: targetDir, + }), others: [], target: context.target, }; @@ -251,6 +254,9 @@ class CompilerPlugin extends deploy_plugins.PluginBase { if (STATS.isDirectory()) { const DI: deploy_files.DirectoryInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -265,6 +271,9 @@ class CompilerPlugin extends deploy_plugins.PluginBase { download: async () => { return deploy_helpers.readFile(fullPath); }, + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -276,6 +285,9 @@ class CompilerPlugin extends deploy_plugins.PluginBase { } else { const FSI: deploy_files.FileSystemInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, diff --git a/src/plugins/local.ts b/src/plugins/local.ts index 3fae7ac..52051a9 100644 --- a/src/plugins/local.ts +++ b/src/plugins/local.ts @@ -190,6 +190,9 @@ class LocalPlugin extends deploy_plugins.PluginBase { const RESULT: deploy_plugins.ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: targetDir, + }), others: [], target: context.target, }; @@ -218,6 +221,9 @@ class LocalPlugin extends deploy_plugins.PluginBase { if (STATS.isDirectory()) { const DI: deploy_files.DirectoryInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -232,6 +238,9 @@ class LocalPlugin extends deploy_plugins.PluginBase { download: async () => { return deploy_helpers.readFile(fullPath); }, + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -243,6 +252,9 @@ class LocalPlugin extends deploy_plugins.PluginBase { } else { const FSI: deploy_files.FileSystemInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, diff --git a/src/plugins/script.ts b/src/plugins/script.ts index 541ebfd..46eed82 100644 --- a/src/plugins/script.ts +++ b/src/plugins/script.ts @@ -254,6 +254,7 @@ class ScriptPlugin extends deploy_plugins.PluginBase { dirs: [], files: [], others: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir), target: context.target, }; diff --git a/src/plugins/slack.ts b/src/plugins/slack.ts index 5f382d8..051ef97 100644 --- a/src/plugins/slack.ts +++ b/src/plugins/slack.ts @@ -74,6 +74,7 @@ class SlackPlugin extends deploy_plugins.PluginBase { const RESULT: deploy_plugins.ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir), others: [], target: t, }; diff --git a/src/plugins/test.ts b/src/plugins/test.ts index 7fdce26..bbbc099 100644 --- a/src/plugins/test.ts +++ b/src/plugins/test.ts @@ -124,6 +124,9 @@ class TestPlugin extends deploy_plugins.PluginBase { const RESULT: deploy_plugins.ListDirectoryResult = { dirs: [], files: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: targetDir, + }), others: [], target: context.target, }; @@ -152,6 +155,9 @@ class TestPlugin extends deploy_plugins.PluginBase { if (STATS.isDirectory()) { const DI: deploy_files.DirectoryInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -166,6 +172,9 @@ class TestPlugin extends deploy_plugins.PluginBase { download: async () => { return deploy_helpers.readFile(fullPath); }, + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, @@ -177,6 +186,9 @@ class TestPlugin extends deploy_plugins.PluginBase { } else { const FSI: deploy_files.FileSystemInfo = { + exportPath: Path.resolve( + Path.join(targetDir, F) + ), name: F, path: relativePath, size: SIZE, diff --git a/src/plugins/zip.ts b/src/plugins/zip.ts index 679b13e..a639a8a 100644 --- a/src/plugins/zip.ts +++ b/src/plugins/zip.ts @@ -253,13 +253,6 @@ class ZipPlugin extends deploy_plugins.PluginBase { const ME = this; const WORKSPACE = context.workspace; - const RESULT: deploy_plugins.ListDirectoryResult = { - dirs: [], - files: [], - others: [], - target: context.target, - }; - if (context.isCancelling) { return; } @@ -267,6 +260,16 @@ class ZipPlugin extends deploy_plugins.PluginBase { const DIR = deploy_helpers.normalizePath(context.dir); const TARGET_DIR = await ME.getTargetDirectory(context.target, false); + const RESULT: deploy_plugins.ListDirectoryResult = { + dirs: [], + files: [], + others: [], + info: deploy_files.createDefaultDirectoryInfo(context.dir, { + exportPath: TARGET_DIR, + }), + target: context.target, + }; + if (deploy_helpers.isEmptyString(DIR)) { const ZIP_FILES = await ME.getZipFiles(context.target); @@ -279,6 +282,7 @@ class ZipPlugin extends deploy_plugins.PluginBase { const CREATION_TIME = Moment.utc(`${MATCH[4]} ${MATCH[6]}`, 'YYYYMMDD HHmmss'); const DI: deploy_files.DirectoryInfo = { + exportPath: ZF, internal_name: FILE_NAME, name: deploy_helpers.asLocalTime(CREATION_TIME) .format( ME.t(context.target, 'time.dateTimeWithSeconds') ), @@ -354,6 +358,7 @@ class ZipPlugin extends deploy_plugins.PluginBase { } const FI: deploy_files.FileInfo = { + exportPath: ZIP_FILE_PATH + '::' + FILENAME, name: FILENAME, path: ZIP_FILE_NAME, type: deploy_files.FileSystemType.File, diff --git a/src/workspaces.ts b/src/workspaces.ts index 529ce95..89aca0e 100644 --- a/src/workspaces.ts +++ b/src/workspaces.ts @@ -644,6 +644,9 @@ export class Workspace extends deploy_objects.DisposableBase implements deploy_c NEW_SESSION_STATE['commands'] = {}; NEW_SESSION_STATE['commands']['events'] = new Events.EventEmitter(); + NEW_SESSION_STATE['list'] = {}; + NEW_SESSION_STATE['list']['lastDirectories'] = {}; + NEW_SESSION_STATE['pull'] = {}; NEW_SESSION_STATE['pull']['events'] = new Events.EventEmitter(); NEW_SESSION_STATE['pull']['states'] = {};