diff --git a/.gitignore b/.gitignore index 197863cd7..d509439f6 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,5 @@ settings.json # IDEs .idea + +# Build Files diff --git a/.travis.yml b/.travis.yml index 02b38b2c7..1737fe1b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,17 +1,16 @@ sudo: false language: node_js + node_js: - - "6" - - "8" - "10" + - "12" + +before_script: + - npm install grunt-cli -g cache: directories: - node_modules -script: - - npm install - - npm test - -install: npm i \ No newline at end of file +install: npm i diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md old mode 100644 new mode 100755 diff --git a/Gruntfile.js b/Gruntfile.js old mode 100644 new mode 100755 index 0996557e4..ebd63a515 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -234,7 +234,7 @@ module.exports = function (grunt) { }, debian: { options: { - archive: './release/' + VERSION_FILENAME + '-Ubuntu.zip', + archive: './release/' + VERSION_FILENAME + '-Debian-Ubuntu.zip', mode: 'zip', }, files: [{ @@ -385,7 +385,7 @@ module.exports = function (grunt) { grunt.loadNpmTasks('grunt-electron-installer-redhat'); grunt.registerTask('build', ['newer:babel', 'less', 'newer:copy:dev']); - grunt.registerTask('default', ['build', 'shell:electron', 'watch']); + grunt.registerTask('default', ['build', 'release:linux', 'release:debian:x64', 'release:mac', 'release:windows']); grunt.registerTask('release:linux', [ 'clean:release', 'build', 'shell:linux_npm', diff --git a/LICENSE b/LICENSE old mode 100644 new mode 100755 diff --git a/MAINTAINERS b/MAINTAINERS old mode 100644 new mode 100755 diff --git a/Makefile b/Makefile old mode 100644 new mode 100755 diff --git a/README.md b/README.md old mode 100644 new mode 100755 index 00f4a179a..57029b80c --- a/README.md +++ b/README.md @@ -1,15 +1,13 @@ [![Build Status](https://travis-ci.org/docker/kitematic.svg?branch=master)](https://travis-ci.org/docker/kitematic) -[![Kitematic Logo](https://cloud.githubusercontent.com/assets/251292/5269258/1b229c3c-7a2f-11e4-96f1-e7baf3c86d73.png)](https://kitematic.com) - Kitematic is a simple application for managing Docker containers on Mac, Linux and Windows. ![Kitematic Screenshot](https://cloud.githubusercontent.com/assets/251292/8246120/d3ab271a-15ed-11e5-8736-9a730a27c79a.png) ## Installing Kitematic -[Download the latest version](https://github.com/docker/kitematic/releases) of Kitematic via the github release page. +[Download the latest version](https://github.com/Trackhe/kitematic/releases) of Kitematic via the github release page. ## Documentation @@ -17,42 +15,21 @@ Kitematic's documentation and other information can be found at [http://kitemati ## Security Disclosure -Security is very important to us. If you have any issue regarding security, please disclose the information responsibly by sending an email to security@docker.com and not by creating a github issue. +[Security Disclosure](https://github.com/docker/kitematic/blob/master/README.md). ## Bugs and Feature Requests -Have a bug or a feature request? Please first read the [Issue Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/kitematic/kitematic/issues/new). +Have a bug or a feature request? Please first read the [Issue Guidelines](https://github.com/trackhe/kitematic/blob/master/CONTRIBUTING.md#using-the-issue-tracker) and search for existing and closed issues. If your problem or idea is not addressed yet, [please open a new issue](https://github.com/trackhe/kitematic/issues/new). ## Roadmap & Contributing -We welcome all pull requests and contributions that anyone would like to make. The Kitematic team is super happy to support anyone who wants to get involved. Please checkout our [roadmap](ROADMAP.md) that we keep up to date for ideas to help you with contributing. We would love to talk to you about contributing. +We REALLY welcome all pull requests and contributions that anyone would like to make. Please read through our [Contributing Guidelines](https://github.com/kitematic/kitematic/blob/master/CONTRIBUTING.md). Included are directions for opening issues, coding standards, and notes on development. ## Community -- [![Gitter](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/kitematic/kitematic?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) -- Ask questions on our [user forum](https://forums.docker.com/c/open-source-projects/kitematic). -- **#kitematic** on IRC. [Join the channel](http://webchat.freenode.net/?channels=%23kitematic&uio=d4). -- Follow [@kitematic on Twitter](https://twitter.com/kitematic). - -## Uninstalling - -**Mac** - -- Remove Kitematic.app -- Remove any unwanted Virtual Machines in VirtualBox -```bash -# remove app data -rm -rf ~/Library/Application\ Support/Kitematic -``` - -**Windows** - -Open `Programs and Features` from `Control Panel` - -- Uninstall Kitematic -- Uninstall Oracle VM VirtualBox +- Follow [@kitematic](https://github.com/docker/kitematic). ## Copyright and License diff --git a/ROADMAP.md b/ROADMAP.md old mode 100644 new mode 100755 diff --git a/__integration__/HubUtil-integration.js b/__integration__/HubUtil-integration.js old mode 100644 new mode 100755 diff --git a/__integration__/RegHubUtil-integration.js b/__integration__/RegHubUtil-integration.js old mode 100644 new mode 100755 diff --git a/__mocks__/app.js b/__mocks__/app.js old mode 100644 new mode 100755 diff --git a/__mocks__/electron.js b/__mocks__/electron.js old mode 100644 new mode 100755 diff --git a/__mocks__/remote.js b/__mocks__/remote.js old mode 100644 new mode 100755 diff --git a/__tests__/Util-test.js b/__tests__/Util-test.js old mode 100644 new mode 100755 diff --git a/docs/README.md b/docs/README.md old mode 100644 new mode 100755 diff --git a/electron-builder.json b/electron-builder.json old mode 100644 new mode 100755 diff --git a/fonts/kitematic.eot b/fonts/kitematic.eot old mode 100644 new mode 100755 diff --git a/fonts/kitematic.svg b/fonts/kitematic.svg old mode 100644 new mode 100755 diff --git a/fonts/kitematic.ttf b/fonts/kitematic.ttf old mode 100644 new mode 100755 diff --git a/fonts/kitematic.woff b/fonts/kitematic.woff old mode 100644 new mode 100755 diff --git a/images/boot2docker.png b/images/boot2docker.png old mode 100644 new mode 100755 diff --git a/images/boot2docker@2x.png b/images/boot2docker@2x.png old mode 100644 new mode 100755 diff --git a/images/button-restart.png b/images/button-restart.png old mode 100644 new mode 100755 diff --git a/images/button-restart@2x.png b/images/button-restart@2x.png old mode 100644 new mode 100755 diff --git a/images/button-start.png b/images/button-start.png old mode 100644 new mode 100755 diff --git a/images/button-start@2x.png b/images/button-start@2x.png old mode 100644 new mode 100755 diff --git a/images/button-stop.png b/images/button-stop.png old mode 100644 new mode 100755 diff --git a/images/button-stop@2x.png b/images/button-stop@2x.png old mode 100644 new mode 100755 diff --git a/images/button-terminal.png b/images/button-terminal.png old mode 100644 new mode 100755 diff --git a/images/button-terminal@2x.png b/images/button-terminal@2x.png old mode 100644 new mode 100755 diff --git a/images/button-view.png b/images/button-view.png old mode 100644 new mode 100755 diff --git a/images/button-view@2x.png b/images/button-view@2x.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker-compose.png b/images/cartoon-docker-compose.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker-compose@2x.png b/images/cartoon-docker-compose@2x.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker-machine.png b/images/cartoon-docker-machine.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker-machine@2x.png b/images/cartoon-docker-machine@2x.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker.png b/images/cartoon-docker.png old mode 100644 new mode 100755 diff --git a/images/cartoon-docker@2x.png b/images/cartoon-docker@2x.png old mode 100644 new mode 100755 diff --git a/images/cartoon-kitematic.png b/images/cartoon-kitematic.png old mode 100644 new mode 100755 diff --git a/images/cartoon-kitematic@2x.png b/images/cartoon-kitematic@2x.png old mode 100644 new mode 100755 diff --git a/images/close.png b/images/close.png old mode 100644 new mode 100755 diff --git a/images/close@2x.png b/images/close@2x.png old mode 100644 new mode 100755 diff --git a/images/connect-art.png b/images/connect-art.png old mode 100644 new mode 100755 diff --git a/images/connect-art@2x.png b/images/connect-art@2x.png old mode 100644 new mode 100755 diff --git a/images/connect-to-hub.png b/images/connect-to-hub.png old mode 100644 new mode 100755 diff --git a/images/connect-to-hub@2x.png b/images/connect-to-hub@2x.png old mode 100644 new mode 100755 diff --git a/images/container-white.png b/images/container-white.png old mode 100644 new mode 100755 diff --git a/images/container-white@2x.png b/images/container-white@2x.png old mode 100644 new mode 100755 diff --git a/images/container.png b/images/container.png old mode 100644 new mode 100755 diff --git a/images/container@2x.png b/images/container@2x.png old mode 100644 new mode 100755 diff --git a/images/downloading-arrow-white.png b/images/downloading-arrow-white.png old mode 100644 new mode 100755 diff --git a/images/downloading-arrow-white@2x.png b/images/downloading-arrow-white@2x.png old mode 100644 new mode 100755 diff --git a/images/downloading-arrow.png b/images/downloading-arrow.png old mode 100644 new mode 100755 diff --git a/images/downloading-arrow@2x.png b/images/downloading-arrow@2x.png old mode 100644 new mode 100755 diff --git a/images/downloading-white.png b/images/downloading-white.png old mode 100644 new mode 100755 diff --git a/images/downloading-white@2x.png b/images/downloading-white@2x.png old mode 100644 new mode 100755 diff --git a/images/downloading.png b/images/downloading.png old mode 100644 new mode 100755 diff --git a/images/downloading@2x.png b/images/downloading@2x.png old mode 100644 new mode 100755 diff --git a/images/error.png b/images/error.png old mode 100644 new mode 100755 diff --git a/images/error@2x.png b/images/error@2x.png old mode 100644 new mode 100755 diff --git a/images/feedback.png b/images/feedback.png old mode 100644 new mode 100755 diff --git a/images/feedback@2x.png b/images/feedback@2x.png old mode 100644 new mode 100755 diff --git a/images/folder.png b/images/folder.png old mode 100644 new mode 100755 diff --git a/images/folder@2x.png b/images/folder@2x.png old mode 100644 new mode 100755 diff --git a/images/fullscreen.png b/images/fullscreen.png old mode 100644 new mode 100755 diff --git a/images/fullscreen@2x.png b/images/fullscreen@2x.png old mode 100644 new mode 100755 diff --git a/images/fullscreenclose.png b/images/fullscreenclose.png old mode 100644 new mode 100755 diff --git a/images/fullscreenclose@2x.png b/images/fullscreenclose@2x.png old mode 100644 new mode 100755 diff --git a/images/inspection.png b/images/inspection.png old mode 100644 new mode 100755 diff --git a/images/inspection@2x.png b/images/inspection@2x.png old mode 100644 new mode 100755 diff --git a/images/install-error.png b/images/install-error.png old mode 100644 new mode 100755 diff --git a/images/install-error@2x.png b/images/install-error@2x.png old mode 100644 new mode 100755 diff --git a/images/loading-white.png b/images/loading-white.png old mode 100644 new mode 100755 diff --git a/images/loading-white@2x.png b/images/loading-white@2x.png old mode 100644 new mode 100755 diff --git a/images/loading.png b/images/loading.png old mode 100644 new mode 100755 diff --git a/images/loading@2x.png b/images/loading@2x.png old mode 100644 new mode 100755 diff --git a/images/logo-active.png b/images/logo-active.png old mode 100644 new mode 100755 diff --git a/images/logo-active@2x.png b/images/logo-active@2x.png old mode 100644 new mode 100755 diff --git a/images/logo.png b/images/logo.png old mode 100644 new mode 100755 diff --git a/images/logo@2x.png b/images/logo@2x.png old mode 100644 new mode 100755 diff --git a/images/minimize.png b/images/minimize.png old mode 100644 new mode 100755 diff --git a/images/minimize@2x.png b/images/minimize@2x.png old mode 100644 new mode 100755 diff --git a/images/official.png b/images/official.png old mode 100644 new mode 100755 diff --git a/images/official@2x.png b/images/official@2x.png old mode 100644 new mode 100755 diff --git a/images/paused.png b/images/paused.png old mode 100644 new mode 100755 diff --git a/images/paused@2x.png b/images/paused@2x.png old mode 100644 new mode 100755 diff --git a/images/preferences.png b/images/preferences.png old mode 100644 new mode 100755 diff --git a/images/preferences@2x.png b/images/preferences@2x.png old mode 100644 new mode 100755 diff --git a/images/private.png b/images/private.png old mode 100644 new mode 100755 diff --git a/images/private@2x.png b/images/private@2x.png old mode 100644 new mode 100755 diff --git a/images/restarting.png b/images/restarting.png old mode 100644 new mode 100755 diff --git a/images/restarting@2x.png b/images/restarting@2x.png old mode 100644 new mode 100755 diff --git a/images/running-white.png b/images/running-white.png old mode 100644 new mode 100755 diff --git a/images/running-white@2x.png b/images/running-white@2x.png old mode 100644 new mode 100755 diff --git a/images/running.png b/images/running.png old mode 100644 new mode 100755 diff --git a/images/running@2x.png b/images/running@2x.png old mode 100644 new mode 100755 diff --git a/images/runningwave-white.png b/images/runningwave-white.png old mode 100644 new mode 100755 diff --git a/images/runningwave-white@2x.png b/images/runningwave-white@2x.png old mode 100644 new mode 100755 diff --git a/images/runningwave.png b/images/runningwave.png old mode 100644 new mode 100755 diff --git a/images/runningwave@2x.png b/images/runningwave@2x.png old mode 100644 new mode 100755 diff --git a/images/still-white.png b/images/still-white.png old mode 100644 new mode 100755 diff --git a/images/still-white@2x.png b/images/still-white@2x.png old mode 100644 new mode 100755 diff --git a/images/stopped-white.png b/images/stopped-white.png old mode 100644 new mode 100755 diff --git a/images/stopped-white@2x.png b/images/stopped-white@2x.png old mode 100644 new mode 100755 diff --git a/images/stopped.png b/images/stopped.png old mode 100644 new mode 100755 diff --git a/images/stopped@2x.png b/images/stopped@2x.png old mode 100644 new mode 100755 diff --git a/images/user.png b/images/user.png old mode 100644 new mode 100755 diff --git a/images/user@2x.png b/images/user@2x.png old mode 100644 new mode 100755 diff --git a/images/userdropdown.png b/images/userdropdown.png old mode 100644 new mode 100755 diff --git a/images/userdropdown@2x.png b/images/userdropdown@2x.png old mode 100644 new mode 100755 diff --git a/images/virtualbox.png b/images/virtualbox.png old mode 100644 new mode 100755 diff --git a/images/virtualbox@2x.png b/images/virtualbox@2x.png old mode 100644 new mode 100755 diff --git a/images/wavy-white.png b/images/wavy-white.png old mode 100644 new mode 100755 diff --git a/images/wavy-white@2x.png b/images/wavy-white@2x.png old mode 100644 new mode 100755 diff --git a/images/whaleicon.png b/images/whaleicon.png old mode 100644 new mode 100755 diff --git a/images/whaleicon@2x.png b/images/whaleicon@2x.png old mode 100644 new mode 100755 diff --git a/images/windows-close.png b/images/windows-close.png old mode 100644 new mode 100755 diff --git a/images/windows-close@2x.png b/images/windows-close@2x.png old mode 100644 new mode 100755 diff --git a/images/windows-fullscreen.png b/images/windows-fullscreen.png old mode 100644 new mode 100755 diff --git a/images/windows-fullscreen@2x.png b/images/windows-fullscreen@2x.png old mode 100644 new mode 100755 diff --git a/images/windows-fullscreenclose.png b/images/windows-fullscreenclose.png old mode 100644 new mode 100755 diff --git a/images/windows-fullscreenclose@2x.png b/images/windows-fullscreenclose@2x.png old mode 100644 new mode 100755 diff --git a/images/windows-minimize.png b/images/windows-minimize.png old mode 100644 new mode 100755 diff --git a/images/windows-minimize@2x.png b/images/windows-minimize@2x.png old mode 100644 new mode 100755 diff --git a/index.html b/index.html old mode 100644 new mode 100755 diff --git a/jest-integration.json b/jest-integration.json old mode 100644 new mode 100755 diff --git a/jest-unit.json b/jest-unit.json old mode 100644 new mode 100755 diff --git a/package-lock.json b/package-lock.json old mode 100644 new mode 100755 index 90c6328fd..ba9fc602c --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "Kitematic", - "version": "0.17.7", + "name": "KitematicnonOriginal", + "version": "0.17.10", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -62,9 +62,9 @@ } }, "@types/node": { - "version": "8.10.36", - "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.36.tgz", - "integrity": "sha512-SL6KhfM7PTqiFmbCW3eVNwVBZ+88Mrzbuvn9olPsfv43mbiWaFY+nRcz/TGGku0/lc2FepdMbImdMY1JrQ+zbw==", + "version": "8.10.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-8.10.54.tgz", + "integrity": "sha512-kaYyLYf6ICn6/isAyD4K1MyWWd5Q3JgH6bnMN089LUx88+s4W8GvK9Q6JMBVu5vsFFp7pMdSxdKmlBXwH/VFRg==", "dev": true }, "@types/react": { @@ -140,14 +140,14 @@ "dev": true }, "ajv": { - "version": "5.5.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "requires": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", + "fast-deep-equal": "^2.0.1", "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-keywords": { @@ -337,9 +337,7 @@ "aproba": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", - "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", - "dev": true, - "optional": true + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" }, "archiver": { "version": "1.3.0", @@ -395,8 +393,6 @@ "version": "1.1.5", "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", - "dev": true, - "optional": true, "requires": { "delegates": "^1.0.0", "readable-stream": "^2.0.6" @@ -2463,9 +2459,7 @@ "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true, - "optional": true + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" }, "continuable-cache": { "version": "0.3.1", @@ -2634,19 +2628,17 @@ "dev": true }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "optional": true, + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", "requires": { - "mimic-response": "^1.0.0" + "mimic-response": "^2.0.0" } }, "decompress-zip": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.0.tgz", - "integrity": "sha1-rjvLfjTGWHmt/nfhnDD4ZgK0vbA=", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/decompress-zip/-/decompress-zip-0.3.2.tgz", + "integrity": "sha512-Ab1QY4LrWMrUuo53lLnmGOby7v8ryqxJ+bKibKSiPisx+25mhut1dScVBXAYx14i/PqSrFZvR2FRRazhLbvL+g==", "requires": { "binary": "^0.3.0", "graceful-fs": "^4.1.3", @@ -2778,9 +2770,7 @@ "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", - "dev": true, - "optional": true + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" }, "depd": { "version": "1.1.0", @@ -2803,11 +2793,9 @@ } }, "detect-libc": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz", - "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=", - "dev": true, - "optional": true + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" }, "detect-newline": { "version": "2.1.0", @@ -3433,9 +3421,9 @@ }, "dependencies": { "asar": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/asar/-/asar-0.14.5.tgz", - "integrity": "sha512-2Di/TnY1sridHFKMFgxBh0Wk0gVxSZN4qQhRhjJn3UywZAvP5MHI0RNVSkpzmJ+n6t0BC8w/+1257wtSgQ3Kdg==", + "version": "0.14.6", + "resolved": "https://registry.npmjs.org/asar/-/asar-0.14.6.tgz", + "integrity": "sha512-ZqybKcdO5At6y3ge2RHxVImc6Eltb2t3sxT7lk4T4zjZBSFUuIGCIZY6f41dCjlvJSizN5QPRr8YTgMhpgBjLg==", "dev": true, "requires": { "chromium-pickle-js": "^0.2.0", @@ -3444,7 +3432,7 @@ "glob": "^6.0.4", "minimatch": "^3.0.3", "mkdirp": "^0.5.0", - "mksnapshot": "^0.3.0", + "mksnapshot": "^0.3.4", "tmp": "0.0.28" } }, @@ -3790,9 +3778,9 @@ } }, "es6-promise": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.5.tgz", - "integrity": "sha512-n6wvpdE43VFtJq+lUDYDBFUwV8TZbuGXLV4D6wKafg13ldznKsyEvatubnmUe31zcvelSzOHF+XbaT+Bl9ObDg==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", "dev": true }, "escape-string-regexp": { @@ -3874,6 +3862,18 @@ "text-table": "~0.2.0" }, "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.0" + } + }, "ansi-regex": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", @@ -3900,12 +3900,24 @@ "supports-color": "^5.3.0" } }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", @@ -4086,11 +4098,9 @@ } }, "expand-template": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", - "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", - "dev": true, - "optional": true + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==" }, "expand-tilde": { "version": "2.0.2", @@ -4271,9 +4281,9 @@ } }, "fast-deep-equal": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", - "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", + "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=" }, "fast-json-stable-stringify": { "version": "2.0.0", @@ -4442,19 +4452,28 @@ } }, "flora-colossus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.0.tgz", - "integrity": "sha1-VHKcNh7ezuAU3UQWeeGjfB13OkU=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/flora-colossus/-/flora-colossus-1.0.1.tgz", + "integrity": "sha512-d+9na7t9FyH8gBJoNDSi28mE4NgQVGGvxQ4aHtFRetjyh5SXjuus+V5EZaxFmFdXVemSOrx0lsgEl/ZMjnOWJA==", "dev": true, "requires": { - "debug": "^3.1.0", - "fs-extra": "^4.0.0" + "debug": "^4.1.1", + "fs-extra": "^7.0.0" }, "dependencies": { + "debug": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", + "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, "fs-extra": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", - "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -4588,14 +4607,14 @@ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.4.tgz", - "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", + "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", "dev": true, "optional": true, "requires": { - "nan": "^2.9.2", - "node-pre-gyp": "^0.10.0" + "nan": "^2.12.1", + "node-pre-gyp": "^0.12.0" }, "dependencies": { "abbrev": { @@ -4617,7 +4636,7 @@ "optional": true }, "are-we-there-yet": { - "version": "1.1.4", + "version": "1.1.5", "bundled": true, "dev": true, "optional": true, @@ -4643,7 +4662,7 @@ } }, "chownr": { - "version": "1.0.1", + "version": "1.1.1", "bundled": true, "dev": true, "optional": true @@ -4673,16 +4692,16 @@ "optional": true }, "debug": { - "version": "2.6.9", + "version": "4.1.1", "bundled": true, "dev": true, "optional": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } }, "deep-extend": { - "version": "0.5.1", + "version": "0.6.0", "bundled": true, "dev": true, "optional": true @@ -4731,7 +4750,7 @@ } }, "glob": { - "version": "7.1.2", + "version": "7.1.3", "bundled": true, "dev": true, "optional": true, @@ -4751,12 +4770,12 @@ "optional": true }, "iconv-lite": { - "version": "0.4.21", + "version": "0.4.24", "bundled": true, "dev": true, "optional": true, "requires": { - "safer-buffer": "^2.1.0" + "safer-buffer": ">= 2.1.2 < 3" } }, "ignore-walk": { @@ -4821,17 +4840,17 @@ "optional": true }, "minipass": { - "version": "2.2.4", + "version": "2.3.5", "bundled": true, "dev": true, "optional": true, "requires": { - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.0" } }, "minizlib": { - "version": "1.1.0", + "version": "1.2.1", "bundled": true, "dev": true, "optional": true, @@ -4849,35 +4868,42 @@ } }, "ms": { - "version": "2.0.0", + "version": "2.1.1", "bundled": true, "dev": true, "optional": true }, + "nan": { + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==", + "dev": true, + "optional": true + }, "needle": { - "version": "2.2.0", + "version": "2.3.0", "bundled": true, "dev": true, "optional": true, "requires": { - "debug": "^2.1.2", + "debug": "^4.1.0", "iconv-lite": "^0.4.4", "sax": "^1.2.4" } }, "node-pre-gyp": { - "version": "0.10.0", + "version": "0.12.0", "bundled": true, "dev": true, "optional": true, "requires": { "detect-libc": "^1.0.2", "mkdirp": "^0.5.1", - "needle": "^2.2.0", + "needle": "^2.2.1", "nopt": "^4.0.1", "npm-packlist": "^1.1.6", "npmlog": "^4.0.2", - "rc": "^1.1.7", + "rc": "^1.2.7", "rimraf": "^2.6.1", "semver": "^5.3.0", "tar": "^4" @@ -4894,13 +4920,13 @@ } }, "npm-bundled": { - "version": "1.0.3", + "version": "1.0.6", "bundled": true, "dev": true, "optional": true }, "npm-packlist": { - "version": "1.1.10", + "version": "1.4.1", "bundled": true, "dev": true, "optional": true, @@ -4977,12 +5003,12 @@ "optional": true }, "rc": { - "version": "1.2.7", + "version": "1.2.8", "bundled": true, "dev": true, "optional": true, "requires": { - "deep-extend": "^0.5.1", + "deep-extend": "^0.6.0", "ini": "~1.3.0", "minimist": "^1.2.0", "strip-json-comments": "~2.0.1" @@ -5012,16 +5038,16 @@ } }, "rimraf": { - "version": "2.6.2", + "version": "2.6.3", "bundled": true, "dev": true, "optional": true, "requires": { - "glob": "^7.0.5" + "glob": "^7.1.3" } }, "safe-buffer": { - "version": "5.1.1", + "version": "5.1.2", "bundled": true, "dev": true, "optional": true @@ -5039,7 +5065,7 @@ "optional": true }, "semver": { - "version": "5.5.0", + "version": "5.7.0", "bundled": true, "dev": true, "optional": true @@ -5092,17 +5118,17 @@ "optional": true }, "tar": { - "version": "4.4.1", + "version": "4.4.8", "bundled": true, "dev": true, "optional": true, "requires": { - "chownr": "^1.0.1", + "chownr": "^1.1.1", "fs-minipass": "^1.2.5", - "minipass": "^2.2.4", - "minizlib": "^1.1.0", + "minipass": "^2.3.4", + "minizlib": "^1.1.1", "mkdirp": "^0.5.0", - "safe-buffer": "^5.1.1", + "safe-buffer": "^5.1.2", "yallist": "^3.0.2" } }, @@ -5113,12 +5139,12 @@ "optional": true }, "wide-align": { - "version": "1.1.2", + "version": "1.1.3", "bundled": true, "dev": true, "optional": true, "requires": { - "string-width": "^1.0.2" + "string-width": "^1.0.2 || 2" } }, "wrappy": { @@ -5128,7 +5154,7 @@ "optional": true }, "yallist": { - "version": "3.0.2", + "version": "3.0.3", "bundled": true, "dev": true, "optional": true @@ -5203,8 +5229,6 @@ "version": "2.7.4", "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "optional": true, "requires": { "aproba": "^1.0.3", "console-control-strings": "^1.0.0", @@ -5361,9 +5385,7 @@ "github-from-package": { "version": "0.0.0", "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", - "dev": true, - "optional": true + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=" }, "glob": { "version": "7.1.3", @@ -5478,9 +5500,9 @@ "dev": true }, "grunt": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.3.tgz", - "integrity": "sha512-/JzmZNPfKorlCrrmxWqQO4JVodO+DVd5XX4DkocL/1WlLlKVLE9+SdEIempOAxDhWPysLle6afvn/hg7Ck2k9g==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", + "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", "dev": true, "requires": { "coffeescript": "~1.10.0", @@ -5494,7 +5516,7 @@ "grunt-legacy-log": "~2.0.0", "grunt-legacy-util": "~1.1.1", "iconv-lite": "~0.4.13", - "js-yaml": "~3.5.2", + "js-yaml": "~3.13.0", "minimatch": "~3.0.2", "mkdirp": "~0.5.1", "nopt": "~3.0.6", @@ -5502,12 +5524,6 @@ "rimraf": "~2.6.2" }, "dependencies": { - "esprima": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-2.7.3.tgz", - "integrity": "sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE=", - "dev": true - }, "glob": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", @@ -5534,16 +5550,6 @@ "resolve": "~1.1.0" } }, - "js-yaml": { - "version": "3.5.5", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.5.5.tgz", - "integrity": "sha1-A3fDgBfKvHMisNH7zSWkkWQfL74=", - "dev": true, - "requires": { - "argparse": "^1.0.2", - "esprima": "^2.6.0" - } - }, "resolve": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", @@ -5636,11 +5642,111 @@ "stream-buffers": "^2.1.0" }, "dependencies": { + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "optional": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "detect-libc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-0.2.0.tgz", + "integrity": "sha1-R/31ZzSKF+wl/L8LnkRjSKdvn7U=", + "dev": true, + "optional": true + }, + "expand-template": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-1.1.1.tgz", + "integrity": "sha512-cebqLtV8KOZfw0UI8TEFWxtczxxC1jvyUvx6H4fyp1K1FN7A4Q+uggVUlOsI1K8AGU0rwOGqP8nCapdrw8CYQg==", + "dev": true, + "optional": true + }, + "iltorb": { + "version": "1.3.10", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz", + "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^0.2.0", + "nan": "^2.6.2", + "node-gyp": "^3.6.2", + "prebuild-install": "^2.3.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "optional": true + }, + "prebuild-install": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", + "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", + "dev": true, + "optional": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^1.0.2", + "github-from-package": "0.0.0", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "node-abi": "^2.2.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "os-homedir": "^1.0.1", + "pump": "^2.0.1", + "rc": "^1.1.6", + "simple-get": "^2.7.0", + "tar-fs": "^1.13.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + }, + "dependencies": { + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true, + "optional": true + } + } + }, "pretty-bytes": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-4.0.2.tgz", "integrity": "sha1-sr+C5zUNZcbDOqlaqlpPYyf2HNk=", "dev": true + }, + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "optional": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "simple-get": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", + "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", + "dev": true, + "optional": true, + "requires": { + "decompress-response": "^3.3.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } } } }, @@ -5786,9 +5892,9 @@ } }, "chalk": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", - "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -5923,6 +6029,29 @@ "requires": { "ajv": "^5.3.0", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=" + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + } } }, "has": { @@ -5958,9 +6087,7 @@ "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", - "dev": true, - "optional": true + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" }, "has-value": { "version": "1.0.0", @@ -6033,9 +6160,9 @@ } }, "home-path": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.6.tgz", - "integrity": "sha512-wo+yjrdAtoXt43Vy92a+0IPCYViiyLAHyp0QVS4xL/tfvVz5sXIW1ubLZk3nhVkD92fQpUMKX+fzMjr5F489vw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.7.tgz", + "integrity": "sha512-tM1pVa+u3ZqQwIkXcWfhUlY3HWS3TsnKsfi2OHHvnhkX52s9etyktPyy1rQotkr0euWimChDq+QkQuDe8ngUlQ==", "dev": true }, "homedir-polyfill": { @@ -6104,16 +6231,15 @@ "dev": true }, "iltorb": { - "version": "1.3.10", - "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-1.3.10.tgz", - "integrity": "sha512-nyB4+ru1u8CQqQ6w7YjasboKN3NQTN8GH/V/eEssNRKhW6UbdxdWhB9fJ5EEdjJfezKY0qPrcwLyIcgjL8hHxA==", - "dev": true, - "optional": true, + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/iltorb/-/iltorb-2.4.3.tgz", + "integrity": "sha512-cr/kC07Cf9sW3TWH7yUxV2QkNjby4LMCsXGmxPCQs5x//QzTpF3GLPNY7L66G+DkNGaTRCgY+vYZ+dyAcuDOnQ==", "requires": { - "detect-libc": "^0.2.0", - "nan": "^2.6.2", - "node-gyp": "^3.6.2", - "prebuild-install": "^2.3.0" + "detect-libc": "^1.0.3", + "nan": "^2.13.2", + "npmlog": "^4.1.2", + "prebuild-install": "^5.3.0", + "which-pm-runs": "^1.0.0" } }, "image-exists": { @@ -6176,8 +6302,7 @@ "ini": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" }, "inquirer": { "version": "3.3.0", @@ -7847,9 +7972,9 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=" }, "json-schema-traverse": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", - "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -8678,11 +8803,9 @@ "dev": true }, "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "optional": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.0.0.tgz", + "integrity": "sha512-8ilDoEapqA4uQ3TwS0jakGONKXVJqpy+RpM+3b7pLdOjghCrEiGp9SRkFbUHAmZW9vdnrENWHjaweIoTIJExSQ==" }, "minimatch": { "version": "3.0.4", @@ -8743,13 +8866,13 @@ "integrity": "sha1-dVSm+Nhxg0zJe1RisSLEwSTW3pE=" }, "mksnapshot": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.1.tgz", - "integrity": "sha1-JQHAVldDbXQs6Vik/5LHfkDdN+Y=", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/mksnapshot/-/mksnapshot-0.3.5.tgz", + "integrity": "sha512-PSBoZaj9h9myC3uRRW62RxmX8mrN3XbOkMEyURUD7v5CeJgtYTar50XU738t7Q0LtG1pBPtp5n5QwDGggRnEvw==", "requires": { - "decompress-zip": "0.3.0", + "decompress-zip": "0.3.x", "fs-extra": "0.26.7", - "request": "^2.79.0" + "request": "2.x" }, "dependencies": { "fs-extra": { @@ -8790,11 +8913,9 @@ "dev": true }, "nan": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/nan/-/nan-2.11.1.tgz", - "integrity": "sha512-iji6k87OSXa0CcrLl9z+ZiYSuR2o+c0bGuNmXdrhTQTakxytAFsC56SArGYoiHlJlFoHSnvmhpceZJaXkVuOtA==", - "dev": true, - "optional": true + "version": "2.14.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz", + "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==" }, "nanomatch": { "version": "1.2.13", @@ -8835,6 +8956,11 @@ } } }, + "napi-build-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.1.tgz", + "integrity": "sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA==" + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -8851,8 +8977,6 @@ "version": "2.11.0", "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.11.0.tgz", "integrity": "sha512-kuy/aEg75u40v378WRllQ4ZexaXJiCvB68D2scDXclp/I4cRq6togpbOoKhmN07tns9Zldu51NNERo0wehfX9g==", - "dev": true, - "optional": true, "requires": { "semver": "^5.4.1" } @@ -8923,9 +9047,7 @@ "noop-logger": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", - "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", - "dev": true, - "optional": true + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, "nopt": { "version": "3.0.6", @@ -8968,8 +9090,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", - "dev": true, - "optional": true, "requires": { "are-we-there-yet": "~1.1.2", "console-control-strings": "~1.1.0", @@ -9626,46 +9746,89 @@ "dev": true }, "prebuild-install": { - "version": "2.5.3", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-2.5.3.tgz", - "integrity": "sha512-/rI36cN2g7vDQnKWN8Uzupi++KjyqS9iS+/fpwG4Ea8d0Pip0PQ5bshUNzVwt+/D2MRfhVAplYMMvWLqWrCF/g==", - "dev": true, - "optional": true, + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.2.tgz", + "integrity": "sha512-INDfXzTPnhT+WYQemqnAXlP7SvfiFMopMozSgXCZ+RDLb279gKfIuLk4o7PgEawLp3WrMgIYGBpkxpraROHsSA==", "requires": { "detect-libc": "^1.0.3", - "expand-template": "^1.0.2", + "expand-template": "^2.0.3", "github-from-package": "0.0.0", "minimist": "^1.2.0", "mkdirp": "^0.5.1", - "node-abi": "^2.2.0", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", "noop-logger": "^0.1.1", "npmlog": "^4.0.1", - "os-homedir": "^1.0.1", - "pump": "^2.0.1", - "rc": "^1.1.6", - "simple-get": "^2.7.0", - "tar-fs": "^1.13.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", "tunnel-agent": "^0.6.0", "which-pm-runs": "^1.0.0" }, "dependencies": { - "detect-libc": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", - "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", - "dev": true, - "optional": true + "bl": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-3.0.0.tgz", + "integrity": "sha512-EUAyP5UHU5hxF8BPT0LKW8gjYLhq1DQIcneOX/pL/m2Alo+OYDQAJlHq+yseMP50Os2nHXOSic6Ss3vSQeyf4A==", + "requires": { + "readable-stream": "^3.0.1" + } }, "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "optional": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" } + }, + "readable-stream": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==" + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "tar-fs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz", + "integrity": "sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==", + "requires": { + "chownr": "^1.1.1", + "mkdirp": "^0.5.1", + "pump": "^3.0.0", + "tar-stream": "^2.0.0" + } + }, + "tar-stream": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz", + "integrity": "sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==", + "requires": { + "bl": "^3.0.0", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + } } } }, @@ -9732,8 +9895,7 @@ "process-nextick-args": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=" }, "progress": { "version": "2.0.3", @@ -9851,7 +10013,6 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -9860,9 +10021,9 @@ } }, "rcedit": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.1.tgz", - "integrity": "sha512-6NjOhOpkvbc/gpMEfk2hpXuWyHfbLFN8as5jx3jf4bhELvouRoYvc8d/W3NVVPwEBF1ICfbpwp1oRm8OJ2WDWw==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/rcedit/-/rcedit-1.1.2.tgz", + "integrity": "sha512-z2ypB4gbINhI6wVe0JJMmdpmOpmNc4g90sE6/6JSuch5kYnjfz9CxvVPqqhShgR6GIkmtW3W2UlfiXhWljA0Fw==", "dev": true }, "react": { @@ -10010,7 +10171,6 @@ "version": "2.0.6", "resolved": "http://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", - "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.1", @@ -11179,24 +11339,19 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" }, "simple-concat": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.0.tgz", - "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=", - "dev": true, - "optional": true + "integrity": "sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY=" }, "simple-get": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-2.8.1.tgz", - "integrity": "sha512-lSSHRSw3mQNUGPAYRqo7xy9dhKmxFXIjLjp4KHpf99GEH2VH7C3AM+Qfx6du6jhfUi6Vm7XnbEVEf7Wb6N8jRw==", - "dev": true, - "optional": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", "requires": { - "decompress-response": "^3.3.0", + "decompress-response": "^4.2.0", "once": "^1.3.1", "simple-concat": "^1.0.0" } @@ -11612,8 +11767,7 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" }, "sumchecker": { "version": "1.3.1", @@ -11668,6 +11822,18 @@ "string-width": "^2.1.1" }, "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.0" + } + }, "ajv-keywords": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz", @@ -11700,12 +11866,24 @@ "supports-color": "^5.3.0" } }, + "fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ=", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", "dev": true }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, "string-width": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", @@ -12224,38 +12402,15 @@ } }, "union-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", - "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { "arr-union": "^3.1.0", "get-value": "^2.0.6", "is-extendable": "^0.1.1", - "set-value": "^0.4.3" - }, - "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.0" - } - }, - "set-value": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz", - "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.1", - "to-object-path": "^0.3.0" - } - } + "set-value": "^2.0.1" } }, "unique-string": { @@ -12378,7 +12533,6 @@ "version": "4.2.2", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, "requires": { "punycode": "^2.1.0" }, @@ -12386,8 +12540,7 @@ "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" } } }, @@ -12574,16 +12727,12 @@ "which-pm-runs": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", - "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", - "dev": true, - "optional": true + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=" }, "wide-align": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", - "dev": true, - "optional": true, "requires": { "string-width": "^1.0.2 || 2" } diff --git a/package.json b/package.json old mode 100644 new mode 100755 index 669522771..3b0a04dfe --- a/package.json +++ b/package.json @@ -1,37 +1,26 @@ { - "name": "Kitematic", - "version": "0.17.9", + "name": "KitematicnonOriginal", + "version": "0.17.10", "author": "Kitematic", "license": "Apache-2.0", "description": "Simple Docker Container management for Mac OS X, Windows and Ubuntu.", "homepage": "https://kitematic.com/", "main": "browser.js", + "scripts": { + "test": "grunt" + }, "repository": { "type": "git", "url": "git@github.com:kitematic/kitematic.git" }, - "bugs": "https://github.com/kitematic/kitematic/issues", + "bugs": "https://github.com/trackhe/kitematic/issues", "engines": { "node": "<10.0.0" }, - "scripts": { - "build": "tsc && npm run tslint", - "integration": "jest -c jest-integration.json", - "prestart": "npm run build", - "release:debian:x32": "grunt release:debian:x32", - "release:debian:x64": "grunt release:debian:x64", - "release:redhat:x32": "grunt release:redhat:x32", - "release:redhat:x64": "grunt release:redhat:x64", - "release:mac": "grunt release:mac", - "release:windows": "grunt release:windows", - "start": "grunt", - "start-dev": "NODE_ENV=development grunt", - "test": "jest -c jest-unit.json", - "tslint": "tslint --fix --project ./tsconfig.json" - }, "electron-version": "1.8.8", "dependencies": { "JSONStream": "1.3.2", + "ajv": "^6.10.2", "alt": "0.16.10", "ansi-to-html": "0.3.0", "any-promise": "0.1.0", @@ -42,7 +31,9 @@ "cached-request": "1.1.2", "classnames": "2.2.5", "deep-extend": "^0.6.0", + "detect-libc": "^1.0.3", "dockerode": "2.5.8", + "iltorb": "^2.4.3", "install": "0.1.8", "jquery": "^3.4.1", "mixpanel": "kitematic/mixpanel-node", @@ -52,6 +43,7 @@ "object-assign": "4.1.1", "osx-release": "1.1.0", "parseUri": "1.2.3-2", + "prebuild-install": "^5.3.2", "react": "0.13.3", "react-bootstrap": "0.20.3", "react-retina-image": "1.3.3", @@ -72,12 +64,12 @@ "babel-preset-env": "^1.7.0", "babel-preset-react": "^6.24.1", "braces": "^2.3.1", - "electron": "1.8.8", + "electron": "^1.8.8", "electron-builder": "^20.28.4", - "electron-packager": "^12.1.1", + "electron-packager": "^12.2.0", "eslint": "^4.18.2", "eslint-plugin-react": "3.16.1", - "grunt": "^1.0.3", + "grunt": "^1.0.4", "grunt-babel": "^7.0.0", "grunt-chmod": "1.1.1", "grunt-cli": "^1.3.1", diff --git a/resources/MSYS_LICENSE b/resources/MSYS_LICENSE old mode 100644 new mode 100755 diff --git a/resources/OPENSSH_LICENSE b/resources/OPENSSH_LICENSE old mode 100644 new mode 100755 diff --git a/resources/msys-1.0.dll b/resources/msys-1.0.dll old mode 100644 new mode 100755 diff --git a/resources/msys-crypto-1.0.0.dll b/resources/msys-crypto-1.0.0.dll old mode 100644 new mode 100755 diff --git a/resources/msys-minires.dll b/resources/msys-minires.dll old mode 100644 new mode 100755 diff --git a/resources/msys-z.dll b/resources/msys-z.dll old mode 100644 new mode 100755 diff --git a/resources/ssh.exe b/resources/ssh.exe old mode 100644 new mode 100755 diff --git a/src/actions/AccountActions.js b/src/actions/AccountActions.js old mode 100644 new mode 100755 index fce7e9ebd..de5c68252 --- a/src/actions/AccountActions.js +++ b/src/actions/AccountActions.js @@ -7,11 +7,6 @@ class AccountActions { hub.login(username, password); } - signup (username, password, email, subscribe) { - this.dispatch({}); - hub.signup(username, password, email, subscribe); - } - logout () { this.dispatch({}); hub.logout(); diff --git a/src/actions/AccountServerActions.js b/src/actions/AccountServerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/ContainerActions.js b/src/actions/ContainerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/ContainerServerActions.js b/src/actions/ContainerServerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/ImageActions.js b/src/actions/ImageActions.js old mode 100644 new mode 100755 diff --git a/src/actions/ImageServerActions.js b/src/actions/ImageServerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/NetworkActions.js b/src/actions/NetworkActions.js old mode 100644 new mode 100755 diff --git a/src/actions/RepositoryActions.js b/src/actions/RepositoryActions.js old mode 100644 new mode 100755 diff --git a/src/actions/RepositoryServerActions.js b/src/actions/RepositoryServerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/SetupActions.js b/src/actions/SetupActions.js old mode 100644 new mode 100755 diff --git a/src/actions/SetupServerActions.js b/src/actions/SetupServerActions.js old mode 100644 new mode 100755 diff --git a/src/actions/TagActions.js b/src/actions/TagActions.js old mode 100644 new mode 100755 diff --git a/src/actions/TagServerActions.js b/src/actions/TagServerActions.js old mode 100644 new mode 100755 diff --git a/src/alt.js b/src/alt.js old mode 100644 new mode 100755 diff --git a/src/app.js b/src/app.js old mode 100644 new mode 100755 diff --git a/src/browser.js b/src/browser.js old mode 100644 new mode 100755 diff --git a/src/components/About.react.js b/src/components/About.react.js old mode 100644 new mode 100755 diff --git a/src/components/Account.react.js b/src/components/Account.react.js old mode 100644 new mode 100755 diff --git a/src/components/AccountLogin.react.js b/src/components/AccountLogin.react.js old mode 100644 new mode 100755 index ff3b49214..d05b261cc --- a/src/components/AccountLogin.react.js +++ b/src/components/AccountLogin.react.js @@ -56,14 +56,11 @@ module.exports = React.createClass({ }, handleClickSignup: function () { - if (!this.props.loading) { - this.replaceWith('signup'); - metrics.track('Switched to Sign Up'); - } + shell.openExternal('https://hub.docker.com/signup/'); }, handleClickForgotPassword: function () { - shell.openExternal('https://hub.docker.com/reset-password/'); + shell.openExternal('https://id.docker.com/reset-password/?service=43f17c5f-9ba4-4f13-853d-9d0074e349a7'); }, render: function () { diff --git a/src/components/AccountSignup.react.js b/src/components/AccountSignup.react.js deleted file mode 100644 index f1a23ff47..000000000 --- a/src/components/AccountSignup.react.js +++ /dev/null @@ -1,91 +0,0 @@ -import _ from 'underscore'; -import React from 'react/addons'; -import Router from 'react-router'; -import validator from 'validator'; -import accountActions from '../actions/AccountActions'; -import metrics from '../utils/MetricsUtil'; - -module.exports = React.createClass({ - mixins: [Router.Navigation, React.addons.LinkedStateMixin], - - getInitialState: function () { - return { - username: '', - password: '', - email: '', - subscribe: true, - errors: {} - }; - }, - - componentDidMount: function () { - React.findDOMNode(this.refs.usernameInput).focus(); - }, - - componentWillReceiveProps: function (nextProps) { - this.setState({errors: nextProps.errors}); - }, - - validate: function () { - let errors = {}; - if (!validator.isLowercase(this.state.username) || !validator.isAlphanumeric(this.state.username) || !validator.isLength(this.state.username, 4, 30)) { - errors.username = 'Must be 4-30 lower case letters or numbers'; - } - - if (!validator.isLength(this.state.password, 5)) { - errors.password = 'Must be at least 5 characters long'; - } - - if (!validator.isEmail(this.state.email)) { - errors.email = 'Must be a valid email address'; - } - return errors; - }, - - handleBlur: function () { - this.setState({errors: _.omit(this.validate(), (val, key) => !this.state[key].length)}); - }, - - handleSignUp: function () { - let errors = this.validate(); - this.setState({errors}); - - if (_.isEmpty(errors)) { - accountActions.signup(this.state.username, this.state.password, this.state.email, this.state.subscribe); - metrics.track('Clicked Sign Up'); - } - }, - - handleClickLogin: function () { - if (!this.props.loading) { - this.replaceWith('login'); - metrics.track('Switched to Log In'); - } - }, - - render: function () { - let loading = this.props.loading ?
: null; - return ( -
- -

{this.state.errors.username}

- -

{this.state.errors.email}

- -

{this.state.errors.password}

-
- -
-

{this.state.errors.detail}

-
- {loading} - -
-
-
Already have an account? Log In
-
- ); - } -}); diff --git a/src/components/ContainerDetails.react.js b/src/components/ContainerDetails.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerDetailsHeader.react.js b/src/components/ContainerDetailsHeader.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerDetailsSubheader.react.js b/src/components/ContainerDetailsSubheader.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerHome.react.js b/src/components/ContainerHome.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerHomeFolders.react.js b/src/components/ContainerHomeFolders.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerHomeIpPortsPreview.react.js b/src/components/ContainerHomeIpPortsPreview.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerHomeLogs.react.js b/src/components/ContainerHomeLogs.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerList.react.js b/src/components/ContainerList.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerListItem.react.js b/src/components/ContainerListItem.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerProgress.react.js b/src/components/ContainerProgress.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettings.react.js b/src/components/ContainerSettings.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettingsAdvanced.react.js b/src/components/ContainerSettingsAdvanced.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettingsGeneral.react.js b/src/components/ContainerSettingsGeneral.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettingsNetwork.react.js b/src/components/ContainerSettingsNetwork.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettingsPorts.react.js b/src/components/ContainerSettingsPorts.react.js old mode 100644 new mode 100755 diff --git a/src/components/ContainerSettingsVolumes.react.js b/src/components/ContainerSettingsVolumes.react.js old mode 100644 new mode 100755 index 9c7f244ef..8f4ab0929 --- a/src/components/ContainerSettingsVolumes.react.js +++ b/src/components/ContainerSettingsVolumes.react.js @@ -9,6 +9,28 @@ import metrics from '../utils/MetricsUtil'; import containerActions from '../actions/ContainerActions'; var ContainerSettingsVolumes = React.createClass({ + getInitialState: function () { + let container = this.props.container; + + if (!container) { + return false; + } + let mounts = _.clone(container.Mounts); + + mounts.push({ + Destination: undefined, + Mode: 'rw', + Propagation: 'rpirvate', + RW: true, + Source: undefined, + Type: 'bind' + }); + + return { + containerName: container.Name, + mounts + } + }, handleChooseVolumeClick: function (dockerVol) { dialog.showOpenDialog({properties: ['openDirectory', 'createDirectory']}, (filenames) => { if (!filenames) { @@ -28,7 +50,7 @@ var ContainerSettingsVolumes = React.createClass({ metrics.track('Choose Directory for Volume'); - let mounts = _.clone(this.props.container.Mounts); + let mounts = _.clone(this.state.mounts); _.each(mounts, m => { if (m.Destination === dockerVol) { m.Source = util.windowsToLinuxPath(directory); @@ -36,8 +58,8 @@ var ContainerSettingsVolumes = React.createClass({ } }); - let binds = mounts.map(m => { - return m.Source + ':' + m.Destination; + this.setState({ + mounts }); let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); @@ -50,7 +72,7 @@ var ContainerSettingsVolumes = React.createClass({ from: 'settings' }); - let mounts = _.clone(this.props.container.Mounts); + let mounts = _.clone(this.state.mounts); _.each(mounts, m => { if (m.Destination === dockerVol) { m.Source = null; @@ -58,13 +80,10 @@ var ContainerSettingsVolumes = React.createClass({ } }); - let binds = mounts.map(m => { - return m.Source + ':' + m.Destination; + this.setState({ + mounts }); - let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); - - containerActions.update(this.props.container.Name, {Mounts: mounts, HostConfig: hostConfig}); }, handleOpenVolumeClick: function (path) { metrics.track('Opened Volume Directory', { @@ -76,13 +95,62 @@ var ContainerSettingsVolumes = React.createClass({ shell.showItemInFolder(path); } }, + handleAddVolume: function () { + let mounts = _.clone(this.state.mounts); + + // undefined is clearer when reading the code + mounts.push({ + Destination: undefined, + Mode: 'rw', + Propagation: 'rpirvate', + RW: true, + Source: undefined, + Type: 'bind' + }); + + this.setState({ + mounts + }); + + metrics.track('Adding Pending Volume') +}, +handleRemoveVolume: function (index) { + let mounts = this.state.mounts.filter((val, idx) => idx !== index); + + this.setState({ + mounts + }); + + metrics.track('Removed Volume') +}, +handleDestinationChanged: function (index, event) { + let mounts = _.clone(this.state.mounts); + mounts[index].Destination = event.target.value; + + this.setState({ + mounts + }); +}, +handleSaveVolumes: function() { + let mounts = this.state.mounts; + let binds = mounts.filter(m => { + // Filter out everything that is empty/null + return !(!m.Destination || !m.Source || m.Destination === '' || m.Source === ''); + }).map(m => { + return m.Source + ':' + m.Destination; + }); + + let hostConfig = _.extend(this.props.container.HostConfig, {Binds: binds}); + + containerActions.update(this.props.container.Name, {Mounts: mounts, HostConfig: hostConfig}); + }, render: function () { if (!this.props.container) { return false; } var homeDir = util.isWindows() ? util.windowsToLinuxPath(util.home()) : util.home(); - var mounts = _.map(this.props.container.Mounts, (m, i) => { + var mounts = _.map(this.state.mounts, (m, index) => { let source = m.Source, destination = m.Destination; if (!m.Source || (!util.isNative() && m.Source.indexOf(homeDir) === -1) || (m.Source.indexOf('/var/lib/docker/volumes') !== -1)) { source = ( @@ -94,9 +162,23 @@ var ContainerSettingsVolumes = React.createClass({ {local.replace(process.env.HOME, '~')} ); } + + let icon; + if (index === this.state.mounts.length - 1) { + icon = ; + } else { + icon = ; + } + return ( {destination} + + + {source} Change @@ -121,6 +203,9 @@ var ContainerSettingsVolumes = React.createClass({ {mounts} +
+ Save +
); diff --git a/src/components/Containers.react.js b/src/components/Containers.react.js old mode 100644 new mode 100755 index e333938f2..1703c97a0 --- a/src/components/Containers.react.js +++ b/src/components/Containers.react.js @@ -8,6 +8,7 @@ import Header from './Header.react'; import metrics from '../utils/MetricsUtil'; import {shell} from 'electron'; import machine from '../utils/DockerMachineUtil'; +import docker from '../utils/DockerUtil'; var Containers = React.createClass({ contextTypes: { @@ -112,7 +113,19 @@ var Containers = React.createClass({ metrics.track('Opened Issue Reporter', { from: 'app' }); - shell.openExternal('https://github.com/docker/kitematic'); + shell.openExternal('https://github.com/docker/kitematic/issues/new'); + }, + + refreshContainerList: function ($event) { + let btn = $event.target; + btn.disabled = true; + btn.className += ' refreshing'; + docker.fetchAllContainers(); + // rotate for one second + setTimeout(() => { + btn.className = 'btn btn-action btn-refresh'; + btn.disabled = false; + }, 1000); }, render: function () { @@ -129,6 +142,9 @@ var Containers = React.createClass({

Containers

+
New diff --git a/src/components/Header.react.js b/src/components/Header.react.js old mode 100644 new mode 100755 diff --git a/src/components/ImageCard.react.js b/src/components/ImageCard.react.js old mode 100644 new mode 100755 index b3ce231ae..4632f97d2 --- a/src/components/ImageCard.react.js +++ b/src/components/ImageCard.react.js @@ -178,7 +178,9 @@ var ImageCard = React.createClass({ } else if (this.state.tags.length === 0) { tags =
No Tags
; } else { - var tagDisplay = this.state.tags.filter(tag => tag.name.includes(this.state.searchTag)).map((tag) => { + var tagDisplay = this.state.tags.filter( + tag => (typeof tag === 'string' ? tag : tag.name).includes(this.state.searchTag) + ).map((tag) => { let t = ''; if (tag.name) { t = tag.name; diff --git a/src/components/Loading.react.js b/src/components/Loading.react.js old mode 100644 new mode 100755 diff --git a/src/components/NewContainerSearch.react.js b/src/components/NewContainerSearch.react.js old mode 100644 new mode 100755 index ef81c309a..33de63011 --- a/src/components/NewContainerSearch.react.js +++ b/src/components/NewContainerSearch.react.js @@ -222,7 +222,7 @@ module.exports = React.createClass({ } else if (filter === 'userrepos' && !accountStore.getState().username) { results = (
-

Log In or Sign Up to access your Docker Hub repositories.

+

Log In to access your Docker Hub repositories.

); diff --git a/src/components/Preferences.react.js b/src/components/Preferences.react.js old mode 100644 new mode 100755 diff --git a/src/components/Radial.react.js b/src/components/Radial.react.js old mode 100644 new mode 100755 diff --git a/src/components/Setup.react.js b/src/components/Setup.react.js old mode 100644 new mode 100755 diff --git a/src/main.js b/src/main.js old mode 100644 new mode 100755 diff --git a/src/main.js.map b/src/main.js.map old mode 100644 new mode 100755 diff --git a/src/main.ts b/src/main.ts old mode 100644 new mode 100755 diff --git a/src/menutemplate.js b/src/menutemplate.js old mode 100644 new mode 100755 diff --git a/src/router.js b/src/router.js old mode 100644 new mode 100755 diff --git a/src/routes.js b/src/routes.js old mode 100644 new mode 100755 index dbb8c4135..bf7c5bae6 --- a/src/routes.js +++ b/src/routes.js @@ -1,7 +1,6 @@ import React from 'react/addons'; import Setup from './components/Setup.react'; import Account from './components/Account.react'; -import AccountSignup from './components/AccountSignup.react'; import AccountLogin from './components/AccountLogin.react'; import Containers from './components/Containers.react'; import ContainerDetails from './components/ContainerDetails.react'; @@ -33,7 +32,6 @@ var App = React.createClass({ var routes = ( - diff --git a/src/stores/AccountStore.js b/src/stores/AccountStore.js old mode 100644 new mode 100755 index c6f9b3ca9..d200e1df1 --- a/src/stores/AccountStore.js +++ b/src/stores/AccountStore.js @@ -37,13 +37,6 @@ class AccountStore { }); } - signup () { - this.setState({ - loading: true, - errors: {} - }); - } - loggedin ({username, verified}) { this.setState({username, verified, errors: {}, loading: false}); } diff --git a/src/stores/ContainerStore.js b/src/stores/ContainerStore.js old mode 100644 new mode 100755 diff --git a/src/stores/ImageStore.js b/src/stores/ImageStore.js old mode 100644 new mode 100755 diff --git a/src/stores/NetworkStore.js b/src/stores/NetworkStore.js old mode 100644 new mode 100755 diff --git a/src/stores/RepositoryStore.js b/src/stores/RepositoryStore.js old mode 100644 new mode 100755 diff --git a/src/stores/SetupStore.js b/src/stores/SetupStore.js old mode 100644 new mode 100755 diff --git a/src/stores/TagStore.js b/src/stores/TagStore.js old mode 100644 new mode 100755 diff --git a/src/utils/ContainerUtil.js b/src/utils/ContainerUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/DockerMachineUtil.js b/src/utils/DockerMachineUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/DockerUtil.js b/src/utils/DockerUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/HubUtil.js b/src/utils/HubUtil.js old mode 100644 new mode 100755 index dce1ac7b4..a0a16cb0f --- a/src/utils/HubUtil.js +++ b/src/utils/HubUtil.js @@ -114,7 +114,7 @@ module.exports = { return; } - let data = JSON.parse(body); + let data = body; if (response.statusCode === 200) { if (data.token) { @@ -131,6 +131,9 @@ module.exports = { accountServerActions.errors({errors: {detail: 'Did not receive login token.'}}); if (callback) { callback(new Error('Did not receive login token.')); } } + } else if (response.statusCode === 400) { + accountServerActions.errors({errors: data}); + if (callback) { callback(new Error(data.detail)); } } else if (response.statusCode === 401) { if (data && data.detail && data.detail.indexOf('Account not active yet') !== -1) { accountServerActions.loggedin({username, verified: false}); @@ -143,12 +146,18 @@ module.exports = { accountServerActions.errors({errors: data}); if (callback) { callback(new Error(data.detail)); } } + } else { + accountServerActions.errors({errors: {detail: 'Сan not parse the server response.'}}); + if (callback) { callback(new Error('Сan not parse the server response.')); } } }); }, auth: function (username, password, callback) { - request.post(`${HUB2_ENDPOINT}/users/login/`, {form: {username, password}}, (error, response, body) => { + request.post(`${HUB2_ENDPOINT}/users/login/`, { + body: {username: username, password: password}, + json: true + }, (error, response, body) => { callback(error, response, body); }); }, @@ -166,33 +175,5 @@ module.exports = { creds: function (config) { return new Buffer(config, 'base64').toString().split(/:(.+)?/).slice(0, 2); - }, - - // Signs up and places a token under ~/.dockercfg and saves a jwt to localstore - signup: function (username, password, email, subscribe) { - request.post(`${HUB2_ENDPOINT}/users/signup/`, { - form: { - username, - password, - email, - subscribe - } - }, (err, response, body) => { - if (response && response.statusCode === 204) { - accountServerActions.signedup({username, verified: false}); - accountServerActions.prompted({prompted: true}); - localStorage.setItem('auth.username', username); - localStorage.setItem('auth.verified', false); - localStorage.setItem('auth.config', new Buffer(username + ':' + password).toString('base64')); - metrics.track('Successfully Signed Up'); - } else { - let data = JSON.parse(body); - let errors = {}; - for (let key in data) { - errors[key] = data[key][0]; - } - accountServerActions.errors({errors}); - } - }); - }, + } }; diff --git a/src/utils/MetricsUtil.js b/src/utils/MetricsUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/RegHubUtil.js b/src/utils/RegHubUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/SetupUtil.js b/src/utils/SetupUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/Util.js b/src/utils/Util.js old mode 100644 new mode 100755 diff --git a/src/utils/VirtualBoxUtil.js b/src/utils/VirtualBoxUtil.js old mode 100644 new mode 100755 diff --git a/src/utils/WebUtil.js b/src/utils/WebUtil.js old mode 100644 new mode 100755 diff --git a/styles/animation.less b/styles/animation.less old mode 100644 new mode 100755 diff --git a/styles/container-home.less b/styles/container-home.less old mode 100644 new mode 100755 diff --git a/styles/container-logs.less b/styles/container-logs.less old mode 100644 new mode 100755 diff --git a/styles/container-progress.less b/styles/container-progress.less old mode 100644 new mode 100755 diff --git a/styles/container-settings.less b/styles/container-settings.less old mode 100644 new mode 100755 diff --git a/styles/header.less b/styles/header.less old mode 100644 new mode 100755 diff --git a/styles/icons.less b/styles/icons.less old mode 100644 new mode 100755 diff --git a/styles/layout.less b/styles/layout.less old mode 100644 new mode 100755 diff --git a/styles/left-panel.less b/styles/left-panel.less old mode 100644 new mode 100755 index e2940aec4..03629a5bb --- a/styles/left-panel.less +++ b/styles/left-panel.less @@ -1,5 +1,12 @@ /* Sidebar */ + +@-webkit-keyframes spin { + 100% { + -webkit-transform: rotate(360deg); + } +} + .sidebar { background-color: white; margin: 0; @@ -26,6 +33,15 @@ display: inline-block; position: relative; } + .btn-refresh { + border: 0; + margin: 2px; + font-size: 1.6em; + cursor: pointer; + &.refreshing { + -webkit-animation: spin 1s linear infinite; + } +} .create { display: flex; flex: 1 auto; diff --git a/styles/loading.less b/styles/loading.less old mode 100644 new mode 100755 diff --git a/styles/main.less b/styles/main.less old mode 100644 new mode 100755 diff --git a/styles/mixins.less b/styles/mixins.less old mode 100644 new mode 100755 diff --git a/styles/new-container.less b/styles/new-container.less old mode 100644 new mode 100755 diff --git a/styles/preferences.less b/styles/preferences.less old mode 100644 new mode 100755 diff --git a/styles/radial.less b/styles/radial.less old mode 100644 new mode 100755 diff --git a/styles/retina.less b/styles/retina.less old mode 100644 new mode 100755 diff --git a/styles/right-panel.less b/styles/right-panel.less old mode 100644 new mode 100755 diff --git a/styles/setup.less b/styles/setup.less old mode 100644 new mode 100755 diff --git a/styles/spinner.less b/styles/spinner.less old mode 100644 new mode 100755 diff --git a/styles/theme.less b/styles/theme.less old mode 100644 new mode 100755 diff --git a/styles/variables.less b/styles/variables.less old mode 100644 new mode 100755 diff --git a/tsconfig.json b/tsconfig.json old mode 100644 new mode 100755 diff --git a/tslint.json b/tslint.json old mode 100644 new mode 100755 diff --git a/util/Info.plist b/util/Info.plist old mode 100644 new mode 100755 diff --git a/util/kitematic.icns b/util/kitematic.icns old mode 100644 new mode 100755 diff --git a/util/kitematic.ico b/util/kitematic.ico old mode 100644 new mode 100755 diff --git a/util/kitematic.png b/util/kitematic.png old mode 100644 new mode 100755 diff --git a/util/loading.gif b/util/loading.gif old mode 100644 new mode 100755 diff --git a/util/prepare.js b/util/prepare.js old mode 100644 new mode 100755 diff --git a/util/reset.ps1 b/util/reset.ps1 old mode 100644 new mode 100755 diff --git a/util/setup.ico b/util/setup.ico old mode 100644 new mode 100755 diff --git a/util/testenv.js b/util/testenv.js old mode 100644 new mode 100755