From d91055883984298bd863beaa10f26bc9ef6c13cc Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Tue, 22 Jan 2019 00:55:48 +0200
Subject: [PATCH 1/6] add charts, map interactivity
---
package-lock.json | 3640 +++++++++++++++++++++++-
package.json | 7 +
src/App.js | 100 +-
src/Sidebar.js | 17 -
src/components/DateValue.js | 37 +
src/components/Sidebar.js | 76 +
src/components/TimeValueArea.js | 46 +
src/containers/Form.js | 21 +
src/containers/Map.js | 118 +
src/img/icons8-marker-100.png | Bin 0 -> 2134 bytes
src/index.css | 5 +
src/logo.svg | 7 -
src/style/map.css | 10 +
src/style/sidebar.css | 15 +
src/util/calcAverage.js | 17 +
src/util/constructAreaChartData.js | 24 +
src/util/constructComposedChartData.js | 51 +
src/util/fetchObservationLocations.js | 37 +
src/util/formatDateTime.js | 12 +
src/util/handleChartSetter.js | 13 +
src/var/index.js | 37 +
21 files changed, 4033 insertions(+), 257 deletions(-)
delete mode 100644 src/Sidebar.js
create mode 100644 src/components/DateValue.js
create mode 100644 src/components/Sidebar.js
create mode 100644 src/components/TimeValueArea.js
create mode 100644 src/containers/Form.js
create mode 100644 src/containers/Map.js
create mode 100644 src/img/icons8-marker-100.png
delete mode 100644 src/logo.svg
create mode 100644 src/style/map.css
create mode 100644 src/style/sidebar.css
create mode 100644 src/util/calcAverage.js
create mode 100644 src/util/constructAreaChartData.js
create mode 100644 src/util/constructComposedChartData.js
create mode 100644 src/util/fetchObservationLocations.js
create mode 100644 src/util/formatDateTime.js
create mode 100644 src/util/handleChartSetter.js
create mode 100644 src/var/index.js
diff --git a/package-lock.json b/package-lock.json
index 60663e7..8728d76 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -917,6 +917,36 @@
}
}
},
+ "@fortawesome/fontawesome-common-types": {
+ "version": "0.2.12",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-common-types/-/fontawesome-common-types-0.2.12.tgz",
+ "integrity": "sha512-ISLNpEx6fhJTYYkvBeo/4DHeL5EIA+VybJoOOnH67m6uXt6V6VFizdEN4qchHagNIeZfzI0LnA22gk0wbVPv/g=="
+ },
+ "@fortawesome/fontawesome-svg-core": {
+ "version": "1.2.12",
+ "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-svg-core/-/fontawesome-svg-core-1.2.12.tgz",
+ "integrity": "sha512-cqTfa3vZ+Z9UYQnmLfCOwyLnf0Xcoxkmm/BSaI29Yikzu9zIeD4es7lBZMDqLOXYSEQC+rCr8caxFlGJcJVA+w==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "0.2.12"
+ }
+ },
+ "@fortawesome/free-solid-svg-icons": {
+ "version": "5.6.3",
+ "resolved": "https://registry.npmjs.org/@fortawesome/free-solid-svg-icons/-/free-solid-svg-icons-5.6.3.tgz",
+ "integrity": "sha512-ld8Gfp1KrncOpFRheThUDlD6/Ro9ZJGqfCEMXlO/x1Cg7ltLc5iYDG7yxDowLcmFY2BGSmxIIU3ZMW5FVTrfwQ==",
+ "requires": {
+ "@fortawesome/fontawesome-common-types": "0.2.12"
+ }
+ },
+ "@fortawesome/react-fontawesome": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/@fortawesome/react-fontawesome/-/react-fontawesome-0.1.4.tgz",
+ "integrity": "sha512-GwmxQ+TK7PEdfSwvxtGnMCqrfEm0/HbRHArbUudsYiy9KzVCwndxa2KMcfyTQ8El0vROrq8gOOff09RF1oQe8g==",
+ "requires": {
+ "humps": "2.0.1",
+ "prop-types": "15.6.2"
+ }
+ },
"@mrmlnc/readdir-enhanced": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz",
@@ -1959,6 +1989,23 @@
"resolved": "https://registry.npmjs.org/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.18.tgz",
"integrity": "sha512-azed2nHo8vmOy7EY26KH+om5oOcWRs0r1U8wOmhwta+SBMMnmJ4H6yaBZRCcHBtMeWp9AVhvBTL/lpR1kEx+Xw=="
},
+ "babel-polyfill": {
+ "version": "6.26.0",
+ "resolved": "https://registry.npmjs.org/babel-polyfill/-/babel-polyfill-6.26.0.tgz",
+ "integrity": "sha1-N5k3q8Z9eJWXCtxiHyhM2WbPIVM=",
+ "requires": {
+ "babel-runtime": "6.26.0",
+ "core-js": "2.6.1",
+ "regenerator-runtime": "0.10.5"
+ },
+ "dependencies": {
+ "regenerator-runtime": {
+ "version": "0.10.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz",
+ "integrity": "sha1-M2w+/BIgrc7dosn6tntaeVWjNlg="
+ }
+ }
+ },
"babel-preset-jest": {
"version": "23.2.0",
"resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-23.2.0.tgz",
@@ -2854,6 +2901,11 @@
}
}
},
+ "classnames": {
+ "version": "2.2.6",
+ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz",
+ "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q=="
+ },
"clean-css": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.1.tgz",
@@ -3562,6 +3614,73 @@
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
"integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA="
},
+ "d3-array": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
+ "integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
+ },
+ "d3-collection": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
+ "integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
+ },
+ "d3-color": {
+ "version": "1.2.3",
+ "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.2.3.tgz",
+ "integrity": "sha512-x37qq3ChOTLd26hnps36lexMRhNXEtVxZ4B25rL0DVdDsGQIJGB18S7y9XDwlDD6MD/ZBzITCf4JjGMM10TZkw=="
+ },
+ "d3-format": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.3.2.tgz",
+ "integrity": "sha512-Z18Dprj96ExragQ0DeGi+SYPQ7pPfRMtUXtsg/ChVIKNBCzjO8XYJvRTC1usblx52lqge56V5ect+frYTQc8WQ=="
+ },
+ "d3-interpolate": {
+ "version": "1.3.2",
+ "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.3.2.tgz",
+ "integrity": "sha512-NlNKGopqaz9qM1PXh9gBF1KSCVh+jSFErrSlD/4hybwoNX/gt1d8CDbDW+3i+5UOHhjC6s6nMvRxcuoMVNgL2w==",
+ "requires": {
+ "d3-color": "1.2.3"
+ }
+ },
+ "d3-path": {
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.7.tgz",
+ "integrity": "sha512-q0cW1RpvA5c5ma2rch62mX8AYaiLX0+bdaSM2wxSU9tXjU4DNvkx9qiUvjkuWCj3p22UO/hlPivujqMiR9PDzA=="
+ },
+ "d3-scale": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.1.2.tgz",
+ "integrity": "sha512-bESpd64ylaKzCDzvULcmHKZTlzA/6DGSVwx7QSDj/EnX9cpSevsdiwdHFYI9ouo9tNBbV3v5xztHS2uFeOzh8Q==",
+ "requires": {
+ "d3-array": "1.2.4",
+ "d3-collection": "1.0.7",
+ "d3-format": "1.3.2",
+ "d3-interpolate": "1.3.2",
+ "d3-time": "1.0.10",
+ "d3-time-format": "2.1.3"
+ }
+ },
+ "d3-shape": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.2.tgz",
+ "integrity": "sha512-hUGEozlKecFZ2bOSNt7ENex+4Tk9uc/m0TtTEHBvitCBxUNjhzm5hS2GrrVRD/ae4IylSmxGeqX5tWC2rASMlQ==",
+ "requires": {
+ "d3-path": "1.0.7"
+ }
+ },
+ "d3-time": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.10.tgz",
+ "integrity": "sha512-hF+NTLCaJHF/JqHN5hE8HVGAXPStEq6/omumPE/SxyHVrR7/qQxusFDo0t0c/44+sCGHthC7yNGFZIEgju0P8g=="
+ },
+ "d3-time-format": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.3.tgz",
+ "integrity": "sha512-6k0a2rZryzGm5Ihx+aFMuO1GgelgIz+7HhB4PH4OEndD5q2zGn1mDfRdNrulspOfR6JXkb2sThhDK41CSK85QA==",
+ "requires": {
+ "d3-time": "1.0.10"
+ }
+ },
"damerau-levenshtein": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.4.tgz",
@@ -3603,6 +3722,11 @@
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
},
+ "decimal.js-light": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/decimal.js-light/-/decimal.js-light-2.5.0.tgz",
+ "integrity": "sha512-b3VJCbd2hwUpeRGG3Toob+CRo8W22xplipNhP3tN7TSVB/cyMX71P1vM2Xjc9H74uV6dS2hDDmo/rHq8L87Upg=="
+ },
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
@@ -3883,6 +4007,29 @@
"utila": "0.4.0"
}
},
+ "dom-helpers": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz",
+ "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==",
+ "requires": {
+ "@babel/runtime": "7.3.0"
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.3.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.3.0.tgz",
+ "integrity": "sha512-7K/aLEgWRClfSCCIXVYw07d6jnBMDwr+NGIfNJtCIlw5FcnP1C2GMDPovn8LNZtZuMf2gWzsCz8+CINad05Dow==",
+ "requires": {
+ "regenerator-runtime": "0.12.1"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg=="
+ }
+ }
+ },
"dom-serializer": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.0.tgz",
@@ -6671,6 +6818,11 @@
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
},
+ "humps": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz",
+ "integrity": "sha1-3QLqYIG9BWjcXQcxhEY5V7qe+ao="
+ },
"iconv-lite": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
@@ -8156,6 +8308,11 @@
"lodash._reinterpolate": "3.0.0"
}
},
+ "lodash.throttle": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz",
+ "integrity": "sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ="
+ },
"lodash.uniq": {
"version": "4.5.0",
"resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
@@ -8237,6 +8394,11 @@
"object-visit": "1.0.1"
}
},
+ "math-expression-evaluator": {
+ "version": "1.2.17",
+ "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz",
+ "integrity": "sha1-3oGf282E3M2PrlnGrreWFbnSZqw="
+ },
"math-random": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/math-random/-/math-random-1.0.1.tgz",
@@ -8757,167 +8919,3218 @@
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
},
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "2.0.1"
- }
- },
- "nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "requires": {
- "boolbase": "1.0.0"
- }
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "nwsapi": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
- "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "requires": {
- "copy-descriptor": "0.1.1",
- "define-property": "0.2.5",
- "kind-of": "3.2.2"
+ "npm": {
+ "version": "6.6.0",
+ "resolved": "https://registry.npmjs.org/npm/-/npm-6.6.0.tgz",
+ "integrity": "sha512-Q6Lb4YPWIGsyVzfxcZrTu6VQcMEvCHOBlSE0fbuNHj6CYCUuanMUf6HgNyj4QekWTORxQpOgOgaca2YEQ721Ug==",
+ "requires": {
+ "JSONStream": "1.3.5",
+ "abbrev": "1.1.1",
+ "ansicolors": "0.3.2",
+ "ansistyles": "0.1.3",
+ "aproba": "2.0.0",
+ "archy": "1.0.0",
+ "bin-links": "1.1.2",
+ "bluebird": "3.5.3",
+ "byte-size": "5.0.1",
+ "cacache": "11.3.2",
+ "call-limit": "1.1.0",
+ "chownr": "1.1.1",
+ "ci-info": "2.0.0",
+ "cli-columns": "3.1.2",
+ "cli-table3": "0.5.1",
+ "cmd-shim": "2.0.2",
+ "columnify": "1.5.4",
+ "config-chain": "1.1.12",
+ "debuglog": "1.0.1",
+ "detect-indent": "5.0.0",
+ "detect-newline": "2.1.0",
+ "dezalgo": "1.0.3",
+ "editor": "1.0.0",
+ "figgy-pudding": "3.5.1",
+ "find-npm-prefix": "1.0.2",
+ "fs-vacuum": "1.2.10",
+ "fs-write-stream-atomic": "1.0.10",
+ "gentle-fs": "2.0.1",
+ "glob": "7.1.3",
+ "graceful-fs": "4.1.15",
+ "has-unicode": "2.0.1",
+ "hosted-git-info": "2.7.1",
+ "iferr": "1.0.2",
+ "imurmurhash": "0.1.4",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "ini": "1.3.5",
+ "init-package-json": "1.10.3",
+ "is-cidr": "3.0.0",
+ "json-parse-better-errors": "1.0.2",
+ "lazy-property": "1.0.0",
+ "libcipm": "3.0.2",
+ "libnpm": "2.0.1",
+ "libnpmaccess": "3.0.1",
+ "libnpmhook": "5.0.2",
+ "libnpmorg": "1.0.0",
+ "libnpmsearch": "2.0.0",
+ "libnpmteam": "1.0.1",
+ "libnpx": "10.2.0",
+ "lock-verify": "2.0.2",
+ "lockfile": "1.0.4",
+ "lodash._baseindexof": "3.1.0",
+ "lodash._baseuniq": "4.6.0",
+ "lodash._bindcallback": "3.0.1",
+ "lodash._cacheindexof": "3.0.2",
+ "lodash._createcache": "3.1.2",
+ "lodash._getnative": "3.9.1",
+ "lodash.clonedeep": "4.5.0",
+ "lodash.restparam": "3.6.1",
+ "lodash.union": "4.6.0",
+ "lodash.uniq": "4.5.0",
+ "lodash.without": "4.4.0",
+ "lru-cache": "4.1.5",
+ "meant": "1.0.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "node-gyp": "3.8.0",
+ "nopt": "4.0.1",
+ "normalize-package-data": "2.4.0",
+ "npm-audit-report": "1.3.2",
+ "npm-cache-filename": "1.0.2",
+ "npm-install-checks": "3.0.0",
+ "npm-lifecycle": "2.1.0",
+ "npm-package-arg": "6.1.0",
+ "npm-packlist": "1.2.0",
+ "npm-pick-manifest": "2.2.3",
+ "npm-profile": "4.0.1",
+ "npm-registry-fetch": "3.8.0",
+ "npm-user-validate": "1.0.0",
+ "npmlog": "4.1.2",
+ "once": "1.4.0",
+ "opener": "1.5.1",
+ "osenv": "0.1.5",
+ "pacote": "9.3.0",
+ "path-is-inside": "1.0.2",
+ "promise-inflight": "1.0.1",
+ "qrcode-terminal": "0.12.0",
+ "query-string": "6.2.0",
+ "qw": "1.0.1",
+ "read": "1.0.7",
+ "read-cmd-shim": "1.0.1",
+ "read-installed": "4.0.3",
+ "read-package-json": "2.0.13",
+ "read-package-tree": "5.2.1",
+ "readable-stream": "3.1.1",
+ "readdir-scoped-modules": "1.0.2",
+ "request": "2.88.0",
+ "retry": "0.12.0",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "semver": "5.6.0",
+ "sha": "2.0.1",
+ "slide": "1.1.6",
+ "sorted-object": "2.0.1",
+ "sorted-union-stream": "2.1.3",
+ "ssri": "6.0.1",
+ "stringify-package": "1.0.0",
+ "tar": "4.4.8",
+ "text-table": "0.2.0",
+ "tiny-relative-date": "1.3.0",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "unique-filename": "1.1.1",
+ "unpipe": "1.0.0",
+ "update-notifier": "2.5.0",
+ "uuid": "3.3.2",
+ "validate-npm-package-license": "3.0.4",
+ "validate-npm-package-name": "3.0.0",
+ "which": "1.3.1",
+ "worker-farm": "1.6.0",
+ "write-file-atomic": "2.3.0"
},
"dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "JSONStream": {
+ "version": "1.3.5",
+ "bundled": true,
"requires": {
- "is-descriptor": "0.1.6"
+ "jsonparse": "1.3.1",
+ "through": "2.3.8"
}
- }
- }
- },
- "object-hash": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
- "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
- },
- "object-keys": {
- "version": "1.0.12",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
- "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "object.assign": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
- "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
- "requires": {
- "define-properties": "1.1.3",
- "function-bind": "1.1.1",
- "has-symbols": "1.0.0",
- "object-keys": "1.0.12"
- }
- },
- "object.getownpropertydescriptors": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
- "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
- "requires": {
- "define-properties": "1.1.3",
- "es-abstract": "1.12.0"
- }
- },
- "object.omit": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
- "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
- "requires": {
- "for-own": "0.1.5",
- "is-extendable": "0.1.1"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "requires": {
- "isobject": "3.0.1"
- }
- },
- "object.values": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
- "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
- "requires": {
- "define-properties": "1.1.3",
- "es-abstract": "1.12.0",
- "function-bind": "1.1.1",
- "has": "1.0.3"
- }
- },
- "obuf": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
- "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "on-headers": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
- "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "onetime": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
- "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
- "requires": {
- "mimic-fn": "1.2.0"
- }
- },
+ },
+ "abbrev": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "agent-base": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ }
+ },
+ "agentkeepalive": {
+ "version": "3.4.1",
+ "bundled": true,
+ "requires": {
+ "humanize-ms": "1.2.1"
+ }
+ },
+ "ajv": {
+ "version": "5.5.2",
+ "bundled": true,
+ "requires": {
+ "co": "4.6.0",
+ "fast-deep-equal": "1.1.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
+ }
+ },
+ "ansi-align": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "ansi-regex": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "bundled": true,
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "ansicolors": {
+ "version": "0.3.2",
+ "bundled": true
+ },
+ "ansistyles": {
+ "version": "0.1.3",
+ "bundled": true
+ },
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "archy": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "are-we-there-yet": {
+ "version": "1.1.4",
+ "bundled": true,
+ "requires": {
+ "delegates": "1.0.0",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "asap": {
+ "version": "2.0.6",
+ "bundled": true
+ },
+ "asn1": {
+ "version": "0.2.4",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "assert-plus": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "asynckit": {
+ "version": "0.4.0",
+ "bundled": true
+ },
+ "aws-sign2": {
+ "version": "0.7.0",
+ "bundled": true
+ },
+ "aws4": {
+ "version": "1.8.0",
+ "bundled": true
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "bcrypt-pbkdf": {
+ "version": "1.0.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "bin-links": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.3",
+ "cmd-shim": "2.0.2",
+ "gentle-fs": "2.0.1",
+ "graceful-fs": "4.1.15",
+ "write-file-atomic": "2.3.0"
+ }
+ },
+ "block-stream": {
+ "version": "0.0.9",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3"
+ }
+ },
+ "bluebird": {
+ "version": "3.5.3",
+ "bundled": true
+ },
+ "boxen": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "ansi-align": "2.0.0",
+ "camelcase": "4.1.0",
+ "chalk": "2.4.1",
+ "cli-boxes": "1.0.0",
+ "string-width": "2.1.1",
+ "term-size": "1.2.0",
+ "widest-line": "2.0.0"
+ }
+ },
+ "brace-expansion": {
+ "version": "1.1.11",
+ "bundled": true,
+ "requires": {
+ "balanced-match": "1.0.0",
+ "concat-map": "0.0.1"
+ }
+ },
+ "buffer-from": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "builtin-modules": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "builtins": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "byline": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "byte-size": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "cacache": {
+ "version": "11.3.2",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.3",
+ "chownr": "1.1.1",
+ "figgy-pudding": "3.5.1",
+ "glob": "7.1.3",
+ "graceful-fs": "4.1.15",
+ "lru-cache": "5.1.1",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "move-concurrently": "1.0.1",
+ "promise-inflight": "1.0.1",
+ "rimraf": "2.6.3",
+ "ssri": "6.0.1",
+ "unique-filename": "1.1.1",
+ "y18n": "4.0.0"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "lru-cache": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "yallist": "3.0.3"
+ }
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "call-limit": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "camelcase": {
+ "version": "4.1.0",
+ "bundled": true
+ },
+ "capture-stack-trace": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "caseless": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "chalk": {
+ "version": "2.4.1",
+ "bundled": true,
+ "requires": {
+ "ansi-styles": "3.2.1",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.4.0"
+ }
+ },
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "cidr-regex": {
+ "version": "2.0.10",
+ "bundled": true,
+ "requires": {
+ "ip-regex": "2.1.0"
+ }
+ },
+ "cli-boxes": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cli-columns": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1",
+ "strip-ansi": "3.0.1"
+ }
+ },
+ "cli-table3": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "colors": "1.3.3",
+ "object-assign": "4.1.1",
+ "string-width": "2.1.1"
+ }
+ },
+ "cliui": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1",
+ "strip-ansi": "4.0.0",
+ "wrap-ansi": "2.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "clone": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "cmd-shim": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "mkdirp": "0.5.1"
+ }
+ },
+ "co": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "color-convert": {
+ "version": "1.9.1",
+ "bundled": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "bundled": true
+ },
+ "colors": {
+ "version": "1.3.3",
+ "bundled": true,
+ "optional": true
+ },
+ "columnify": {
+ "version": "1.5.4",
+ "bundled": true,
+ "requires": {
+ "strip-ansi": "3.0.1",
+ "wcwidth": "1.0.1"
+ }
+ },
+ "combined-stream": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "delayed-stream": "1.0.0"
+ }
+ },
+ "concat-map": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "concat-stream": {
+ "version": "1.6.2",
+ "bundled": true,
+ "requires": {
+ "buffer-from": "1.0.0",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "typedarray": "0.0.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "config-chain": {
+ "version": "1.1.12",
+ "bundled": true,
+ "requires": {
+ "ini": "1.3.5",
+ "proto-list": "1.2.4"
+ }
+ },
+ "configstore": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "dot-prop": "4.2.0",
+ "graceful-fs": "4.1.15",
+ "make-dir": "1.3.0",
+ "unique-string": "1.0.0",
+ "write-file-atomic": "2.3.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "console-control-strings": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "copy-concurrently": {
+ "version": "1.0.5",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-write-stream-atomic": "1.0.10",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.3",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "core-util-is": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "create-error-class": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "capture-stack-trace": "1.0.0"
+ }
+ },
+ "cross-spawn": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "lru-cache": "4.1.5",
+ "shebang-command": "1.2.0",
+ "which": "1.3.1"
+ }
+ },
+ "crypto-random-string": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "cyclist": {
+ "version": "0.2.2",
+ "bundled": true
+ },
+ "dashdash": {
+ "version": "1.14.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "ms": "2.0.0"
+ },
+ "dependencies": {
+ "ms": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "debuglog": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "deep-extend": {
+ "version": "0.5.1",
+ "bundled": true
+ },
+ "defaults": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "clone": "1.0.4"
+ }
+ },
+ "delayed-stream": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "delegates": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "detect-indent": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "detect-newline": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "dezalgo": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "asap": "2.0.6",
+ "wrappy": "1.0.2"
+ }
+ },
+ "dot-prop": {
+ "version": "4.2.0",
+ "bundled": true,
+ "requires": {
+ "is-obj": "1.0.1"
+ }
+ },
+ "dotenv": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "duplexer3": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "duplexify": {
+ "version": "3.6.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "ecc-jsbn": {
+ "version": "0.1.2",
+ "bundled": true,
+ "optional": true,
+ "requires": {
+ "jsbn": "0.1.1",
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "editor": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "encoding": {
+ "version": "0.1.12",
+ "bundled": true,
+ "requires": {
+ "iconv-lite": "0.4.23"
+ }
+ },
+ "end-of-stream": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0"
+ }
+ },
+ "err-code": {
+ "version": "1.1.2",
+ "bundled": true
+ },
+ "errno": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "prr": "1.0.1"
+ }
+ },
+ "es6-promise": {
+ "version": "4.2.4",
+ "bundled": true
+ },
+ "es6-promisify": {
+ "version": "5.0.0",
+ "bundled": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ }
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "execa": {
+ "version": "0.7.0",
+ "bundled": true,
+ "requires": {
+ "cross-spawn": "5.1.0",
+ "get-stream": "3.0.0",
+ "is-stream": "1.1.0",
+ "npm-run-path": "2.0.2",
+ "p-finally": "1.0.0",
+ "signal-exit": "3.0.2",
+ "strip-eof": "1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "extend": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "extsprintf": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "fast-deep-equal": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "figgy-pudding": {
+ "version": "3.5.1",
+ "bundled": true
+ },
+ "find-npm-prefix": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "flush-write-stream": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "forever-agent": {
+ "version": "0.6.1",
+ "bundled": true
+ },
+ "form-data": {
+ "version": "2.3.2",
+ "bundled": true,
+ "requires": {
+ "asynckit": "0.4.0",
+ "combined-stream": "1.0.6",
+ "mime-types": "2.1.19"
+ }
+ },
+ "from2": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "fs-minipass": {
+ "version": "1.2.5",
+ "bundled": true,
+ "requires": {
+ "minipass": "2.3.3"
+ }
+ },
+ "fs-vacuum": {
+ "version": "1.2.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "path-is-inside": "1.0.2",
+ "rimraf": "2.6.3"
+ }
+ },
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "iferr": "0.1.5",
+ "imurmurhash": "0.1.4",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "fs.realpath": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "fstream": {
+ "version": "1.0.11",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "inherits": "2.0.3",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.3"
+ }
+ },
+ "gauge": {
+ "version": "2.7.4",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "console-control-strings": "1.1.0",
+ "has-unicode": "2.0.1",
+ "object-assign": "4.1.1",
+ "signal-exit": "3.0.2",
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1",
+ "wide-align": "1.1.2"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "genfun": {
+ "version": "5.0.0",
+ "bundled": true
+ },
+ "gentle-fs": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "fs-vacuum": "1.2.10",
+ "graceful-fs": "4.1.15",
+ "iferr": "0.1.5",
+ "mkdirp": "0.5.1",
+ "path-is-inside": "1.0.2",
+ "read-cmd-shim": "1.0.1",
+ "slide": "1.1.6"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "iferr": {
+ "version": "0.1.5",
+ "bundled": true
+ }
+ }
+ },
+ "get-caller-file": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "bundled": true,
+ "requires": {
+ "pump": "3.0.0"
+ }
+ },
+ "getpass": {
+ "version": "0.1.7",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.3",
+ "bundled": true,
+ "requires": {
+ "fs.realpath": "1.0.0",
+ "inflight": "1.0.6",
+ "inherits": "2.0.3",
+ "minimatch": "3.0.4",
+ "once": "1.4.0",
+ "path-is-absolute": "1.0.1"
+ }
+ },
+ "global-dirs": {
+ "version": "0.1.1",
+ "bundled": true,
+ "requires": {
+ "ini": "1.3.5"
+ }
+ },
+ "got": {
+ "version": "6.7.1",
+ "bundled": true,
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.1",
+ "safe-buffer": "5.1.2",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ },
+ "dependencies": {
+ "get-stream": {
+ "version": "3.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "graceful-fs": {
+ "version": "4.1.15",
+ "bundled": true
+ },
+ "har-schema": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "har-validator": {
+ "version": "5.1.0",
+ "bundled": true,
+ "requires": {
+ "ajv": "5.5.2",
+ "har-schema": "2.0.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "has-unicode": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "bundled": true
+ },
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "bundled": true
+ },
+ "http-proxy-agent": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ }
+ },
+ "http-signature": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "jsprim": "1.4.1",
+ "sshpk": "1.14.2"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ }
+ },
+ "humanize-ms": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "ms": "2.1.1"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.23",
+ "bundled": true,
+ "requires": {
+ "safer-buffer": "2.1.2"
+ }
+ },
+ "iferr": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "ignore-walk": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "minimatch": "3.0.4"
+ }
+ },
+ "import-lazy": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "bundled": true
+ },
+ "inflight": {
+ "version": "1.0.6",
+ "bundled": true,
+ "requires": {
+ "once": "1.4.0",
+ "wrappy": "1.0.2"
+ }
+ },
+ "inherits": {
+ "version": "2.0.3",
+ "bundled": true
+ },
+ "ini": {
+ "version": "1.3.5",
+ "bundled": true
+ },
+ "init-package-json": {
+ "version": "1.10.3",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.3",
+ "npm-package-arg": "6.1.0",
+ "promzard": "0.3.0",
+ "read": "1.0.7",
+ "read-package-json": "2.0.13",
+ "semver": "5.6.0",
+ "validate-npm-package-license": "3.0.4",
+ "validate-npm-package-name": "3.0.0"
+ }
+ },
+ "invert-kv": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "ip": {
+ "version": "1.1.5",
+ "bundled": true
+ },
+ "ip-regex": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "is-builtin-module": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "builtin-modules": "1.1.1"
+ }
+ },
+ "is-ci": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "ci-info": "1.6.0"
+ },
+ "dependencies": {
+ "ci-info": {
+ "version": "1.6.0",
+ "bundled": true
+ }
+ }
+ },
+ "is-cidr": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "cidr-regex": "2.0.10"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "number-is-nan": "1.0.1"
+ }
+ },
+ "is-installed-globally": {
+ "version": "0.1.0",
+ "bundled": true,
+ "requires": {
+ "global-dirs": "0.1.1",
+ "is-path-inside": "1.0.1"
+ }
+ },
+ "is-npm": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "path-is-inside": "1.0.2"
+ }
+ },
+ "is-redirect": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "is-retry-allowed": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-stream": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "isstream": {
+ "version": "0.1.2",
+ "bundled": true
+ },
+ "jsbn": {
+ "version": "0.1.1",
+ "bundled": true,
+ "optional": true
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "json-schema": {
+ "version": "0.2.3",
+ "bundled": true
+ },
+ "json-schema-traverse": {
+ "version": "0.3.1",
+ "bundled": true
+ },
+ "json-stringify-safe": {
+ "version": "5.0.1",
+ "bundled": true
+ },
+ "jsonparse": {
+ "version": "1.3.1",
+ "bundled": true
+ },
+ "jsprim": {
+ "version": "1.4.1",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "extsprintf": "1.3.0",
+ "json-schema": "0.2.3",
+ "verror": "1.10.0"
+ }
+ },
+ "latest-version": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "package-json": "4.0.1"
+ }
+ },
+ "lazy-property": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "lcid": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "invert-kv": "1.0.0"
+ }
+ },
+ "libcipm": {
+ "version": "3.0.2",
+ "bundled": true,
+ "requires": {
+ "bin-links": "1.1.2",
+ "bluebird": "3.5.3",
+ "figgy-pudding": "3.5.1",
+ "find-npm-prefix": "1.0.2",
+ "graceful-fs": "4.1.15",
+ "ini": "1.3.5",
+ "lock-verify": "2.0.2",
+ "mkdirp": "0.5.1",
+ "npm-lifecycle": "2.1.0",
+ "npm-logical-tree": "1.2.1",
+ "npm-package-arg": "6.1.0",
+ "pacote": "9.3.0",
+ "read-package-json": "2.0.13",
+ "rimraf": "2.6.3",
+ "worker-farm": "1.6.0"
+ }
+ },
+ "libnpm": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "bin-links": "1.1.2",
+ "bluebird": "3.5.3",
+ "find-npm-prefix": "1.0.2",
+ "libnpmaccess": "3.0.1",
+ "libnpmconfig": "1.2.1",
+ "libnpmhook": "5.0.2",
+ "libnpmorg": "1.0.0",
+ "libnpmpublish": "1.1.0",
+ "libnpmsearch": "2.0.0",
+ "libnpmteam": "1.0.1",
+ "lock-verify": "2.0.2",
+ "npm-lifecycle": "2.1.0",
+ "npm-logical-tree": "1.2.1",
+ "npm-package-arg": "6.1.0",
+ "npm-profile": "4.0.1",
+ "npm-registry-fetch": "3.8.0",
+ "npmlog": "4.1.2",
+ "pacote": "9.3.0",
+ "read-package-json": "2.0.13",
+ "stringify-package": "1.0.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "libnpmhook": {
+ "version": "5.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "3.8.0"
+ }
+ }
+ }
+ },
+ "libnpmaccess": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "get-stream": "4.1.0",
+ "npm-package-arg": "6.1.0",
+ "npm-registry-fetch": "3.8.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmconfig": {
+ "version": "1.2.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1",
+ "find-up": "3.0.0",
+ "ini": "1.3.5"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "locate-path": "3.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "3.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "p-limit": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "2.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmhook": {
+ "version": "5.0.2",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "3.8.0"
+ }
+ },
+ "libnpmorg": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "3.8.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmpublish": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "lodash.clonedeep": "4.5.0",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "6.1.0",
+ "npm-registry-fetch": "3.8.0",
+ "semver": "5.6.0",
+ "ssri": "6.0.1"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpmsearch": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "3.8.0"
+ }
+ },
+ "libnpmteam": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "npm-registry-fetch": "3.8.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "2.0.0",
+ "bundled": true
+ }
+ }
+ },
+ "libnpx": {
+ "version": "10.2.0",
+ "bundled": true,
+ "requires": {
+ "dotenv": "5.0.1",
+ "npm-package-arg": "6.1.0",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "update-notifier": "2.5.0",
+ "which": "1.3.1",
+ "y18n": "4.0.0",
+ "yargs": "11.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-locate": "2.0.0",
+ "path-exists": "3.0.0"
+ }
+ },
+ "lock-verify": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "npm-package-arg": "6.1.0",
+ "semver": "5.6.0"
+ }
+ },
+ "lockfile": {
+ "version": "1.0.4",
+ "bundled": true,
+ "requires": {
+ "signal-exit": "3.0.2"
+ }
+ },
+ "lodash._baseindexof": {
+ "version": "3.1.0",
+ "bundled": true
+ },
+ "lodash._baseuniq": {
+ "version": "4.6.0",
+ "bundled": true,
+ "requires": {
+ "lodash._createset": "4.0.3",
+ "lodash._root": "3.0.1"
+ }
+ },
+ "lodash._bindcallback": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash._cacheindexof": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "lodash._createcache": {
+ "version": "3.1.2",
+ "bundled": true,
+ "requires": {
+ "lodash._getnative": "3.9.1"
+ }
+ },
+ "lodash._createset": {
+ "version": "4.0.3",
+ "bundled": true
+ },
+ "lodash._getnative": {
+ "version": "3.9.1",
+ "bundled": true
+ },
+ "lodash._root": {
+ "version": "3.0.1",
+ "bundled": true
+ },
+ "lodash.clonedeep": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.restparam": {
+ "version": "3.6.1",
+ "bundled": true
+ },
+ "lodash.union": {
+ "version": "4.6.0",
+ "bundled": true
+ },
+ "lodash.uniq": {
+ "version": "4.5.0",
+ "bundled": true
+ },
+ "lodash.without": {
+ "version": "4.4.0",
+ "bundled": true
+ },
+ "lowercase-keys": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "lru-cache": {
+ "version": "4.1.5",
+ "bundled": true,
+ "requires": {
+ "pseudomap": "1.0.2",
+ "yallist": "2.1.2"
+ }
+ },
+ "make-dir": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "pify": "3.0.0"
+ }
+ },
+ "make-fetch-happen": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "agentkeepalive": "3.4.1",
+ "cacache": "11.3.2",
+ "http-cache-semantics": "3.8.1",
+ "http-proxy-agent": "2.1.0",
+ "https-proxy-agent": "2.2.1",
+ "lru-cache": "4.1.5",
+ "mississippi": "3.0.0",
+ "node-fetch-npm": "2.0.2",
+ "promise-retry": "1.1.1",
+ "socks-proxy-agent": "4.0.1",
+ "ssri": "6.0.1"
+ }
+ },
+ "meant": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "mem": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
+ "mime-db": {
+ "version": "1.35.0",
+ "bundled": true
+ },
+ "mime-types": {
+ "version": "2.1.19",
+ "bundled": true,
+ "requires": {
+ "mime-db": "1.35.0"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "bundled": true
+ },
+ "minimatch": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "brace-expansion": "1.1.11"
+ }
+ },
+ "minimist": {
+ "version": "0.0.8",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.3.3",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.2"
+ },
+ "dependencies": {
+ "yallist": {
+ "version": "3.0.2",
+ "bundled": true
+ }
+ }
+ },
+ "minizlib": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "minipass": "2.3.3"
+ }
+ },
+ "mississippi": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "concat-stream": "1.6.2",
+ "duplexify": "3.6.0",
+ "end-of-stream": "1.4.1",
+ "flush-write-stream": "1.0.3",
+ "from2": "2.3.0",
+ "parallel-transform": "1.1.0",
+ "pump": "3.0.0",
+ "pumpify": "1.5.1",
+ "stream-each": "1.2.2",
+ "through2": "2.0.3"
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "bundled": true,
+ "requires": {
+ "minimist": "0.0.8"
+ }
+ },
+ "move-concurrently": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0",
+ "copy-concurrently": "1.0.5",
+ "fs-write-stream-atomic": "1.0.10",
+ "mkdirp": "0.5.1",
+ "rimraf": "2.6.3",
+ "run-queue": "1.0.3"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "bundled": true
+ },
+ "node-fetch-npm": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "encoding": "0.1.12",
+ "json-parse-better-errors": "1.0.2",
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "node-gyp": {
+ "version": "3.8.0",
+ "bundled": true,
+ "requires": {
+ "fstream": "1.0.11",
+ "glob": "7.1.3",
+ "graceful-fs": "4.1.15",
+ "mkdirp": "0.5.1",
+ "nopt": "3.0.6",
+ "npmlog": "4.1.2",
+ "osenv": "0.1.5",
+ "request": "2.88.0",
+ "rimraf": "2.6.3",
+ "semver": "5.3.0",
+ "tar": "2.2.1",
+ "which": "1.3.1"
+ },
+ "dependencies": {
+ "nopt": {
+ "version": "3.0.6",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1"
+ }
+ },
+ "semver": {
+ "version": "5.3.0",
+ "bundled": true
+ },
+ "tar": {
+ "version": "2.2.1",
+ "bundled": true,
+ "requires": {
+ "block-stream": "0.0.9",
+ "fstream": "1.0.11",
+ "inherits": "2.0.3"
+ }
+ }
+ }
+ },
+ "nopt": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "abbrev": "1.1.1",
+ "osenv": "0.1.5"
+ }
+ },
+ "normalize-package-data": {
+ "version": "2.4.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "2.7.1",
+ "is-builtin-module": "1.0.0",
+ "semver": "5.6.0",
+ "validate-npm-package-license": "3.0.4"
+ }
+ },
+ "npm-audit-report": {
+ "version": "1.3.2",
+ "bundled": true,
+ "requires": {
+ "cli-table3": "0.5.1",
+ "console-control-strings": "1.1.0"
+ }
+ },
+ "npm-bundled": {
+ "version": "1.0.5",
+ "bundled": true
+ },
+ "npm-cache-filename": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "npm-install-checks": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "semver": "5.6.0"
+ }
+ },
+ "npm-lifecycle": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "byline": "5.0.0",
+ "graceful-fs": "4.1.15",
+ "node-gyp": "3.8.0",
+ "resolve-from": "4.0.0",
+ "slide": "1.1.6",
+ "uid-number": "0.0.6",
+ "umask": "1.1.0",
+ "which": "1.3.1"
+ }
+ },
+ "npm-logical-tree": {
+ "version": "1.2.1",
+ "bundled": true
+ },
+ "npm-package-arg": {
+ "version": "6.1.0",
+ "bundled": true,
+ "requires": {
+ "hosted-git-info": "2.7.1",
+ "osenv": "0.1.5",
+ "semver": "5.6.0",
+ "validate-npm-package-name": "3.0.0"
+ }
+ },
+ "npm-packlist": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "ignore-walk": "3.0.1",
+ "npm-bundled": "1.0.5"
+ }
+ },
+ "npm-pick-manifest": {
+ "version": "2.2.3",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1",
+ "npm-package-arg": "6.1.0",
+ "semver": "5.6.0"
+ }
+ },
+ "npm-profile": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "aproba": "2.0.0",
+ "figgy-pudding": "3.5.1",
+ "npm-registry-fetch": "3.8.0"
+ }
+ },
+ "npm-registry-fetch": {
+ "version": "3.8.0",
+ "bundled": true,
+ "requires": {
+ "JSONStream": "1.3.5",
+ "bluebird": "3.5.3",
+ "figgy-pudding": "3.5.1",
+ "lru-cache": "4.1.5",
+ "make-fetch-happen": "4.0.1",
+ "npm-package-arg": "6.1.0"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "bundled": true,
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "npm-user-validate": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "npmlog": {
+ "version": "4.1.2",
+ "bundled": true,
+ "requires": {
+ "are-we-there-yet": "1.1.4",
+ "console-control-strings": "1.1.0",
+ "gauge": "2.7.4",
+ "set-blocking": "2.0.0"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "bundled": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "bundled": true
+ },
+ "once": {
+ "version": "1.4.0",
+ "bundled": true,
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "opener": {
+ "version": "1.5.1",
+ "bundled": true
+ },
+ "os-homedir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "osenv": {
+ "version": "0.1.5",
+ "bundled": true,
+ "requires": {
+ "os-homedir": "1.0.2",
+ "os-tmpdir": "1.0.2"
+ }
+ },
+ "p-finally": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "p-limit": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "p-try": "1.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "p-limit": "1.2.0"
+ }
+ },
+ "p-try": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "package-json": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "got": "6.7.1",
+ "registry-auth-token": "3.3.2",
+ "registry-url": "3.1.0",
+ "semver": "5.6.0"
+ }
+ },
+ "pacote": {
+ "version": "9.3.0",
+ "bundled": true,
+ "requires": {
+ "bluebird": "3.5.3",
+ "cacache": "11.3.2",
+ "figgy-pudding": "3.5.1",
+ "get-stream": "4.1.0",
+ "glob": "7.1.3",
+ "lru-cache": "5.1.1",
+ "make-fetch-happen": "4.0.1",
+ "minimatch": "3.0.4",
+ "minipass": "2.3.5",
+ "mississippi": "3.0.0",
+ "mkdirp": "0.5.1",
+ "normalize-package-data": "2.4.0",
+ "npm-package-arg": "6.1.0",
+ "npm-packlist": "1.2.0",
+ "npm-pick-manifest": "2.2.3",
+ "npm-registry-fetch": "3.8.0",
+ "osenv": "0.1.5",
+ "promise-inflight": "1.0.1",
+ "promise-retry": "1.1.1",
+ "protoduck": "5.0.1",
+ "rimraf": "2.6.3",
+ "safe-buffer": "5.1.2",
+ "semver": "5.6.0",
+ "ssri": "6.0.1",
+ "tar": "4.4.8",
+ "unique-filename": "1.1.1",
+ "which": "1.3.1"
+ },
+ "dependencies": {
+ "lru-cache": {
+ "version": "5.1.1",
+ "bundled": true,
+ "requires": {
+ "yallist": "3.0.3"
+ }
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "parallel-transform": {
+ "version": "1.1.0",
+ "bundled": true,
+ "requires": {
+ "cyclist": "0.2.2",
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "path-is-absolute": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "path-is-inside": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "performance-now": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "pify": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "prepend-http": {
+ "version": "1.0.4",
+ "bundled": true
+ },
+ "process-nextick-args": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "promise-inflight": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "promise-retry": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "err-code": "1.1.2",
+ "retry": "0.10.1"
+ },
+ "dependencies": {
+ "retry": {
+ "version": "0.10.1",
+ "bundled": true
+ }
+ }
+ },
+ "promzard": {
+ "version": "0.3.0",
+ "bundled": true,
+ "requires": {
+ "read": "1.0.7"
+ }
+ },
+ "proto-list": {
+ "version": "1.2.4",
+ "bundled": true
+ },
+ "protoduck": {
+ "version": "5.0.1",
+ "bundled": true,
+ "requires": {
+ "genfun": "5.0.0"
+ }
+ },
+ "prr": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "pseudomap": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "psl": {
+ "version": "1.1.29",
+ "bundled": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ },
+ "pumpify": {
+ "version": "1.5.1",
+ "bundled": true,
+ "requires": {
+ "duplexify": "3.6.0",
+ "inherits": "2.0.3",
+ "pump": "2.0.1"
+ },
+ "dependencies": {
+ "pump": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "once": "1.4.0"
+ }
+ }
+ }
+ },
+ "punycode": {
+ "version": "1.4.1",
+ "bundled": true
+ },
+ "qrcode-terminal": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "qs": {
+ "version": "6.5.2",
+ "bundled": true
+ },
+ "query-string": {
+ "version": "6.2.0",
+ "bundled": true,
+ "requires": {
+ "decode-uri-component": "0.2.0",
+ "strict-uri-encode": "2.0.0"
+ }
+ },
+ "qw": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "rc": {
+ "version": "1.2.7",
+ "bundled": true,
+ "requires": {
+ "deep-extend": "0.5.1",
+ "ini": "1.3.5",
+ "minimist": "1.2.0",
+ "strip-json-comments": "2.0.1"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "read": {
+ "version": "1.0.7",
+ "bundled": true,
+ "requires": {
+ "mute-stream": "0.0.7"
+ }
+ },
+ "read-cmd-shim": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15"
+ }
+ },
+ "read-installed": {
+ "version": "4.0.3",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "graceful-fs": "4.1.15",
+ "read-package-json": "2.0.13",
+ "readdir-scoped-modules": "1.0.2",
+ "semver": "5.6.0",
+ "slide": "1.1.6",
+ "util-extend": "1.0.3"
+ }
+ },
+ "read-package-json": {
+ "version": "2.0.13",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.3",
+ "graceful-fs": "4.1.15",
+ "json-parse-better-errors": "1.0.2",
+ "normalize-package-data": "2.4.0",
+ "slash": "1.0.0"
+ }
+ },
+ "read-package-tree": {
+ "version": "5.2.1",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "once": "1.4.0",
+ "read-package-json": "2.0.13",
+ "readdir-scoped-modules": "1.0.2"
+ }
+ },
+ "readable-stream": {
+ "version": "3.1.1",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "string_decoder": "1.2.0",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "readdir-scoped-modules": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "debuglog": "1.0.1",
+ "dezalgo": "1.0.3",
+ "graceful-fs": "4.1.15",
+ "once": "1.4.0"
+ }
+ },
+ "registry-auth-token": {
+ "version": "3.3.2",
+ "bundled": true,
+ "requires": {
+ "rc": "1.2.7",
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "registry-url": {
+ "version": "3.1.0",
+ "bundled": true,
+ "requires": {
+ "rc": "1.2.7"
+ }
+ },
+ "request": {
+ "version": "2.88.0",
+ "bundled": true,
+ "requires": {
+ "aws-sign2": "0.7.0",
+ "aws4": "1.8.0",
+ "caseless": "0.12.0",
+ "combined-stream": "1.0.6",
+ "extend": "3.0.2",
+ "forever-agent": "0.6.1",
+ "form-data": "2.3.2",
+ "har-validator": "5.1.0",
+ "http-signature": "1.2.0",
+ "is-typedarray": "1.0.0",
+ "isstream": "0.1.2",
+ "json-stringify-safe": "5.0.1",
+ "mime-types": "2.1.19",
+ "oauth-sign": "0.9.0",
+ "performance-now": "2.1.0",
+ "qs": "6.5.2",
+ "safe-buffer": "5.1.2",
+ "tough-cookie": "2.4.3",
+ "tunnel-agent": "0.6.0",
+ "uuid": "3.3.2"
+ }
+ },
+ "require-directory": {
+ "version": "2.1.1",
+ "bundled": true
+ },
+ "require-main-filename": {
+ "version": "1.0.1",
+ "bundled": true
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "retry": {
+ "version": "0.12.0",
+ "bundled": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "bundled": true,
+ "requires": {
+ "glob": "7.1.3"
+ }
+ },
+ "run-queue": {
+ "version": "1.0.3",
+ "bundled": true,
+ "requires": {
+ "aproba": "1.2.0"
+ },
+ "dependencies": {
+ "aproba": {
+ "version": "1.2.0",
+ "bundled": true
+ }
+ }
+ },
+ "safe-buffer": {
+ "version": "5.1.2",
+ "bundled": true
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "bundled": true
+ },
+ "semver-diff": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "semver": "5.6.0"
+ }
+ },
+ "set-blocking": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "sha": {
+ "version": "2.0.1",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "readable-stream": "2.3.6"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "shebang-regex": "1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "bundled": true
+ },
+ "slash": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "slide": {
+ "version": "1.1.6",
+ "bundled": true
+ },
+ "smart-buffer": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "socks": {
+ "version": "2.2.0",
+ "bundled": true,
+ "requires": {
+ "ip": "1.1.5",
+ "smart-buffer": "4.0.1"
+ }
+ },
+ "socks-proxy-agent": {
+ "version": "4.0.1",
+ "bundled": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "socks": "2.2.0"
+ }
+ },
+ "sorted-object": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "sorted-union-stream": {
+ "version": "2.1.3",
+ "bundled": true,
+ "requires": {
+ "from2": "1.3.0",
+ "stream-iterate": "1.2.0"
+ },
+ "dependencies": {
+ "from2": {
+ "version": "1.3.0",
+ "bundled": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "1.1.14"
+ }
+ },
+ "isarray": {
+ "version": "0.0.1",
+ "bundled": true
+ },
+ "readable-stream": {
+ "version": "1.1.14",
+ "bundled": 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",
+ "bundled": true
+ }
+ }
+ },
+ "spdx-correct": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-expression-parse": "3.0.0",
+ "spdx-license-ids": "3.0.3"
+ }
+ },
+ "spdx-exceptions": {
+ "version": "2.1.0",
+ "bundled": true
+ },
+ "spdx-expression-parse": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "spdx-exceptions": "2.1.0",
+ "spdx-license-ids": "3.0.3"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.3",
+ "bundled": true
+ },
+ "sshpk": {
+ "version": "1.14.2",
+ "bundled": true,
+ "requires": {
+ "asn1": "0.2.4",
+ "assert-plus": "1.0.0",
+ "bcrypt-pbkdf": "1.0.2",
+ "dashdash": "1.14.1",
+ "ecc-jsbn": "0.1.2",
+ "getpass": "0.1.7",
+ "jsbn": "0.1.1",
+ "safer-buffer": "2.1.2",
+ "tweetnacl": "0.14.5"
+ }
+ },
+ "ssri": {
+ "version": "6.0.1",
+ "bundled": true,
+ "requires": {
+ "figgy-pudding": "3.5.1"
+ }
+ },
+ "stream-each": {
+ "version": "1.2.2",
+ "bundled": true,
+ "requires": {
+ "end-of-stream": "1.4.1",
+ "stream-shift": "1.0.0"
+ }
+ },
+ "stream-iterate": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "stream-shift": "1.0.0"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "stream-shift": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strict-uri-encode": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "bundled": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ }
+ }
+ },
+ "string_decoder": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "stringify-package": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "bundled": true,
+ "requires": {
+ "ansi-regex": "2.1.1"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "strip-json-comments": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "supports-color": {
+ "version": "5.4.0",
+ "bundled": true,
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ },
+ "tar": {
+ "version": "4.4.8",
+ "bundled": true,
+ "requires": {
+ "chownr": "1.1.1",
+ "fs-minipass": "1.2.5",
+ "minipass": "2.3.5",
+ "minizlib": "1.1.1",
+ "mkdirp": "0.5.1",
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ },
+ "dependencies": {
+ "chownr": {
+ "version": "1.1.1",
+ "bundled": true
+ },
+ "minipass": {
+ "version": "2.3.5",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2",
+ "yallist": "3.0.3"
+ }
+ },
+ "yallist": {
+ "version": "3.0.3",
+ "bundled": true
+ }
+ }
+ },
+ "term-size": {
+ "version": "1.2.0",
+ "bundled": true,
+ "requires": {
+ "execa": "0.7.0"
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "bundled": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "bundled": true
+ },
+ "through2": {
+ "version": "2.0.3",
+ "bundled": true,
+ "requires": {
+ "readable-stream": "2.3.6",
+ "xtend": "4.0.1"
+ },
+ "dependencies": {
+ "readable-stream": {
+ "version": "2.3.6",
+ "bundled": true,
+ "requires": {
+ "core-util-is": "1.0.2",
+ "inherits": "2.0.3",
+ "isarray": "1.0.0",
+ "process-nextick-args": "2.0.0",
+ "safe-buffer": "5.1.2",
+ "string_decoder": "1.1.1",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
+ "timed-out": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "tiny-relative-date": {
+ "version": "1.3.0",
+ "bundled": true
+ },
+ "tough-cookie": {
+ "version": "2.4.3",
+ "bundled": true,
+ "requires": {
+ "psl": "1.1.29",
+ "punycode": "1.4.1"
+ }
+ },
+ "tunnel-agent": {
+ "version": "0.6.0",
+ "bundled": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ },
+ "tweetnacl": {
+ "version": "0.14.5",
+ "bundled": true,
+ "optional": true
+ },
+ "typedarray": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "uid-number": {
+ "version": "0.0.6",
+ "bundled": true
+ },
+ "umask": {
+ "version": "1.1.0",
+ "bundled": true
+ },
+ "unique-filename": {
+ "version": "1.1.1",
+ "bundled": true,
+ "requires": {
+ "unique-slug": "2.0.0"
+ }
+ },
+ "unique-slug": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "imurmurhash": "0.1.4"
+ }
+ },
+ "unique-string": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "crypto-random-string": "1.0.0"
+ }
+ },
+ "unpipe": {
+ "version": "1.0.0",
+ "bundled": true
+ },
+ "unzip-response": {
+ "version": "2.0.1",
+ "bundled": true
+ },
+ "update-notifier": {
+ "version": "2.5.0",
+ "bundled": true,
+ "requires": {
+ "boxen": "1.3.0",
+ "chalk": "2.4.1",
+ "configstore": "3.1.2",
+ "import-lazy": "2.1.0",
+ "is-ci": "1.1.0",
+ "is-installed-globally": "0.1.0",
+ "is-npm": "1.0.0",
+ "latest-version": "3.1.0",
+ "semver-diff": "2.1.0",
+ "xdg-basedir": "3.0.0"
+ }
+ },
+ "url-parse-lax": {
+ "version": "1.0.0",
+ "bundled": true,
+ "requires": {
+ "prepend-http": "1.0.4"
+ }
+ },
+ "util-deprecate": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "util-extend": {
+ "version": "1.0.3",
+ "bundled": true
+ },
+ "uuid": {
+ "version": "3.3.2",
+ "bundled": true
+ },
+ "validate-npm-package-license": {
+ "version": "3.0.4",
+ "bundled": true,
+ "requires": {
+ "spdx-correct": "3.0.0",
+ "spdx-expression-parse": "3.0.0"
+ }
+ },
+ "validate-npm-package-name": {
+ "version": "3.0.0",
+ "bundled": true,
+ "requires": {
+ "builtins": "1.0.3"
+ }
+ },
+ "verror": {
+ "version": "1.10.0",
+ "bundled": true,
+ "requires": {
+ "assert-plus": "1.0.0",
+ "core-util-is": "1.0.2",
+ "extsprintf": "1.3.0"
+ }
+ },
+ "wcwidth": {
+ "version": "1.0.1",
+ "bundled": true,
+ "requires": {
+ "defaults": "1.0.3"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "bundled": true,
+ "requires": {
+ "isexe": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "bundled": true
+ },
+ "wide-align": {
+ "version": "1.1.2",
+ "bundled": true,
+ "requires": {
+ "string-width": "1.0.2"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "widest-line": {
+ "version": "2.0.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "2.1.1"
+ }
+ },
+ "worker-farm": {
+ "version": "1.6.0",
+ "bundled": true,
+ "requires": {
+ "errno": "0.1.7"
+ }
+ },
+ "wrap-ansi": {
+ "version": "2.1.0",
+ "bundled": true,
+ "requires": {
+ "string-width": "1.0.2",
+ "strip-ansi": "3.0.1"
+ },
+ "dependencies": {
+ "string-width": {
+ "version": "1.0.2",
+ "bundled": true,
+ "requires": {
+ "code-point-at": "1.1.0",
+ "is-fullwidth-code-point": "1.0.0",
+ "strip-ansi": "3.0.1"
+ }
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "bundled": true
+ },
+ "write-file-atomic": {
+ "version": "2.3.0",
+ "bundled": true,
+ "requires": {
+ "graceful-fs": "4.1.15",
+ "imurmurhash": "0.1.4",
+ "signal-exit": "3.0.2"
+ }
+ },
+ "xdg-basedir": {
+ "version": "3.0.0",
+ "bundled": true
+ },
+ "xtend": {
+ "version": "4.0.1",
+ "bundled": true
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "bundled": true
+ },
+ "yallist": {
+ "version": "2.1.2",
+ "bundled": true
+ },
+ "yargs": {
+ "version": "11.0.0",
+ "bundled": true,
+ "requires": {
+ "cliui": "4.1.0",
+ "decamelize": "1.2.0",
+ "find-up": "2.1.0",
+ "get-caller-file": "1.0.2",
+ "os-locale": "2.1.0",
+ "require-directory": "2.1.1",
+ "require-main-filename": "1.0.1",
+ "set-blocking": "2.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
+ "y18n": "3.2.1",
+ "yargs-parser": "9.0.2"
+ },
+ "dependencies": {
+ "y18n": {
+ "version": "3.2.1",
+ "bundled": true
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "9.0.2",
+ "bundled": true,
+ "requires": {
+ "camelcase": "4.1.0"
+ }
+ }
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nwsapi": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
+ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "requires": {
+ "is-descriptor": "0.1.6"
+ }
+ }
+ }
+ },
+ "object-hash": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
+ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
+ },
+ "object-keys": {
+ "version": "1.0.12",
+ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
+ "integrity": "sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag=="
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "requires": {
+ "define-properties": "1.1.3",
+ "function-bind": "1.1.1",
+ "has-symbols": "1.0.0",
+ "object-keys": "1.0.12"
+ }
+ },
+ "object.getownpropertydescriptors": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
+ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0"
+ }
+ },
+ "object.omit": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz",
+ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=",
+ "requires": {
+ "for-own": "0.1.5",
+ "is-extendable": "0.1.1"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "requires": {
+ "isobject": "3.0.1"
+ }
+ },
+ "object.values": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
+ "integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
+ "obuf": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz",
+ "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg=="
+ },
+ "on-finished": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
+ "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
+ "requires": {
+ "ee-first": "1.1.1"
+ }
+ },
+ "on-headers": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz",
+ "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c="
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "requires": {
+ "wrappy": "1.0.2"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "requires": {
+ "mimic-fn": "1.2.0"
+ }
+ },
"opn": {
"version": "5.4.0",
"resolved": "https://registry.npmjs.org/opn/-/opn-5.4.0.tgz",
@@ -11418,6 +14631,27 @@
"warning": "4.0.2"
}
},
+ "react-leaflet-search": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/react-leaflet-search/-/react-leaflet-search-0.6.0.tgz",
+ "integrity": "sha512-5kzE4Szqs8tf96qSNZqUcMaWVXIjHXsxMLrzeaf8M99PdCFs9e7bLQjGKBCyvsDdJvcv3iNni20DjrMkwHjLEA=="
+ },
+ "react-lifecycles-compat": {
+ "version": "3.0.4",
+ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
+ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
+ },
+ "react-resize-detector": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/react-resize-detector/-/react-resize-detector-2.3.0.tgz",
+ "integrity": "sha512-oCAddEWWeFWYH5FAcHdBYcZjAw9fMzRUK9sWSx6WvSSOPVRxcHd5zTIGy/mOus+AhN/u6T4TMiWxvq79PywnJQ==",
+ "requires": {
+ "lodash.debounce": "4.0.8",
+ "lodash.throttle": "4.1.1",
+ "prop-types": "15.6.2",
+ "resize-observer-polyfill": "1.5.1"
+ }
+ },
"react-scripts": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/react-scripts/-/react-scripts-2.0.5.tgz",
@@ -11472,6 +14706,28 @@
"workbox-webpack-plugin": "3.6.2"
}
},
+ "react-smooth": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/react-smooth/-/react-smooth-1.0.2.tgz",
+ "integrity": "sha512-pIGzL1g9VGAsRsdZQokIK0vrCkcdKtnOnS1gyB2rrowdLy69lNSWoIjCTWAfgbiYvria8tm5hEZqj+jwXMkV4A==",
+ "requires": {
+ "lodash": "4.17.11",
+ "prop-types": "15.6.2",
+ "raf": "3.4.0",
+ "react-transition-group": "2.5.3"
+ }
+ },
+ "react-transition-group": {
+ "version": "2.5.3",
+ "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.3.tgz",
+ "integrity": "sha512-2DGFck6h99kLNr8pOFk+z4Soq3iISydwOFeeEVPjTN6+Y01CmvbWmnN02VuTWyFdnRtIDPe+wy2q6Ui8snBPZg==",
+ "requires": {
+ "dom-helpers": "3.4.0",
+ "loose-envify": "1.4.0",
+ "prop-types": "15.6.2",
+ "react-lifecycles-compat": "3.0.4"
+ }
+ },
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
@@ -11826,6 +15082,39 @@
"util.promisify": "1.0.0"
}
},
+ "recharts": {
+ "version": "1.4.2",
+ "resolved": "https://registry.npmjs.org/recharts/-/recharts-1.4.2.tgz",
+ "integrity": "sha512-HHsy7tB591T/2cOeQEXAbRpc+YMLikTX/s9GTGW1n7kRUljFBDu2oNecrPaTKodrMikFxa9qavDE6wSEFaY48Q==",
+ "requires": {
+ "classnames": "2.2.6",
+ "core-js": "2.5.7",
+ "d3-interpolate": "1.3.2",
+ "d3-scale": "2.1.2",
+ "d3-shape": "1.2.2",
+ "lodash": "4.17.11",
+ "prop-types": "15.6.2",
+ "react-resize-detector": "2.3.0",
+ "react-smooth": "1.0.2",
+ "recharts-scale": "0.4.2",
+ "reduce-css-calc": "1.3.0"
+ },
+ "dependencies": {
+ "core-js": {
+ "version": "2.5.7",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.7.tgz",
+ "integrity": "sha512-RszJCAxg/PP6uzXVXL6BsxSXx/B05oJAQ2vkJRjyjrEcNVycaqOmNb5OTxZPE3xa5gwZduqza6L9JOCenh/Ecw=="
+ }
+ }
+ },
+ "recharts-scale": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/recharts-scale/-/recharts-scale-0.4.2.tgz",
+ "integrity": "sha512-p/cKt7j17D1CImLgX2f5+6IXLbRHGUQkogIp06VUoci/XkhOQiGSzUrsD1uRmiI7jha4u8XNFOjkHkzzBPivMg==",
+ "requires": {
+ "decimal.js-light": "2.5.0"
+ }
+ },
"recursive-readdir": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.2.tgz",
@@ -11834,6 +15123,38 @@
"minimatch": "3.0.4"
}
},
+ "reduce-css-calc": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
+ "integrity": "sha1-dHyRTgSWFKTJz7umKYca0dKSdxY=",
+ "requires": {
+ "balanced-match": "0.4.2",
+ "math-expression-evaluator": "1.2.17",
+ "reduce-function-call": "1.0.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
+ "reduce-function-call": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.2.tgz",
+ "integrity": "sha1-WiAL+S4ON3UXUv5FsKszD9S2vpk=",
+ "requires": {
+ "balanced-match": "0.4.2"
+ },
+ "dependencies": {
+ "balanced-match": {
+ "version": "0.4.2",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
+ }
+ }
+ },
"regenerate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
@@ -12087,6 +15408,11 @@
"resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz",
"integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8="
},
+ "resize-observer-polyfill": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/resize-observer-polyfill/-/resize-observer-polyfill-1.5.1.tgz",
+ "integrity": "sha512-LwZrotdHOo12nQuZlHEmtuXdqGoOD0OhaxopaNFxWzInpEgaLWoVuAMbTzixuosCx2nEG58ngzW3vxdWoxIgdg=="
+ },
"resolve": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz",
diff --git a/package.json b/package.json
index 182fc3b..f05bb94 100644
--- a/package.json
+++ b/package.json
@@ -4,11 +4,18 @@
"private": true,
"dependencies": {
"@fmidev/metolib": "^2.0.6",
+ "@fortawesome/fontawesome-svg-core": "^1.2.12",
+ "@fortawesome/free-solid-svg-icons": "^5.6.3",
+ "@fortawesome/react-fontawesome": "^0.1.4",
+ "babel-polyfill": "^6.26.0",
"leaflet": "^1.3.4",
+ "npm": "^6.6.0",
"react": "^16.7.0-alpha",
"react-dom": "^16.7.0-alpha",
"react-leaflet": "^2.1.2",
+ "react-leaflet-search": "^0.6.0",
"react-scripts": "2.0.5",
+ "recharts": "^1.4.2",
"styled-components": "^4.1.1"
},
"scripts": {
diff --git a/src/App.js b/src/App.js
index 86fb0d8..45a3c75 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,87 +1,35 @@
-import React, {useEffect, useState} from 'react';
-import Metolib from '@fmidev/metolib';
-import './App.css';
-import {Map, Marker, TileLayer} from "react-leaflet";
-import styled from "styled-components";
-import L from "leaflet";
-import Sidebar from './Sidebar';
+import React, { useState, useEffect } from "react";
+import "./index.css";
+import fetchObservationLocation from "./util/fetchObservationLocations";
+import Sidebar from "./components/Sidebar";
+import Map from "./containers/Map";
-const MapContainer = styled(Map)`
- width: calc(100vw - 300px);
- height: 100vh;
- position:absolute;
- top:0px;
- left:300px;
-`;
-
-
-// Ugly hack to fix Leaflet icons with leaflet loaders
-delete L.Icon.Default.prototype._getIconUrl;
-L.Icon.Default.mergeOptions({
- iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
- iconUrl: require('leaflet/dist/images/marker-icon.png'),
- shadowUrl: require('leaflet/dist/images/marker-shadow.png'),
-});
-
-
-function App() {
- const [observationLocations, setObservationLocations] = useState([]);
+const App = () => {
+ const [observeLocations, setObservationLocations] = useState([]);
const [selectedLocation, setSelectedLocation] = useState(null);
- useEffect(function fetchObservationLocations() {
- const connection = new Metolib.WfsConnection();
- if (connection.connect('http://opendata.fmi.fi/wfs', 'fmi::observations::weather::cities::multipointcoverage')) {
- connection.getData({
- begin: Date.now() - 60e3 * 60 * 24 * 6,
- end: Date.now(),
- requestParameter: "t,snowdepth,r_1h",
- timestep: 60 * 60 * 1000,
- bbox: "20.6455928891, 59.846373196, 31.5160921567, 70.1641930203",
- callback: (data, errors) => {
- if (errors.length > 0) {
-
- errors.forEach(err => {
- console.error('FMI API error: ' + err.errorText);
- });
- return;
- }
-
- setObservationLocations(data.locations
- .map(loc => {
- const [lon, lat] = loc.info.position.map(parseFloat);
- return {...loc, position: {lat, lon}}
- })
- );
+ useEffect(() => fetchObservationLocation(setObservationLocations), []);
- connection.disconnect();
- }
- });
- }
- }, []);
-
- const position = [65, 26];
- const map = (
-
-
- {observationLocations.map(loc => setSelectedLocation(loc.info.id)}>
- )}
-
- );
+ const clearSelectedLocation = () => {
+ setSelectedLocation(null);
+ };
return (
-
- {map}
+
+
);
+};
-}
-
-export default App;
\ No newline at end of file
+export default App;
diff --git a/src/Sidebar.js b/src/Sidebar.js
deleted file mode 100644
index 63b6555..0000000
--- a/src/Sidebar.js
+++ /dev/null
@@ -1,17 +0,0 @@
-import React from 'react';
-import styled from "styled-components";
-import getSelectedLocatoinId from './locationGetter';
-
-function Sidebar({selectedLocationId, observationLocations}) {
- const id = getSelectedLocatoinId(selectedLocationId);
-
- const loc = observationLocations.find(loc => loc.info.id === id);
- return
-
{loc && JSON.stringify(loc.info, null, 4)}
-
-}
-
-export default styled(Sidebar)`
- width: 300px;
- height: 100vh;
-`;
\ No newline at end of file
diff --git a/src/components/DateValue.js b/src/components/DateValue.js
new file mode 100644
index 0000000..19fb206
--- /dev/null
+++ b/src/components/DateValue.js
@@ -0,0 +1,37 @@
+import React from "react";
+import {
+ ComposedChart,
+ Bar,
+ XAxis,
+ YAxis,
+ Line,
+ CartesianGrid,
+ Tooltip,
+ ResponsiveContainer,
+ Legend
+} from "recharts";
+
+const DateValue = ({ data, type }) => {
+ return (
+
+
+
+
+
+ value.toFixed(type === "r_1h" ? 1 : 0)} />
+
+
+
+
+
+
+ );
+};
+
+export default DateValue;
diff --git a/src/components/Sidebar.js b/src/components/Sidebar.js
new file mode 100644
index 0000000..55a9098
--- /dev/null
+++ b/src/components/Sidebar.js
@@ -0,0 +1,76 @@
+import React, { useState, useEffect } from "react";
+import { number, arrayOf, oneOfType, object, shape, string } from "prop-types";
+import styled from "styled-components";
+import TimeValueArea from "./TimeValueArea";
+import DateValue from "./DateValue";
+import constructAreaChartData from "../util/constructAreaChartData";
+import handleChartSetter from "../util/handleChartSetter";
+import Form from "../containers/Form";
+import { faGlobeEurope } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import "../style/sidebar.css";
+
+function Sidebar({
+ selectedLocation,
+ observeLocations,
+ className,
+ clearSelectedLocation
+}) {
+ const [chartData, setChartData] = useState({
+ data: [],
+ composedData: [],
+ type: ""
+ });
+
+ useEffect(() => {
+ const { type } = chartData;
+ handleChartSetter(observeLocations, selectedLocation, type, setChartData);
+ }, [observeLocations, selectedLocation]);
+
+ const handleType = type =>
+ handleChartSetter(observeLocations, selectedLocation, type, setChartData);
+
+ const setData = () => {
+ const data = constructAreaChartData(observeLocations, type);
+ clearSelectedLocation();
+ setChartData({ data, type });
+ };
+
+ const { data, composedData, type } = chartData;
+
+ return (
+
+
+
+
+
+
+
+
+ );
+}
+
+export default styled(Sidebar)`
+ // width: 50%;
+ height: 100vh;
+`;
+
+Sidebar.propTypes = {
+ selectedLocation: oneOfType([string, object]),
+ observeLocations: arrayOf(
+ shape({
+ position: shape({
+ lat: number.isRequired,
+ lon: number.isRequired
+ }),
+ info: shape({
+ id: string.isRequired,
+ region: string.isRequired
+ })
+ }).isRequired
+ ),
+ className: string.isRequired
+};
diff --git a/src/components/TimeValueArea.js b/src/components/TimeValueArea.js
new file mode 100644
index 0000000..d642477
--- /dev/null
+++ b/src/components/TimeValueArea.js
@@ -0,0 +1,46 @@
+import React from "react";
+import { array, string } from "prop-types";
+import {
+ AreaChart,
+ Area,
+ XAxis,
+ YAxis,
+ CartesianGrid,
+ Tooltip,
+ ResponsiveContainer
+} from "recharts";
+
+const defineLabel = type => {
+ switch (type) {
+ case "t":
+ return "degC";
+ case "r_1h":
+ return "mm";
+ default:
+ return "cm";
+ }
+};
+
+const TimeValueArea = ({ data, type }) => (
+
+
+
+ value.substr(0, 2)} />
+
+ value.toFixed(type === "r_1h" ? 1 : 0)} />
+
+
+
+);
+
+export default TimeValueArea;
+
+TimeValueArea.propTypes = {
+ data: array.isRequired,
+ type: string.isRequired
+};
diff --git a/src/containers/Form.js b/src/containers/Form.js
new file mode 100644
index 0000000..ffd8696
--- /dev/null
+++ b/src/containers/Form.js
@@ -0,0 +1,21 @@
+import React, { useState } from "react";
+import { defaultType } from "../var";
+
+const Form = ({ submit }) => {
+ const [type, setType] = useState(defaultType);
+
+ const handleChange = e => {
+ submit(e.target.value);
+ setType(e.target.value);
+ };
+
+ return (
+
+ );
+};
+
+export default Form;
diff --git a/src/containers/Map.js b/src/containers/Map.js
new file mode 100644
index 0000000..679cd59
--- /dev/null
+++ b/src/containers/Map.js
@@ -0,0 +1,118 @@
+import React, { useState } from "react";
+import { arrayOf, shape, number, string, func } from "prop-types";
+import {
+ Map as LeafletMap,
+ Marker,
+ TileLayer,
+ Popup,
+ LayersControl,
+ CircleMarker,
+ Tooltip
+} from "react-leaflet";
+import L from "leaflet";
+import styled from "styled-components";
+import {
+ attribution,
+ layerOptions,
+ defaultCoordinate,
+ iconUrl,
+ defaultLayer
+} from "../var";
+import "../style/map.css";
+import { ReactLeafletSearch } from "react-leaflet-search";
+
+// Ugly hack to fix Leaflet icons with leaflet loaders
+delete L.Icon.Default.prototype._getIconUrl;
+L.Icon.Default.mergeOptions({
+ iconRetinaUrl: require("leaflet/dist/images/marker-icon-2x.png"),
+ iconUrl: require("leaflet/dist/images/marker-icon.png"),
+ shadowUrl: require("leaflet/dist/images/marker-shadow.png")
+});
+
+const MapContainer = styled(LeafletMap)`
+ // width: calc(100vw - 300px);
+ height: 100vh;
+ // position: absolute;
+ // top: 0px;
+ // left: 40%;
+`;
+
+const Map = ({ observeLocations, selectedLocation, setSelectedLocation }) => {
+ const [latlng, setLatLng] = useState(defaultCoordinate);
+
+ const icon = new L.Icon.Default();
+
+ const clickIcon = new L.Icon.Default({ iconUrl, className: "blinking" });
+
+ const layers = layerOptions.map(({ name, url }, i) => (
+
+
+
+ ));
+
+ const markers = observeLocations
+ .sort((a, b) => (a.info.region < b.info.region ? -1 : 1))
+ .map(({ position: { lat, lon }, info: { id, region } }) => (
+
+ setSelectedLocation(id)}
+ onMouseOver={e => e.target.openPopup()}
+ onMouseOut={e => e.target.closePopup()}
+ popupopen={true}
+ >
+ {region}
+
+
+ ));
+
+ const clickedCircle = (
+
+
+ {latlng.lat.toFixed(3)} |
+ {latlng.lng.toFixed(3)}
+
+
+ );
+
+ return (
+ setLatLng(e.latlng)}
+ >
+
+ {layers}
+
+ {markers}
+
+ {clickedCircle}
+
+ );
+};
+
+export default Map;
+
+Map.propTypes = {
+ observeLocations: arrayOf(
+ shape({
+ position: shape({
+ lat: number.isRequired,
+ lon: number.isRequired
+ }),
+ info: shape({
+ id: string.isRequired,
+ region: string.isRequired
+ })
+ }).isRequired
+ ),
+ selectedLocation: string,
+ setSelectedLocation: func.isRequired
+};
diff --git a/src/img/icons8-marker-100.png b/src/img/icons8-marker-100.png
new file mode 100644
index 0000000000000000000000000000000000000000..f433ae732548ddb1bfa45521c7cfc4248676ed98
GIT binary patch
literal 2134
zcmV-c2&wmpP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D2kS{hK~#8N?VWk3
zRaF$mcQZ5(T2K_xKxNrvPH)h%$v;9#O0bABGz=69wbU{sg8nIxia<(>f}%N_l&qkC
zB=ZGDrIlJyie-hBiVb>hzja(b;!#}LTh9I%G(=abHdd4>fxdSwPjonB_
zx#K9%Tne?(Dqu{KcLSW=80q?{oYn&P7nqYM?orc(K
z6(>)k=_fdihS^``RvV2rcRoGwW2+cNA{tjFBi%VFyLxC`>-NLwJdFO;(|l1Wt5P_p
z;oQDzqZ(iiaWux>woI3SbfUK^^V>p0oQomvc|_jCgG@jNsI77W1MN)4ezgpik@(pR
zhpN4Dfvu=Z5WmGTR%S9%ervS54z*bhAbJ$sW*Mpi>1bO^Gg8=8JdMWq#WGSQ;&GFB
zRole`y{120V;QI-@w!@ef~x&ufo=7D5V+J5US%>;Uegj33kaKP32p__5hrUIiUB4~
zXIA+~yf@MyTaq?+s+J>vAm}|yXl&965^`_k@4A$`UMJSFu}SWwT8?~ykgF_#F{ll&
zoWF8tc5q{mJ6L6OL*A3mSZ1ayYsHC0a$cb_@`3E4M#SfqxR9iXut~(+zIl&SZlH^#Cw7c^(Wz(QxE+Af4&-kH9p7EM8d&FKP5PyEi
zW8Ue3u}=4pl`9m{{Jy5k7TV)XQ6Wg-W@xJ5AoffvXDCvefto5iU}}LSCIsnacWIhv
zAjiE{?hqvQ!!Eg`ot5_AilpPz=w!W@;pPG{3lwv
zd?{z!Xo`4fw7ZL~Y3P=
z4DIVQd~Og8mNrk$((v(6+M(SGO1mnic(+=~eOTGwkWM#6!^Z={ueOr=kVbx7!{-Ky
zx5(1wLt>8A@bSR9Hu!N6gny>ta|4}Xm8H#xbYAZxoxMUXDW-ry&+L$Ravi#+$Q(>|
zPqK9R5KlXkHg}k&hzoktSC$ALVj#EQkw_aVt2KOlP`qa>5k4g5x?J}5%5nA%_l>2=
zhxmC)Q^W_!rdT3;NntYI{B3l&TP!WUq(+l8MSNi56ib9JF|jH0BZeLBXG@DWN4k?W
zO*Wu-UzkEXN!(YmI3BI%1-x!)@Fk7BO4DQqlHOy93B-AtCK}LxzmYcxr8b%-JIK{T
zmY7ha_eR_5B7X4wal47`L{{mVDqGMKR#>7!k@$}!quoK8&KnYof<0>G3Pm(8*L2x~
zr`4mC+40HxK3WVY77Fw2kfsi*Xk*!2(@P?Knf5bR7sC1+TT8?6X
z9`d0nv^ChJWhf3Ni(h|#1nMq?5waN8|oWu$mvGxv10S59DJj%BWl
zWW?XCw#o}R`3)m0ErTUvmv~WIoj4})7R<3%JLXq#wO`PBrguHe`5#Uc%o-3ilq0;A7b1t=Jw
zSGm;(n~(Bzw&2%fgd!d0ThXX;TLa8^htnw0Z{51LMAHt~t}|PV^3hx
zIFN!xdnhFh{=4MRbT#?{3O0sD*d@y0
zu*kBdxn!WMptlc&y`Cr`%gD0&wHh%&&zA@2|L-k5DDTN<
zx>$`Y!6=vnyDu`8*YcizTq6%K8m4zQ2(R_+8hL_IF;}SnmKe_c10T7;)i!&(0RR91
M07*qoM6N<$g4pWt2mk;8
literal 0
HcmV?d00001
diff --git a/src/index.css b/src/index.css
index cee5f34..06724fe 100644
--- a/src/index.css
+++ b/src/index.css
@@ -12,3 +12,8 @@ code {
font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
monospace;
}
+
+.App {
+ display: grid;
+ grid-template-columns: 40% 60%;
+}
diff --git a/src/logo.svg b/src/logo.svg
deleted file mode 100644
index 6b60c10..0000000
--- a/src/logo.svg
+++ /dev/null
@@ -1,7 +0,0 @@
-
diff --git a/src/style/map.css b/src/style/map.css
new file mode 100644
index 0000000..ce5131a
--- /dev/null
+++ b/src/style/map.css
@@ -0,0 +1,10 @@
+@keyframes fade {
+ from {
+ opacity: 0.3;
+ }
+ }
+
+ .blinking {
+ animation: fade 1s infinite alternate;
+ }
+
\ No newline at end of file
diff --git a/src/style/sidebar.css b/src/style/sidebar.css
new file mode 100644
index 0000000..a6c09d2
--- /dev/null
+++ b/src/style/sidebar.css
@@ -0,0 +1,15 @@
+.sidebar > div {
+ display: flex;
+ justify-content: space-between;
+}
+
+button {
+ background: white;
+ border: none;
+ cursor: pointer;
+ font-size: 1.5em;
+}
+
+button:disabled {
+ cursor: not-allowed;
+}
diff --git a/src/util/calcAverage.js b/src/util/calcAverage.js
new file mode 100644
index 0000000..8f79b82
--- /dev/null
+++ b/src/util/calcAverage.js
@@ -0,0 +1,17 @@
+export default (arr, arrContainsNumbersOnly = true) => {
+ if (arr) {
+ const truthy = !arrContainsNumbersOnly
+ ? arr.filter(item => item && !isNaN(item.value)).map(v => v.value)
+ : arr.filter(v => !isNaN(v));
+
+ const len = truthy.length;
+ if (!len) {
+ return { average: undefined };
+ }
+ const sum = truthy.reduce((a, b) => a + b);
+ return {
+ average: sum / len,
+ arr: truthy
+ };
+ }
+};
diff --git a/src/util/constructAreaChartData.js b/src/util/constructAreaChartData.js
new file mode 100644
index 0000000..11dd02b
--- /dev/null
+++ b/src/util/constructAreaChartData.js
@@ -0,0 +1,24 @@
+import formatDateTime from "./formatDateTime";
+import { observeHours } from "../var";
+import calcAverage from "./calcAverage";
+
+export default (data, type) => {
+ const groupType = [];
+ for (let i = 0; i < observeHours + 1; i++) {
+ let time = null;
+ const allCitiesPair = data.map((loc, index) => {
+ const pair = loc.data[type].timeValuePairs[i];
+ if (!time && pair) time = pair.time;
+ return pair;
+ });
+
+ if (allCitiesPair.length) {
+ const { average } = calcAverage(allCitiesPair, false);
+ groupType.push({
+ time: formatDateTime(time),
+ [type]: average
+ });
+ }
+ }
+ return groupType;
+};
diff --git a/src/util/constructComposedChartData.js b/src/util/constructComposedChartData.js
new file mode 100644
index 0000000..c39942e
--- /dev/null
+++ b/src/util/constructComposedChartData.js
@@ -0,0 +1,51 @@
+import formatDateTime from "./formatDateTime";
+import calcAverage from "./calcAverage";
+
+export default (data, type) => {
+ const allRegionsData = data.map((region, i) => {
+ const pairs = region.data[type].timeValuePairs;
+ const dateValuePairs = pairs.map(({ time, value }) => {
+ const date = formatDateTime(time).substr(0, 2);
+ return { date, value };
+ });
+ const seen = {};
+ dateValuePairs.map(({ date, value }) => {
+ if (!seen.hasOwnProperty(date)) {
+ seen[date] = [];
+ }
+ return seen[date].push(value);
+ });
+ const keys = Object.keys(seen);
+ const regionMinMaxAvg = keys.map(date => {
+ const { average, arr } = calcAverage(seen[date]);
+ if (!average) {
+ return { date, min: NaN, max: NaN, average: NaN };
+ }
+ const min = Math.min(...arr);
+ const max = Math.max(...arr);
+ return { date, min, max, average };
+ });
+ return regionMinMaxAvg;
+ });
+
+ const finalData = [];
+ for (let i = 0; i < 7; i++) {
+ if (allRegionsData && allRegionsData.length) {
+ const { date } = allRegionsData && allRegionsData[0][i];
+ const oneDayMin = allRegionsData.map(
+ region => region[i] && region[i].min
+ );
+ const oneDayMax = allRegionsData.map(
+ region => region[i] && region[i].max
+ );
+ const oneDayAvg = allRegionsData.map(
+ region => region[i] && region[i].average
+ );
+ const min = calcAverage(oneDayMin).average;
+ const max = calcAverage(oneDayMax).average;
+ const average = calcAverage(oneDayAvg).average;
+ finalData.push({ date, min, max, average });
+ }
+ }
+ return finalData;
+};
diff --git a/src/util/fetchObservationLocations.js b/src/util/fetchObservationLocations.js
new file mode 100644
index 0000000..baace94
--- /dev/null
+++ b/src/util/fetchObservationLocations.js
@@ -0,0 +1,37 @@
+import Metolib from "@fmidev/metolib";
+import { observeHours } from "../var";
+
+export default setter => {
+ const connection = new Metolib.WfsConnection();
+ if (
+ connection.connect(
+ "http://opendata.fmi.fi/wfs",
+ "fmi::observations::weather::cities::multipointcoverage"
+ )
+ ) {
+ connection.getData({
+ begin: Date.now() - 60e3 * 60 * observeHours,
+ end: Date.now(),
+ requestParameter: "t,snowdepth,r_1h",
+ timestep: 60 * 60 * 1000,
+ bbox: "20.6455928891, 59.846373196, 31.5160921567, 70.1641930203",
+ callback: (data, errors) => {
+ if (errors.length > 0) {
+ errors.forEach(err => {
+ console.error("FMI API error: " + err.errorText);
+ });
+ return;
+ }
+
+ setter(
+ data.locations.map(loc => {
+ const [lat, lon] = loc.info.position.map(parseFloat);
+ return { ...loc, position: { lat, lon } };
+ })
+ );
+
+ connection.disconnect();
+ }
+ });
+ }
+};
diff --git a/src/util/formatDateTime.js b/src/util/formatDateTime.js
new file mode 100644
index 0000000..2a29b6b
--- /dev/null
+++ b/src/util/formatDateTime.js
@@ -0,0 +1,12 @@
+export default timestamp => {
+ if (timestamp) {
+ const timeString = new Date(timestamp);
+ const [date, month, time] = [
+ timeString.getDate(),
+ timeString.getMonth() + 1,
+ timeString.getHours()
+ ];
+ const finalTime = `${date}/${month}(${time}:00)`;
+ return finalTime;
+ }
+};
diff --git a/src/util/handleChartSetter.js b/src/util/handleChartSetter.js
new file mode 100644
index 0000000..9a1c5ed
--- /dev/null
+++ b/src/util/handleChartSetter.js
@@ -0,0 +1,13 @@
+import constructAreaChartData from "./constructAreaChartData";
+import constructComposedChartData from "./constructComposedChartData";
+import { defaultType } from "../var";
+
+export default (arr, id, type, setter) => {
+ let clone = [...arr];
+ if (id) {
+ clone = arr.filter(a => a.info.id === id);
+ }
+ const data = constructAreaChartData(clone, type || defaultType);
+ const composedData = constructComposedChartData(clone, type || defaultType);
+ setter({ data, composedData, type: type || defaultType });
+};
diff --git a/src/var/index.js b/src/var/index.js
new file mode 100644
index 0000000..a2f7d20
--- /dev/null
+++ b/src/var/index.js
@@ -0,0 +1,37 @@
+export const attribution =
+ "© OpenStreetMap © CARTO © OpenTopoMap © StamenDesign © NASA";
+
+export const defaultCoordinate = { lat: 64, lng: 27 };
+
+export const defaultLayer = "Mapnik";
+
+export const defaultType = "t";
+
+export const observeHours = 24 * 6;
+
+// for clicked icon
+export const iconUrl = require("../img/icons8-marker-100.png");
+
+export const layerOptions = [
+ { name: "Mapnik", url: "http://{s}.tile.osm.org/{z}/{x}/{y}.png" },
+ {
+ name: "BlackAndWhite",
+ url: "http://a.tile.stamen.com/toner/{z}/{x}/{y}.png"
+ },
+ {
+ name: "Light",
+ url: "https://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}{r}.png"
+ },
+ {
+ name: "Dark",
+ url: "https://{s}.basemaps.cartocdn.com/dark_all/{z}/{x}/{y}{r}.png"
+ },
+ {
+ name: "TopoMap",
+ url: "https://{s}.tile.opentopomap.org/{z}/{x}/{y}.png"
+ },
+ {
+ name: "NASA",
+ url: "https://tileserver.maptiler.com/nasa/{z}/{x}/{y}.jpg"
+ }
+];
From 2c5c825c40b9dd529eabdec7a9df5c72928d98a6 Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Wed, 23 Jan 2019 03:55:09 +0200
Subject: [PATCH 2/6] add region info, chart info, other small fix
---
package-lock.json | 133 ++++++++++++++++++++++
package.json | 4 +
src/App.js | 2 +-
src/components/DateValue.js | 61 ++++++----
src/components/Info.js | 31 +++++
src/components/TimeValueArea.js | 53 ++++-----
src/containers/Form.js | 33 +++++-
src/containers/Map.js | 4 -
src/{components => containers}/Sidebar.js | 43 +++----
src/style/info.css | 23 ++++
src/style/map.css | 15 ++-
src/style/sidebar.css | 15 ---
src/util/constructAreaChartData.js | 8 +-
src/util/defineLabel.js | 19 ++++
src/util/fetchObservationLocations.js | 2 +-
src/util/handleChartSetter.js | 7 +-
16 files changed, 344 insertions(+), 109 deletions(-)
create mode 100644 src/components/Info.js
rename src/{components => containers}/Sidebar.js (63%)
create mode 100644 src/style/info.css
delete mode 100644 src/style/sidebar.css
create mode 100644 src/util/defineLabel.js
diff --git a/package-lock.json b/package-lock.json
index 8728d76..0cb291d 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -4172,6 +4172,11 @@
"minimalistic-crypto-utils": "1.0.1"
}
},
+ "email-addresses": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/email-addresses/-/email-addresses-3.0.3.tgz",
+ "integrity": "sha512-kUlSC06PVvvjlMRpNIl3kR1NRXLEe86VQ7N0bQeaCZb2g+InShCeHQp/JvyYNTugMnRN2NvJhHlc3q12MWbbpg=="
+ },
"emoji-regex": {
"version": "6.5.1",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.5.1.tgz",
@@ -5256,6 +5261,30 @@
"resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz",
"integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY="
},
+ "filename-reserved-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/filename-reserved-regex/-/filename-reserved-regex-1.0.0.tgz",
+ "integrity": "sha1-5hz4BfDeHJhFZ9A4bcXfUO5a9+Q="
+ },
+ "filenamify": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/filenamify/-/filenamify-1.2.1.tgz",
+ "integrity": "sha1-qfL/0RxQO+0wABUCknI3jx8TZaU=",
+ "requires": {
+ "filename-reserved-regex": "1.0.0",
+ "strip-outer": "1.0.1",
+ "trim-repeated": "1.0.0"
+ }
+ },
+ "filenamify-url": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/filenamify-url/-/filenamify-url-1.0.0.tgz",
+ "integrity": "sha1-syvYExnvWGO3MHi+1Q9GpPeXX1A=",
+ "requires": {
+ "filenamify": "1.2.1",
+ "humanize-url": "1.0.1"
+ }
+ },
"fileset": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/fileset/-/fileset-2.0.3.tgz",
@@ -6016,6 +6045,35 @@
"assert-plus": "1.0.0"
}
},
+ "gh-pages": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/gh-pages/-/gh-pages-2.0.1.tgz",
+ "integrity": "sha512-uFlk3bukljeiWKQ2XvPfjcSi/ou7IfoDf2p+Fj672saLAr8bnOdFVqI/JSgrSgInKpCg5BksxEwGUl++dbg8Dg==",
+ "requires": {
+ "async": "2.6.1",
+ "commander": "2.19.0",
+ "email-addresses": "3.0.3",
+ "filenamify-url": "1.0.0",
+ "fs-extra": "7.0.0",
+ "globby": "6.1.0",
+ "graceful-fs": "4.1.15",
+ "rimraf": "2.6.2"
+ },
+ "dependencies": {
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "requires": {
+ "array-union": "1.0.2",
+ "glob": "7.1.3",
+ "object-assign": "4.1.1",
+ "pify": "2.3.0",
+ "pinkie-promise": "2.0.1"
+ }
+ }
+ }
+ },
"glob": {
"version": "7.1.3",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
@@ -6818,6 +6876,28 @@
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
},
+ "humanize-url": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/humanize-url/-/humanize-url-1.0.1.tgz",
+ "integrity": "sha1-9KuZ4NKIF0yk4eUEB8VfuuRk7/8=",
+ "requires": {
+ "normalize-url": "1.9.1",
+ "strip-url-auth": "1.0.1"
+ },
+ "dependencies": {
+ "normalize-url": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz",
+ "integrity": "sha1-LMDWazHqIwNkWENuNiDYWVTGbDw=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "prepend-http": "1.0.4",
+ "query-string": "4.3.4",
+ "sort-keys": "1.1.2"
+ }
+ }
+ }
+ },
"humps": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/humps/-/humps-2.0.1.tgz",
@@ -7195,6 +7275,11 @@
"path-is-inside": "1.0.2"
}
},
+ "is-plain-obj": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz",
+ "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4="
+ },
"is-plain-object": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
@@ -14193,6 +14278,11 @@
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
"integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ="
},
+ "prepend-http": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
+ "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw="
+ },
"preserve": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz",
@@ -14366,6 +14456,15 @@
"resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
"integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
},
+ "query-string": {
+ "version": "4.3.4",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz",
+ "integrity": "sha1-u7aTucqRXCMlFbIosaArYJBD2+s=",
+ "requires": {
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
+ },
"querystring": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz",
@@ -16301,6 +16400,14 @@
}
}
},
+ "sort-keys": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
+ "integrity": "sha1-RBttTTRnmPG05J6JIK37oOVD+a0=",
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ },
"source-list-map": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz",
@@ -16602,6 +16709,11 @@
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI="
},
+ "strict-uri-encode": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz",
+ "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM="
+ },
"string-length": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/string-length/-/string-length-2.0.0.tgz",
@@ -16700,6 +16812,19 @@
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
+ "strip-outer": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-outer/-/strip-outer-1.0.1.tgz",
+ "integrity": "sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==",
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
+ "strip-url-auth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/strip-url-auth/-/strip-url-auth-1.0.1.tgz",
+ "integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164="
+ },
"style-loader": {
"version": "0.23.0",
"resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.0.tgz",
@@ -17109,6 +17234,14 @@
"punycode": "2.1.1"
}
},
+ "trim-repeated": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/trim-repeated/-/trim-repeated-1.0.0.tgz",
+ "integrity": "sha1-42RqLqTokTEr9+rObPsFOAvAHCE=",
+ "requires": {
+ "escape-string-regexp": "1.0.5"
+ }
+ },
"trim-right": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
diff --git a/package.json b/package.json
index f05bb94..f37df78 100644
--- a/package.json
+++ b/package.json
@@ -2,12 +2,14 @@
"name": "climate-map-challenge",
"version": "0.1.0",
"private": true,
+ "homepage": "https://quynhquynh.github.io/climate-map-challenge/",
"dependencies": {
"@fmidev/metolib": "^2.0.6",
"@fortawesome/fontawesome-svg-core": "^1.2.12",
"@fortawesome/free-solid-svg-icons": "^5.6.3",
"@fortawesome/react-fontawesome": "^0.1.4",
"babel-polyfill": "^6.26.0",
+ "gh-pages": "^2.0.1",
"leaflet": "^1.3.4",
"npm": "^6.6.0",
"react": "^16.7.0-alpha",
@@ -22,6 +24,8 @@
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
+ "predeploy": "npm run build",
+ "deploy": "gh-pages -d build",
"eject": "react-scripts eject"
},
"eslintConfig": {
diff --git a/src/App.js b/src/App.js
index 45a3c75..4c6aeb3 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,7 +1,7 @@
import React, { useState, useEffect } from "react";
import "./index.css";
import fetchObservationLocation from "./util/fetchObservationLocations";
-import Sidebar from "./components/Sidebar";
+import Sidebar from "./containers/Sidebar";
import Map from "./containers/Map";
const App = () => {
diff --git a/src/components/DateValue.js b/src/components/DateValue.js
index 19fb206..d13753d 100644
--- a/src/components/DateValue.js
+++ b/src/components/DateValue.js
@@ -1,4 +1,5 @@
import React from "react";
+import { array, string } from "prop-types";
import {
ComposedChart,
Bar,
@@ -10,28 +11,44 @@ import {
ResponsiveContainer,
Legend
} from "recharts";
+import defineLabel from "../util/defineLabel";
-const DateValue = ({ data, type }) => {
- return (
-
-
-
-
-
- value.toFixed(type === "r_1h" ? 1 : 0)} />
-
-
-
-
-
-
- );
-};
+const DateValue = ({ data = [], type }) => (
+
+
+
+
+
+
+ `${value.toFixed(type === "r_1h" ? 1 : 0)} ${defineLabel(type).unit}`
+ }
+ />
+
+
+
+
+
+
+);
export default DateValue;
+
+DateValue.propTypes = {
+ data: array,
+ type: string.isRequired
+};
diff --git a/src/components/Info.js b/src/components/Info.js
new file mode 100644
index 0000000..17a6af0
--- /dev/null
+++ b/src/components/Info.js
@@ -0,0 +1,31 @@
+import React from "react";
+import "../style/info.css";
+
+const Info = ({ data }) => {
+ const { info = {}, position = {} } = data || {};
+ const { name, region } = info;
+ const { lat, lon } = position;
+ return (
+
+
+
+ {!name ? Name: : name}
+
+
+ Region:
+ {region}
+
+
+ Latitude:
+ {lat}
+
+
+ Longtitude:
+ {lon}
+
+
+ {!region ?
Choose location from Map
: null}
+
+ );
+};
+export default Info;
diff --git a/src/components/TimeValueArea.js b/src/components/TimeValueArea.js
index d642477..b55ea89 100644
--- a/src/components/TimeValueArea.js
+++ b/src/components/TimeValueArea.js
@@ -1,5 +1,5 @@
import React from "react";
-import { array, string } from "prop-types";
+import { string, array } from "prop-types";
import {
AreaChart,
Area,
@@ -9,38 +9,35 @@ import {
Tooltip,
ResponsiveContainer
} from "recharts";
+import defineLabel from "../util/defineLabel";
-const defineLabel = type => {
- switch (type) {
- case "t":
- return "degC";
- case "r_1h":
- return "mm";
- default:
- return "cm";
- }
+const TimeValueArea = ({ data = [], type }) => {
+ const { unit, name } = defineLabel(type);
+ return (
+
+
+
+ value.substr(0, 2)} />
+
+ value.toFixed(type === "r_1h" ? 1 : 0)} />
+
+
+
+ );
};
-const TimeValueArea = ({ data, type }) => (
-
-
-
- value.substr(0, 2)} />
-
- value.toFixed(type === "r_1h" ? 1 : 0)} />
-
-
-
-);
-
export default TimeValueArea;
TimeValueArea.propTypes = {
- data: array.isRequired,
+ data: array,
type: string.isRequired
};
diff --git a/src/containers/Form.js b/src/containers/Form.js
index ffd8696..60c1d88 100644
--- a/src/containers/Form.js
+++ b/src/containers/Form.js
@@ -1,7 +1,22 @@
import React, { useState } from "react";
import { defaultType } from "../var";
+import { faGlobeEurope } from "@fortawesome/free-solid-svg-icons";
+import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
+import styled from "styled-components";
-const Form = ({ submit }) => {
+const Button = styled.button`
+ background: white;
+ border: none;
+ cursor: pointer;
+ font-size: 1.5em;
+
+ &:disabled {
+ cursor: not-allowed;
+ opacity: 0.8;
+ }
+`;
+
+const Form = ({ submit, selectedLocation, handleClick }) => {
const [type, setType] = useState(defaultType);
const handleChange = e => {
@@ -10,11 +25,17 @@ const Form = ({ submit }) => {
};
return (
-
+
+
+
+
);
};
diff --git a/src/containers/Map.js b/src/containers/Map.js
index 679cd59..4e16043 100644
--- a/src/containers/Map.js
+++ b/src/containers/Map.js
@@ -30,11 +30,7 @@ L.Icon.Default.mergeOptions({
});
const MapContainer = styled(LeafletMap)`
- // width: calc(100vw - 300px);
height: 100vh;
- // position: absolute;
- // top: 0px;
- // left: 40%;
`;
const Map = ({ observeLocations, selectedLocation, setSelectedLocation }) => {
diff --git a/src/components/Sidebar.js b/src/containers/Sidebar.js
similarity index 63%
rename from src/components/Sidebar.js
rename to src/containers/Sidebar.js
index 55a9098..3936128 100644
--- a/src/components/Sidebar.js
+++ b/src/containers/Sidebar.js
@@ -1,14 +1,12 @@
import React, { useState, useEffect } from "react";
import { number, arrayOf, oneOfType, object, shape, string } from "prop-types";
import styled from "styled-components";
-import TimeValueArea from "./TimeValueArea";
-import DateValue from "./DateValue";
+import TimeValueArea from "../components/TimeValueArea";
+import DateValue from "../components/DateValue";
import constructAreaChartData from "../util/constructAreaChartData";
import handleChartSetter from "../util/handleChartSetter";
-import Form from "../containers/Form";
-import { faGlobeEurope } from "@fortawesome/free-solid-svg-icons";
-import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
-import "../style/sidebar.css";
+import Form from "./Form";
+import Info from "../components/Info";
function Sidebar({
selectedLocation,
@@ -19,13 +17,17 @@ function Sidebar({
const [chartData, setChartData] = useState({
data: [],
composedData: [],
+ selectedLocInfo: {},
type: ""
});
- useEffect(() => {
- const { type } = chartData;
- handleChartSetter(observeLocations, selectedLocation, type, setChartData);
- }, [observeLocations, selectedLocation]);
+ useEffect(
+ () => {
+ const { type } = chartData;
+ handleChartSetter(observeLocations, selectedLocation, type, setChartData);
+ },
+ [observeLocations, selectedLocation]
+ );
const handleType = type =>
handleChartSetter(observeLocations, selectedLocation, type, setChartData);
@@ -36,17 +38,16 @@ function Sidebar({
setChartData({ data, type });
};
- const { data, composedData, type } = chartData;
+ const { data, composedData, type, selectedLocInfo } = chartData;
return (
-
-
-
-
+
+
@@ -54,8 +55,10 @@ function Sidebar({
}
export default styled(Sidebar)`
- // width: 50%;
- height: 100vh;
+ & > div:first-child {
+ display: flex;
+ justify-content: space-between;
+ }
`;
Sidebar.propTypes = {
diff --git a/src/style/info.css b/src/style/info.css
new file mode 100644
index 0000000..985d716
--- /dev/null
+++ b/src/style/info.css
@@ -0,0 +1,23 @@
+.info {
+ display: grid;
+ grid-template-columns: 1fr 1fr;
+ width: 70%;
+ margin: 0 auto;
+ padding-top: 35px;
+}
+
+.info > p {
+ margin-top: -7px;
+}
+
+.info > p > span:first-child {
+ font-size: 0.85em;
+}
+
+pre {
+ color: red;
+ width: 70%;
+ margin: 0 auto;
+ font-size: 0.8em;
+ margin-top: -10px;
+}
diff --git a/src/style/map.css b/src/style/map.css
index ce5131a..1e514d9 100644
--- a/src/style/map.css
+++ b/src/style/map.css
@@ -1,10 +1,9 @@
@keyframes fade {
- from {
- opacity: 0.3;
- }
+ from {
+ opacity: 0.3;
}
-
- .blinking {
- animation: fade 1s infinite alternate;
- }
-
\ No newline at end of file
+}
+
+.blinking {
+ animation: fade 1s infinite alternate;
+}
diff --git a/src/style/sidebar.css b/src/style/sidebar.css
deleted file mode 100644
index a6c09d2..0000000
--- a/src/style/sidebar.css
+++ /dev/null
@@ -1,15 +0,0 @@
-.sidebar > div {
- display: flex;
- justify-content: space-between;
-}
-
-button {
- background: white;
- border: none;
- cursor: pointer;
- font-size: 1.5em;
-}
-
-button:disabled {
- cursor: not-allowed;
-}
diff --git a/src/util/constructAreaChartData.js b/src/util/constructAreaChartData.js
index 11dd02b..8066b85 100644
--- a/src/util/constructAreaChartData.js
+++ b/src/util/constructAreaChartData.js
@@ -1,6 +1,7 @@
import formatDateTime from "./formatDateTime";
import { observeHours } from "../var";
import calcAverage from "./calcAverage";
+import defineLabel from "./defineLabel";
export default (data, type) => {
const groupType = [];
@@ -16,9 +17,12 @@ export default (data, type) => {
const { average } = calcAverage(allCitiesPair, false);
groupType.push({
time: formatDateTime(time),
- [type]: average
+ [defineLabel(type).name]: average
});
}
}
- return groupType;
+ return {
+ data: groupType,
+ selectedLocInfo: data.length === 1 ? data[0] : {}
+ };
};
diff --git a/src/util/defineLabel.js b/src/util/defineLabel.js
new file mode 100644
index 0000000..cbc3c30
--- /dev/null
+++ b/src/util/defineLabel.js
@@ -0,0 +1,19 @@
+export default type => {
+ switch (type) {
+ case "t":
+ return {
+ unit: "degC",
+ name: "Temperature"
+ };
+ case "r_1h":
+ return {
+ unit: "mm",
+ name: "Precipitation"
+ };
+ default:
+ return {
+ unit: "cm",
+ name: "Snowdepth"
+ };
+ }
+};
diff --git a/src/util/fetchObservationLocations.js b/src/util/fetchObservationLocations.js
index baace94..81d111f 100644
--- a/src/util/fetchObservationLocations.js
+++ b/src/util/fetchObservationLocations.js
@@ -5,7 +5,7 @@ export default setter => {
const connection = new Metolib.WfsConnection();
if (
connection.connect(
- "http://opendata.fmi.fi/wfs",
+ "https://opendata.fmi.fi/wfs",
"fmi::observations::weather::cities::multipointcoverage"
)
) {
diff --git a/src/util/handleChartSetter.js b/src/util/handleChartSetter.js
index 9a1c5ed..f7e2e00 100644
--- a/src/util/handleChartSetter.js
+++ b/src/util/handleChartSetter.js
@@ -7,7 +7,10 @@ export default (arr, id, type, setter) => {
if (id) {
clone = arr.filter(a => a.info.id === id);
}
- const data = constructAreaChartData(clone, type || defaultType);
+ const { data, selectedLocInfo } = constructAreaChartData(
+ clone,
+ type || defaultType
+ );
const composedData = constructComposedChartData(clone, type || defaultType);
- setter({ data, composedData, type: type || defaultType });
+ setter({ data, composedData, type: type || defaultType, selectedLocInfo });
};
From c1084a3b9846968ea5d4b5509af2f5bbae40f5db Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Wed, 23 Jan 2019 18:23:30 +0200
Subject: [PATCH 3/6] small fix, add report
---
assignment.txt | 26 ++++++++++++++++++++++++++
src/App.js | 3 ++-
src/components/DateValue.js | 1 +
src/components/Info.js | 2 +-
src/components/TimeValueArea.js | 1 +
src/containers/Form.js | 3 ++-
src/containers/Map.js | 5 +++--
src/containers/Sidebar.js | 6 ++++--
src/index.js | 13 ++++++-------
src/{index.css => style/app.css} | 0
src/util/constructAreaChartData.js | 2 +-
src/util/constructComposedChartData.js | 5 ++++-
src/util/handleChartSetter.js | 2 +-
src/var/index.js | 4 +++-
14 files changed, 55 insertions(+), 18 deletions(-)
create mode 100644 assignment.txt
rename src/{index.css => style/app.css} (100%)
diff --git a/assignment.txt b/assignment.txt
new file mode 100644
index 0000000..298fd07
--- /dev/null
+++ b/assignment.txt
@@ -0,0 +1,26 @@
+Fixing bugs:
+
+- Coordinate bug.
+- Change api link to https
+
+Map:
+
+- Add options to change tile layer
+- Add search box for region name
+- A click in the map will change the center of the map
+- Hovering the clicked position show latlng
+- Popup show region name
+- A click on marker creates its animation
+
+Sidebar:
+
+- At first time mounting
+-- Area chart:
+--- Average t/r_1h/snowdepth over past 145 hours for all regions
+-- Composed chart:
+--- Min, Max, Average t/r_1h/snowdepth over past 7 days for all regions
+
+- Map-sidebar interactivy:
+-- Choose region by clicking on marker will change data on two charts and display region's info.
+-- Click All regions to back to all regions data.
+-- Choose type of data to display (t/r_1h/snowdepth) through select options.
diff --git a/src/App.js b/src/App.js
index 4c6aeb3..2cf2f9f 100644
--- a/src/App.js
+++ b/src/App.js
@@ -1,5 +1,6 @@
import React, { useState, useEffect } from "react";
-import "./index.css";
+import "./style/app.css";
+
import fetchObservationLocation from "./util/fetchObservationLocations";
import Sidebar from "./containers/Sidebar";
import Map from "./containers/Map";
diff --git a/src/components/DateValue.js b/src/components/DateValue.js
index d13753d..d935812 100644
--- a/src/components/DateValue.js
+++ b/src/components/DateValue.js
@@ -11,6 +11,7 @@ import {
ResponsiveContainer,
Legend
} from "recharts";
+
import defineLabel from "../util/defineLabel";
const DateValue = ({ data = [], type }) => (
diff --git a/src/components/Info.js b/src/components/Info.js
index 17a6af0..a8afb6d 100644
--- a/src/components/Info.js
+++ b/src/components/Info.js
@@ -24,7 +24,7 @@ const Info = ({ data }) => {
{lon}
- {!region ? Choose location from Map
: null}
+ {!region ? *Choose location from Map
: null}
);
};
diff --git a/src/components/TimeValueArea.js b/src/components/TimeValueArea.js
index b55ea89..046b1ce 100644
--- a/src/components/TimeValueArea.js
+++ b/src/components/TimeValueArea.js
@@ -9,6 +9,7 @@ import {
Tooltip,
ResponsiveContainer
} from "recharts";
+
import defineLabel from "../util/defineLabel";
const TimeValueArea = ({ data = [], type }) => {
diff --git a/src/containers/Form.js b/src/containers/Form.js
index 60c1d88..bc5da59 100644
--- a/src/containers/Form.js
+++ b/src/containers/Form.js
@@ -1,9 +1,10 @@
import React, { useState } from "react";
-import { defaultType } from "../var";
import { faGlobeEurope } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import styled from "styled-components";
+import { defaultType } from "../var";
+
const Button = styled.button`
background: white;
border: none;
diff --git a/src/containers/Map.js b/src/containers/Map.js
index 4e16043..e4dc86c 100644
--- a/src/containers/Map.js
+++ b/src/containers/Map.js
@@ -9,8 +9,10 @@ import {
CircleMarker,
Tooltip
} from "react-leaflet";
+import { ReactLeafletSearch } from "react-leaflet-search";
import L from "leaflet";
import styled from "styled-components";
+
import {
attribution,
layerOptions,
@@ -19,7 +21,6 @@ import {
defaultLayer
} from "../var";
import "../style/map.css";
-import { ReactLeafletSearch } from "react-leaflet-search";
// Ugly hack to fix Leaflet icons with leaflet loaders
delete L.Icon.Default.prototype._getIconUrl;
@@ -30,7 +31,7 @@ L.Icon.Default.mergeOptions({
});
const MapContainer = styled(LeafletMap)`
- height: 100vh;
+ height: 120vh;
`;
const Map = ({ observeLocations, selectedLocation, setSelectedLocation }) => {
diff --git a/src/containers/Sidebar.js b/src/containers/Sidebar.js
index 3936128..8f0afcd 100644
--- a/src/containers/Sidebar.js
+++ b/src/containers/Sidebar.js
@@ -1,13 +1,15 @@
import React, { useState, useEffect } from "react";
import { number, arrayOf, oneOfType, object, shape, string } from "prop-types";
import styled from "styled-components";
+
import TimeValueArea from "../components/TimeValueArea";
import DateValue from "../components/DateValue";
-import constructAreaChartData from "../util/constructAreaChartData";
-import handleChartSetter from "../util/handleChartSetter";
import Form from "./Form";
import Info from "../components/Info";
+import constructAreaChartData from "../util/constructAreaChartData";
+import handleChartSetter from "../util/handleChartSetter";
+
function Sidebar({
selectedLocation,
observeLocations,
diff --git a/src/index.js b/src/index.js
index b774f62..c756ae8 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,12 +1,11 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import './index.css';
-import 'leaflet/dist/leaflet.css';
+import React from "react";
+import ReactDOM from "react-dom";
+import "leaflet/dist/leaflet.css";
-import App from './App';
-import * as serviceWorker from './serviceWorker';
+import App from "./App";
+import * as serviceWorker from "./serviceWorker";
-ReactDOM.render(, document.getElementById('root'));
+ReactDOM.render(, document.getElementById("root"));
// If you want your app to work offline and load faster, you can change
// unregister() to register() below. Note this comes with some pitfalls.
diff --git a/src/index.css b/src/style/app.css
similarity index 100%
rename from src/index.css
rename to src/style/app.css
diff --git a/src/util/constructAreaChartData.js b/src/util/constructAreaChartData.js
index 8066b85..affc6ad 100644
--- a/src/util/constructAreaChartData.js
+++ b/src/util/constructAreaChartData.js
@@ -1,5 +1,5 @@
-import formatDateTime from "./formatDateTime";
import { observeHours } from "../var";
+import formatDateTime from "./formatDateTime";
import calcAverage from "./calcAverage";
import defineLabel from "./defineLabel";
diff --git a/src/util/constructComposedChartData.js b/src/util/constructComposedChartData.js
index c39942e..e2d8063 100644
--- a/src/util/constructComposedChartData.js
+++ b/src/util/constructComposedChartData.js
@@ -1,7 +1,9 @@
import formatDateTime from "./formatDateTime";
import calcAverage from "./calcAverage";
+import { observeDays } from "../var";
export default (data, type) => {
+ // get all min, max, average of all regions by day
const allRegionsData = data.map((region, i) => {
const pairs = region.data[type].timeValuePairs;
const dateValuePairs = pairs.map(({ time, value }) => {
@@ -28,8 +30,9 @@ export default (data, type) => {
return regionMinMaxAvg;
});
+ // calculate average of all min, max, average for each days
const finalData = [];
- for (let i = 0; i < 7; i++) {
+ for (let i = 0; i < observeDays + 1; i++) {
if (allRegionsData && allRegionsData.length) {
const { date } = allRegionsData && allRegionsData[0][i];
const oneDayMin = allRegionsData.map(
diff --git a/src/util/handleChartSetter.js b/src/util/handleChartSetter.js
index f7e2e00..e8430cc 100644
--- a/src/util/handleChartSetter.js
+++ b/src/util/handleChartSetter.js
@@ -1,6 +1,6 @@
+import { defaultType } from "../var";
import constructAreaChartData from "./constructAreaChartData";
import constructComposedChartData from "./constructComposedChartData";
-import { defaultType } from "../var";
export default (arr, id, type, setter) => {
let clone = [...arr];
diff --git a/src/var/index.js b/src/var/index.js
index a2f7d20..a3753a4 100644
--- a/src/var/index.js
+++ b/src/var/index.js
@@ -7,7 +7,9 @@ export const defaultLayer = "Mapnik";
export const defaultType = "t";
-export const observeHours = 24 * 6;
+export const observeDays = 6;
+
+export const observeHours = 24 * observeDays;
// for clicked icon
export const iconUrl = require("../img/icons8-marker-100.png");
From cd3af2a473a5b1f3afe9abf2baa09d08749ad23c Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Mon, 28 Jan 2019 01:38:42 +0200
Subject: [PATCH 4/6] add tests
---
package-lock.json | 3522 ++---------------
package.json | 7 +-
src/App.test.js | 10 +-
src/components/__tests__/Info.spec.js | 60 +
src/setupTests.js | 3 +
src/util/__tests__/calcAverage.spec.js | 34 +
.../__tests__/constructAreaChartData.spec.js | 40 +
.../constructComposedChartData.spec.js | 46 +
src/util/__tests__/defineLabel.spec.js | 28 +
src/util/__tests__/formatDateTime.spec.js | 13 +
src/util/calcAverage.js | 14 +-
src/util/constructAreaChartData.js | 2 +-
src/util/constructComposedChartData.js | 8 +-
src/var/index.js | 4 +-
14 files changed, 668 insertions(+), 3123 deletions(-)
create mode 100644 src/components/__tests__/Info.spec.js
create mode 100644 src/setupTests.js
create mode 100644 src/util/__tests__/calcAverage.spec.js
create mode 100644 src/util/__tests__/constructAreaChartData.spec.js
create mode 100644 src/util/__tests__/constructComposedChartData.spec.js
create mode 100644 src/util/__tests__/defineLabel.spec.js
create mode 100644 src/util/__tests__/formatDateTime.spec.js
diff --git a/package-lock.json b/package-lock.json
index 0cb291d..baf9190 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -988,6 +988,12 @@
"loader-utils": "1.1.0"
}
},
+ "@types/node": {
+ "version": "10.12.18",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-10.12.18.tgz",
+ "integrity": "sha512-fh+pAqt4xRzPfqA6eh3Z2y6fyZavRIumvjhaCL753+TVkGKGhpPeyrJG2JftD0T9q4GF00KjefsQ+PQNDdWQaQ==",
+ "dev": true
+ },
"@types/q": {
"version": "1.5.1",
"resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.1.tgz",
@@ -1646,6 +1652,17 @@
"resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz",
"integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM="
},
+ "array.prototype.flat": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.1.tgz",
+ "integrity": "sha512-rVqIs330nLJvfC7JqYvEWwqVr5QjYF1ib02i3YJtR/fICO6527Tjpc/e4Mvmxh3GIePPreRXMdaGyC99YphWEw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1"
+ }
+ },
"arrify": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
@@ -2745,6 +2762,96 @@
"resolved": "https://registry.npmjs.org/check-types/-/check-types-7.4.0.tgz",
"integrity": "sha512-YbulWHdfP99UfZ73NcUDlNJhEIDgm9Doq9GhpyXbF+7Aegi3CVV7qqMCKTTqJxlvEvnQBp9IA+dxsGN6xK/nSg=="
},
+ "cheerio": {
+ "version": "1.0.0-rc.2",
+ "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.2.tgz",
+ "integrity": "sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs=",
+ "dev": true,
+ "requires": {
+ "css-select": "1.2.0",
+ "dom-serializer": "0.1.0",
+ "entities": "1.1.2",
+ "htmlparser2": "3.10.0",
+ "lodash": "4.17.11",
+ "parse5": "3.0.3"
+ },
+ "dependencies": {
+ "css-select": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz",
+ "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=",
+ "dev": true,
+ "requires": {
+ "boolbase": "1.0.0",
+ "css-what": "2.1.2",
+ "domutils": "1.5.1",
+ "nth-check": "1.0.2"
+ }
+ },
+ "domhandler": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz",
+ "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.1"
+ }
+ },
+ "domutils": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz",
+ "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=",
+ "dev": true,
+ "requires": {
+ "dom-serializer": "0.1.0",
+ "domelementtype": "1.3.1"
+ }
+ },
+ "htmlparser2": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.0.tgz",
+ "integrity": "sha512-J1nEUGv+MkXS0weHNWVKJJ+UrLfePxRWpN3C9bEi9fLxL2+ggW94DQvgYVXsaT30PGwYRIZKNZXuyMhp3Di4bQ==",
+ "dev": true,
+ "requires": {
+ "domelementtype": "1.3.1",
+ "domhandler": "2.4.2",
+ "domutils": "1.5.1",
+ "entities": "1.1.2",
+ "inherits": "2.0.3",
+ "readable-stream": "3.1.1"
+ }
+ },
+ "parse5": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/parse5/-/parse5-3.0.3.tgz",
+ "integrity": "sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==",
+ "dev": true,
+ "requires": {
+ "@types/node": "10.12.18"
+ }
+ },
+ "readable-stream": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.1.1.tgz",
+ "integrity": "sha512-DkN66hPyqDhnIQ6Jcsvx9bFjhw214O4poMBcIMgPVpQvNy9a0e0Uhg5SqySyDKAmUlwt8LonTBz1ezOnM8pUdA==",
+ "dev": true,
+ "requires": {
+ "inherits": "2.0.3",
+ "string_decoder": "1.2.0",
+ "util-deprecate": "1.0.2"
+ }
+ },
+ "string_decoder": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.2.0.tgz",
+ "integrity": "sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "5.1.2"
+ }
+ }
+ }
+ },
"chokidar": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.0.4.tgz",
@@ -3969,6 +4076,12 @@
}
}
},
+ "discontinuous-range": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz",
+ "integrity": "sha1-44Mx8IRLukm5qctxx3FYWqsbxlo=",
+ "dev": true
+ },
"dns-equal": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz",
@@ -4223,6 +4336,81 @@
"resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz",
"integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w=="
},
+ "enzyme": {
+ "version": "3.8.0",
+ "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.8.0.tgz",
+ "integrity": "sha512-bfsWo5nHyZm1O1vnIsbwdfhU989jk+squU9NKvB+Puwo5j6/Wg9pN5CO0YJelm98Dao3NPjkDZk+vvgwpMwYxw==",
+ "dev": true,
+ "requires": {
+ "array.prototype.flat": "1.2.1",
+ "cheerio": "1.0.0-rc.2",
+ "function.prototype.name": "1.1.0",
+ "has": "1.0.3",
+ "is-boolean-object": "1.0.0",
+ "is-callable": "1.1.4",
+ "is-number-object": "1.0.3",
+ "is-string": "1.0.4",
+ "is-subset": "0.1.1",
+ "lodash.escape": "4.0.1",
+ "lodash.isequal": "4.5.0",
+ "object-inspect": "1.6.0",
+ "object-is": "1.0.1",
+ "object.assign": "4.1.0",
+ "object.entries": "1.1.0",
+ "object.values": "1.0.4",
+ "raf": "3.4.0",
+ "rst-selector-parser": "2.2.3",
+ "string.prototype.trim": "1.1.2"
+ }
+ },
+ "enzyme-adapter-react-16": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-react-16/-/enzyme-adapter-react-16-1.8.0.tgz",
+ "integrity": "sha512-7cVHIKutqnesGeM3CjNFHSvktpypSWBokrBO8wIW+BVx+HGxWCF87W9TpkIIYJqgCtdw9FQGFrAbLg8kSwPRuQ==",
+ "dev": true,
+ "requires": {
+ "enzyme-adapter-utils": "1.10.0",
+ "function.prototype.name": "1.1.0",
+ "object.assign": "4.1.0",
+ "object.values": "1.1.0",
+ "prop-types": "15.6.2",
+ "react-is": "16.7.0",
+ "react-test-renderer": "16.7.0"
+ },
+ "dependencies": {
+ "object.values": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz",
+ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
+ "react-is": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz",
+ "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==",
+ "dev": true
+ }
+ }
+ },
+ "enzyme-adapter-utils": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/enzyme-adapter-utils/-/enzyme-adapter-utils-1.10.0.tgz",
+ "integrity": "sha512-VnIXJDYVTzKGbdW+lgK8MQmYHJquTQZiGzu/AseCZ7eHtOMAj4Rtvk8ZRopodkfPves0EXaHkXBDkVhPa3t0jA==",
+ "dev": true,
+ "requires": {
+ "function.prototype.name": "1.1.0",
+ "object.assign": "4.1.0",
+ "object.fromentries": "2.0.0",
+ "prop-types": "15.6.2",
+ "semver": "5.6.0"
+ }
+ },
"errno": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/errno/-/errno-0.1.7.tgz",
@@ -6012,6 +6200,17 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "function.prototype.name": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.0.tgz",
+ "integrity": "sha512-Bs0VRrTz4ghD8pTmbJQD1mZ8A/mN0ur/jGz+A6FBxPDUPkm1tNfF6bhTYPA7i7aF4lZJVr+OXTNNrnnIl58Wfg==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "function-bind": "1.1.1",
+ "is-callable": "1.1.4"
+ }
+ },
"functional-red-black-tree": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
@@ -7118,6 +7317,12 @@
"binary-extensions": "1.12.0"
}
},
+ "is-boolean-object": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.0.0.tgz",
+ "integrity": "sha1-mPiygDBoQhmpXzdc+9iM40Bd/5M=",
+ "dev": true
+ },
"is-buffer": {
"version": "1.1.6",
"resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
@@ -7249,6 +7454,12 @@
"kind-of": "3.2.2"
}
},
+ "is-number-object": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.3.tgz",
+ "integrity": "sha1-8mWrian0RQNO9q/xWo8AsA9VF5k=",
+ "dev": true
+ },
"is-obj": {
"version": "1.0.1",
"resolved": "http://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
@@ -7331,6 +7542,18 @@
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ="
},
+ "is-string": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.4.tgz",
+ "integrity": "sha1-zDqbaYV9Yh6WNyWiTK7shzuCbmQ=",
+ "dev": true
+ },
+ "is-subset": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz",
+ "integrity": "sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY=",
+ "dev": true
+ },
"is-svg": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz",
@@ -8361,6 +8584,24 @@
"resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
"integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168="
},
+ "lodash.escape": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz",
+ "integrity": "sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg=",
+ "dev": true
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+ "lodash.isequal": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz",
+ "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=",
+ "dev": true
+ },
"lodash.memoize": {
"version": "4.1.2",
"resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
@@ -8762,6 +9003,12 @@
"minimist": "0.0.8"
}
},
+ "moo": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/moo/-/moo-0.4.3.tgz",
+ "integrity": "sha512-gFD2xGCl8YFgGHsqJ9NKRVdwlioeW3mI1iqfLNYQOv0+6JRwG58Zk9DIGQgyIaffSYaO1xsKnMaYzzNr1KyIAw==",
+ "dev": true
+ },
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
@@ -8845,6 +9092,19 @@
"resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
"integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc="
},
+ "nearley": {
+ "version": "2.16.0",
+ "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.16.0.tgz",
+ "integrity": "sha512-Tr9XD3Vt/EujXbZBv6UAHYoLUSMQAxSsTnm9K3koXzjzNWY195NqALeyrzLZBKzAkL3gl92BcSogqrHjD8QuUg==",
+ "dev": true,
+ "requires": {
+ "commander": "2.19.0",
+ "moo": "0.4.3",
+ "railroad-diagrams": "1.0.0",
+ "randexp": "0.4.6",
+ "semver": "5.6.0"
+ }
+ },
"negotiator": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz",
@@ -9004,3114 +9264,63 @@
"resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz",
"integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg=="
},
- "npm": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/npm/-/npm-6.6.0.tgz",
- "integrity": "sha512-Q6Lb4YPWIGsyVzfxcZrTu6VQcMEvCHOBlSE0fbuNHj6CYCUuanMUf6HgNyj4QekWTORxQpOgOgaca2YEQ721Ug==",
- "requires": {
- "JSONStream": "1.3.5",
- "abbrev": "1.1.1",
- "ansicolors": "0.3.2",
- "ansistyles": "0.1.3",
- "aproba": "2.0.0",
- "archy": "1.0.0",
- "bin-links": "1.1.2",
- "bluebird": "3.5.3",
- "byte-size": "5.0.1",
- "cacache": "11.3.2",
- "call-limit": "1.1.0",
- "chownr": "1.1.1",
- "ci-info": "2.0.0",
- "cli-columns": "3.1.2",
- "cli-table3": "0.5.1",
- "cmd-shim": "2.0.2",
- "columnify": "1.5.4",
- "config-chain": "1.1.12",
- "debuglog": "1.0.1",
- "detect-indent": "5.0.0",
- "detect-newline": "2.1.0",
- "dezalgo": "1.0.3",
- "editor": "1.0.0",
- "figgy-pudding": "3.5.1",
- "find-npm-prefix": "1.0.2",
- "fs-vacuum": "1.2.10",
- "fs-write-stream-atomic": "1.0.10",
- "gentle-fs": "2.0.1",
- "glob": "7.1.3",
- "graceful-fs": "4.1.15",
- "has-unicode": "2.0.1",
- "hosted-git-info": "2.7.1",
- "iferr": "1.0.2",
- "imurmurhash": "0.1.4",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "ini": "1.3.5",
- "init-package-json": "1.10.3",
- "is-cidr": "3.0.0",
- "json-parse-better-errors": "1.0.2",
- "lazy-property": "1.0.0",
- "libcipm": "3.0.2",
- "libnpm": "2.0.1",
- "libnpmaccess": "3.0.1",
- "libnpmhook": "5.0.2",
- "libnpmorg": "1.0.0",
- "libnpmsearch": "2.0.0",
- "libnpmteam": "1.0.1",
- "libnpx": "10.2.0",
- "lock-verify": "2.0.2",
- "lockfile": "1.0.4",
- "lodash._baseindexof": "3.1.0",
- "lodash._baseuniq": "4.6.0",
- "lodash._bindcallback": "3.0.1",
- "lodash._cacheindexof": "3.0.2",
- "lodash._createcache": "3.1.2",
- "lodash._getnative": "3.9.1",
- "lodash.clonedeep": "4.5.0",
- "lodash.restparam": "3.6.1",
- "lodash.union": "4.6.0",
- "lodash.uniq": "4.5.0",
- "lodash.without": "4.4.0",
- "lru-cache": "4.1.5",
- "meant": "1.0.1",
- "mississippi": "3.0.0",
- "mkdirp": "0.5.1",
- "move-concurrently": "1.0.1",
- "node-gyp": "3.8.0",
- "nopt": "4.0.1",
- "normalize-package-data": "2.4.0",
- "npm-audit-report": "1.3.2",
- "npm-cache-filename": "1.0.2",
- "npm-install-checks": "3.0.0",
- "npm-lifecycle": "2.1.0",
- "npm-package-arg": "6.1.0",
- "npm-packlist": "1.2.0",
- "npm-pick-manifest": "2.2.3",
- "npm-profile": "4.0.1",
- "npm-registry-fetch": "3.8.0",
- "npm-user-validate": "1.0.0",
- "npmlog": "4.1.2",
- "once": "1.4.0",
- "opener": "1.5.1",
- "osenv": "0.1.5",
- "pacote": "9.3.0",
- "path-is-inside": "1.0.2",
- "promise-inflight": "1.0.1",
- "qrcode-terminal": "0.12.0",
- "query-string": "6.2.0",
- "qw": "1.0.1",
- "read": "1.0.7",
- "read-cmd-shim": "1.0.1",
- "read-installed": "4.0.3",
- "read-package-json": "2.0.13",
- "read-package-tree": "5.2.1",
- "readable-stream": "3.1.1",
- "readdir-scoped-modules": "1.0.2",
- "request": "2.88.0",
- "retry": "0.12.0",
- "rimraf": "2.6.3",
- "safe-buffer": "5.1.2",
- "semver": "5.6.0",
- "sha": "2.0.1",
- "slide": "1.1.6",
- "sorted-object": "2.0.1",
- "sorted-union-stream": "2.1.3",
- "ssri": "6.0.1",
- "stringify-package": "1.0.0",
- "tar": "4.4.8",
- "text-table": "0.2.0",
- "tiny-relative-date": "1.3.0",
- "uid-number": "0.0.6",
- "umask": "1.1.0",
- "unique-filename": "1.1.1",
- "unpipe": "1.0.0",
- "update-notifier": "2.5.0",
- "uuid": "3.3.2",
- "validate-npm-package-license": "3.0.4",
- "validate-npm-package-name": "3.0.0",
- "which": "1.3.1",
- "worker-farm": "1.6.0",
- "write-file-atomic": "2.3.0"
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "requires": {
+ "path-key": "2.0.1"
+ }
+ },
+ "nth-check": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
+ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
+ "requires": {
+ "boolbase": "1.0.0"
+ }
+ },
+ "num2fraction": {
+ "version": "1.2.2",
+ "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
+ "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
+ },
+ "nwsapi": {
+ "version": "2.0.9",
+ "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
+ "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
+ },
+ "oauth-sign": {
+ "version": "0.9.0",
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
+ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "requires": {
+ "copy-descriptor": "0.1.1",
+ "define-property": "0.2.5",
+ "kind-of": "3.2.2"
},
"dependencies": {
- "JSONStream": {
- "version": "1.3.5",
- "bundled": true,
- "requires": {
- "jsonparse": "1.3.1",
- "through": "2.3.8"
- }
- },
- "abbrev": {
- "version": "1.1.1",
- "bundled": true
- },
- "agent-base": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "es6-promisify": "5.0.0"
- }
- },
- "agentkeepalive": {
- "version": "3.4.1",
- "bundled": true,
- "requires": {
- "humanize-ms": "1.2.1"
- }
- },
- "ajv": {
- "version": "5.5.2",
- "bundled": true,
- "requires": {
- "co": "4.6.0",
- "fast-deep-equal": "1.1.0",
- "fast-json-stable-stringify": "2.0.0",
- "json-schema-traverse": "0.3.1"
- }
- },
- "ansi-align": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1"
- }
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true
- },
- "ansi-styles": {
- "version": "3.2.1",
- "bundled": true,
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
"requires": {
- "color-convert": "1.9.1"
- }
- },
- "ansicolors": {
- "version": "0.3.2",
- "bundled": true
- },
- "ansistyles": {
- "version": "0.1.3",
- "bundled": true
- },
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- },
- "archy": {
- "version": "1.0.0",
- "bundled": true
- },
- "are-we-there-yet": {
- "version": "1.1.4",
- "bundled": true,
- "requires": {
- "delegates": "1.0.0",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "asap": {
- "version": "2.0.6",
- "bundled": true
- },
- "asn1": {
- "version": "0.2.4",
- "bundled": true,
- "requires": {
- "safer-buffer": "2.1.2"
- }
- },
- "assert-plus": {
- "version": "1.0.0",
- "bundled": true
- },
- "asynckit": {
- "version": "0.4.0",
- "bundled": true
- },
- "aws-sign2": {
- "version": "0.7.0",
- "bundled": true
- },
- "aws4": {
- "version": "1.8.0",
- "bundled": true
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true
- },
- "bcrypt-pbkdf": {
- "version": "1.0.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "tweetnacl": "0.14.5"
- }
- },
- "bin-links": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.3",
- "cmd-shim": "2.0.2",
- "gentle-fs": "2.0.1",
- "graceful-fs": "4.1.15",
- "write-file-atomic": "2.3.0"
- }
- },
- "block-stream": {
- "version": "0.0.9",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3"
- }
- },
- "bluebird": {
- "version": "3.5.3",
- "bundled": true
- },
- "boxen": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "ansi-align": "2.0.0",
- "camelcase": "4.1.0",
- "chalk": "2.4.1",
- "cli-boxes": "1.0.0",
- "string-width": "2.1.1",
- "term-size": "1.2.0",
- "widest-line": "2.0.0"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "requires": {
- "balanced-match": "1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "buffer-from": {
- "version": "1.0.0",
- "bundled": true
- },
- "builtin-modules": {
- "version": "1.1.1",
- "bundled": true
- },
- "builtins": {
- "version": "1.0.3",
- "bundled": true
- },
- "byline": {
- "version": "5.0.0",
- "bundled": true
- },
- "byte-size": {
- "version": "5.0.1",
- "bundled": true
- },
- "cacache": {
- "version": "11.3.2",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.3",
- "chownr": "1.1.1",
- "figgy-pudding": "3.5.1",
- "glob": "7.1.3",
- "graceful-fs": "4.1.15",
- "lru-cache": "5.1.1",
- "mississippi": "3.0.0",
- "mkdirp": "0.5.1",
- "move-concurrently": "1.0.1",
- "promise-inflight": "1.0.1",
- "rimraf": "2.6.3",
- "ssri": "6.0.1",
- "unique-filename": "1.1.1",
- "y18n": "4.0.0"
- },
- "dependencies": {
- "chownr": {
- "version": "1.1.1",
- "bundled": true
- },
- "lru-cache": {
- "version": "5.1.1",
- "bundled": true,
- "requires": {
- "yallist": "3.0.3"
- }
- },
- "unique-filename": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "unique-slug": "2.0.0"
- }
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true
- }
- }
- },
- "call-limit": {
- "version": "1.1.0",
- "bundled": true
- },
- "camelcase": {
- "version": "4.1.0",
- "bundled": true
- },
- "capture-stack-trace": {
- "version": "1.0.0",
- "bundled": true
- },
- "caseless": {
- "version": "0.12.0",
- "bundled": true
- },
- "chalk": {
- "version": "2.4.1",
- "bundled": true,
- "requires": {
- "ansi-styles": "3.2.1",
- "escape-string-regexp": "1.0.5",
- "supports-color": "5.4.0"
- }
- },
- "chownr": {
- "version": "1.1.1",
- "bundled": true
- },
- "ci-info": {
- "version": "2.0.0",
- "bundled": true
- },
- "cidr-regex": {
- "version": "2.0.10",
- "bundled": true,
- "requires": {
- "ip-regex": "2.1.0"
- }
- },
- "cli-boxes": {
- "version": "1.0.0",
- "bundled": true
- },
- "cli-columns": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1",
- "strip-ansi": "3.0.1"
- }
- },
- "cli-table3": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "colors": "1.3.3",
- "object-assign": "4.1.1",
- "string-width": "2.1.1"
- }
- },
- "cliui": {
- "version": "4.1.0",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1",
- "strip-ansi": "4.0.0",
- "wrap-ansi": "2.1.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "3.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "1.0.4",
- "bundled": true
- },
- "cmd-shim": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "mkdirp": "0.5.1"
- }
- },
- "co": {
- "version": "4.6.0",
- "bundled": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true
- },
- "color-convert": {
- "version": "1.9.1",
- "bundled": true,
- "requires": {
- "color-name": "1.1.3"
- }
- },
- "color-name": {
- "version": "1.1.3",
- "bundled": true
- },
- "colors": {
- "version": "1.3.3",
- "bundled": true,
- "optional": true
- },
- "columnify": {
- "version": "1.5.4",
- "bundled": true,
- "requires": {
- "strip-ansi": "3.0.1",
- "wcwidth": "1.0.1"
- }
- },
- "combined-stream": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "delayed-stream": "1.0.0"
- }
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "bundled": true,
- "requires": {
- "buffer-from": "1.0.0",
- "inherits": "2.0.3",
- "readable-stream": "2.3.6",
- "typedarray": "0.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "config-chain": {
- "version": "1.1.12",
- "bundled": true,
- "requires": {
- "ini": "1.3.5",
- "proto-list": "1.2.4"
- }
- },
- "configstore": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "dot-prop": "4.2.0",
- "graceful-fs": "4.1.15",
- "make-dir": "1.3.0",
- "unique-string": "1.0.0",
- "write-file-atomic": "2.3.0",
- "xdg-basedir": "3.0.0"
- }
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true
- },
- "copy-concurrently": {
- "version": "1.0.5",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "fs-write-stream-atomic": "1.0.10",
- "iferr": "0.1.5",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.3",
- "run-queue": "1.0.3"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true
- },
- "create-error-class": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "capture-stack-trace": "1.0.0"
- }
- },
- "cross-spawn": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "lru-cache": "4.1.5",
- "shebang-command": "1.2.0",
- "which": "1.3.1"
- }
- },
- "crypto-random-string": {
- "version": "1.0.0",
- "bundled": true
- },
- "cyclist": {
- "version": "0.2.2",
- "bundled": true
- },
- "dashdash": {
- "version": "1.14.1",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "debug": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "ms": "2.0.0"
- },
- "dependencies": {
- "ms": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "debuglog": {
- "version": "1.0.1",
- "bundled": true
- },
- "decamelize": {
- "version": "1.2.0",
- "bundled": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "bundled": true
- },
- "deep-extend": {
- "version": "0.5.1",
- "bundled": true
- },
- "defaults": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "clone": "1.0.4"
- }
- },
- "delayed-stream": {
- "version": "1.0.0",
- "bundled": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true
- },
- "detect-indent": {
- "version": "5.0.0",
- "bundled": true
- },
- "detect-newline": {
- "version": "2.1.0",
- "bundled": true
- },
- "dezalgo": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "asap": "2.0.6",
- "wrappy": "1.0.2"
- }
- },
- "dot-prop": {
- "version": "4.2.0",
- "bundled": true,
- "requires": {
- "is-obj": "1.0.1"
- }
- },
- "dotenv": {
- "version": "5.0.1",
- "bundled": true
- },
- "duplexer3": {
- "version": "0.1.4",
- "bundled": true
- },
- "duplexify": {
- "version": "3.6.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "inherits": "2.0.3",
- "readable-stream": "2.3.6",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "ecc-jsbn": {
- "version": "0.1.2",
- "bundled": true,
- "optional": true,
- "requires": {
- "jsbn": "0.1.1",
- "safer-buffer": "2.1.2"
- }
- },
- "editor": {
- "version": "1.0.0",
- "bundled": true
- },
- "encoding": {
- "version": "0.1.12",
- "bundled": true,
- "requires": {
- "iconv-lite": "0.4.23"
- }
- },
- "end-of-stream": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "err-code": {
- "version": "1.1.2",
- "bundled": true
- },
- "errno": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "prr": "1.0.1"
- }
- },
- "es6-promise": {
- "version": "4.2.4",
- "bundled": true
- },
- "es6-promisify": {
- "version": "5.0.0",
- "bundled": true,
- "requires": {
- "es6-promise": "4.2.4"
- }
- },
- "escape-string-regexp": {
- "version": "1.0.5",
- "bundled": true
- },
- "execa": {
- "version": "0.7.0",
- "bundled": true,
- "requires": {
- "cross-spawn": "5.1.0",
- "get-stream": "3.0.0",
- "is-stream": "1.1.0",
- "npm-run-path": "2.0.2",
- "p-finally": "1.0.0",
- "signal-exit": "3.0.2",
- "strip-eof": "1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "bundled": true
- },
- "extsprintf": {
- "version": "1.3.0",
- "bundled": true
- },
- "fast-deep-equal": {
- "version": "1.1.0",
- "bundled": true
- },
- "fast-json-stable-stringify": {
- "version": "2.0.0",
- "bundled": true
- },
- "figgy-pudding": {
- "version": "3.5.1",
- "bundled": true
- },
- "find-npm-prefix": {
- "version": "1.0.2",
- "bundled": true
- },
- "find-up": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "locate-path": "2.0.0"
- }
- },
- "flush-write-stream": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "forever-agent": {
- "version": "0.6.1",
- "bundled": true
- },
- "form-data": {
- "version": "2.3.2",
- "bundled": true,
- "requires": {
- "asynckit": "0.4.0",
- "combined-stream": "1.0.6",
- "mime-types": "2.1.19"
- }
- },
- "from2": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "fs-minipass": {
- "version": "1.2.5",
- "bundled": true,
- "requires": {
- "minipass": "2.3.3"
- }
- },
- "fs-vacuum": {
- "version": "1.2.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "path-is-inside": "1.0.2",
- "rimraf": "2.6.3"
- }
- },
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "iferr": "0.1.5",
- "imurmurhash": "0.1.4",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true
- },
- "fstream": {
- "version": "1.0.11",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "inherits": "2.0.3",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.3"
- }
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "console-control-strings": "1.1.0",
- "has-unicode": "2.0.1",
- "object-assign": "4.1.1",
- "signal-exit": "3.0.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "wide-align": "1.1.2"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "genfun": {
- "version": "5.0.0",
- "bundled": true
- },
- "gentle-fs": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "fs-vacuum": "1.2.10",
- "graceful-fs": "4.1.15",
- "iferr": "0.1.5",
- "mkdirp": "0.5.1",
- "path-is-inside": "1.0.2",
- "read-cmd-shim": "1.0.1",
- "slide": "1.1.6"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- },
- "iferr": {
- "version": "0.1.5",
- "bundled": true
- }
- }
- },
- "get-caller-file": {
- "version": "1.0.2",
- "bundled": true
- },
- "get-stream": {
- "version": "4.1.0",
- "bundled": true,
- "requires": {
- "pump": "3.0.0"
- }
- },
- "getpass": {
- "version": "0.1.7",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0"
- }
- },
- "glob": {
- "version": "7.1.3",
- "bundled": true,
- "requires": {
- "fs.realpath": "1.0.0",
- "inflight": "1.0.6",
- "inherits": "2.0.3",
- "minimatch": "3.0.4",
- "once": "1.4.0",
- "path-is-absolute": "1.0.1"
- }
- },
- "global-dirs": {
- "version": "0.1.1",
- "bundled": true,
- "requires": {
- "ini": "1.3.5"
- }
- },
- "got": {
- "version": "6.7.1",
- "bundled": true,
- "requires": {
- "create-error-class": "3.0.2",
- "duplexer3": "0.1.4",
- "get-stream": "3.0.0",
- "is-redirect": "1.0.0",
- "is-retry-allowed": "1.1.0",
- "is-stream": "1.1.0",
- "lowercase-keys": "1.0.1",
- "safe-buffer": "5.1.2",
- "timed-out": "4.0.1",
- "unzip-response": "2.0.1",
- "url-parse-lax": "1.0.0"
- },
- "dependencies": {
- "get-stream": {
- "version": "3.0.0",
- "bundled": true
- }
- }
- },
- "graceful-fs": {
- "version": "4.1.15",
- "bundled": true
- },
- "har-schema": {
- "version": "2.0.0",
- "bundled": true
- },
- "har-validator": {
- "version": "5.1.0",
- "bundled": true,
- "requires": {
- "ajv": "5.5.2",
- "har-schema": "2.0.0"
- }
- },
- "has-flag": {
- "version": "3.0.0",
- "bundled": true
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true
- },
- "hosted-git-info": {
- "version": "2.7.1",
- "bundled": true
- },
- "http-cache-semantics": {
- "version": "3.8.1",
- "bundled": true
- },
- "http-proxy-agent": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "3.1.0"
- }
- },
- "http-signature": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "jsprim": "1.4.1",
- "sshpk": "1.14.2"
- }
- },
- "https-proxy-agent": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "debug": "3.1.0"
- }
- },
- "humanize-ms": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "ms": "2.1.1"
- }
- },
- "iconv-lite": {
- "version": "0.4.23",
- "bundled": true,
- "requires": {
- "safer-buffer": "2.1.2"
- }
- },
- "iferr": {
- "version": "1.0.2",
- "bundled": true
- },
- "ignore-walk": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "minimatch": "3.0.4"
- }
- },
- "import-lazy": {
- "version": "2.1.0",
- "bundled": true
- },
- "imurmurhash": {
- "version": "0.1.4",
- "bundled": true
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "requires": {
- "once": "1.4.0",
- "wrappy": "1.0.2"
- }
- },
- "inherits": {
- "version": "2.0.3",
- "bundled": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true
- },
- "init-package-json": {
- "version": "1.10.3",
- "bundled": true,
- "requires": {
- "glob": "7.1.3",
- "npm-package-arg": "6.1.0",
- "promzard": "0.3.0",
- "read": "1.0.7",
- "read-package-json": "2.0.13",
- "semver": "5.6.0",
- "validate-npm-package-license": "3.0.4",
- "validate-npm-package-name": "3.0.0"
- }
- },
- "invert-kv": {
- "version": "1.0.0",
- "bundled": true
- },
- "ip": {
- "version": "1.1.5",
- "bundled": true
- },
- "ip-regex": {
- "version": "2.1.0",
- "bundled": true
- },
- "is-builtin-module": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "builtin-modules": "1.1.1"
- }
- },
- "is-ci": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "ci-info": "1.6.0"
- },
- "dependencies": {
- "ci-info": {
- "version": "1.6.0",
- "bundled": true
- }
- }
- },
- "is-cidr": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "cidr-regex": "2.0.10"
- }
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "number-is-nan": "1.0.1"
- }
- },
- "is-installed-globally": {
- "version": "0.1.0",
- "bundled": true,
- "requires": {
- "global-dirs": "0.1.1",
- "is-path-inside": "1.0.1"
- }
- },
- "is-npm": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-obj": {
- "version": "1.0.1",
- "bundled": true
- },
- "is-path-inside": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "path-is-inside": "1.0.2"
- }
- },
- "is-redirect": {
- "version": "1.0.0",
- "bundled": true
- },
- "is-retry-allowed": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-stream": {
- "version": "1.1.0",
- "bundled": true
- },
- "is-typedarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true
- },
- "isexe": {
- "version": "2.0.0",
- "bundled": true
- },
- "isstream": {
- "version": "0.1.2",
- "bundled": true
- },
- "jsbn": {
- "version": "0.1.1",
- "bundled": true,
- "optional": true
- },
- "json-parse-better-errors": {
- "version": "1.0.2",
- "bundled": true
- },
- "json-schema": {
- "version": "0.2.3",
- "bundled": true
- },
- "json-schema-traverse": {
- "version": "0.3.1",
- "bundled": true
- },
- "json-stringify-safe": {
- "version": "5.0.1",
- "bundled": true
- },
- "jsonparse": {
- "version": "1.3.1",
- "bundled": true
- },
- "jsprim": {
- "version": "1.4.1",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "extsprintf": "1.3.0",
- "json-schema": "0.2.3",
- "verror": "1.10.0"
- }
- },
- "latest-version": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "package-json": "4.0.1"
- }
- },
- "lazy-property": {
- "version": "1.0.0",
- "bundled": true
- },
- "lcid": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "invert-kv": "1.0.0"
- }
- },
- "libcipm": {
- "version": "3.0.2",
- "bundled": true,
- "requires": {
- "bin-links": "1.1.2",
- "bluebird": "3.5.3",
- "figgy-pudding": "3.5.1",
- "find-npm-prefix": "1.0.2",
- "graceful-fs": "4.1.15",
- "ini": "1.3.5",
- "lock-verify": "2.0.2",
- "mkdirp": "0.5.1",
- "npm-lifecycle": "2.1.0",
- "npm-logical-tree": "1.2.1",
- "npm-package-arg": "6.1.0",
- "pacote": "9.3.0",
- "read-package-json": "2.0.13",
- "rimraf": "2.6.3",
- "worker-farm": "1.6.0"
- }
- },
- "libnpm": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "bin-links": "1.1.2",
- "bluebird": "3.5.3",
- "find-npm-prefix": "1.0.2",
- "libnpmaccess": "3.0.1",
- "libnpmconfig": "1.2.1",
- "libnpmhook": "5.0.2",
- "libnpmorg": "1.0.0",
- "libnpmpublish": "1.1.0",
- "libnpmsearch": "2.0.0",
- "libnpmteam": "1.0.1",
- "lock-verify": "2.0.2",
- "npm-lifecycle": "2.1.0",
- "npm-logical-tree": "1.2.1",
- "npm-package-arg": "6.1.0",
- "npm-profile": "4.0.1",
- "npm-registry-fetch": "3.8.0",
- "npmlog": "4.1.2",
- "pacote": "9.3.0",
- "read-package-json": "2.0.13",
- "stringify-package": "1.0.0"
- },
- "dependencies": {
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- },
- "libnpmhook": {
- "version": "5.0.2",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "npm-registry-fetch": "3.8.0"
- }
- }
- }
- },
- "libnpmaccess": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "get-stream": "4.1.0",
- "npm-package-arg": "6.1.0",
- "npm-registry-fetch": "3.8.0"
- },
- "dependencies": {
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "libnpmconfig": {
- "version": "1.2.1",
- "bundled": true,
- "requires": {
- "figgy-pudding": "3.5.1",
- "find-up": "3.0.0",
- "ini": "1.3.5"
- },
- "dependencies": {
- "find-up": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "locate-path": "3.0.0"
- }
- },
- "locate-path": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "3.0.0",
- "path-exists": "3.0.0"
- }
- },
- "p-limit": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-try": "2.0.0"
- }
- },
- "p-locate": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "2.0.0"
- }
- },
- "p-try": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "libnpmhook": {
- "version": "5.0.2",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "npm-registry-fetch": "3.8.0"
- }
- },
- "libnpmorg": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "npm-registry-fetch": "3.8.0"
- },
- "dependencies": {
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "libnpmpublish": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "lodash.clonedeep": "4.5.0",
- "normalize-package-data": "2.4.0",
- "npm-package-arg": "6.1.0",
- "npm-registry-fetch": "3.8.0",
- "semver": "5.6.0",
- "ssri": "6.0.1"
- },
- "dependencies": {
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "libnpmsearch": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "npm-registry-fetch": "3.8.0"
- }
- },
- "libnpmteam": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "npm-registry-fetch": "3.8.0"
- },
- "dependencies": {
- "aproba": {
- "version": "2.0.0",
- "bundled": true
- }
- }
- },
- "libnpx": {
- "version": "10.2.0",
- "bundled": true,
- "requires": {
- "dotenv": "5.0.1",
- "npm-package-arg": "6.1.0",
- "rimraf": "2.6.3",
- "safe-buffer": "5.1.2",
- "update-notifier": "2.5.0",
- "which": "1.3.1",
- "y18n": "4.0.0",
- "yargs": "11.0.0"
- }
- },
- "locate-path": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-locate": "2.0.0",
- "path-exists": "3.0.0"
- }
- },
- "lock-verify": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "npm-package-arg": "6.1.0",
- "semver": "5.6.0"
- }
- },
- "lockfile": {
- "version": "1.0.4",
- "bundled": true,
- "requires": {
- "signal-exit": "3.0.2"
- }
- },
- "lodash._baseindexof": {
- "version": "3.1.0",
- "bundled": true
- },
- "lodash._baseuniq": {
- "version": "4.6.0",
- "bundled": true,
- "requires": {
- "lodash._createset": "4.0.3",
- "lodash._root": "3.0.1"
- }
- },
- "lodash._bindcallback": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash._cacheindexof": {
- "version": "3.0.2",
- "bundled": true
- },
- "lodash._createcache": {
- "version": "3.1.2",
- "bundled": true,
- "requires": {
- "lodash._getnative": "3.9.1"
- }
- },
- "lodash._createset": {
- "version": "4.0.3",
- "bundled": true
- },
- "lodash._getnative": {
- "version": "3.9.1",
- "bundled": true
- },
- "lodash._root": {
- "version": "3.0.1",
- "bundled": true
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.restparam": {
- "version": "3.6.1",
- "bundled": true
- },
- "lodash.union": {
- "version": "4.6.0",
- "bundled": true
- },
- "lodash.uniq": {
- "version": "4.5.0",
- "bundled": true
- },
- "lodash.without": {
- "version": "4.4.0",
- "bundled": true
- },
- "lowercase-keys": {
- "version": "1.0.1",
- "bundled": true
- },
- "lru-cache": {
- "version": "4.1.5",
- "bundled": true,
- "requires": {
- "pseudomap": "1.0.2",
- "yallist": "2.1.2"
- }
- },
- "make-dir": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "pify": "3.0.0"
- }
- },
- "make-fetch-happen": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "agentkeepalive": "3.4.1",
- "cacache": "11.3.2",
- "http-cache-semantics": "3.8.1",
- "http-proxy-agent": "2.1.0",
- "https-proxy-agent": "2.2.1",
- "lru-cache": "4.1.5",
- "mississippi": "3.0.0",
- "node-fetch-npm": "2.0.2",
- "promise-retry": "1.1.1",
- "socks-proxy-agent": "4.0.1",
- "ssri": "6.0.1"
- }
- },
- "meant": {
- "version": "1.0.1",
- "bundled": true
- },
- "mem": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "mimic-fn": "1.2.0"
- }
- },
- "mime-db": {
- "version": "1.35.0",
- "bundled": true
- },
- "mime-types": {
- "version": "2.1.19",
- "bundled": true,
- "requires": {
- "mime-db": "1.35.0"
- }
- },
- "mimic-fn": {
- "version": "1.2.0",
- "bundled": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "brace-expansion": "1.1.11"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true
- },
- "minipass": {
- "version": "2.3.3",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.2"
- },
- "dependencies": {
- "yallist": {
- "version": "3.0.2",
- "bundled": true
- }
- }
- },
- "minizlib": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "minipass": "2.3.3"
- }
- },
- "mississippi": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "concat-stream": "1.6.2",
- "duplexify": "3.6.0",
- "end-of-stream": "1.4.1",
- "flush-write-stream": "1.0.3",
- "from2": "2.3.0",
- "parallel-transform": "1.1.0",
- "pump": "3.0.0",
- "pumpify": "1.5.1",
- "stream-each": "1.2.2",
- "through2": "2.0.3"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "move-concurrently": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0",
- "copy-concurrently": "1.0.5",
- "fs-write-stream-atomic": "1.0.10",
- "mkdirp": "0.5.1",
- "rimraf": "2.6.3",
- "run-queue": "1.0.3"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "ms": {
- "version": "2.1.1",
- "bundled": true
- },
- "mute-stream": {
- "version": "0.0.7",
- "bundled": true
- },
- "node-fetch-npm": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "encoding": "0.1.12",
- "json-parse-better-errors": "1.0.2",
- "safe-buffer": "5.1.2"
- }
- },
- "node-gyp": {
- "version": "3.8.0",
- "bundled": true,
- "requires": {
- "fstream": "1.0.11",
- "glob": "7.1.3",
- "graceful-fs": "4.1.15",
- "mkdirp": "0.5.1",
- "nopt": "3.0.6",
- "npmlog": "4.1.2",
- "osenv": "0.1.5",
- "request": "2.88.0",
- "rimraf": "2.6.3",
- "semver": "5.3.0",
- "tar": "2.2.1",
- "which": "1.3.1"
- },
- "dependencies": {
- "nopt": {
- "version": "3.0.6",
- "bundled": true,
- "requires": {
- "abbrev": "1.1.1"
- }
- },
- "semver": {
- "version": "5.3.0",
- "bundled": true
- },
- "tar": {
- "version": "2.2.1",
- "bundled": true,
- "requires": {
- "block-stream": "0.0.9",
- "fstream": "1.0.11",
- "inherits": "2.0.3"
- }
- }
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "abbrev": "1.1.1",
- "osenv": "0.1.5"
- }
- },
- "normalize-package-data": {
- "version": "2.4.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "2.7.1",
- "is-builtin-module": "1.0.0",
- "semver": "5.6.0",
- "validate-npm-package-license": "3.0.4"
- }
- },
- "npm-audit-report": {
- "version": "1.3.2",
- "bundled": true,
- "requires": {
- "cli-table3": "0.5.1",
- "console-control-strings": "1.1.0"
- }
- },
- "npm-bundled": {
- "version": "1.0.5",
- "bundled": true
- },
- "npm-cache-filename": {
- "version": "1.0.2",
- "bundled": true
- },
- "npm-install-checks": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "semver": "5.6.0"
- }
- },
- "npm-lifecycle": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "byline": "5.0.0",
- "graceful-fs": "4.1.15",
- "node-gyp": "3.8.0",
- "resolve-from": "4.0.0",
- "slide": "1.1.6",
- "uid-number": "0.0.6",
- "umask": "1.1.0",
- "which": "1.3.1"
- }
- },
- "npm-logical-tree": {
- "version": "1.2.1",
- "bundled": true
- },
- "npm-package-arg": {
- "version": "6.1.0",
- "bundled": true,
- "requires": {
- "hosted-git-info": "2.7.1",
- "osenv": "0.1.5",
- "semver": "5.6.0",
- "validate-npm-package-name": "3.0.0"
- }
- },
- "npm-packlist": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "ignore-walk": "3.0.1",
- "npm-bundled": "1.0.5"
- }
- },
- "npm-pick-manifest": {
- "version": "2.2.3",
- "bundled": true,
- "requires": {
- "figgy-pudding": "3.5.1",
- "npm-package-arg": "6.1.0",
- "semver": "5.6.0"
- }
- },
- "npm-profile": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "aproba": "2.0.0",
- "figgy-pudding": "3.5.1",
- "npm-registry-fetch": "3.8.0"
- }
- },
- "npm-registry-fetch": {
- "version": "3.8.0",
- "bundled": true,
- "requires": {
- "JSONStream": "1.3.5",
- "bluebird": "3.5.3",
- "figgy-pudding": "3.5.1",
- "lru-cache": "4.1.5",
- "make-fetch-happen": "4.0.1",
- "npm-package-arg": "6.1.0"
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "bundled": true,
- "requires": {
- "path-key": "2.0.1"
- }
- },
- "npm-user-validate": {
- "version": "1.0.0",
- "bundled": true
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "requires": {
- "are-we-there-yet": "1.1.4",
- "console-control-strings": "1.1.0",
- "gauge": "2.7.4",
- "set-blocking": "2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true
- },
- "oauth-sign": {
- "version": "0.9.0",
- "bundled": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "requires": {
- "wrappy": "1.0.2"
- }
- },
- "opener": {
- "version": "1.5.1",
- "bundled": true
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true
- },
- "os-locale": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "execa": "0.7.0",
- "lcid": "1.0.0",
- "mem": "1.1.0"
- }
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "requires": {
- "os-homedir": "1.0.2",
- "os-tmpdir": "1.0.2"
- }
- },
- "p-finally": {
- "version": "1.0.0",
- "bundled": true
- },
- "p-limit": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "p-try": "1.0.0"
- }
- },
- "p-locate": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "p-limit": "1.2.0"
- }
- },
- "p-try": {
- "version": "1.0.0",
- "bundled": true
- },
- "package-json": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "got": "6.7.1",
- "registry-auth-token": "3.3.2",
- "registry-url": "3.1.0",
- "semver": "5.6.0"
- }
- },
- "pacote": {
- "version": "9.3.0",
- "bundled": true,
- "requires": {
- "bluebird": "3.5.3",
- "cacache": "11.3.2",
- "figgy-pudding": "3.5.1",
- "get-stream": "4.1.0",
- "glob": "7.1.3",
- "lru-cache": "5.1.1",
- "make-fetch-happen": "4.0.1",
- "minimatch": "3.0.4",
- "minipass": "2.3.5",
- "mississippi": "3.0.0",
- "mkdirp": "0.5.1",
- "normalize-package-data": "2.4.0",
- "npm-package-arg": "6.1.0",
- "npm-packlist": "1.2.0",
- "npm-pick-manifest": "2.2.3",
- "npm-registry-fetch": "3.8.0",
- "osenv": "0.1.5",
- "promise-inflight": "1.0.1",
- "promise-retry": "1.1.1",
- "protoduck": "5.0.1",
- "rimraf": "2.6.3",
- "safe-buffer": "5.1.2",
- "semver": "5.6.0",
- "ssri": "6.0.1",
- "tar": "4.4.8",
- "unique-filename": "1.1.1",
- "which": "1.3.1"
- },
- "dependencies": {
- "lru-cache": {
- "version": "5.1.1",
- "bundled": true,
- "requires": {
- "yallist": "3.0.3"
- }
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
- }
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true
- }
- }
- },
- "parallel-transform": {
- "version": "1.1.0",
- "bundled": true,
- "requires": {
- "cyclist": "0.2.2",
- "inherits": "2.0.3",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "path-exists": {
- "version": "3.0.0",
- "bundled": true
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true
- },
- "path-is-inside": {
- "version": "1.0.2",
- "bundled": true
- },
- "path-key": {
- "version": "2.0.1",
- "bundled": true
- },
- "performance-now": {
- "version": "2.1.0",
- "bundled": true
- },
- "pify": {
- "version": "3.0.0",
- "bundled": true
- },
- "prepend-http": {
- "version": "1.0.4",
- "bundled": true
- },
- "process-nextick-args": {
- "version": "2.0.0",
- "bundled": true
- },
- "promise-inflight": {
- "version": "1.0.1",
- "bundled": true
- },
- "promise-retry": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "err-code": "1.1.2",
- "retry": "0.10.1"
- },
- "dependencies": {
- "retry": {
- "version": "0.10.1",
- "bundled": true
- }
- }
- },
- "promzard": {
- "version": "0.3.0",
- "bundled": true,
- "requires": {
- "read": "1.0.7"
- }
- },
- "proto-list": {
- "version": "1.2.4",
- "bundled": true
- },
- "protoduck": {
- "version": "5.0.1",
- "bundled": true,
- "requires": {
- "genfun": "5.0.0"
- }
- },
- "prr": {
- "version": "1.0.1",
- "bundled": true
- },
- "pseudomap": {
- "version": "1.0.2",
- "bundled": true
- },
- "psl": {
- "version": "1.1.29",
- "bundled": true
- },
- "pump": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "bundled": true,
- "requires": {
- "duplexify": "3.6.0",
- "inherits": "2.0.3",
- "pump": "2.0.1"
- },
- "dependencies": {
- "pump": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "once": "1.4.0"
- }
- }
- }
- },
- "punycode": {
- "version": "1.4.1",
- "bundled": true
- },
- "qrcode-terminal": {
- "version": "0.12.0",
- "bundled": true
- },
- "qs": {
- "version": "6.5.2",
- "bundled": true
- },
- "query-string": {
- "version": "6.2.0",
- "bundled": true,
- "requires": {
- "decode-uri-component": "0.2.0",
- "strict-uri-encode": "2.0.0"
- }
- },
- "qw": {
- "version": "1.0.1",
- "bundled": true
- },
- "rc": {
- "version": "1.2.7",
- "bundled": true,
- "requires": {
- "deep-extend": "0.5.1",
- "ini": "1.3.5",
- "minimist": "1.2.0",
- "strip-json-comments": "2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "read": {
- "version": "1.0.7",
- "bundled": true,
- "requires": {
- "mute-stream": "0.0.7"
- }
- },
- "read-cmd-shim": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15"
- }
- },
- "read-installed": {
- "version": "4.0.3",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "graceful-fs": "4.1.15",
- "read-package-json": "2.0.13",
- "readdir-scoped-modules": "1.0.2",
- "semver": "5.6.0",
- "slide": "1.1.6",
- "util-extend": "1.0.3"
- }
- },
- "read-package-json": {
- "version": "2.0.13",
- "bundled": true,
- "requires": {
- "glob": "7.1.3",
- "graceful-fs": "4.1.15",
- "json-parse-better-errors": "1.0.2",
- "normalize-package-data": "2.4.0",
- "slash": "1.0.0"
- }
- },
- "read-package-tree": {
- "version": "5.2.1",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "dezalgo": "1.0.3",
- "once": "1.4.0",
- "read-package-json": "2.0.13",
- "readdir-scoped-modules": "1.0.2"
- }
- },
- "readable-stream": {
- "version": "3.1.1",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "string_decoder": "1.2.0",
- "util-deprecate": "1.0.2"
- }
- },
- "readdir-scoped-modules": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "debuglog": "1.0.1",
- "dezalgo": "1.0.3",
- "graceful-fs": "4.1.15",
- "once": "1.4.0"
- }
- },
- "registry-auth-token": {
- "version": "3.3.2",
- "bundled": true,
- "requires": {
- "rc": "1.2.7",
- "safe-buffer": "5.1.2"
- }
- },
- "registry-url": {
- "version": "3.1.0",
- "bundled": true,
- "requires": {
- "rc": "1.2.7"
- }
- },
- "request": {
- "version": "2.88.0",
- "bundled": true,
- "requires": {
- "aws-sign2": "0.7.0",
- "aws4": "1.8.0",
- "caseless": "0.12.0",
- "combined-stream": "1.0.6",
- "extend": "3.0.2",
- "forever-agent": "0.6.1",
- "form-data": "2.3.2",
- "har-validator": "5.1.0",
- "http-signature": "1.2.0",
- "is-typedarray": "1.0.0",
- "isstream": "0.1.2",
- "json-stringify-safe": "5.0.1",
- "mime-types": "2.1.19",
- "oauth-sign": "0.9.0",
- "performance-now": "2.1.0",
- "qs": "6.5.2",
- "safe-buffer": "5.1.2",
- "tough-cookie": "2.4.3",
- "tunnel-agent": "0.6.0",
- "uuid": "3.3.2"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "bundled": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "bundled": true
- },
- "resolve-from": {
- "version": "4.0.0",
- "bundled": true
- },
- "retry": {
- "version": "0.12.0",
- "bundled": true
- },
- "rimraf": {
- "version": "2.6.3",
- "bundled": true,
- "requires": {
- "glob": "7.1.3"
- }
- },
- "run-queue": {
- "version": "1.0.3",
- "bundled": true,
- "requires": {
- "aproba": "1.2.0"
- },
- "dependencies": {
- "aproba": {
- "version": "1.2.0",
- "bundled": true
- }
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true
- },
- "semver": {
- "version": "5.6.0",
- "bundled": true
- },
- "semver-diff": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "semver": "5.6.0"
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true
- },
- "sha": {
- "version": "2.0.1",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "readable-stream": "2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "shebang-command": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "shebang-regex": "1.0.0"
- }
- },
- "shebang-regex": {
- "version": "1.0.0",
- "bundled": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true
- },
- "slash": {
- "version": "1.0.0",
- "bundled": true
- },
- "slide": {
- "version": "1.1.6",
- "bundled": true
- },
- "smart-buffer": {
- "version": "4.0.1",
- "bundled": true
- },
- "socks": {
- "version": "2.2.0",
- "bundled": true,
- "requires": {
- "ip": "1.1.5",
- "smart-buffer": "4.0.1"
- }
- },
- "socks-proxy-agent": {
- "version": "4.0.1",
- "bundled": true,
- "requires": {
- "agent-base": "4.2.0",
- "socks": "2.2.0"
- }
- },
- "sorted-object": {
- "version": "2.0.1",
- "bundled": true
- },
- "sorted-union-stream": {
- "version": "2.1.3",
- "bundled": true,
- "requires": {
- "from2": "1.3.0",
- "stream-iterate": "1.2.0"
- },
- "dependencies": {
- "from2": {
- "version": "1.3.0",
- "bundled": true,
- "requires": {
- "inherits": "2.0.3",
- "readable-stream": "1.1.14"
- }
- },
- "isarray": {
- "version": "0.0.1",
- "bundled": true
- },
- "readable-stream": {
- "version": "1.1.14",
- "bundled": 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",
- "bundled": true
- }
- }
- },
- "spdx-correct": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-expression-parse": "3.0.0",
- "spdx-license-ids": "3.0.3"
- }
- },
- "spdx-exceptions": {
- "version": "2.1.0",
- "bundled": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "spdx-exceptions": "2.1.0",
- "spdx-license-ids": "3.0.3"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.3",
- "bundled": true
- },
- "sshpk": {
- "version": "1.14.2",
- "bundled": true,
- "requires": {
- "asn1": "0.2.4",
- "assert-plus": "1.0.0",
- "bcrypt-pbkdf": "1.0.2",
- "dashdash": "1.14.1",
- "ecc-jsbn": "0.1.2",
- "getpass": "0.1.7",
- "jsbn": "0.1.1",
- "safer-buffer": "2.1.2",
- "tweetnacl": "0.14.5"
- }
- },
- "ssri": {
- "version": "6.0.1",
- "bundled": true,
- "requires": {
- "figgy-pudding": "3.5.1"
- }
- },
- "stream-each": {
- "version": "1.2.2",
- "bundled": true,
- "requires": {
- "end-of-stream": "1.4.1",
- "stream-shift": "1.0.0"
- }
- },
- "stream-iterate": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.6",
- "stream-shift": "1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "stream-shift": {
- "version": "1.0.0",
- "bundled": true
- },
- "strict-uri-encode": {
- "version": "2.0.0",
- "bundled": true
- },
- "string-width": {
- "version": "2.1.1",
- "bundled": true,
- "requires": {
- "is-fullwidth-code-point": "2.0.0",
- "strip-ansi": "4.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "3.0.0",
- "bundled": true
- },
- "is-fullwidth-code-point": {
- "version": "2.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "4.0.0",
- "bundled": true,
- "requires": {
- "ansi-regex": "3.0.0"
- }
- }
- }
- },
- "string_decoder": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "stringify-package": {
- "version": "1.0.0",
- "bundled": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- },
- "strip-eof": {
- "version": "1.0.0",
- "bundled": true
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true
- },
- "supports-color": {
- "version": "5.4.0",
- "bundled": true,
- "requires": {
- "has-flag": "3.0.0"
- }
- },
- "tar": {
- "version": "4.4.8",
- "bundled": true,
- "requires": {
- "chownr": "1.1.1",
- "fs-minipass": "1.2.5",
- "minipass": "2.3.5",
- "minizlib": "1.1.1",
- "mkdirp": "0.5.1",
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
- },
- "dependencies": {
- "chownr": {
- "version": "1.1.1",
- "bundled": true
- },
- "minipass": {
- "version": "2.3.5",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2",
- "yallist": "3.0.3"
- }
- },
- "yallist": {
- "version": "3.0.3",
- "bundled": true
- }
- }
- },
- "term-size": {
- "version": "1.2.0",
- "bundled": true,
- "requires": {
- "execa": "0.7.0"
- }
- },
- "text-table": {
- "version": "0.2.0",
- "bundled": true
- },
- "through": {
- "version": "2.3.8",
- "bundled": true
- },
- "through2": {
- "version": "2.0.3",
- "bundled": true,
- "requires": {
- "readable-stream": "2.3.6",
- "xtend": "4.0.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "requires": {
- "core-util-is": "1.0.2",
- "inherits": "2.0.3",
- "isarray": "1.0.0",
- "process-nextick-args": "2.0.0",
- "safe-buffer": "5.1.2",
- "string_decoder": "1.1.1",
- "util-deprecate": "1.0.2"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- }
- }
- },
- "timed-out": {
- "version": "4.0.1",
- "bundled": true
- },
- "tiny-relative-date": {
- "version": "1.3.0",
- "bundled": true
- },
- "tough-cookie": {
- "version": "2.4.3",
- "bundled": true,
- "requires": {
- "psl": "1.1.29",
- "punycode": "1.4.1"
- }
- },
- "tunnel-agent": {
- "version": "0.6.0",
- "bundled": true,
- "requires": {
- "safe-buffer": "5.1.2"
- }
- },
- "tweetnacl": {
- "version": "0.14.5",
- "bundled": true,
- "optional": true
- },
- "typedarray": {
- "version": "0.0.6",
- "bundled": true
- },
- "uid-number": {
- "version": "0.0.6",
- "bundled": true
- },
- "umask": {
- "version": "1.1.0",
- "bundled": true
- },
- "unique-filename": {
- "version": "1.1.1",
- "bundled": true,
- "requires": {
- "unique-slug": "2.0.0"
- }
- },
- "unique-slug": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "imurmurhash": "0.1.4"
- }
- },
- "unique-string": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "crypto-random-string": "1.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "bundled": true
- },
- "unzip-response": {
- "version": "2.0.1",
- "bundled": true
- },
- "update-notifier": {
- "version": "2.5.0",
- "bundled": true,
- "requires": {
- "boxen": "1.3.0",
- "chalk": "2.4.1",
- "configstore": "3.1.2",
- "import-lazy": "2.1.0",
- "is-ci": "1.1.0",
- "is-installed-globally": "0.1.0",
- "is-npm": "1.0.0",
- "latest-version": "3.1.0",
- "semver-diff": "2.1.0",
- "xdg-basedir": "3.0.0"
- }
- },
- "url-parse-lax": {
- "version": "1.0.0",
- "bundled": true,
- "requires": {
- "prepend-http": "1.0.4"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true
- },
- "util-extend": {
- "version": "1.0.3",
- "bundled": true
- },
- "uuid": {
- "version": "3.3.2",
- "bundled": true
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "bundled": true,
- "requires": {
- "spdx-correct": "3.0.0",
- "spdx-expression-parse": "3.0.0"
- }
- },
- "validate-npm-package-name": {
- "version": "3.0.0",
- "bundled": true,
- "requires": {
- "builtins": "1.0.3"
- }
- },
- "verror": {
- "version": "1.10.0",
- "bundled": true,
- "requires": {
- "assert-plus": "1.0.0",
- "core-util-is": "1.0.2",
- "extsprintf": "1.3.0"
- }
- },
- "wcwidth": {
- "version": "1.0.1",
- "bundled": true,
- "requires": {
- "defaults": "1.0.3"
- }
- },
- "which": {
- "version": "1.3.1",
- "bundled": true,
- "requires": {
- "isexe": "2.0.0"
- }
- },
- "which-module": {
- "version": "2.0.0",
- "bundled": true
- },
- "wide-align": {
- "version": "1.1.2",
- "bundled": true,
- "requires": {
- "string-width": "1.0.2"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "widest-line": {
- "version": "2.0.0",
- "bundled": true,
- "requires": {
- "string-width": "2.1.1"
- }
- },
- "worker-farm": {
- "version": "1.6.0",
- "bundled": true,
- "requires": {
- "errno": "0.1.7"
- }
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "bundled": true,
- "requires": {
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1"
- },
- "dependencies": {
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "strip-ansi": "3.0.1"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true
- },
- "write-file-atomic": {
- "version": "2.3.0",
- "bundled": true,
- "requires": {
- "graceful-fs": "4.1.15",
- "imurmurhash": "0.1.4",
- "signal-exit": "3.0.2"
- }
- },
- "xdg-basedir": {
- "version": "3.0.0",
- "bundled": true
- },
- "xtend": {
- "version": "4.0.1",
- "bundled": true
- },
- "y18n": {
- "version": "4.0.0",
- "bundled": true
- },
- "yallist": {
- "version": "2.1.2",
- "bundled": true
- },
- "yargs": {
- "version": "11.0.0",
- "bundled": true,
- "requires": {
- "cliui": "4.1.0",
- "decamelize": "1.2.0",
- "find-up": "2.1.0",
- "get-caller-file": "1.0.2",
- "os-locale": "2.1.0",
- "require-directory": "2.1.1",
- "require-main-filename": "1.0.1",
- "set-blocking": "2.0.0",
- "string-width": "2.1.1",
- "which-module": "2.0.0",
- "y18n": "3.2.1",
- "yargs-parser": "9.0.2"
- },
- "dependencies": {
- "y18n": {
- "version": "3.2.1",
- "bundled": true
- }
- }
- },
- "yargs-parser": {
- "version": "9.0.2",
- "bundled": true,
- "requires": {
- "camelcase": "4.1.0"
- }
- }
- }
- },
- "npm-run-path": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
- "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
- "requires": {
- "path-key": "2.0.1"
- }
- },
- "nth-check": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz",
- "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==",
- "requires": {
- "boolbase": "1.0.0"
- }
- },
- "num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4="
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
- },
- "nwsapi": {
- "version": "2.0.9",
- "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.0.9.tgz",
- "integrity": "sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ=="
- },
- "oauth-sign": {
- "version": "0.9.0",
- "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz",
- "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "requires": {
- "copy-descriptor": "0.1.1",
- "define-property": "0.2.5",
- "kind-of": "3.2.2"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "requires": {
- "is-descriptor": "0.1.6"
+ "is-descriptor": "0.1.6"
}
}
}
@@ -12121,6 +9330,18 @@
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-1.3.1.tgz",
"integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA=="
},
+ "object-inspect": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.6.0.tgz",
+ "integrity": "sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ==",
+ "dev": true
+ },
+ "object-is": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.1.tgz",
+ "integrity": "sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY=",
+ "dev": true
+ },
"object-keys": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.12.tgz",
@@ -12145,6 +9366,30 @@
"object-keys": "1.0.12"
}
},
+ "object.entries": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.0.tgz",
+ "integrity": "sha512-l+H6EQ8qzGRxbkHOd5I/aHRhHDKoQXQ8g0BYt4uSweQU1/J6dZUOyWh9a2Vky35YCKjzmgxOzta2hH6kf9HuXA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
+ "object.fromentries": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.0.tgz",
+ "integrity": "sha512-9iLiI6H083uiqUuvzyY6qrlmc/Gz8hLQFOcb/Ri/0xXFkSNS3ctV+CbE6yM2+AnkYfOB3dGjdzC0wrMLIhQICA==",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1",
+ "has": "1.0.3"
+ }
+ },
"object.getownpropertydescriptors": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
@@ -14488,6 +11733,22 @@
"performance-now": "2.1.0"
}
},
+ "railroad-diagrams": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz",
+ "integrity": "sha1-635iZ1SN3t+4mcG5Dlc3RVnN234=",
+ "dev": true
+ },
+ "randexp": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz",
+ "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==",
+ "dev": true,
+ "requires": {
+ "discontinuous-range": "1.0.0",
+ "ret": "0.1.15"
+ }
+ },
"randomatic": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz",
@@ -14816,6 +12077,36 @@
"react-transition-group": "2.5.3"
}
},
+ "react-test-renderer": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-16.7.0.tgz",
+ "integrity": "sha512-tFbhSjknSQ6+ttzmuGdv+SjQfmvGcq3PFKyPItohwhhOBmRoTf1We3Mlt3rJtIn85mjPXOkKV+TaKK4irvk9Yg==",
+ "dev": true,
+ "requires": {
+ "object-assign": "4.1.1",
+ "prop-types": "15.6.2",
+ "react-is": "16.7.0",
+ "scheduler": "0.12.0"
+ },
+ "dependencies": {
+ "react-is": {
+ "version": "16.7.0",
+ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.7.0.tgz",
+ "integrity": "sha512-Z0VRQdF4NPDoI0tsXVMLkJLiwEBa+RP66g0xDHxgxysxSoCUccSten4RTF/UFvZF1dZvZ9Zu1sx+MDXwcOR34g==",
+ "dev": true
+ },
+ "scheduler": {
+ "version": "0.12.0",
+ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.12.0.tgz",
+ "integrity": "sha512-t7MBR28Akcp4Jm+QoR63XgAi9YgCUmgvDHqf5otgAj4QvdoBE4ImCX0ffehefePPG+aitiYHp0g/mW6s4Tp+dw==",
+ "dev": true,
+ "requires": {
+ "loose-envify": "1.4.0",
+ "object-assign": "4.1.1"
+ }
+ }
+ }
+ },
"react-transition-group": {
"version": "2.5.3",
"resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.5.3.tgz",
@@ -15588,6 +12879,16 @@
"inherits": "2.0.3"
}
},
+ "rst-selector-parser": {
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz",
+ "integrity": "sha1-gbIw6i/MYGbInjRy3nlChdmwPZE=",
+ "dev": true,
+ "requires": {
+ "lodash.flattendeep": "4.4.0",
+ "nearley": "2.16.0"
+ }
+ },
"rsvp": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/rsvp/-/rsvp-3.6.2.tgz",
@@ -16762,6 +14063,17 @@
}
}
},
+ "string.prototype.trim": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.1.2.tgz",
+ "integrity": "sha1-0E3iyJ4Tf019IG8Ia17S+ua+jOo=",
+ "dev": true,
+ "requires": {
+ "define-properties": "1.1.3",
+ "es-abstract": "1.12.0",
+ "function-bind": "1.1.1"
+ }
+ },
"string_decoder": {
"version": "0.10.31",
"resolved": "http://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
diff --git a/package.json b/package.json
index f37df78..c714d56 100644
--- a/package.json
+++ b/package.json
@@ -11,7 +11,6 @@
"babel-polyfill": "^6.26.0",
"gh-pages": "^2.0.1",
"leaflet": "^1.3.4",
- "npm": "^6.6.0",
"react": "^16.7.0-alpha",
"react-dom": "^16.7.0-alpha",
"react-leaflet": "^2.1.2",
@@ -36,5 +35,9 @@
"not dead",
"not ie <= 11",
"not op_mini all"
- ]
+ ],
+ "devDependencies": {
+ "enzyme": "^3.8.0",
+ "enzyme-adapter-react-16": "^1.8.0"
+ }
}
diff --git a/src/App.test.js b/src/App.test.js
index a754b20..3351834 100644
--- a/src/App.test.js
+++ b/src/App.test.js
@@ -1,9 +1,9 @@
-import React from 'react';
-import ReactDOM from 'react-dom';
-import App from './App';
+import React from "react";
+import ReactDOM from "react-dom";
+import App from "./App";
-it('renders without crashing', () => {
- const div = document.createElement('div');
+it.skip("renders without crashing", () => {
+ const div = document.createElement("div");
ReactDOM.render(, div);
ReactDOM.unmountComponentAtNode(div);
});
diff --git a/src/components/__tests__/Info.spec.js b/src/components/__tests__/Info.spec.js
new file mode 100644
index 0000000..1f0f3b9
--- /dev/null
+++ b/src/components/__tests__/Info.spec.js
@@ -0,0 +1,60 @@
+import React from "react";
+import { shallow } from "enzyme";
+import Info from "../Info";
+
+describe("Info component", () => {
+ it("render a div with classname info", () => {
+ const wrapper = shallow();
+ expect(wrapper.find(".info").length).toEqual(1);
+ expect(wrapper.exists(".info")).toBe(true);
+ });
+ describe("data is undefined", () => {
+ const props = {
+ data: undefined
+ };
+ const wrapper = shallow();
+ it("not render the latitude", () => {
+ expect(
+ wrapper
+ .find("span")
+ .at(4)
+ .text()
+ ).toEqual("");
+ });
+ it("find a pre tag", () => {
+ expect(wrapper.find("pre")).toHaveLength(1);
+ });
+ });
+ describe("data is an object contains key-value pairs", () => {
+ const props = {
+ data: {
+ info: {
+ name: "a",
+ region: "a"
+ },
+ position: {
+ lat: 0,
+ lon: 0
+ }
+ }
+ };
+ const wrapper = shallow();
+ it("p tags with values", () => {
+ expect.assertions(3);
+ expect(
+ wrapper
+ .find("p")
+ .at(0)
+ .text()
+ ).toBe("a");
+ expect(
+ wrapper
+ .find("p")
+ .at(1)
+ .childAt(1)
+ .text()
+ ).toBe("a");
+ expect(wrapper.find("pre")).toHaveLength(0);
+ });
+ });
+});
diff --git a/src/setupTests.js b/src/setupTests.js
new file mode 100644
index 0000000..1065778
--- /dev/null
+++ b/src/setupTests.js
@@ -0,0 +1,3 @@
+import Enzyme from "enzyme";
+import Adapter from "enzyme-adapter-react-16";
+Enzyme.configure({ adapter: new Adapter() });
diff --git a/src/util/__tests__/calcAverage.spec.js b/src/util/__tests__/calcAverage.spec.js
new file mode 100644
index 0000000..b6006cf
--- /dev/null
+++ b/src/util/__tests__/calcAverage.spec.js
@@ -0,0 +1,34 @@
+import calcAverage from "../calcAverage";
+
+describe("calcAverage func", () => {
+ it("return undefined if no arr type is passed", () => {
+ expect(calcAverage()).not.toBeDefined();
+ });
+ describe("when an array is passed as first arg", () => {
+ it("return undefined average when arr is empty", () => {
+ expect(calcAverage([])).toMatchObject({ average: undefined });
+ });
+ it("return undefined average if arr contains all NaN", () => {
+ const arr = [NaN, NaN];
+ expect(calcAverage(arr)).toMatchObject({ average: undefined });
+ });
+ it("return undefined average when all objects in arr contain NaN", () => {
+ const arr = [{ value: undefined }, { value: NaN }];
+ expect(calcAverage(arr)).toMatchObject({ average: undefined });
+ });
+ it("calculate average when arr contains at least 1 object with non-NaN value", () => {
+ const arr = [undefined, { time: 0, value: 0 }, { time: 1, value: NaN }];
+ expect(calcAverage(arr)).toMatchObject({
+ average: 0,
+ arr: [0]
+ });
+ });
+ it("calculate average when arr contains at least 1 number with non-NaN value", () => {
+ const arr = [NaN, 1];
+ expect(calcAverage(arr)).toMatchObject({
+ average: 1,
+ arr: [1]
+ });
+ });
+ });
+});
diff --git a/src/util/__tests__/constructAreaChartData.spec.js b/src/util/__tests__/constructAreaChartData.spec.js
new file mode 100644
index 0000000..5a6e446
--- /dev/null
+++ b/src/util/__tests__/constructAreaChartData.spec.js
@@ -0,0 +1,40 @@
+import constructAreaChartData from "../constructAreaChartData";
+import { observeHours } from "../../var";
+
+describe("constructAreaChartData func", () => {
+ const type = "snowdepth";
+ let data = [
+ {
+ data: {
+ [type]: {
+ timeValuePairs: [{ time: 0, value: 1 }, { time: 1, value: NaN }]
+ }
+ }
+ }
+ ];
+ it("return data with length <= 1", () => {
+ const { data: result } = constructAreaChartData(data, type);
+ expect(result).toHaveLength(observeHours + 1);
+ expect(result).toEqual(
+ expect.arrayContaining([expect.objectContaining({})])
+ );
+ });
+ it("return selectedLocInfo", () => {
+ const { selectedLocInfo } = constructAreaChartData(data, type);
+ expect(selectedLocInfo).toMatchObject(data[0]);
+ });
+ it("return no selectedLocInfo when data contains more than 1 object", () => {
+ data = [
+ ...data,
+ {
+ data: {
+ [type]: {
+ timeValuePairs: [{ time: 0, value: 1 }, { time: 1, value: NaN }]
+ }
+ }
+ }
+ ];
+ const { selectedLocInfo } = constructAreaChartData(data, type);
+ expect(selectedLocInfo).toMatchObject({});
+ });
+});
diff --git a/src/util/__tests__/constructComposedChartData.spec.js b/src/util/__tests__/constructComposedChartData.spec.js
new file mode 100644
index 0000000..6c0fb47
--- /dev/null
+++ b/src/util/__tests__/constructComposedChartData.spec.js
@@ -0,0 +1,46 @@
+import constructComposedChartData from "../constructComposedChartData";
+import formatDateTime from "../formatDateTime";
+
+describe("constructComposedChartData", () => {
+ const type = "snowdepth";
+ const firstDayTime = 1548097200000;
+ const secondDayTime = 1548137200000;
+ const timeValuePairs = [
+ { time: firstDayTime, value: -1 },
+ { time: firstDayTime + 1, value: NaN },
+ { time: secondDayTime, value: NaN },
+ { time: 1548197200000, value: 1 },
+ { time: 1548297200000, value: 2 },
+ { time: 1548397200000, value: 3 },
+ { time: 1548497200000, value: 4 }
+ ];
+ const data = [
+ {
+ data: {
+ [type]: {
+ timeValuePairs
+ }
+ }
+ }
+ ];
+ it("return arr with 7-day objects", () => {
+ const result = constructComposedChartData(data, type);
+ expect(result).toHaveLength(7);
+
+ expect(result[0]).toMatchObject({
+ date: formatDateTime(firstDayTime).substr(0, 2),
+ min: -1,
+ max: -1,
+ average: -1
+ });
+
+ expect(result[1]).toMatchObject({
+ date: formatDateTime(secondDayTime).substr(0, 2),
+ min: undefined,
+ max: undefined,
+ average: undefined
+ });
+
+ expect(result[6]).toEqual(expect.objectContaining({ date: undefined }));
+ });
+});
diff --git a/src/util/__tests__/defineLabel.spec.js b/src/util/__tests__/defineLabel.spec.js
new file mode 100644
index 0000000..ce3969a
--- /dev/null
+++ b/src/util/__tests__/defineLabel.spec.js
@@ -0,0 +1,28 @@
+import defineLabel from "../defineLabel";
+
+describe("defineLabel func", () => {
+ const arr = [
+ {
+ type: "t",
+ unit: "degC",
+ name: "Temperature"
+ },
+ {
+ type: "r_1h",
+ unit: "mm",
+ name: "Precipitation"
+ },
+ {
+ type: "a",
+ unit: "cm",
+ name: "Snowdepth"
+ }
+ ];
+ arr.map(({ type, unit: u, name: n }) => {
+ it("return corresponding unit and name", () => {
+ const { unit, name } = defineLabel(type);
+ expect(unit).toBe(u);
+ expect(name).toBe(n);
+ });
+ });
+});
diff --git a/src/util/__tests__/formatDateTime.spec.js b/src/util/__tests__/formatDateTime.spec.js
new file mode 100644
index 0000000..54ec377
--- /dev/null
+++ b/src/util/__tests__/formatDateTime.spec.js
@@ -0,0 +1,13 @@
+import formatDateTime from "../formatDateTime";
+
+describe("formatDateTime func", () => {
+ it("return undefined if no timestamp is passed", () => {
+ const result = formatDateTime();
+ expect(result).not.toBeDefined();
+ });
+ it("return string value if timestamp is passed", () => {
+ const timestamp = new Date().getTime();
+ const result = formatDateTime(timestamp);
+ expect(typeof result).toBe("string");
+ });
+});
diff --git a/src/util/calcAverage.js b/src/util/calcAverage.js
index 8f79b82..a2cbd96 100644
--- a/src/util/calcAverage.js
+++ b/src/util/calcAverage.js
@@ -1,8 +1,12 @@
-export default (arr, arrContainsNumbersOnly = true) => {
- if (arr) {
- const truthy = !arrContainsNumbersOnly
- ? arr.filter(item => item && !isNaN(item.value)).map(v => v.value)
- : arr.filter(v => !isNaN(v));
+export default arr => {
+ if (Array.isArray(arr)) {
+ if (!arr.length) {
+ return { average: undefined };
+ }
+ const truthy =
+ typeof arr[0] === "number"
+ ? arr.filter(v => !isNaN(v))
+ : arr.filter(item => item && !isNaN(item.value)).map(v => v.value);
const len = truthy.length;
if (!len) {
diff --git a/src/util/constructAreaChartData.js b/src/util/constructAreaChartData.js
index affc6ad..9167f43 100644
--- a/src/util/constructAreaChartData.js
+++ b/src/util/constructAreaChartData.js
@@ -14,7 +14,7 @@ export default (data, type) => {
});
if (allCitiesPair.length) {
- const { average } = calcAverage(allCitiesPair, false);
+ const { average } = calcAverage(allCitiesPair);
groupType.push({
time: formatDateTime(time),
[defineLabel(type).name]: average
diff --git a/src/util/constructComposedChartData.js b/src/util/constructComposedChartData.js
index e2d8063..1432999 100644
--- a/src/util/constructComposedChartData.js
+++ b/src/util/constructComposedChartData.js
@@ -20,7 +20,7 @@ export default (data, type) => {
const keys = Object.keys(seen);
const regionMinMaxAvg = keys.map(date => {
const { average, arr } = calcAverage(seen[date]);
- if (!average) {
+ if (average === undefined) {
return { date, min: NaN, max: NaN, average: NaN };
}
const min = Math.min(...arr);
@@ -29,12 +29,14 @@ export default (data, type) => {
});
return regionMinMaxAvg;
});
-
// calculate average of all min, max, average for each days
const finalData = [];
for (let i = 0; i < observeDays + 1; i++) {
if (allRegionsData && allRegionsData.length) {
- const { date } = allRegionsData && allRegionsData[0][i];
+ const { date } =
+ allRegionsData &&
+ allRegionsData[0][i] !== undefined &&
+ allRegionsData[0][i];
const oneDayMin = allRegionsData.map(
region => region[i] && region[i].min
);
diff --git a/src/var/index.js b/src/var/index.js
index a3753a4..6e11348 100644
--- a/src/var/index.js
+++ b/src/var/index.js
@@ -3,8 +3,6 @@ export const attribution =
export const defaultCoordinate = { lat: 64, lng: 27 };
-export const defaultLayer = "Mapnik";
-
export const defaultType = "t";
export const observeDays = 6;
@@ -37,3 +35,5 @@ export const layerOptions = [
url: "https://tileserver.maptiler.com/nasa/{z}/{x}/{y}.jpg"
}
];
+
+export const defaultLayer = layerOptions[0].name;
From 5166422f008315fe43178a5a1f1240d4bc57c690 Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Mon, 28 Jan 2019 12:45:45 +0200
Subject: [PATCH 5/6] hotfix/rm unnecessary action set data
---
src/containers/Sidebar.js | 9 ++-------
1 file changed, 2 insertions(+), 7 deletions(-)
diff --git a/src/containers/Sidebar.js b/src/containers/Sidebar.js
index 8f0afcd..2ab4e44 100644
--- a/src/containers/Sidebar.js
+++ b/src/containers/Sidebar.js
@@ -7,7 +7,6 @@ import DateValue from "../components/DateValue";
import Form from "./Form";
import Info from "../components/Info";
-import constructAreaChartData from "../util/constructAreaChartData";
import handleChartSetter from "../util/handleChartSetter";
function Sidebar({
@@ -34,11 +33,7 @@ function Sidebar({
const handleType = type =>
handleChartSetter(observeLocations, selectedLocation, type, setChartData);
- const setData = () => {
- const data = constructAreaChartData(observeLocations, type);
- clearSelectedLocation();
- setChartData({ data, type });
- };
+ const reset = () => clearSelectedLocation();
const { data, composedData, type, selectedLocInfo } = chartData;
@@ -47,7 +42,7 @@ function Sidebar({
From 8d4740fe9bdca24b6959a041747a45f214262ab9 Mon Sep 17 00:00:00 2001
From: Quynh Le
Date: Mon, 4 Feb 2019 02:09:40 +0200
Subject: [PATCH 6/6] =?UTF-8?q?add=20CI=C3=83?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.travis.yml | 18 ++++++++++++++++++
package.json | 3 ++-
src/App.js | 14 +++++++++++++-
src/components/TimeValueArea.js | 5 ++++-
src/util/fetchObservationLocations.js | 1 -
5 files changed, 37 insertions(+), 4 deletions(-)
create mode 100644 .travis.yml
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..52461ff
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,18 @@
+language: node_js
+node_js:
+ - "stable"
+cache:
+ directories:
+ - node_modules
+script:
+ - npm test
+ - npm run test:coverage
+ - npm run build
+
+deploy:
+ provider: pages
+ skip_cleanup: true
+ github_token: $github_token
+ local_dir: build
+ on:
+ branch: master
diff --git a/package.json b/package.json
index c714d56..e1fb2ea 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,8 @@
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
- "test": "react-scripts test",
+ "test": "CI=true react-scripts test --env=jsdom",
+ "test:coverage": "npm test -- --coverage",
"predeploy": "npm run build",
"deploy": "gh-pages -d build",
"eject": "react-scripts eject"
diff --git a/src/App.js b/src/App.js
index 2cf2f9f..42777a0 100644
--- a/src/App.js
+++ b/src/App.js
@@ -10,12 +10,24 @@ const App = () => {
const [selectedLocation, setSelectedLocation] = useState(null);
- useEffect(() => fetchObservationLocation(setObservationLocations), []);
+ useEffect(() => {
+ fetchObservationLocation(setObservationLocations);
+ const interval = setInterval(() => {
+ fetchObservationLocation(setObservationLocations);
+ }, 30 * 60 * 1000);
+ return () => clearInterval(interval);
+ }, []);
const clearSelectedLocation = () => {
setSelectedLocation(null);
};
+ console.log(
+ observeLocations[60] &&
+ observeLocations[60].data["t"] &&
+ observeLocations[60].data["t"].timeValuePairs[144]
+ );
+
return (
{
margin={{ top: 40, right: 30, left: 20, bottom: 20 }}
>
- value.substr(0, 2)} />
+ value.substr(0, value.indexOf("/"))}
+ />
{
});
return;
}
-
setter(
data.locations.map(loc => {
const [lat, lon] = loc.info.position.map(parseFloat);