From bec4c4b05f98b52aa3430e948b5e7207481fcc5a Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Wed, 16 Oct 2019 16:07:53 -0700 Subject: [PATCH 01/16] refactor: change directories for cp scripts --- cpbuild.sh | 2 +- cpcss.sh | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/cpbuild.sh b/cpbuild.sh index ce6439bbb..84cc19b52 100755 --- a/cpbuild.sh +++ b/cpbuild.sh @@ -1,5 +1,5 @@ echo 'rebuilding..' yarn prepublish echo 'copying built js..' -cp -r ./build ~/dev/otp/trimet-mod-otp/node_modules/otp-react-redux +cp -r ./build ~/git/trimet-mod-otp/node_modules/otp-react-redux echo 'done' diff --git a/cpcss.sh b/cpcss.sh index 884997a8c..67ebd35f7 100755 --- a/cpcss.sh +++ b/cpcss.sh @@ -1,5 +1,4 @@ echo "building and copying css.." mastarm build -cp ~/dev/otp/otp-react-redux/dist/index.css* ~/dev/otp/trimet-mod-otp/node_modules/otp-react-redux/dist/ +cp ~/git/otp-react-redux/dist/index.css* ~/git/trimet-mod-otp/node_modules/otp-react-redux/dist/ echo "done" - From 859be14be746483dcd6d8c1b18164f4224301698 Mon Sep 17 00:00:00 2001 From: Landon Reed Date: Mon, 2 Dec 2019 10:50:39 -0500 Subject: [PATCH 02/16] fix(RouteViewer): fix undefined error if long name missing --- lib/components/viewers/route-viewer.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index 10261683e..365229512 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -112,10 +112,16 @@ class RouteRow extends PureComponent { const {defaultRouteColor, defaultRouteTextColor, longNameSplitter} = operator || {} const color = `#${defaultRouteTextColor || route.textColor || '000000'}` const backgroundColor = `#${defaultRouteColor || route.color || 'ffffff'}` - const nameParts = route.longName.split(longNameSplitter) - const longName = (longNameSplitter && route.longName && nameParts.length > 1) - ? nameParts[1] - : route.longName + // Default long name is empty string (long name is an optional GTFS value). + let longName = '' + if (route.longName) { + // Attempt to split route name if splitter is defined for operator (to + // remove short name value from start of long name value). + const nameParts = route.longName.split(longNameSplitter) + longName = (longNameSplitter && nameParts.length > 1) + ? nameParts[1] + : route.longName + } return (
Date: Fri, 13 Dec 2019 18:53:30 +0000 Subject: [PATCH 03/16] build(deps): bump npm from 6.10.2 to 6.13.4 Bumps [npm](https://github.com/npm/cli) from 6.10.2 to 6.13.4. - [Release notes](https://github.com/npm/cli/releases) - [Changelog](https://github.com/npm/cli/blob/latest/CHANGELOG.md) - [Commits](https://github.com/npm/cli/compare/v6.10.2...v6.13.4) Signed-off-by: dependabot[bot] --- yarn.lock | 632 +++++++++++++++++++++++++++++++++--------------------- 1 file changed, 382 insertions(+), 250 deletions(-) diff --git a/yarn.lock b/yarn.lock index e30353061..3c2fe107c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1994,9 +1994,9 @@ aws-sign2@~0.7.0: integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" - integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + version "1.9.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.0.tgz#24390e6ad61386b0a747265754d2a17219de862c" + integrity sha512-Uvq6hVe90D0B2WEnUqtdgY1bATGz3mw33nH9Y+dmA+w5DHvUmBgkr5rM/KCHpCsiFNRUfokW/szpPPgMK2hm4A== axobject-query@^2.0.2: version "2.0.2" @@ -2895,15 +2895,16 @@ big.js@^5.2.2: resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== -bin-links@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.2.tgz#fb74bd54bae6b7befc6c6221f25322ac830d9757" - integrity sha512-8eEHVgYP03nILphilltWjeIjMbKyJo3wvp9K816pHbhP301ismzw15mxAAEVQ/USUwcP++1uNrbERbp8lOA6Fg== +bin-links@^1.1.2, bin-links@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/bin-links/-/bin-links-1.1.6.tgz#30d33e810829305e5e61b90cfcb9a3a4f65eb516" + integrity sha512-b5rV3uVyrlrJWLI3mawUUf5t2f9mCEQm/TqT5zNj6DPYhYDZaNp0AYaYd/CVASkSEklayNDLliZHVdo2J3niPw== dependencies: - bluebird "^3.5.0" - cmd-shim "^2.0.2" - gentle-fs "^2.0.0" - graceful-fs "^4.1.11" + bluebird "^3.5.3" + cmd-shim "^3.0.0" + gentle-fs "^2.3.0" + graceful-fs "^4.1.15" + npm-normalize-package-bin "^1.0.0" write-file-atomic "^2.3.0" binary-extensions@^1.0.0: @@ -2911,10 +2912,10 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== -bluebird@^3.5.0, bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: - version "3.5.5" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" - integrity sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w== +bluebird@^3.5.1, bluebird@^3.5.3, bluebird@^3.5.5: + version "3.7.2" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" + integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" @@ -3298,10 +3299,10 @@ bytes@1: resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= -cacache@^12.0.0, cacache@^12.0.2: - version "12.0.2" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.2.tgz#8db03205e36089a3df6954c66ce92541441ac46c" - integrity sha512-ifKgxH2CKhJEg6tNdAwziu6Q33EvuG26tYcda6PT3WKisZcYDXsnEdnRv67Po3yCzFfaSoMjGZzJyD2c3DT1dg== +cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: + version "12.0.3" + resolved "https://registry.yarnpkg.com/cacache/-/cacache-12.0.3.tgz#be99abba4e1bf5df461cd5a2c1071fc432573390" + integrity sha512-kqdmfXEGFepesTuROHMs3MpFLWrPkSSpRqOw80RCflZXy/khxaArvFrQ7uJxSUduzAufc6G0g1VUCOZXxWavPw== dependencies: bluebird "^3.5.5" chownr "^1.1.1" @@ -3604,10 +3605,10 @@ chokidar@^2.0.2, chokidar@^2.0.4, chokidar@^2.1.1, chokidar@^2.1.2: optionalDependencies: fsevents "^1.2.7" -chownr@^1.1.1, chownr@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.2.tgz#a18f1e0b269c8a6a5d3c86eb298beb14c3dd7bf6" - integrity sha512-GkfeAQh+QNy3wquu9oIZr6SS5x7wGdSgNQvD10X3r+AZr1Oys22HW8kAmDMvNg2+Dm0TeGaEuO8gFwdBXxwO8A== +chownr@^1.1.1, chownr@^1.1.2, chownr@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" + integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== ci-info@^1.5.0: version "1.6.0" @@ -3768,10 +3769,10 @@ cloneable-readable@^1.0.0: process-nextick-args "^2.0.0" readable-stream "^2.3.5" -cmd-shim@^2.0.2, cmd-shim@~2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-2.0.2.tgz#6fcbda99483a8fd15d7d30a196ca69d688a2efdb" - integrity sha1-b8vamUg6j9FdfTChlspp1oii79s= +cmd-shim@^3.0.0, cmd-shim@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/cmd-shim/-/cmd-shim-3.0.3.tgz#2c35238d3df37d98ecdd7d5f6b8dc6b21cadc7cb" + integrity sha512-DtGg+0xiFhQIntSBRzL2fRQBnmtAVwXIDo4Qq46HPpObYquxMaZS4sb82U9nH91qJrlosC1wa9gwr0QyL/HypA== dependencies: graceful-fs "^4.1.2" mkdirp "~0.5.0" @@ -3879,9 +3880,9 @@ colors@1.0.3: integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs= colors@^1.1.2: - version "1.3.3" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d" - integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg== + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== colors@~1.1.2: version "1.1.2" @@ -4592,10 +4593,10 @@ currently-unhandled@^0.4.1: dependencies: array-find-index "^1.0.1" -cyclist@~0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640" - integrity sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA= +cyclist@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" + integrity sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk= cz-conventional-changelog@2.1.0, cz-conventional-changelog@^2.1.0: version "2.1.0" @@ -4750,7 +4751,7 @@ debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debuglog@^1.0.1: +debuglog@*, debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -5262,9 +5263,9 @@ encoding@^0.1.11: iconv-lite "~0.4.13" end-of-stream@^1.0.0, end-of-stream@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" - integrity sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q== + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== dependencies: once "^1.4.0" @@ -5396,7 +5397,7 @@ errorify@^0.3.1: resolved "https://registry.yarnpkg.com/errorify/-/errorify-0.3.1.tgz#53e0aaeeb18adc3e55f9f1eb4e2d95929f41b79b" integrity sha1-U+Cq7rGK3D5V+fHrTi2Vkp9Bt5s= -es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.5.1, es-abstract@^1.7.0: +es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13.0, es-abstract@^1.7.0: version "1.13.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.13.0.tgz#ac86145fdd5099d8dd49558ccba2eaf9b88e24e9" integrity sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg== @@ -5408,6 +5409,23 @@ es-abstract@^1.10.0, es-abstract@^1.11.0, es-abstract@^1.12.0, es-abstract@^1.13 is-regex "^1.0.4" object-keys "^1.0.12" +es-abstract@^1.17.0-next.1: + version "1.17.0-next.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.0-next.1.tgz#94acc93e20b05a6e96dacb5ab2f1cb3a81fc2172" + integrity sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw== + dependencies: + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + is-callable "^1.1.4" + is-regex "^1.0.4" + object-inspect "^1.7.0" + object-keys "^1.1.1" + object.assign "^4.1.0" + string.prototype.trimleft "^2.1.0" + string.prototype.trimright "^2.1.0" + es-to-primitive@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.0.tgz#edf72478033456e8dda8ef09e00ad9650707f377" @@ -5417,6 +5435,15 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es-to-primitive@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" + integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== + dependencies: + is-callable "^1.1.4" + is-date-object "^1.0.1" + is-symbol "^1.0.2" + es6-math@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/es6-math/-/es6-math-1.0.0.tgz#5eac891860c2024b728e7122444df388e1d8177a" @@ -6263,11 +6290,11 @@ fs-extra@^8.0.0: universalify "^0.1.0" fs-minipass@^1.2.5: - version "1.2.6" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.6.tgz#2c5cc30ded81282bfe8a0d7c7c1853ddeb102c07" - integrity sha512-crhvyXcMejjv3Z5d2Fa9sf5xLYVCF5O1c71QxbVnbLsmYMBEvDAftewesN/HhY03YRoA7zOMxjNGrF5svGaaeQ== + version "1.2.7" + resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" + integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== dependencies: - minipass "^2.2.1" + minipass "^2.6.0" fs-mkdirp-stream@^1.0.0: version "1.0.0" @@ -6374,15 +6401,18 @@ genfun@^5.0.0: resolved "https://registry.yarnpkg.com/genfun/-/genfun-5.0.0.tgz#9dd9710a06900a5c4a5bf57aca5da4e52fe76537" integrity sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA== -gentle-fs@^2.0.0, gentle-fs@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.0.1.tgz#585cfd612bfc5cd52471fdb42537f016a5ce3687" - integrity sha512-cEng5+3fuARewXktTEGbwsktcldA+YsnUEaXZwcK/3pjSE1X9ObnTs+/8rYf8s+RnIcQm2D5x3rwpN7Zom8Bew== +gentle-fs@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/gentle-fs/-/gentle-fs-2.3.0.tgz#13538db5029400f98684be4894e8a7d8f0d1ea7f" + integrity sha512-3k2CgAmPxuz7S6nKK+AqFE2AdM1QuwqKLPKzIET3VRwK++3q96MsNFobScDjlCrq97ZJ8y5R725MOlm6ffUCjg== dependencies: aproba "^1.1.2" + chownr "^1.1.2" + cmd-shim "^3.0.3" fs-vacuum "^1.2.10" graceful-fs "^4.1.11" iferr "^0.1.5" + infer-owner "^1.0.4" mkdirp "^0.5.1" path-is-inside "^1.0.2" read-cmd-shim "^1.0.1" @@ -6568,9 +6598,9 @@ glob@7.1.3: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.4" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" - integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A== + version "7.1.6" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" + integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -6652,10 +6682,10 @@ got@^6.7.1: unzip-response "^2.0.1" url-parse-lax "^1.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" - integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" + integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== growly@^1.3.0: version "1.3.0" @@ -6720,10 +6750,10 @@ has-flag@^3.0.0: resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= -has-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" - integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.0, has-symbols@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" + integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== has-unicode@^2.0.0, has-unicode@~2.0.1: version "2.0.1" @@ -6885,10 +6915,10 @@ hook-std@^2.0.0: resolved "https://registry.yarnpkg.com/hook-std/-/hook-std-2.0.0.tgz#ff9aafdebb6a989a354f729bb6445cf4a3a7077c" integrity sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g== -hosted-git-info@^2.1.4, hosted-git-info@^2.6.0, hosted-git-info@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.7.1.tgz#97f236977bd6e125408930ff6de3eec6281ec047" - integrity sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w== +hosted-git-info@^2.1.4, hosted-git-info@^2.7.1, hosted-git-info@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.5.tgz#759cfcf2c4d156ade59b0b2dfabddc42a6b9c70c" + integrity sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg== hsl-regex@^1.0.0: version "1.0.0" @@ -6992,6 +7022,14 @@ https-proxy-agent@^2.2.1: agent-base "^4.3.0" debug "^3.1.0" +https-proxy-agent@^2.2.3: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -7032,9 +7070,9 @@ iferr@^1.0.2: integrity sha512-9AfeLfji44r5TKInjhz3W9DyZI1zR1JAf2hVBMGhddAKPqBsupb89jGfbCTHIGZd6fGZl9WlHdn4AObygyMKwg== ignore-walk@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.1.tgz#a83e62e7d272ac0e3b551aaa82831a19b69f82f8" - integrity sha512-DTVlMx3IYPe0/JJcYP7Gxg7ttZZu3IInhuEhbchuqneY9wWe5Ojy2mXLBaQFUQmo0AW2r3qG7m1mg86js+gnlQ== + version "3.0.3" + resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" + integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== dependencies: minimatch "^3.0.4" @@ -7096,7 +7134,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@^0.1.4: +imurmurhash@*, imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -7279,7 +7317,7 @@ ip-regex@^2.1.0: resolved "https://registry.yarnpkg.com/ip-regex/-/ip-regex-2.1.0.tgz#fa78bf5d2e6913c911ce9f819ee5146bb6d844e9" integrity sha1-+ni/XS5pE8kRzp+BnuUUa7bYROk= -ip@^1.1.5: +ip@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.5.tgz#bdded70114290828c0a039e72ef25f5aaec4354a" integrity sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo= @@ -7386,9 +7424,9 @@ is-ci@^2.0.0: ci-info "^2.0.0" is-cidr@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.0.0.tgz#1acf35c9e881063cd5f696d48959b30fed3eed56" - integrity sha512-8Xnnbjsb0x462VoYiGlhEi+drY8SFwrHiSYuzc/CEwco55vkehTaxAyIjEdpi3EMvLPPJAJi9FlzP+h+03gp0Q== + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-cidr/-/is-cidr-3.1.0.tgz#72e233d8e1c4cd1d3f11713fcce3eba7b0e3476f" + integrity sha512-3kxTForpuj8O4iHn0ocsn1jxRm5VYm60GDghK6HXmpn4IyZOoRy9/GmdjFA2yEMqw91TB1/K3bFTuI7FlFNR1g== dependencies: cidr-regex "^2.0.10" @@ -7658,9 +7696,9 @@ is-resolvable@^1.0.0: integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-retry-allowed@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" - integrity sha1-EaBgVotnM5REAz0BJaYaINVk+zQ= + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== is-ssh@^1.3.0: version "1.3.1" @@ -7699,11 +7737,11 @@ is-svg@^3.0.0: html-comment-regex "^1.1.0" is-symbol@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.2.tgz#a055f6ae57192caee329e7a860118b497a950f38" - integrity sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw== + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" + integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== dependencies: - has-symbols "^1.0.0" + has-symbols "^1.0.1" is-text-path@^1.0.0: version "1.0.1" @@ -8539,10 +8577,10 @@ levn@^0.3.0, levn@~0.3.0: prelude-ls "~1.1.2" type-check "~0.3.2" -libcipm@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.0.tgz#30053bee09b0b1f4df855137d631a6d27f5d59de" - integrity sha512-5IIamvUIqWYjfNscYdirKisXyaTMw7Mf7yuGrjHH2isz7xBZDCUOIdujZxNk2g6lBBs8AGxYW6lHpNnnt92bww== +libcipm@^4.0.7: + version "4.0.7" + resolved "https://registry.yarnpkg.com/libcipm/-/libcipm-4.0.7.tgz#76cd675c98bdaae64db88b782b01b804b6d02c8a" + integrity sha512-fTq33otU3PNXxxCTCYCYe7V96o59v/o7bvtspmbORXpgFk+wcWrGf5x6tBgui5gCed/45/wtPomBsZBYm5KbIw== dependencies: bin-links "^1.1.2" bluebird "^3.5.1" @@ -8626,9 +8664,9 @@ libnpmorg@^1.0.1: npm-registry-fetch "^4.0.0" libnpmpublish@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.2.tgz#4201cfc4a69c44e6f454ec548fa1cd90f10df0a0" - integrity sha512-2yIwaXrhTTcF7bkJKIKmaCV9wZOALf/gsTDxVSu/Gu/6wiG3fA8ce8YKstiWKTxSFNC0R7isPUb6tXTVFZHt2g== + version "1.1.3" + resolved "https://registry.yarnpkg.com/libnpmpublish/-/libnpmpublish-1.1.3.tgz#e3782796722d79eef1a0a22944c117e0c4ca4280" + integrity sha512-/3LsYqVc52cHXBmu26+J8Ed7sLs/hgGVFMH1mwYpL7Qaynb9RenpKqIKu0sJ130FB9PMkpMlWjlbtU8A4m7CQw== dependencies: aproba "^2.0.0" figgy-pudding "^3.5.1" @@ -8781,6 +8819,11 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" +lodash._baseindexof@*: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" + integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= + lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -8789,6 +8832,23 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" +lodash._bindcallback@*: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= + +lodash._cacheindexof@*: + version "3.0.2" + resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" + integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= + +lodash._createcache@*: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" + integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= + dependencies: + lodash._getnative "^3.0.0" + lodash._createcompounder@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" @@ -8802,6 +8862,11 @@ lodash._createset@~4.0.0: resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= +lodash._getnative@*, lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= + lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -8921,6 +8986,11 @@ lodash.omit@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= +lodash.restparam@*: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= + lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -9084,15 +9154,15 @@ make-dir@^2.1.0: semver "^5.6.0" make-fetch-happen@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.0.tgz#a8e3fe41d3415dd656fe7b8e8172e1fb4458b38d" - integrity sha512-nFr/vpL1Jc60etMVKeaLOqfGjMMb3tAHFVJWxHOFCFS04Zmd7kGlMxo0l1tzfhoQje0/UPnd0X8OeGUiXXnfPA== + version "5.0.2" + resolved "https://registry.yarnpkg.com/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz#aa8387104f2687edca01c8687ee45013d02d19bd" + integrity sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag== dependencies: agentkeepalive "^3.4.1" cacache "^12.0.0" http-cache-semantics "^3.8.1" http-proxy-agent "^2.1.0" - https-proxy-agent "^2.2.1" + https-proxy-agent "^2.2.3" lru-cache "^5.1.1" mississippi "^3.0.0" node-fetch-npm "^2.0.2" @@ -9387,13 +9457,6 @@ measure-text@^0.0.4: url-loader "~0.5.7" webpack "^2.0.7-beta" -mem@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" - integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= - dependencies: - mimic-fn "^1.0.0" - mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -9523,17 +9586,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.40.0: - version "1.40.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32" - integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA== +mime-db@1.42.0: + version "1.42.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.42.0.tgz#3e252907b4c7adb906597b4b65636272cf9e7bac" + integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ== mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.24" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.24.tgz#b6f8d0b3e951efb77dedeca194cff6d16f676f81" - integrity sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ== + version "2.1.25" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.25.tgz#39772d46621f93e2a80a856c53b86a62156a6437" + integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg== dependencies: - mime-db "1.40.0" + mime-db "1.42.0" mime@1.3.x: version "1.3.6" @@ -9614,20 +9677,20 @@ minimist@~0.0.1: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= -minipass@^2.2.1, minipass@^2.3.5: - version "2.3.5" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" - integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== +minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: + version "2.9.0" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" + integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" minizlib@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.2.1.tgz#dd27ea6136243c7c880684e8672bb3a45fd9b614" - integrity sha512-7+4oTUOWKg7AuL3vloEWekXY2/D20cevzsrNT2kGWm+39J9hGTCBv8VI5Pm5lXZ/o3/mdR4f8rflAPhnQb8mPA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" + integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: - minipass "^2.2.1" + minipass "^2.9.0" mississippi@^3.0.0: version "3.0.0" @@ -9874,10 +9937,10 @@ node-fetch@^2.3.0: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== -node-gyp@^5.0.2, node-gyp@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.3.tgz#80d64c23790244991b6d44532f0a351bedd3dd45" - integrity sha512-z/JdtkFGUm0QaQUusvloyYuGDub3nUbOo5de1Fz57cM++osBTvQatBUSTlF1k/w8vFHPxxXW6zxGvkxXSpaBkQ== +node-gyp@^5.0.2, node-gyp@^5.0.5: + version "5.0.5" + resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-5.0.5.tgz#f6cf1da246eb8c42b097d7cd4d6c3ce23a4163af" + integrity sha512-WABl9s4/mqQdZneZHVWVG4TVr6QQJZUC6PAx47ITSk9lreZ1n+7Z9mMAIbA3vnO4J9W20P7LhCxtzfWsAD/KDw== dependencies: env-paths "^1.0.0" glob "^7.0.3" @@ -9888,7 +9951,7 @@ node-gyp@^5.0.2, node-gyp@^5.0.3: request "^2.87.0" rimraf "2" semver "~5.3.0" - tar "^4.4.8" + tar "^4.4.12" which "1" node-int64@^0.4.0: @@ -10042,26 +10105,28 @@ npm-audit-report@^1.3.2: console-control-strings "^1.1.0" npm-bundled@^1.0.1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.6.tgz#e7ba9aadcef962bb61248f91721cd932b3fe6bdd" - integrity sha512-8/JCaftHwbd//k6y2rEWp6k1wxVfpFzB6t1p825+cUb7Ym2XQfhwIC5KwhrvzZRJu+LtDE585zVaS32+CGtf0g== + version "1.1.1" + resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" + integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== + dependencies: + npm-normalize-package-bin "^1.0.1" npm-cache-filename@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/npm-cache-filename/-/npm-cache-filename-1.0.2.tgz#ded306c5b0bfc870a9e9faf823bc5f283e05ae11" integrity sha1-3tMGxbC/yHCp6fr4I7xfKD4FrhE= -npm-install-checks@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.0.tgz#d4aecdfd51a53e3723b7b2f93b2ee28e307bc0d7" - integrity sha1-1K7N/VGlPjcjt7L5Oy7ijjB7wNc= +npm-install-checks@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-install-checks/-/npm-install-checks-3.0.2.tgz#ab2e32ad27baa46720706908e5b14c1852de44d9" + integrity sha512-E4kzkyZDIWoin6uT5howP8VDvkM+E8IQDcHAycaAxMbwkqhIg5eEYALnXOl3Hq9MrkdQB/2/g1xwBINXdKSRkg== dependencies: semver "^2.3.0 || 3.x || 4 || 5" -npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.2.tgz#06f2253ea3b9e122ce3e55e3496670a810afcc84" - integrity sha512-nhfOcoTHrW1lJJlM2o77vTE2RWR4YOVyj7YzmY0y5itsMjEuoJHteio/ez0BliENEPsNxIUQgwhyEW9dShj3Ww== +npm-lifecycle@^3.0.0, npm-lifecycle@^3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/npm-lifecycle/-/npm-lifecycle-3.1.4.tgz#de6975c7d8df65f5150db110b57cce498b0b604c" + integrity sha512-tgs1PaucZwkxECGKhC/stbEgFyc3TGh2TJcg2CDr6jbvQRdteHNhmMeljRzpe4wgFAXQADoy1cSqqi7mtiAa5A== dependencies: byline "^5.0.0" graceful-fs "^4.1.15" @@ -10077,28 +10142,33 @@ npm-logical-tree@^1.2.1: resolved "https://registry.yarnpkg.com/npm-logical-tree/-/npm-logical-tree-1.2.1.tgz#44610141ca24664cad35d1e607176193fd8f5b88" integrity sha512-AJI/qxDB2PWI4LG1CYN579AY1vCiNyWfkiquCsJWqntRu/WwimVrC8yXeILBFHDwxfOejxewlmnvW9XXjMlYIg== -"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.0.tgz#15ae1e2758a5027efb4c250554b85a737db7fcc1" - integrity sha512-zYbhP2k9DbJhA0Z3HKUePUgdB1x7MfIfKssC+WLPFMKTBZKpZh5m13PgexJjCq6KW7j17r0jHWcCpxEqnnncSA== +npm-normalize-package-bin@^1.0.0, npm-normalize-package-bin@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" + integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== + +"npm-package-arg@^4.0.0 || ^5.0.0 || ^6.0.0", npm-package-arg@^6.0.0, npm-package-arg@^6.1.0, npm-package-arg@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-6.1.1.tgz#02168cb0a49a2b75bf988a28698de7b529df5cb7" + integrity sha512-qBpssaL3IOZWi5vEKUKW0cO7kzLeT+EQO9W8RsLOZf76KF9E/K9+wH0C7t06HXPpaH8WH5xF1MExLuCwbTqRUg== dependencies: - hosted-git-info "^2.6.0" + hosted-git-info "^2.7.1" osenv "^0.1.5" - semver "^5.5.0" + semver "^5.6.0" validate-npm-package-name "^3.0.0" -npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.4.tgz#866224233850ac534b63d1a6e76050092b5d2f44" - integrity sha512-zTLo8UcVYtDU3gdeaFu2Xu0n0EvelfHDGuqtNIn5RO7yQj4H1TqNdBc/yZjxnWA0PVB8D3Woyp0i5B43JwQ6Vw== +npm-packlist@^1.1.12, npm-packlist@^1.1.6, npm-packlist@^1.4.7: + version "1.4.7" + resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" + integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" -npm-pick-manifest@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-2.2.3.tgz#32111d2a9562638bb2c8f2bf27f7f3092c8fae40" - integrity sha512-+IluBC5K201+gRU85vFlUwX3PFShZAbAgDNp2ewJdWMVSppdo/Zih0ul2Ecky/X7b51J7LrrUAP+XOmOCvYZqA== +npm-pick-manifest@^3.0.0, npm-pick-manifest@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz#f4d9e5fd4be2153e5f4e5f9b7be8dc419a99abb7" + integrity sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw== dependencies: figgy-pudding "^3.5.1" npm-package-arg "^6.0.0" @@ -10113,10 +10183,10 @@ npm-profile@^4.0.2: figgy-pudding "^3.4.1" npm-registry-fetch "^4.0.0" -npm-registry-fetch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.0.tgz#5ef75845b605855c7964472542c25da172af8677" - integrity sha512-Jllq35Jag8dtv0M17ue74XtdQTyqKzuAYGiX9mAjOhkmNjib3bBUgK6mUY61+AHnXeSRobQkpY3/xIOS/omptw== +npm-registry-fetch@^4.0.0, npm-registry-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/npm-registry-fetch/-/npm-registry-fetch-4.0.2.tgz#2b1434f93ccbe6b6385f8e45f45db93e16921d7a" + integrity sha512-Z0IFtPEozNdeZRPh3aHHxdG+ZRpzcbQaJLthsm3VhNf6DScicTFRHZzK82u8RsJUsUHkX+QH/zcB/5pmd20H4A== dependencies: JSONStream "^1.3.4" bluebird "^3.5.1" @@ -10124,6 +10194,7 @@ npm-registry-fetch@^4.0.0: lru-cache "^5.1.1" make-fetch-happen "^5.0.0" npm-package-arg "^6.1.0" + safe-buffer "^5.2.0" npm-run-path@^2.0.0: version "2.0.2" @@ -10138,9 +10209,9 @@ npm-user-validate@~1.0.0: integrity sha1-jOyg9c6gTU6TUZ73LQVXp1Ei6VE= npm@^6.8.0: - version "6.10.2" - resolved "https://registry.yarnpkg.com/npm/-/npm-6.10.2.tgz#62cd56f9bc39e26a5eae411a20236bb0c2026d85" - integrity sha512-B6n5dgmsl1fpBYhor2OTEn9Md0r63/FpQocDn4WNT4gIQRQZLql9g+mk8s3j9qZD370kUTzwDaOBSmDdNGK3NA== + version "6.13.4" + resolved "https://registry.yarnpkg.com/npm/-/npm-6.13.4.tgz#1e95b0f311999cf682384c38865dfeb3127203bb" + integrity sha512-vTcUL4SCg3AzwInWTbqg1OIaOXlzKSS8Mb8kc5avwrJpcvevDA5J9BhYSuei+fNs3pwOp4lzA5x2FVDXACvoXA== dependencies: JSONStream "^1.3.5" abbrev "~1.1.1" @@ -10148,18 +10219,19 @@ npm@^6.8.0: ansistyles "~0.1.3" aproba "^2.0.0" archy "~1.0.0" - bin-links "^1.1.2" + bin-links "^1.1.6" bluebird "^3.5.5" byte-size "^5.0.1" - cacache "^12.0.2" + cacache "^12.0.3" call-limit "^1.1.1" - chownr "^1.1.2" + chownr "^1.1.3" ci-info "^2.0.0" cli-columns "^3.1.2" cli-table3 "^0.5.1" - cmd-shim "~2.0.2" + cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" + debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -10168,12 +10240,13 @@ npm@^6.8.0: find-npm-prefix "^1.0.2" fs-vacuum "~1.2.10" fs-write-stream-atomic "~1.0.10" - gentle-fs "^2.0.1" + gentle-fs "^2.3.0" glob "^7.1.4" - graceful-fs "^4.2.0" + graceful-fs "^4.2.3" has-unicode "~2.0.1" - hosted-git-info "^2.7.1" + hosted-git-info "^2.8.5" iferr "^1.0.2" + imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -10182,7 +10255,7 @@ npm@^6.8.0: is-cidr "^3.0.0" json-parse-better-errors "^1.0.2" lazy-property "~1.0.0" - libcipm "^4.0.0" + libcipm "^4.0.7" libnpm "^3.0.1" libnpmaccess "^3.0.2" libnpmhook "^5.0.3" @@ -10192,8 +10265,14 @@ npm@^6.8.0: libnpx "^10.2.0" lock-verify "^2.1.0" lockfile "^1.0.4" + lodash._baseindexof "*" lodash._baseuniq "~4.6.0" + lodash._bindcallback "*" + lodash._cacheindexof "*" + lodash._createcache "*" + lodash._getnative "*" lodash.clonedeep "~4.5.0" + lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0" @@ -10202,33 +10281,33 @@ npm@^6.8.0: mississippi "^3.0.0" mkdirp "~0.5.1" move-concurrently "^1.0.1" - node-gyp "^5.0.3" + node-gyp "^5.0.5" nopt "~4.0.1" normalize-package-data "^2.5.0" npm-audit-report "^1.3.2" npm-cache-filename "~1.0.2" - npm-install-checks "~3.0.0" - npm-lifecycle "^3.1.2" - npm-package-arg "^6.1.0" - npm-packlist "^1.4.4" - npm-pick-manifest "^2.2.3" + npm-install-checks "^3.0.2" + npm-lifecycle "^3.1.4" + npm-package-arg "^6.1.1" + npm-packlist "^1.4.7" + npm-pick-manifest "^3.0.2" npm-profile "^4.0.2" - npm-registry-fetch "^4.0.0" + npm-registry-fetch "^4.0.2" npm-user-validate "~1.0.0" npmlog "~4.1.2" once "~1.4.0" opener "^1.5.1" osenv "^0.1.5" - pacote "^9.5.4" + pacote "^9.5.11" path-is-inside "~1.0.2" promise-inflight "~1.0.1" qrcode-terminal "^0.12.0" - query-string "^6.8.1" + query-string "^6.8.2" qw "~1.0.1" read "~1.0.7" - read-cmd-shim "~1.0.1" + read-cmd-shim "^1.0.5" read-installed "~4.0.3" - read-package-json "^2.0.13" + read-package-json "^2.1.1" read-package-tree "^5.3.1" readable-stream "^3.4.0" readdir-scoped-modules "^1.1.0" @@ -10236,14 +10315,14 @@ npm@^6.8.0: retry "^0.12.0" rimraf "^2.6.3" safe-buffer "^5.1.2" - semver "^5.7.0" + semver "^5.7.1" sha "^3.0.0" 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.10" + stringify-package "^1.0.1" + tar "^4.4.13" text-table "~0.2.0" tiny-relative-date "^1.3.0" uid-number "0.0.6" @@ -10251,7 +10330,7 @@ npm@^6.8.0: unique-filename "^1.1.1" unpipe "~1.0.0" update-notifier "^2.5.0" - uuid "^3.3.2" + uuid "^3.3.3" validate-npm-package-license "^3.0.4" validate-npm-package-name "~3.0.0" which "^1.3.1" @@ -10319,12 +10398,17 @@ object-inspect@^1.6.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.6.0.tgz#c70b6cbf72f274aab4c34c0c82f5167bf82cf15b" integrity sha512-GJzfBZ6DgDAmnuaM3104jR4s1Myxr3Y3zfIyN4z3UdqN69oSRacNK8UhnobDdC+7J2AHCjGwxQubNJfE70SXXQ== +object-inspect@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" + integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== + object-is@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.1.tgz#0aa60ec9989a0b3ed795cf4d06f62cf1ad6539b6" integrity sha1-CqYOyZiaCz7Xlc9NBvYs8a1lObY= -object-keys@^1.0.11, object-keys@^1.0.12: +object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== @@ -10372,12 +10456,12 @@ object.fromentries@^2.0.0: has "^1.0.1" object.getownpropertydescriptors@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz#8758c846f5b407adab0f236e0986f14b051caa16" - integrity sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY= + version "2.1.0" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" + integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.1" + define-properties "^1.1.3" + es-abstract "^1.17.0-next.1" object.omit@^2.0.0: version "2.0.1" @@ -10503,16 +10587,7 @@ os-locale@^1.4.0: dependencies: lcid "^1.0.0" -os-locale@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" - integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== - dependencies: - execa "^0.7.0" - lcid "^1.0.0" - mem "^1.1.0" - -os-locale@^3.0.0: +os-locale@^3.0.0, os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== @@ -10594,7 +10669,14 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0: +p-limit@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.1.tgz#aa07a788cc3151c939b5131f63570f0dd2009537" + integrity sha512-85Tk+90UCVWvbDavCLKPOLC9vvY8OwEX/RtKF+/1OADJMVlFfEHOiMTPVyxg7mk/dKa+ipdHm0OUkTvCpMTuwg== + dependencies: + p-try "^2.0.0" + +p-limit@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.0.tgz#417c9941e6027a9abcba5092dd2904e255b5fbc2" integrity sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ== @@ -10665,16 +10747,18 @@ package-json@^4.0.0: registry-url "^3.0.3" semver "^5.1.0" -pacote@^9.1.0, pacote@^9.5.3, pacote@^9.5.4: - version "9.5.4" - resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.4.tgz#8baa26f3d1326d13dc2fe0fe84040a364ae30aad" - integrity sha512-nWr0ari6E+apbdoN0hToTKZElO5h4y8DGFa2pyNA5GQIdcP0imC96bA0bbPw1gpeguVIiUgHHaAlq/6xfPp8Qw== +pacote@^9.1.0, pacote@^9.5.11, pacote@^9.5.3: + version "9.5.11" + resolved "https://registry.yarnpkg.com/pacote/-/pacote-9.5.11.tgz#524152077cb392c47b1fbe198aa28f778bef7ee1" + integrity sha512-DMDPvFKCjCg6zMS4IfzZyvT57O/bX8XGG00eEoy4K/S4Wj+qiN8KbnmKpsTvfS6OL9r5TAicxMKWbj1yV2Yh4g== dependencies: bluebird "^3.5.3" - cacache "^12.0.0" + cacache "^12.0.2" + chownr "^1.1.2" figgy-pudding "^3.5.1" get-stream "^4.1.0" glob "^7.1.3" + infer-owner "^1.0.4" lru-cache "^5.1.1" make-fetch-happen "^5.0.0" minimatch "^3.0.4" @@ -10682,9 +10766,10 @@ pacote@^9.1.0, pacote@^9.5.3, pacote@^9.5.4: mississippi "^3.0.0" mkdirp "^0.5.1" normalize-package-data "^2.4.0" + npm-normalize-package-bin "^1.0.0" npm-package-arg "^6.1.0" npm-packlist "^1.1.12" - npm-pick-manifest "^2.2.3" + npm-pick-manifest "^3.0.0" npm-registry-fetch "^4.0.0" osenv "^0.1.5" promise-inflight "^1.0.1" @@ -10694,7 +10779,7 @@ pacote@^9.1.0, pacote@^9.5.3, pacote@^9.5.4: safe-buffer "^5.1.2" semver "^5.6.0" ssri "^6.0.1" - tar "^4.4.8" + tar "^4.4.10" unique-filename "^1.1.1" which "^1.3.1" @@ -10718,11 +10803,11 @@ pako@~1.0.5: integrity sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw== parallel-transform@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.1.0.tgz#d410f065b05da23081fcd10f28854c29bda33b06" - integrity sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY= + version "1.2.0" + resolved "https://registry.yarnpkg.com/parallel-transform/-/parallel-transform-1.2.0.tgz#9049ca37d6cb2182c3b1d2c720be94d14a5814fc" + integrity sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg== dependencies: - cyclist "~0.2.2" + cyclist "^1.0.1" inherits "^2.0.3" readable-stream "^2.1.5" @@ -12169,7 +12254,12 @@ pseudomap@^1.0.2: resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= -psl@^1.1.24, psl@^1.1.28: +psl@^1.1.24: + version "1.6.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.6.0.tgz#60557582ee23b6c43719d9890fb4170ecd91e110" + integrity sha512-SYKKmVel98NCOYXpkwUqZqh0ahZeeKfmisiLIcEZdsb+WbLv02g/dI5BUmZnIyOe7RzZtLax81nnb2HbvC2tzA== + +psl@^1.1.28: version "1.2.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.2.0.tgz#df12b5b1b3a30f51c329eacbdef98f3a6e136dc6" integrity sha512-GEn74ZffufCmkDDLNcl3uuyF/aSD6exEyh1v/ZSdAomB82t6G9hzJVRx0jBmLDW+VfZqks3aScmMw9DszwUalA== @@ -12254,10 +12344,10 @@ query-string@^4.1.0, query-string@^4.2.3: object-assign "^4.1.0" strict-uri-encode "^1.0.0" -query-string@^6.8.1: - version "6.8.2" - resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.8.2.tgz#36cb7e452ae11a4b5e9efee83375e0954407b2f6" - integrity sha512-J3Qi8XZJXh93t2FiKyd/7Ec6GNifsjKXUsVFkSBj/kjLsDylWhnCz4NT1bkPcKotttPW+QbKGqqPH8OoI2pdqw== +query-string@^6.8.2: + version "6.9.0" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.9.0.tgz#1c3b727c370cf00f177c99f328fda2108f8fa3dd" + integrity sha512-KG4bhCFYapExLsUHrFt+kQVEegF2agm4cpF/VNc6pZVthIfCc/GK8t8VyNIE3nyXG9DK3Tf2EGkxjR6/uRdYsA== dependencies: decode-uri-component "^0.2.0" split-on-first "^1.0.0" @@ -12582,10 +12672,10 @@ read-cache@^1.0.0: dependencies: pify "^2.3.0" -read-cmd-shim@^1.0.1, read-cmd-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.1.tgz#2d5d157786a37c055d22077c32c53f8329e91c7b" - integrity sha1-LV0Vd4ajfAVdIgd8MsU/gynpHHs= +read-cmd-shim@^1.0.1, read-cmd-shim@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/read-cmd-shim/-/read-cmd-shim-1.0.5.tgz#87e43eba50098ba5a32d0ceb583ab8e43b961c16" + integrity sha512-v5yCqQ/7okKoZZkBQUAfTsQ3sVJtXdNfbPnI5cceppoxEVLYA3k+VtV2omkeo8MS94JCy4fSiUwlRBAwCVRPUA== dependencies: graceful-fs "^4.1.2" @@ -12610,15 +12700,15 @@ read-only-stream@^2.0.0: dependencies: readable-stream "^2.0.2" -"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13: - version "2.0.13" - resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.0.13.tgz#2e82ebd9f613baa6d2ebe3aa72cefe3f68e41f4a" - integrity sha512-/1dZ7TRZvGrYqE0UAfN6qQb5GYBsNcqS1C0tNK601CFOJmtHI7NIGXwetEPU/OtoFHZL3hDxm4rolFFVE9Bnmg== +"read-package-json@1 || 2", read-package-json@^2.0.0, read-package-json@^2.0.13, read-package-json@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/read-package-json/-/read-package-json-2.1.1.tgz#16aa66c59e7d4dad6288f179dd9295fd59bb98f1" + integrity sha512-dAiqGtVc/q5doFz6096CcnXhpYk0ZN8dEKVkGLU0CsASt8SrgF6SF7OTKAYubfvFhWaqofl+Y8HK19GR8jwW+A== dependencies: glob "^7.1.1" json-parse-better-errors "^1.0.1" normalize-package-data "^2.0.0" - slash "^1.0.0" + npm-normalize-package-bin "^1.0.0" optionalDependencies: graceful-fs "^4.1.2" @@ -13326,13 +13416,20 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.0, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.1.7, resolve@^1.10.1, resolve@^1.11.0, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.8.1: version "1.11.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== dependencies: path-parse "^1.0.6" +resolve@^1.10.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.13.1.tgz#be0aa4c06acd53083505abb35f4d66932ab35d16" + integrity sha512-CxqObCX8K8YtAhOBRg+lrcdn+LK+WYOS8tSjqSFbjtrI5PnS63QPhZl4+yKfrU9tdsbMu9Anr/amegT87M9Z6w== + dependencies: + path-parse "^1.0.6" + resp-modifier@^6.0.0: version "6.0.2" resolved "https://registry.yarnpkg.com/resp-modifier/-/resp-modifier-6.0.2.tgz#b124de5c4fbafcba541f48ffa73970f4aa456b4f" @@ -13396,7 +13493,14 @@ right-pad@^1.0.1: resolved "https://registry.yarnpkg.com/right-pad/-/right-pad-1.0.1.tgz#8ca08c2cbb5b55e74dafa96bf7fd1a27d568c8d0" integrity sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA= -rimraf@2, rimraf@2.6.3, rimraf@^2.5.0, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.0, rimraf@^2.5.2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== @@ -13455,7 +13559,7 @@ rxjs@^6.1.0, rxjs@^6.4.0, rxjs@^6.5.2: dependencies: tslib "^1.9.0" -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2: +safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== @@ -13564,10 +13668,10 @@ semver-regex@^2.0.0: resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-2.0.0.tgz#a93c2c5844539a770233379107b38c7b4ac9d338" integrity sha512-mUdIBBvdn0PLOeP3TEkMH7HHeUP3GjsXCwKarjv/kGmUFOYg1VqEemKhoQpWMu6X2I8kHeuVdGibLGkVK+/5Qw== -"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.0.tgz#790a7cf6fea5459bac96110b29b60412dc8ff96b" - integrity sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA== +"semver@2 || 3 || 4 || 5", "semver@2.x || 3.x || 4 || 5", "semver@^2.3.0 || 3.x || 4 || 5", semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" + integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== semver@5.5.0: version "5.5.0" @@ -13771,10 +13875,10 @@ slide@^1.1.6, slide@~1.1.3, slide@~1.1.6: resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= -smart-buffer@4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.0.2.tgz#5207858c3815cc69110703c6b94e46c15634395d" - integrity sha512-JDhEpTKzXusOqXZ0BUIdH+CjFdO/CR3tLlf5CN34IypI+xMmXW1uB16OOY8z3cICbJlDAVJzNbwBhNO0wt9OAw== +smart-buffer@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.1.0.tgz#91605c25d91652f4661ea69ccf45f1b331ca21ba" + integrity sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw== snapdragon-node@^2.0.1: version "2.1.1" @@ -13815,12 +13919,12 @@ socks-proxy-agent@^4.0.0: socks "~2.3.2" socks@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.2.tgz#ade388e9e6d87fdb11649c15746c578922a5883e" - integrity sha512-pCpjxQgOByDHLlNqlnh/mNSAxIUkyBBuwwhTcV+enZGbDaClPvHdvm6uvOwZfFJkam7cGhBNbb4JxiP8UZkRvQ== + version "2.3.3" + resolved "https://registry.yarnpkg.com/socks/-/socks-2.3.3.tgz#01129f0a5d534d2b897712ed8aceab7ee65d78e3" + integrity sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA== dependencies: - ip "^1.1.5" - smart-buffer "4.0.2" + ip "1.1.5" + smart-buffer "^4.1.0" sort-keys@^1.0.0: version "1.1.2" @@ -14097,9 +14201,9 @@ stream-iterate@^1.1.0: stream-shift "^1.0.0" stream-shift@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" - integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= + version "1.0.1" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" + integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== stream-splicer@^2.0.0: version "2.0.1" @@ -14181,18 +14285,41 @@ string.prototype.trim@^1.1.2: es-abstract "^1.13.0" function-bind "^1.1.1" +string.prototype.trimleft@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" + integrity sha512-FJ6b7EgdKxxbDxc79cOlok6Afd++TTs5szo+zJTUyow3ycrRfJVE2pq3vcN53XexvKZu/DJMDfeI/qMiZTrjTw== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + +string.prototype.trimright@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.0.tgz#669d164be9df9b6f7559fa8e89945b168a5a6c58" + integrity sha512-fXZTSV55dNBwv16uw+hh5jkghxSnc5oHq+5K/gXgizHwAvMetdAJlHqqoFC1FSDVPYWLkAKl2cxpUT41sV7nSg== + dependencies: + define-properties "^1.1.3" + function-bind "^1.1.1" + string_decoder@0.10, string_decoder@~0.10.x: version "0.10.31" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= -string_decoder@^1.0.0, string_decoder@^1.1.1: +string_decoder@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" integrity sha512-6YqyX6ZWEYguAxgZzHGL7SsCeGx3V2TtOTqZz1xSTSWnqsbWwbptafNyvf/ACquZUXV3DANr5BDIwNYe1mN42w== dependencies: safe-buffer "~5.1.0" +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -14210,10 +14337,10 @@ stringify-entities@^1.0.1: is-alphanumerical "^1.0.0" is-hexadecimal "^1.0.0" -stringify-package@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.0.tgz#e02828089333d7d45cd8c287c30aa9a13375081b" - integrity sha512-JIQqiWmLiEozOC0b0BtxZ/AOUtdUZHCBPgqIZ2kSJJqGwgb9neo44XdTHUC4HZSGqi03hOeB7W/E8rAlKnGe9g== +stringify-package@^1.0.0, stringify-package@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/stringify-package/-/stringify-package-1.0.1.tgz#e5aa3643e7f74d0f28628b72f3dad5cecfc3ba85" + integrity sha512-sa4DUQsYciMP1xhKWGuFM04fB0LG/9DlluZoSVywUMRNvzid6XucHK0/90xGxRoHrAaROrcHK1aPKaijCtSrhg== strip-ansi@^0.3.0: version "0.3.0" @@ -14406,14 +14533,14 @@ tapable@^0.2.7, tapable@~0.2.5: resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== -tar@^4, tar@^4.4.10, tar@^4.4.8: - version "4.4.10" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.10.tgz#946b2810b9a5e0b26140cf78bea6b0b0d689eba1" - integrity sha512-g2SVs5QIxvo6OLp0GudTqEf05maawKUxXru104iaayWA09551tFCTI8f1Asb4lPfkBr91k07iL4c11XO3/b0tA== +tar@^4, tar@^4.4.10, tar@^4.4.12, tar@^4.4.13: + version "4.4.13" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" + integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== dependencies: chownr "^1.1.1" fs-minipass "^1.2.5" - minipass "^2.3.5" + minipass "^2.8.6" minizlib "^1.2.1" mkdirp "^0.5.0" safe-buffer "^5.1.2" @@ -15281,11 +15408,16 @@ util@~0.10.1: dependencies: inherits "2.0.3" -uuid@3.3.2, uuid@^3.3.2: +uuid@3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.2.tgz#1b4af4955eb3077c501c23872fc6513811587131" integrity sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA== +uuid@^3.3.2, uuid@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.3.3.tgz#4568f0216e78760ee1dbf3a4d2cf53e224112866" + integrity sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ== + v8flags@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/v8flags/-/v8flags-2.1.1.tgz#aab1a1fa30d45f88dd321148875ac02c0b55e5b4" @@ -15837,9 +15969,9 @@ yallist@^2.1.2: integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.3.tgz#b4b049e314be545e3ce802236d6cd22cd91c3de9" - integrity sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A== + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== yamljs@^0.3.0: version "0.3.0" @@ -15880,15 +16012,15 @@ yargs-parser@^9.0.2: camelcase "^4.1.0" yargs@^11.0.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.0.tgz#90b869934ed6e871115ea2ff58b03f4724ed2d77" - integrity sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A== + version "11.1.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.1.1.tgz#5052efe3446a4df5ed669c995886cc0f13702766" + integrity sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw== dependencies: cliui "^4.0.0" decamelize "^1.1.1" find-up "^2.1.0" get-caller-file "^1.0.1" - os-locale "^2.0.0" + os-locale "^3.1.0" require-directory "^2.1.1" require-main-filename "^1.0.1" set-blocking "^2.0.0" From 587a5ec526134cec008726db6b4a037e05736e0e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Dec 2019 04:06:12 +0000 Subject: [PATCH 04/16] build(deps): bump handlebars from 4.1.2 to 4.5.3 Bumps [handlebars](https://github.com/wycats/handlebars.js) from 4.1.2 to 4.5.3. - [Release notes](https://github.com/wycats/handlebars.js/releases) - [Changelog](https://github.com/wycats/handlebars.js/blob/master/release-notes.md) - [Commits](https://github.com/wycats/handlebars.js/compare/v4.1.2...v4.5.3) Signed-off-by: dependabot[bot] --- yarn.lock | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index e30353061..477b83d77 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3918,11 +3918,16 @@ comma-separated-tokens@^1.0.1: resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== -commander@^2.11.0, commander@^2.19.0, commander@~2.20.0: +commander@^2.11.0, commander@^2.19.0: version "2.20.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.0.tgz#d58bb2b5c1ee8f87b0d340027e9e94e222c5a422" integrity sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ== +commander@~2.20.3: + version "2.20.3" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" + integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== + commitizen@^3.0.7: version "3.1.2" resolved "https://registry.yarnpkg.com/commitizen/-/commitizen-3.1.2.tgz#29ddd8b39396923e9058a0e4840cbeef144290be" @@ -6668,9 +6673,9 @@ gud@^1.0.0: integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw== handlebars@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.1.2.tgz#b6b37c1ced0306b221e094fc7aca3ec23b131b67" - integrity sha512-nvfrjqvt9xQ8Z/w0ijewdD/vvWDTOweBUm96NTr66Wfvo1mJenBLwcYmPs3TIBP5ruzYGD7Hx/DaM9RmhroGPw== + version "4.5.3" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.3.tgz#5cf75bd8714f7605713511a56be7c349becb0482" + integrity sha512-3yPecJoJHK/4c6aZhSvxOyG4vJKDshV36VHp0iVCDVh7o9w2vwi3NSnL2MMPj3YdduqaBcu7cGbggJQM0br9xA== dependencies: neo-async "^2.6.0" optimist "^0.6.1" @@ -14867,11 +14872,11 @@ uglify-js@^2.8.27: uglify-to-browserify "~1.0.0" uglify-js@^3.1.4: - version "3.6.0" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.0.tgz#704681345c53a8b2079fb6cec294b05ead242ff5" - integrity sha512-W+jrUHJr3DXKhrsS7NUVxn3zqMOFn0hL/Ei6v0anCIMoKC93TjcflTagwIHLW7SfMFfiQuktQyFVCFHGUE0+yg== + version "3.7.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.7.3.tgz#f918fce9182f466d5140f24bb0ff35c2d32dcc6a" + integrity sha512-7tINm46/3puUA4hCkKYo4Xdts+JDaVC9ZPRcG8Xw9R4nhO/gZgUM3TENq8IF4Vatk8qCig4MzP/c8G4u2BkVQg== dependencies: - commander "~2.20.0" + commander "~2.20.3" source-map "~0.6.1" uglify-to-browserify@~1.0.0: From 7bb490c1ea53c4009eade5087acf06a0924aebb1 Mon Sep 17 00:00:00 2001 From: GeoPamplona Date: Tue, 21 Jan 2020 09:42:31 +0100 Subject: [PATCH 05/16] Fix css error mobile.css There is a css error in this line. Fix is simple; now show narrative header in mobile version. --- lib/components/mobile/mobile.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/components/mobile/mobile.css b/lib/components/mobile/mobile.css index 8549e7bf9..679e44a63 100644 --- a/lib/components/mobile/mobile.css +++ b/lib/components/mobile/mobile.css @@ -129,7 +129,7 @@ /* Results screen: normal display */ .otp.mobile .mobile-narrative-header { - position: fixed, + position: fixed; height: 40px; left: 0; right: 0; From 12d90349be3c7f68e041f422e1092ea79a32d77d Mon Sep 17 00:00:00 2001 From: Landon Reed Date: Tue, 28 Jan 2020 12:33:08 -0500 Subject: [PATCH 06/16] fix(RouteViewer): fix route sort, color issues fix #122 --- lib/components/viewers/route-viewer.js | 28 +++++++++++++++++++++++++- lib/util/itinerary.js | 10 ++++++++- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index 365229512..33ea8251c 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -18,6 +18,23 @@ function operatorIndexForRoute (operators, route) { else return 0 } +/** + * Determine the appropriate contrast color for text (white or black) based on + * the input hex string (e.g., '#ff00ff') value. + * + * From https://stackoverflow.com/a/11868398/915811 + * + * TODO: Move to @opentripplanner/core-utils once otp-rr uses otp-ui library. + */ +function getContrastYIQ (hexcolor) { + hexcolor = hexcolor.replace('#', '') + const r = parseInt(hexcolor.substr(0, 2), 16) + const g = parseInt(hexcolor.substr(2, 2), 16) + const b = parseInt(hexcolor.substr(4, 2), 16) + const yiq = ((r * 299) + (g * 587) + (b * 114)) / 1000 + return (yiq >= 128) ? '000000' : 'ffffff' +} + class RouteViewer extends Component { static propTypes = { hideBackButton: PropTypes.bool, @@ -110,8 +127,14 @@ class RouteRow extends PureComponent { render () { const {isActive, route, operator} = this.props const {defaultRouteColor, defaultRouteTextColor, longNameSplitter} = operator || {} - const color = `#${defaultRouteTextColor || route.textColor || '000000'}` const backgroundColor = `#${defaultRouteColor || route.color || 'ffffff'}` + // NOTE: text color is not a part of short response route object, so there + // is no way to determine from OTP what the text color should be if the + // background color is, say, black. Instead, determine the appropriate + // contrast color and use that if no text color is available. + const contrastColor = getContrastYIQ(backgroundColor) + const color = `#${defaultRouteTextColor || route.textColor || contrastColor}` + console.log(route, color, backgroundColor, contrastColor) // Default long name is empty string (long name is an optional GTFS value). let longName = '' if (route.longName) { @@ -121,6 +144,9 @@ class RouteRow extends PureComponent { longName = (longNameSplitter && nameParts.length > 1) ? nameParts[1] : route.longName + // If long name and short name are identical, set long name to be an empty + // string. + if (longName === route.shortName) longName = '' } return (
Date: Tue, 28 Jan 2020 13:07:48 -0500 Subject: [PATCH 07/16] refactor: remove log statement --- lib/components/viewers/route-viewer.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index 33ea8251c..2c41f3fac 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -134,7 +134,6 @@ class RouteRow extends PureComponent { // contrast color and use that if no text color is available. const contrastColor = getContrastYIQ(backgroundColor) const color = `#${defaultRouteTextColor || route.textColor || contrastColor}` - console.log(route, color, backgroundColor, contrastColor) // Default long name is empty string (long name is an optional GTFS value). let longName = '' if (route.longName) { From 063439ab446b01af5198012ff3e7ec43cdcc843b Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Tue, 28 Jan 2020 11:56:00 -0800 Subject: [PATCH 08/16] refactor(route-viewer): make route comparator tolerate all kinds of data --- .../util/__snapshots__/itinerary.js.snap | 129 ++++++++++++++++++ __tests__/util/itinerary.js | 80 ++++++++++- lib/util/itinerary.js | 106 +++++++++++--- 3 files changed, 297 insertions(+), 18 deletions(-) create mode 100644 __tests__/util/__snapshots__/itinerary.js.snap diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap new file mode 100644 index 000000000..667fa9b6a --- /dev/null +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -0,0 +1,129 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`util > itinerary routeComparator should prioritize routes with valid integer shortNames 1`] = ` +Array [ + Object { + "longName": "Loop route", + "shortName": "2", + "sortOrder": -999, + }, + Object { + "longName": "A-line", + "shortName": "A", + "sortOrder": -999, + }, +] +`; + +exports[`util > itinerary routeComparator should prioritize routes with valid sortOrder 1`] = ` +Array [ + Object { + "longName": "Around town", + "shortName": "20", + "sortOrder": 2, + }, + Object { + "longName": "Around another town", + "shortName": "3", + "sortOrder": -999, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` +Array [ + Object { + "longName": "Loop route", + "shortName": "2", + "sortOrder": -999, + }, + Object { + "longName": "Around another town", + "shortName": "3", + "sortOrder": -999, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes based off of shortNames 1`] = ` +Array [ + Object { + "longName": "A-line", + "shortName": "A", + "sortOrder": -999, + }, + Object { + "longName": "B-line", + "shortName": "B", + "sortOrder": -999, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes based off of shortNames and longNames 1`] = ` +Array [ + Object { + "longName": "A meandering route", + "sortOrder": -999, + }, + Object { + "longName": "B-line", + "shortName": "B", + "sortOrder": -999, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes based off of sortOrder 1`] = ` +Array [ + Object { + "longName": "Across town", + "shortName": "10", + "sortOrder": 1, + }, + Object { + "longName": "Around town", + "shortName": "20", + "sortOrder": 2, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes on all of the criteria at once 1`] = ` +Array [ + Object { + "longName": "Across town", + "shortName": "10", + "sortOrder": 1, + }, + Object { + "longName": "Around town", + "shortName": "20", + "sortOrder": 2, + }, + Object { + "longName": "Loop route", + "shortName": "2", + "sortOrder": -999, + }, + Object { + "longName": "Around another town", + "shortName": "3", + "sortOrder": -999, + }, + Object { + "longName": "A-line", + "shortName": "A", + "sortOrder": -999, + }, + Object { + "longName": "A meandering route", + "sortOrder": -999, + }, + Object { + "longName": "B-line", + "shortName": "B", + "sortOrder": -999, + }, +] +`; diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 6c1f4852e..20673f563 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -1,7 +1,85 @@ -import {isTransit} from '../../lib/util/itinerary' +import {isTransit, routeComparator} from '../../lib/util/itinerary' describe('util > itinerary', () => { it('isTransit should work', () => { expect(isTransit('CAR')).toBeFalsy() }) + + describe('routeComparator', () => { + const route1 = { + longName: 'Across town', + shortName: '10', + sortOrder: 1 + } + const route2 = { + longName: 'Around town', + shortName: '20', + sortOrder: 2 + } + const route3 = { + longName: 'Around another town', + shortName: '3', + sortOrder: -999 + } + const route4 = { + longName: 'Loop route', + shortName: '2', + sortOrder: -999 + } + const route5 = { + longName: 'A-line', + shortName: 'A', + sortOrder: -999 + } + const route6 = { + longName: 'B-line', + shortName: 'B', + sortOrder: -999 + } + const route7 = { + longName: 'A meandering route', + sortOrder: -999 + } + + function sortRouteArray (...routes) { + routes.sort(routeComparator) + return routes + } + + it('should sort routes based off of sortOrder', () => { + expect(sortRouteArray(route1, route2)).toMatchSnapshot() + }) + + it('should prioritize routes with valid sortOrder', () => { + expect(sortRouteArray(route2, route3)).toMatchSnapshot() + }) + + it('should sort routes based off of integer shortName', () => { + expect(sortRouteArray(route3, route4)).toMatchSnapshot() + }) + + it('should prioritize routes with valid integer shortNames', () => { + expect(sortRouteArray(route4, route5)).toMatchSnapshot() + }) + + it('should sort routes based off of shortNames', () => { + expect(sortRouteArray(route5, route6)).toMatchSnapshot() + }) + + it('should sort routes based off of shortNames and longNames', () => { + expect(sortRouteArray(route6, route7)).toMatchSnapshot() + }) + + it('should sort routes on all of the criteria at once', () => { + expect(sortRouteArray( + route1, + route2, + route3, + route4, + route5, + route6, + route7 + )).toMatchSnapshot() + }) + }) }) diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index 024800df6..20045fcef 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -245,26 +245,98 @@ export function getLegBounds (leg) { return latLngBounds(coords) } +/** + * Checks whether an appropriate comparison of numeric values can be made for + * sorting purposes. If both values are not valid numbers according to the + * isNaN check, then this function returns undefined which indicates that a + * secondary sorting criteria should be used instead. If one value is valid and + * the other is not, then the valid value will be given sorting priority. If + * both values are valid numbers, the difference is obtained as the sort value. + * + * IMPORTANT: both a and b must be numeric values or at least be attempted to + * be converted to numeric values! If one of the arguments is something crazy + * like an empty string, unexpected behavior will occur because JavaScript. + */ +function validNumericValueComparator (a, b) { + if (isNaN(a)) { + // a is not a number + if (isNaN(b)) { + // a and b are not numbers, therefore a secondary sorting criteria should + // be used. Return undefined to indicate this + return undefined + } + // b is a valid number, b gets priority + return 1 + } + // a is a valid number + if (isNaN(b)) { + // b is not a number, therefore a gets priority + return -1 + } + // a and b are valid numbers, return the sort value + return a - b +} + +/** + * OpenTripPlanner sets the routeSortOrder to -999 by default. So, if that value + * is encountered, assume that it actually means that the routeSortOrder is not + * set in the GTFS. + * + * See https://github.com/opentripplanner/OpenTripPlanner/issues/2938 + * Also see https://github.com/opentripplanner/otp-react-redux/issues/122 + */ +function getRouteSortOrderValue (val) { + return val === -999 ? undefined : val +} + +/** + * Compares routes for the purposes of sorting and displaying in a user + * interface. Due to GTFS feeds having varying levels of data quality, a + * multi-criteria sort is needed to account for various differences. The sort + * occurs as follows: + * 1. Attempt to sort based off of routeSortOrder. Routes that do not have a + * valid routeSortOrder will be placed beneath those that do. + * 2. In case of the same routeSortOrder criteria, attempt to sort based off of + * routeShortNames that are parseable as integers. routeShortNames that + * cannot be parsed as integers will be placed beneath those that are valid. + * 3. In case of the same routeShortName criteria, attempt to sort based off of + * the string routeShortName or routeLongName if the routeShortName is + * undefined. + * + * @param {Object} a Route A + * @param {Object} b Route B + * @return {number} A numeric sort comparison value + */ export function routeComparator (a, b) { - let aComp, bComp // If route sort order field is available, default sort to these predefined - // values. NOTE: OTP/OBA defaults sort order values to -999, so instead of - // checking that the sort order is not null, we just check that the values are - // not equal. Technically, there could be cases where route_sort_order values - // are equivalent, but ideally they should be unique. - if (a.sortOrder !== b.sortOrder) { - aComp = a.sortOrder - bComp = b.sortOrder - } else if (!isNaN(parseInt(a.shortName)) && !isNaN(parseInt(b.shortName))) { - // Otherwise, if both short names can be parsed as integers, use these - // numbers for sorting. - aComp = parseInt(a.shortName) - bComp = parseInt(b.shortName) - } else { - // Otherwise, default to short or long name strings. - aComp = a.shortName || a.longName - bComp = b.shortName || b.longName + // values. + const routeSortOrderComparatorValue = validNumericValueComparator( + getRouteSortOrderValue(a.sortOrder), + getRouteSortOrderValue(b.sortOrder) + ) + + // if a valid sort order comparison value was able to be obtained, return that + // value. Otherwise, attempt next sort criteria + if (routeSortOrderComparatorValue !== undefined) { + return routeSortOrderComparatorValue + } + + // Otherwise, if both short names can be parsed as integers, use these + // numbers for sorting. + const intShortNameComparatorValue = validNumericValueComparator( + parseInt(a.shortName), + parseInt(b.shortName) + ) + + // if a valid sort order comparison value was able to be obtained, return that + // value. Otherwise, attempt next sort criteria + if (intShortNameComparatorValue !== undefined) { + return intShortNameComparatorValue } + + // Otherwise, default to short or long name strings. + const aComp = a.shortName || a.longName + const bComp = b.shortName || b.longName if (aComp < bComp) return -1 if (aComp > bComp) return 1 return 0 From 0d49d08c8ed27193dbc65e51c9408394be93122c Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Tue, 28 Jan 2020 22:15:53 -0800 Subject: [PATCH 09/16] refactor(itinerary): improve route comparator functions --- .../util/__snapshots__/itinerary.js.snap | 89 ++++++++--- __tests__/util/itinerary.js | 32 +++- lib/util/itinerary.js | 148 +++++++++++------- 3 files changed, 185 insertions(+), 84 deletions(-) diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index 667fa9b6a..08fe79de6 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -1,5 +1,19 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP +exports[`util > itinerary routeComparator should prioritize routes with shortNames over those with just longNames 1`] = ` +Array [ + Object { + "longName": "B-line", + "shortName": "B", + "sortOrder": -999, + }, + Object { + "longName": "A meandering route", + "sortOrder": -999, + }, +] +`; + exports[`util > itinerary routeComparator should prioritize routes with valid integer shortNames 1`] = ` Array [ Object { @@ -45,25 +59,41 @@ Array [ ] `; -exports[`util > itinerary routeComparator should sort routes based off of shortNames 1`] = ` +exports[`util > itinerary routeComparator should sort routes based off of integer shortName with routes with same sortOrder 1`] = ` Array [ Object { - "longName": "A-line", - "shortName": "A", - "sortOrder": -999, + "longName": "Around town", + "shortName": "20", + "sortOrder": 2, }, Object { - "longName": "B-line", - "shortName": "B", - "sortOrder": -999, + "longName": "Zig-zagging route", + "shortName": "30", + "sortOrder": 2, }, ] `; -exports[`util > itinerary routeComparator should sort routes based off of shortNames and longNames 1`] = ` +exports[`util > itinerary routeComparator should sort routes based off of longNames 1`] = ` Array [ Object { - "longName": "A meandering route", + "longName": "Express route", + "shortName": "30", + "sortOrder": 2, + }, + Object { + "longName": "Variation of express route", + "shortName": "30", + "sortOrder": 2, + }, +] +`; + +exports[`util > itinerary routeComparator should sort routes based off of shortNames 1`] = ` +Array [ + Object { + "longName": "A-line", + "shortName": "A", "sortOrder": -999, }, Object { @@ -76,31 +106,46 @@ Array [ exports[`util > itinerary routeComparator should sort routes based off of sortOrder 1`] = ` Array [ - Object { - "longName": "Across town", - "shortName": "10", - "sortOrder": 1, - }, Object { "longName": "Around town", "shortName": "20", "sortOrder": 2, }, + Object { + "longName": "Across town", + "shortName": "10", + "sortOrder": 10, + }, ] `; exports[`util > itinerary routeComparator should sort routes on all of the criteria at once 1`] = ` Array [ - Object { - "longName": "Across town", - "shortName": "10", - "sortOrder": 1, - }, Object { "longName": "Around town", "shortName": "20", "sortOrder": 2, }, + Object { + "longName": "Express route", + "shortName": "30", + "sortOrder": 2, + }, + Object { + "longName": "Variation of express route", + "shortName": "30", + "sortOrder": 2, + }, + Object { + "longName": "Zig-zagging route", + "shortName": "30", + "sortOrder": 2, + }, + Object { + "longName": "Across town", + "shortName": "10", + "sortOrder": 10, + }, Object { "longName": "Loop route", "shortName": "2", @@ -117,12 +162,12 @@ Array [ "sortOrder": -999, }, Object { - "longName": "A meandering route", + "longName": "B-line", + "shortName": "B", "sortOrder": -999, }, Object { - "longName": "B-line", - "shortName": "B", + "longName": "A meandering route", "sortOrder": -999, }, ] diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 20673f563..9902152a5 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -9,7 +9,7 @@ describe('util > itinerary', () => { const route1 = { longName: 'Across town', shortName: '10', - sortOrder: 1 + sortOrder: 10 } const route2 = { longName: 'Around town', @@ -40,6 +40,21 @@ describe('util > itinerary', () => { longName: 'A meandering route', sortOrder: -999 } + const route8 = { + longName: 'Zig-zagging route', + shortName: '30', + sortOrder: 2 + } + const route9 = { + longName: 'Express route', + shortName: '30', + sortOrder: 2 + } + const route10 = { + longName: 'Variation of express route', + shortName: '30', + sortOrder: 2 + } function sortRouteArray (...routes) { routes.sort(routeComparator) @@ -54,6 +69,10 @@ describe('util > itinerary', () => { expect(sortRouteArray(route2, route3)).toMatchSnapshot() }) + it('should sort routes based off of integer shortName with routes with same sortOrder', () => { + expect(sortRouteArray(route8, route2)).toMatchSnapshot() + }) + it('should sort routes based off of integer shortName', () => { expect(sortRouteArray(route3, route4)).toMatchSnapshot() }) @@ -66,10 +85,14 @@ describe('util > itinerary', () => { expect(sortRouteArray(route5, route6)).toMatchSnapshot() }) - it('should sort routes based off of shortNames and longNames', () => { + it('should prioritize routes with shortNames over those with just longNames', () => { expect(sortRouteArray(route6, route7)).toMatchSnapshot() }) + it('should sort routes based off of longNames', () => { + expect(sortRouteArray(route9, route10)).toMatchSnapshot() + }) + it('should sort routes on all of the criteria at once', () => { expect(sortRouteArray( route1, @@ -78,7 +101,10 @@ describe('util > itinerary', () => { route4, route5, route6, - route7 + route7, + route8, + route9, + route10 )).toMatchSnapshot() }) }) diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index 20045fcef..7dd2dc86f 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -253,28 +253,63 @@ export function getLegBounds (leg) { * the other is not, then the valid value will be given sorting priority. If * both values are valid numbers, the difference is obtained as the sort value. * - * IMPORTANT: both a and b must be numeric values or at least be attempted to - * be converted to numeric values! If one of the arguments is something crazy - * like an empty string, unexpected behavior will occur because JavaScript. + * An optional argument can be provided which will be used to obtain the + * comparison value from the comparison function arguments. + * + * IMPORTANT: the comparison values must be numeric values or at least be + * attempted to be converted to numeric values! If one of the arguments is + * something crazy like an empty string, unexpected behavior will occur because + * JavaScript. + * + * @param {function} [objGetterFn] A function to obtain the comparison value + * from the comparator function arguments */ -function validNumericValueComparator (a, b) { - if (isNaN(a)) { - // a is not a number - if (isNaN(b)) { - // a and b are not numbers, therefore a secondary sorting criteria should - // be used. Return undefined to indicate this - return undefined +function makeNumericValueComparator (objGetterFn) { + return (a, b) => { + let aVal + let bVal + if (typeof objGetterFn === 'function') { + aVal = objGetterFn(a) + bVal = objGetterFn(b) + } else { + aVal = a + bVal = b } + // if both values aren't valid numbers, use the next sort criteria + if (isNaN(aVal) && isNaN(bVal)) return 0 // b is a valid number, b gets priority - return 1 + if (isNaN(aVal)) return 1 + // a is a valid number, a gets priority + if (isNaN(bVal)) return -1 + // a and b are valid numbers, return the sort value + return aVal - bVal } - // a is a valid number - if (isNaN(b)) { - // b is not a number, therefore a gets priority - return -1 +} + +/** + * Create a comparator function that compares string values. The comparison + * values feed to the sort comparator function are assumed to be objects that + * will have either undefined, null or string values at the given key. If one + * object has undefined, null or an empty string, but the other does have a + * string with length > 0, then that string will get priority. + * + * @param {string} key The key from which to obtain the sort comparison value + */ +function makeObjectStringValueComparator (key) { + return (a, b) => { + const aVal = a[key] + const bVal = b[key] + // both a and b are uncomparable strings, return equivalent value + if (!aVal && !bVal) return 0 + // a is not a comparable string, b gets priority + if (!aVal) return 1 + // b is not a comparable string, a gets priority + if (!bVal) return -1 + // a and b are comparable strings, return the sort value + if (aVal < bVal) return -1 + if (aVal > bVal) return 1 + return 0 } - // a and b are valid numbers, return the sort value - return a - b } /** @@ -289,58 +324,53 @@ function getRouteSortOrderValue (val) { return val === -999 ? undefined : val } +/** + * Create a multi-criteria sort comparator function composed of other sort + * comparator functions. Each comparator function will be ran in the order given + * until a non-zero comparison value is obtained which is then immediately + * returned. If all comparison functions return equivalance, then the values + * are assumed to be equivalent. + */ +function makeMultiCriteriaSort (...criteria) { + return (a, b) => { + for (let i = 0; i < criteria.length; i++) { + const curCriteriaComparatorValue = criteria[i](a, b) + // if the comparison objects are not equivalent, return the value obtained + // in this current criteria comparison + if (curCriteriaComparatorValue !== 0) { + return curCriteriaComparatorValue + } + } + return 0 + } +} + /** * Compares routes for the purposes of sorting and displaying in a user * interface. Due to GTFS feeds having varying levels of data quality, a * multi-criteria sort is needed to account for various differences. The sort * occurs as follows: - * 1. Attempt to sort based off of routeSortOrder. Routes that do not have a - * valid routeSortOrder will be placed beneath those that do. - * 2. In case of the same routeSortOrder criteria, attempt to sort based off of - * routeShortNames that are parseable as integers. routeShortNames that - * cannot be parsed as integers will be placed beneath those that are valid. - * 3. In case of the same routeShortName criteria, attempt to sort based off of - * the string routeShortName or routeLongName if the routeShortName is - * undefined. + * 1. Attempt to sort based off of sortOrder. Routes that do not have a valid + * sortOrder will be placed beneath those that do. + * 2. In case of the same sortOrder criteria, attempt to sort based off of + * shortNames that are parseable as integers. shortNames that cannot be + * parsed as integers will be placed beneath those that are valid. + * 3. In case of the same integer shortName criteria, attempt to sort based + * off of the string shortName. Routes without shortNames will be placed + * beneath those with shortNames. + * 4. In case of the same string shortName, attempt to sort based off of + * the string longName. * * @param {Object} a Route A * @param {Object} b Route B * @return {number} A numeric sort comparison value */ -export function routeComparator (a, b) { - // If route sort order field is available, default sort to these predefined - // values. - const routeSortOrderComparatorValue = validNumericValueComparator( - getRouteSortOrderValue(a.sortOrder), - getRouteSortOrderValue(b.sortOrder) - ) - - // if a valid sort order comparison value was able to be obtained, return that - // value. Otherwise, attempt next sort criteria - if (routeSortOrderComparatorValue !== undefined) { - return routeSortOrderComparatorValue - } - - // Otherwise, if both short names can be parsed as integers, use these - // numbers for sorting. - const intShortNameComparatorValue = validNumericValueComparator( - parseInt(a.shortName), - parseInt(b.shortName) - ) - - // if a valid sort order comparison value was able to be obtained, return that - // value. Otherwise, attempt next sort criteria - if (intShortNameComparatorValue !== undefined) { - return intShortNameComparatorValue - } - - // Otherwise, default to short or long name strings. - const aComp = a.shortName || a.longName - const bComp = b.shortName || b.longName - if (aComp < bComp) return -1 - if (aComp > bComp) return 1 - return 0 -} +export const routeComparator = makeMultiCriteriaSort( + makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)), + makeNumericValueComparator(obj => parseInt(obj.shortName)), + makeObjectStringValueComparator('shortName'), + makeObjectStringValueComparator('longName') +) /* Returns an interpolated lat-lon at a specified distance along a leg */ From 9186539c1b606340f28b2bd89b0babf5cd94ea64 Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Wed, 29 Jan 2020 18:04:13 -0800 Subject: [PATCH 10/16] refactor: address PR comments rename some functions, use consistent arguments and allow disabling integer route short name sorting --- .../util/__snapshots__/itinerary.js.snap | 15 ++++ __tests__/util/itinerary.js | 35 +++++--- lib/components/viewers/route-viewer.js | 6 +- lib/components/viewers/stop-viewer.js | 4 +- lib/util/itinerary.js | 89 +++++++++++-------- 5 files changed, 97 insertions(+), 52 deletions(-) diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index 08fe79de6..aa31fca23 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -44,6 +44,21 @@ Array [ ] `; +exports[`util > itinerary routeComparator should skip integer short name criteria when specified 1`] = ` +Array [ + Object { + "longName": "Variation of express route", + "shortName": "30", + "sortOrder": 2, + }, + Object { + "longName": "Local route", + "shortName": "6", + "sortOrder": 2, + }, +] +`; + exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` Array [ Object { diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 9902152a5..1bd405f5c 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -1,4 +1,4 @@ -import {isTransit, routeComparator} from '../../lib/util/itinerary' +import {isTransit, makeRouteComparator} from '../../lib/util/itinerary' describe('util > itinerary', () => { it('isTransit should work', () => { @@ -55,46 +55,51 @@ describe('util > itinerary', () => { shortName: '30', sortOrder: 2 } + const route11 = { + longName: 'Local route', + shortName: '6', + sortOrder: 2 + } - function sortRouteArray (...routes) { - routes.sort(routeComparator) + function sortRoutes (...routes) { + routes.sort(makeRouteComparator()) return routes } it('should sort routes based off of sortOrder', () => { - expect(sortRouteArray(route1, route2)).toMatchSnapshot() + expect(sortRoutes(route1, route2)).toMatchSnapshot() }) it('should prioritize routes with valid sortOrder', () => { - expect(sortRouteArray(route2, route3)).toMatchSnapshot() + expect(sortRoutes(route2, route3)).toMatchSnapshot() }) it('should sort routes based off of integer shortName with routes with same sortOrder', () => { - expect(sortRouteArray(route8, route2)).toMatchSnapshot() + expect(sortRoutes(route8, route2)).toMatchSnapshot() }) it('should sort routes based off of integer shortName', () => { - expect(sortRouteArray(route3, route4)).toMatchSnapshot() + expect(sortRoutes(route3, route4)).toMatchSnapshot() }) it('should prioritize routes with valid integer shortNames', () => { - expect(sortRouteArray(route4, route5)).toMatchSnapshot() + expect(sortRoutes(route4, route5)).toMatchSnapshot() }) it('should sort routes based off of shortNames', () => { - expect(sortRouteArray(route5, route6)).toMatchSnapshot() + expect(sortRoutes(route5, route6)).toMatchSnapshot() }) it('should prioritize routes with shortNames over those with just longNames', () => { - expect(sortRouteArray(route6, route7)).toMatchSnapshot() + expect(sortRoutes(route6, route7)).toMatchSnapshot() }) it('should sort routes based off of longNames', () => { - expect(sortRouteArray(route9, route10)).toMatchSnapshot() + expect(sortRoutes(route9, route10)).toMatchSnapshot() }) it('should sort routes on all of the criteria at once', () => { - expect(sortRouteArray( + expect(sortRoutes( route1, route2, route3, @@ -107,5 +112,11 @@ describe('util > itinerary', () => { route10 )).toMatchSnapshot() }) + + it('should skip integer short name criteria when specified', () => { + const routes = [route10, route11] + routes.sort(makeRouteComparator(false)) + expect(routes).toMatchSnapshot() + }) }) }) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index 2c41f3fac..9c33875d3 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -8,7 +8,7 @@ import Icon from '../narrative/icon' import { setMainPanelContent, setViewedRoute } from '../../actions/ui' import { findRoutes, findRoute } from '../../actions/api' -import { routeComparator } from '../../util/itinerary' +import { makeRouteComparator } from '../../util/itinerary' function operatorIndexForRoute (operators, route) { if (!route.agency) return 0 @@ -57,7 +57,9 @@ class RouteViewer extends Component { setViewedRoute, viewedRoute } = this.props - const sortedRoutes = routes ? Object.values(routes).sort(routeComparator) : [] + const sortedRoutes = routes + ? Object.values(routes).sort(makeRouteComparator()) + : [] const agencySortedRoutes = operators.length > 0 ? sortedRoutes.sort((a, b) => { return operatorIndexForRoute(operators, a) - operatorIndexForRoute(operators, b) diff --git a/lib/components/viewers/stop-viewer.js b/lib/components/viewers/stop-viewer.js index a1726dd1b..ddd0b9e64 100644 --- a/lib/components/viewers/stop-viewer.js +++ b/lib/components/viewers/stop-viewer.js @@ -12,10 +12,12 @@ import LocationIcon from '../icons/location-icon' import { setMainPanelContent, toggleAutoRefresh } from '../../actions/ui' import { findStop, findStopTimesForStop } from '../../actions/api' import { forgetStop, rememberStop, setLocation } from '../../actions/map' -import { routeComparator } from '../../util/itinerary' +import { makeRouteComparator } from '../../util/itinerary' import { getShowUserSettings, getStopViewerConfig } from '../../util/state' import { formatDuration, formatSecondsAfterMidnight, getTimeFormat, getUserTimezone } from '../../util/time' +const routeComparator = makeRouteComparator() + class StopViewer extends Component { state = {} diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index 7dd2dc86f..aac2a7659 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -245,6 +245,23 @@ export function getLegBounds (leg) { return latLngBounds(coords) } +/** + * Gets the desired sort values according to an optional getter function. If the + * getter function is not defined, the original sort values are returned. + */ +function getSortValues (getterFn, a, b) { + let aVal + let bVal + if (typeof getterFn === 'function') { + aVal = getterFn(a) + bVal = getterFn(b) + } else { + aVal = a + bVal = b + } + return { aVal, bVal } +} + /** * Checks whether an appropriate comparison of numeric values can be made for * sorting purposes. If both values are not valid numbers according to the @@ -261,20 +278,12 @@ export function getLegBounds (leg) { * something crazy like an empty string, unexpected behavior will occur because * JavaScript. * - * @param {function} [objGetterFn] A function to obtain the comparison value - * from the comparator function arguments + * @param {function} [objGetterFn] An optional function to obtain the + * comparison value from the comparator function arguments */ function makeNumericValueComparator (objGetterFn) { return (a, b) => { - let aVal - let bVal - if (typeof objGetterFn === 'function') { - aVal = objGetterFn(a) - bVal = objGetterFn(b) - } else { - aVal = a - bVal = b - } + const { aVal, bVal } = getSortValues(objGetterFn, a, b) // if both values aren't valid numbers, use the next sort criteria if (isNaN(aVal) && isNaN(bVal)) return 0 // b is a valid number, b gets priority @@ -293,12 +302,12 @@ function makeNumericValueComparator (objGetterFn) { * object has undefined, null or an empty string, but the other does have a * string with length > 0, then that string will get priority. * - * @param {string} key The key from which to obtain the sort comparison value + * @param {function} [objGetterFn] An optional function to obtain the + * comparison value from the comparator function arguments */ -function makeObjectStringValueComparator (key) { +function makeStringValueComparator (objGetterFn) { return (a, b) => { - const aVal = a[key] - const bVal = b[key] + const { aVal, bVal } = getSortValues(objGetterFn, a, b) // both a and b are uncomparable strings, return equivalent value if (!aVal && !bVal) return 0 // a is not a comparable string, b gets priority @@ -347,30 +356,36 @@ function makeMultiCriteriaSort (...criteria) { /** * Compares routes for the purposes of sorting and displaying in a user - * interface. Due to GTFS feeds having varying levels of data quality, a - * multi-criteria sort is needed to account for various differences. The sort - * occurs as follows: - * 1. Attempt to sort based off of sortOrder. Routes that do not have a valid - * sortOrder will be placed beneath those that do. - * 2. In case of the same sortOrder criteria, attempt to sort based off of - * shortNames that are parseable as integers. shortNames that cannot be - * parsed as integers will be placed beneath those that are valid. - * 3. In case of the same integer shortName criteria, attempt to sort based - * off of the string shortName. Routes without shortNames will be placed - * beneath those with shortNames. - * 4. In case of the same string shortName, attempt to sort based off of - * the string longName. + * interface. Due to GTFS feeds having varying levels of data quality, a multi- + * criteria sort is needed to account for various differences. The criteria + * included here are each applied to the routes in the order listed. If a given + * sort criterion yields equivalence (e.g., two routes have the short name + * "20"), the comparator falls back onto the next sort criterion (e.g., long + * name). If desired, the criteria of sorting based off of integer shortName can + * be disabled. The sort operates on the following values (in order): + * + * 1. sortOrder. Routes that do not have a valid sortOrder will be placed + * beneath those that do. + * 2. shortName as integer. shortNames that cannot be parsed as integers will + * be placed beneath those that are valid. + * 3. shortName as string. Routes without shortNames will be placed beneath + * those with shortNames. + * 4. longName as string. * - * @param {Object} a Route A - * @param {Object} b Route B - * @return {number} A numeric sort comparison value + * @param {Boolean} [sortOnIntegerShortName=true] Set to false to omit integer + * shortName criteria sort */ -export const routeComparator = makeMultiCriteriaSort( - makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)), - makeNumericValueComparator(obj => parseInt(obj.shortName)), - makeObjectStringValueComparator('shortName'), - makeObjectStringValueComparator('longName') -) +export function makeRouteComparator (sortOnIntegerShortName = true) { + const criteria = [ + makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)) + ] + if (sortOnIntegerShortName) { + criteria.push(makeNumericValueComparator(obj => parseInt(obj.shortName))) + } + criteria.push(makeStringValueComparator(obj => obj.shortName)) + criteria.push(makeStringValueComparator(obj => obj.longName)) + return makeMultiCriteriaSort(...criteria) +} /* Returns an interpolated lat-lon at a specified distance along a leg */ From 8fa6088c722f0f23b13e3697562077b7fdf265e1 Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Fri, 31 Jan 2020 19:14:12 -0800 Subject: [PATCH 11/16] Add route sort comparator for route type --- __tests__/util/__mocks__/itinerary.json | 79 ++++++++++++++++ .../util/__snapshots__/itinerary.js.snap | 63 +++++++++++++ __tests__/util/itinerary.js | 92 +++++++------------ lib/util/itinerary.js | 52 ++++++++++- 4 files changed, 221 insertions(+), 65 deletions(-) create mode 100644 __tests__/util/__mocks__/itinerary.json diff --git a/__tests__/util/__mocks__/itinerary.json b/__tests__/util/__mocks__/itinerary.json new file mode 100644 index 000000000..a24b224f7 --- /dev/null +++ b/__tests__/util/__mocks__/itinerary.json @@ -0,0 +1,79 @@ +{ + "route1": { + "longName": "Across town", + "mode": "BUS", + "shortName": "10", + "sortOrder": 10 + }, + "route2": { + "longName": "Around town", + "mode": "BUS", + "shortName": "20", + "sortOrder": 2 + }, + "route3": { + "longName": "Around another town", + "mode": "BUS", + "shortName": "3", + "sortOrder": -999 + }, + "route4": { + "longName": "Loop route", + "mode": "BUS", + "shortName": "2", + "sortOrder": -999 + }, + "route5": { + "longName": "A-line", + "mode": "BUS", + "shortName": "A", + "sortOrder": -999 + }, + "route6": { + "longName": "B-line", + "mode": "BUS", + "shortName": "B", + "sortOrder": -999 + }, + "route7": { + "longName": "A meandering route", + "mode": "BUS", + "sortOrder": -999 + }, + "route8": { + "longName": "Zig-zagging route", + "mode": "BUS", + "shortName": "30", + "sortOrder": 2 + }, + "route9": { + "longName": "Express route", + "mode": "BUS", + "shortName": "30", + "sortOrder": 2 + }, + "route10": { + "longName": "Variation of express route", + "mode": "BUS", + "shortName": "30", + "sortOrder": 2 + }, + "route11": { + "longName": "Local route", + "mode": "BUS", + "shortName": "6", + "sortOrder": 2 + }, + "route12": { + "longName": "Intercity Train", + "mode": "RAIL", + "shortName": "IC", + "sortOrder": 2 + }, + "route13": { + "longName": "Yellow line Subway", + "mode": "SUBWAY", + "shortName": "Yellow", + "sortOrder": 2 + } +} diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index aa31fca23..53876de7e 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -4,11 +4,13 @@ exports[`util > itinerary routeComparator should prioritize routes with shortNam Array [ Object { "longName": "B-line", + "mode": "BUS", "shortName": "B", "sortOrder": -999, }, Object { "longName": "A meandering route", + "mode": "BUS", "sortOrder": -999, }, ] @@ -18,11 +20,13 @@ exports[`util > itinerary routeComparator should prioritize routes with valid in Array [ Object { "longName": "Loop route", + "mode": "BUS", "shortName": "2", "sortOrder": -999, }, Object { "longName": "A-line", + "mode": "BUS", "shortName": "A", "sortOrder": -999, }, @@ -33,11 +37,13 @@ exports[`util > itinerary routeComparator should prioritize routes with valid so Array [ Object { "longName": "Around town", + "mode": "BUS", "shortName": "20", "sortOrder": 2, }, Object { "longName": "Around another town", + "mode": "BUS", "shortName": "3", "sortOrder": -999, }, @@ -48,26 +54,47 @@ exports[`util > itinerary routeComparator should skip integer short name criteri Array [ Object { "longName": "Variation of express route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, Object { "longName": "Local route", + "mode": "BUS", "shortName": "6", "sortOrder": 2, }, ] `; +exports[`util > itinerary routeComparator should sort based off of route type 1`] = ` +Array [ + Object { + "longName": "Yellow line Subway", + "mode": "SUBWAY", + "shortName": "Yellow", + "sortOrder": 2, + }, + Object { + "longName": "Intercity Train", + "mode": "RAIL", + "shortName": "IC", + "sortOrder": 2, + }, +] +`; + exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` Array [ Object { "longName": "Loop route", + "mode": "BUS", "shortName": "2", "sortOrder": -999, }, Object { "longName": "Around another town", + "mode": "BUS", "shortName": "3", "sortOrder": -999, }, @@ -78,11 +105,13 @@ exports[`util > itinerary routeComparator should sort routes based off of intege Array [ Object { "longName": "Around town", + "mode": "BUS", "shortName": "20", "sortOrder": 2, }, Object { "longName": "Zig-zagging route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, @@ -93,11 +122,13 @@ exports[`util > itinerary routeComparator should sort routes based off of longNa Array [ Object { "longName": "Express route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, Object { "longName": "Variation of express route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, @@ -108,11 +139,13 @@ exports[`util > itinerary routeComparator should sort routes based off of shortN Array [ Object { "longName": "A-line", + "mode": "BUS", "shortName": "A", "sortOrder": -999, }, Object { "longName": "B-line", + "mode": "BUS", "shortName": "B", "sortOrder": -999, }, @@ -123,11 +156,13 @@ exports[`util > itinerary routeComparator should sort routes based off of sortOr Array [ Object { "longName": "Around town", + "mode": "BUS", "shortName": "20", "sortOrder": 2, }, Object { "longName": "Across town", + "mode": "BUS", "shortName": "10", "sortOrder": 10, }, @@ -136,53 +171,81 @@ Array [ exports[`util > itinerary routeComparator should sort routes on all of the criteria at once 1`] = ` Array [ + Object { + "longName": "Yellow line Subway", + "mode": "SUBWAY", + "shortName": "Yellow", + "sortOrder": 2, + }, + Object { + "longName": "Intercity Train", + "mode": "RAIL", + "shortName": "IC", + "sortOrder": 2, + }, + Object { + "longName": "Local route", + "mode": "BUS", + "shortName": "6", + "sortOrder": 2, + }, Object { "longName": "Around town", + "mode": "BUS", "shortName": "20", "sortOrder": 2, }, Object { "longName": "Express route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, Object { "longName": "Variation of express route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, Object { "longName": "Zig-zagging route", + "mode": "BUS", "shortName": "30", "sortOrder": 2, }, Object { "longName": "Across town", + "mode": "BUS", "shortName": "10", "sortOrder": 10, }, Object { "longName": "Loop route", + "mode": "BUS", "shortName": "2", "sortOrder": -999, }, Object { "longName": "Around another town", + "mode": "BUS", "shortName": "3", "sortOrder": -999, }, Object { "longName": "A-line", + "mode": "BUS", "shortName": "A", "sortOrder": -999, }, Object { "longName": "B-line", + "mode": "BUS", "shortName": "B", "sortOrder": -999, }, Object { "longName": "A meandering route", + "mode": "BUS", "sortOrder": -999, }, ] diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 1bd405f5c..a67ed89d8 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -1,71 +1,32 @@ import {isTransit, makeRouteComparator} from '../../lib/util/itinerary' +const { + route1, + route2, + route3, + route4, + route5, + route6, + route7, + route8, + route9, + route10, + route11, + route12, + route13 +} = require('./__mocks__/itinerary.json') + +function sortRoutes (...routes) { + routes.sort(makeRouteComparator()) + return routes +} + describe('util > itinerary', () => { it('isTransit should work', () => { expect(isTransit('CAR')).toBeFalsy() }) describe('routeComparator', () => { - const route1 = { - longName: 'Across town', - shortName: '10', - sortOrder: 10 - } - const route2 = { - longName: 'Around town', - shortName: '20', - sortOrder: 2 - } - const route3 = { - longName: 'Around another town', - shortName: '3', - sortOrder: -999 - } - const route4 = { - longName: 'Loop route', - shortName: '2', - sortOrder: -999 - } - const route5 = { - longName: 'A-line', - shortName: 'A', - sortOrder: -999 - } - const route6 = { - longName: 'B-line', - shortName: 'B', - sortOrder: -999 - } - const route7 = { - longName: 'A meandering route', - sortOrder: -999 - } - const route8 = { - longName: 'Zig-zagging route', - shortName: '30', - sortOrder: 2 - } - const route9 = { - longName: 'Express route', - shortName: '30', - sortOrder: 2 - } - const route10 = { - longName: 'Variation of express route', - shortName: '30', - sortOrder: 2 - } - const route11 = { - longName: 'Local route', - shortName: '6', - sortOrder: 2 - } - - function sortRoutes (...routes) { - routes.sort(makeRouteComparator()) - return routes - } - it('should sort routes based off of sortOrder', () => { expect(sortRoutes(route1, route2)).toMatchSnapshot() }) @@ -109,7 +70,10 @@ describe('util > itinerary', () => { route7, route8, route9, - route10 + route10, + route11, + route12, + route13 )).toMatchSnapshot() }) @@ -118,5 +82,11 @@ describe('util > itinerary', () => { routes.sort(makeRouteComparator(false)) expect(routes).toMatchSnapshot() }) + + it('should sort based off of route type', () => { + const routes = [route12, route13] + routes.sort(makeRouteComparator(false)) + expect(routes).toMatchSnapshot() + }) }) }) diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index aac2a7659..faa45a45b 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -321,6 +321,40 @@ function makeStringValueComparator (objGetterFn) { } } +/** + * Gets a comparator value for a given route's type (OTP mode). + */ +function getRouteTypeComparatorValue (route) { + switch (route.mode) { + case 'SUBWAY': + return 1 + case 'RAIL': + return 2 + case 'TRAM': + return 3 + case 'CABLE_CAR': + return 4 + case 'FERRY': + return 5 + case 'GONDOLA': + return 6 + case 'FUNICULAR': + return 7 + case 'BUS': + return 8 + default: + return 9999 + } +} + +/** + * Calculates the sort comparator value given two routes based off of route type + * (OTP mode). + */ +function routeTypeComparator (a, b) { + return getRouteTypeComparatorValue(a) - getRouteTypeComparatorValue(b) +} + /** * OpenTripPlanner sets the routeSortOrder to -999 by default. So, if that value * is encountered, assume that it actually means that the routeSortOrder is not @@ -366,18 +400,28 @@ function makeMultiCriteriaSort (...criteria) { * * 1. sortOrder. Routes that do not have a valid sortOrder will be placed * beneath those that do. - * 2. shortName as integer. shortNames that cannot be parsed as integers will + * 2. route type (OTP mode). The priority is as follows: + * - SUBWAY + * - RAIL + * - TRAM + * - CABLE_CAR + * - FERRY + * - GONDOLA + * - FUNICULAR + * - BUS + * 3. shortName as integer. shortNames that cannot be parsed as integers will * be placed beneath those that are valid. - * 3. shortName as string. Routes without shortNames will be placed beneath + * 4. shortName as string. Routes without shortNames will be placed beneath * those with shortNames. - * 4. longName as string. + * 5. longName as string. * * @param {Boolean} [sortOnIntegerShortName=true] Set to false to omit integer * shortName criteria sort */ export function makeRouteComparator (sortOnIntegerShortName = true) { const criteria = [ - makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)) + makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)), + routeTypeComparator ] if (sortOnIntegerShortName) { criteria.push(makeNumericValueComparator(obj => parseInt(obj.shortName))) From 8e481e96d50328767d7261d86482387af3504a1f Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Fri, 31 Jan 2020 19:28:33 -0800 Subject: [PATCH 12/16] refactor: change order of some route types --- lib/util/itinerary.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index faa45a45b..e4dd0c77e 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -328,15 +328,15 @@ function getRouteTypeComparatorValue (route) { switch (route.mode) { case 'SUBWAY': return 1 - case 'RAIL': - return 2 case 'TRAM': + return 2 + case 'RAIL': return 3 - case 'CABLE_CAR': + case 'GONDOLA': return 4 case 'FERRY': return 5 - case 'GONDOLA': + case 'CABLE_CAR': return 6 case 'FUNICULAR': return 7 From 4fdc1d21e3fed6b1baa68183af6eb5ed613a19d7 Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Fri, 31 Jan 2020 20:11:53 -0800 Subject: [PATCH 13/16] refactor: add alphabetic shortName comparator, always use integer shortName criteria --- .../util/__snapshots__/itinerary.js.snap | 69 +++----- __tests__/util/itinerary.js | 16 +- lib/components/viewers/route-viewer.js | 4 +- lib/components/viewers/stop-viewer.js | 4 +- lib/util/itinerary.js | 149 +++++++++++------- 5 files changed, 121 insertions(+), 121 deletions(-) diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index 53876de7e..41bc49626 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -19,15 +19,15 @@ Array [ exports[`util > itinerary routeComparator should prioritize routes with valid integer shortNames 1`] = ` Array [ Object { - "longName": "Loop route", + "longName": "A-line", "mode": "BUS", - "shortName": "2", + "shortName": "A", "sortOrder": -999, }, Object { - "longName": "A-line", + "longName": "Loop route", "mode": "BUS", - "shortName": "A", + "shortName": "2", "sortOrder": -999, }, ] @@ -50,23 +50,6 @@ Array [ ] `; -exports[`util > itinerary routeComparator should skip integer short name criteria when specified 1`] = ` -Array [ - Object { - "longName": "Variation of express route", - "mode": "BUS", - "shortName": "30", - "sortOrder": 2, - }, - Object { - "longName": "Local route", - "mode": "BUS", - "shortName": "6", - "sortOrder": 2, - }, -] -`; - exports[`util > itinerary routeComparator should sort based off of route type 1`] = ` Array [ Object { @@ -84,36 +67,36 @@ Array [ ] `; -exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` +exports[`util > itinerary routeComparator should sort routes based off of alphabetic shortName with routes with same sortOrder 1`] = ` Array [ Object { - "longName": "Loop route", + "longName": "Around town", "mode": "BUS", - "shortName": "2", - "sortOrder": -999, + "shortName": "20", + "sortOrder": 2, }, Object { - "longName": "Around another town", + "longName": "Zig-zagging route", "mode": "BUS", - "shortName": "3", - "sortOrder": -999, + "shortName": "30", + "sortOrder": 2, }, ] `; -exports[`util > itinerary routeComparator should sort routes based off of integer shortName with routes with same sortOrder 1`] = ` +exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` Array [ Object { - "longName": "Around town", + "longName": "Loop route", "mode": "BUS", - "shortName": "20", - "sortOrder": 2, + "shortName": "2", + "sortOrder": -999, }, Object { - "longName": "Zig-zagging route", + "longName": "Around another town", "mode": "BUS", - "shortName": "30", - "sortOrder": 2, + "shortName": "3", + "sortOrder": -999, }, ] `; @@ -220,27 +203,27 @@ Array [ "sortOrder": 10, }, Object { - "longName": "Loop route", + "longName": "A-line", "mode": "BUS", - "shortName": "2", + "shortName": "A", "sortOrder": -999, }, Object { - "longName": "Around another town", + "longName": "B-line", "mode": "BUS", - "shortName": "3", + "shortName": "B", "sortOrder": -999, }, Object { - "longName": "A-line", + "longName": "Loop route", "mode": "BUS", - "shortName": "A", + "shortName": "2", "sortOrder": -999, }, Object { - "longName": "B-line", + "longName": "Around another town", "mode": "BUS", - "shortName": "B", + "shortName": "3", "sortOrder": -999, }, Object { diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index a67ed89d8..8ceae7a37 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -1,4 +1,4 @@ -import {isTransit, makeRouteComparator} from '../../lib/util/itinerary' +import {isTransit, routeComparator} from '../../lib/util/itinerary' const { route1, @@ -17,7 +17,7 @@ const { } = require('./__mocks__/itinerary.json') function sortRoutes (...routes) { - routes.sort(makeRouteComparator()) + routes.sort(routeComparator) return routes } @@ -35,7 +35,7 @@ describe('util > itinerary', () => { expect(sortRoutes(route2, route3)).toMatchSnapshot() }) - it('should sort routes based off of integer shortName with routes with same sortOrder', () => { + it('should sort routes based off of alphabetic shortName with routes with same sortOrder', () => { expect(sortRoutes(route8, route2)).toMatchSnapshot() }) @@ -77,16 +77,8 @@ describe('util > itinerary', () => { )).toMatchSnapshot() }) - it('should skip integer short name criteria when specified', () => { - const routes = [route10, route11] - routes.sort(makeRouteComparator(false)) - expect(routes).toMatchSnapshot() - }) - it('should sort based off of route type', () => { - const routes = [route12, route13] - routes.sort(makeRouteComparator(false)) - expect(routes).toMatchSnapshot() + expect(sortRoutes(route12, route13)).toMatchSnapshot() }) }) }) diff --git a/lib/components/viewers/route-viewer.js b/lib/components/viewers/route-viewer.js index 9c33875d3..8fe775cda 100644 --- a/lib/components/viewers/route-viewer.js +++ b/lib/components/viewers/route-viewer.js @@ -8,7 +8,7 @@ import Icon from '../narrative/icon' import { setMainPanelContent, setViewedRoute } from '../../actions/ui' import { findRoutes, findRoute } from '../../actions/api' -import { makeRouteComparator } from '../../util/itinerary' +import { routeComparator } from '../../util/itinerary' function operatorIndexForRoute (operators, route) { if (!route.agency) return 0 @@ -58,7 +58,7 @@ class RouteViewer extends Component { viewedRoute } = this.props const sortedRoutes = routes - ? Object.values(routes).sort(makeRouteComparator()) + ? Object.values(routes).sort(routeComparator) : [] const agencySortedRoutes = operators.length > 0 ? sortedRoutes.sort((a, b) => { diff --git a/lib/components/viewers/stop-viewer.js b/lib/components/viewers/stop-viewer.js index ddd0b9e64..a1726dd1b 100644 --- a/lib/components/viewers/stop-viewer.js +++ b/lib/components/viewers/stop-viewer.js @@ -12,12 +12,10 @@ import LocationIcon from '../icons/location-icon' import { setMainPanelContent, toggleAutoRefresh } from '../../actions/ui' import { findStop, findStopTimesForStop } from '../../actions/api' import { forgetStop, rememberStop, setLocation } from '../../actions/map' -import { makeRouteComparator } from '../../util/itinerary' +import { routeComparator } from '../../util/itinerary' import { getShowUserSettings, getStopViewerConfig } from '../../util/state' import { formatDuration, formatSecondsAfterMidnight, getTimeFormat, getUserTimezone } from '../../util/time' -const routeComparator = makeRouteComparator() - class StopViewer extends Component { state = {} diff --git a/lib/util/itinerary.js b/lib/util/itinerary.js index e4dd0c77e..ed14e0489 100644 --- a/lib/util/itinerary.js +++ b/lib/util/itinerary.js @@ -262,6 +262,79 @@ function getSortValues (getterFn, a, b) { return { aVal, bVal } } +/** + * Gets a comparator value for a given route's type (OTP mode). + */ +function getRouteTypeComparatorValue (route) { + switch (route.mode) { + case 'SUBWAY': + return 1 + case 'TRAM': + return 2 + case 'RAIL': + return 3 + case 'GONDOLA': + return 4 + case 'FERRY': + return 5 + case 'CABLE_CAR': + return 6 + case 'FUNICULAR': + return 7 + case 'BUS': + return 8 + default: + return 9999 + } +} + +/** + * Calculates the sort comparator value given two routes based off of route type + * (OTP mode). + */ +function routeTypeComparator (a, b) { + return getRouteTypeComparatorValue(a) - getRouteTypeComparatorValue(b) +} + +/** + * Determines whether a value is a string that starts with an alphabetic + * ascii character. + */ +function startsWithAlphabeticCharacter (val) { + if (typeof val === 'string' && val.length > 0) { + const firstCharCode = val.charCodeAt(0) + return (firstCharCode >= 65 && firstCharCode <= 90) || + (firstCharCode >= 97 && firstCharCode <= 122) + } + return false +} + +/** + * Sorts routes based off of whether the shortName begins with an alphabetic + * character. Routes with shortn that do start with an alphabetic character will + * be prioritized over those that don't. + */ +function alphabeticShortNameComparator (a, b) { + const aStartsWithAlphabeticCharacter = startsWithAlphabeticCharacter( + a.shortName + ) + const bStartsWithAlphabeticCharacter = startsWithAlphabeticCharacter( + b.shortName + ) + + if (aStartsWithAlphabeticCharacter && bStartsWithAlphabeticCharacter) { + // both start with an alphabetic character, return equivalence + return 0 + } + // a does start with an alphabetic character, but b does not. Prioritize a + if (aStartsWithAlphabeticCharacter) return -1 + // b does start with an alphabetic character, but a does not. Prioritize b + if (bStartsWithAlphabeticCharacter) return 1 + // neither route has a shortName that starts with an alphabetic character. + // Return equivalence + return 0 +} + /** * Checks whether an appropriate comparison of numeric values can be made for * sorting purposes. If both values are not valid numbers according to the @@ -321,40 +394,6 @@ function makeStringValueComparator (objGetterFn) { } } -/** - * Gets a comparator value for a given route's type (OTP mode). - */ -function getRouteTypeComparatorValue (route) { - switch (route.mode) { - case 'SUBWAY': - return 1 - case 'TRAM': - return 2 - case 'RAIL': - return 3 - case 'GONDOLA': - return 4 - case 'FERRY': - return 5 - case 'CABLE_CAR': - return 6 - case 'FUNICULAR': - return 7 - case 'BUS': - return 8 - default: - return 9999 - } -} - -/** - * Calculates the sort comparator value given two routes based off of route type - * (OTP mode). - */ -function routeTypeComparator (a, b) { - return getRouteTypeComparatorValue(a) - getRouteTypeComparatorValue(b) -} - /** * OpenTripPlanner sets the routeSortOrder to -999 by default. So, if that value * is encountered, assume that it actually means that the routeSortOrder is not @@ -400,36 +439,24 @@ function makeMultiCriteriaSort (...criteria) { * * 1. sortOrder. Routes that do not have a valid sortOrder will be placed * beneath those that do. - * 2. route type (OTP mode). The priority is as follows: - * - SUBWAY - * - RAIL - * - TRAM - * - CABLE_CAR - * - FERRY - * - GONDOLA - * - FUNICULAR - * - BUS - * 3. shortName as integer. shortNames that cannot be parsed as integers will + * 2. route type (OTP mode). See routeTypeComparator code for prioritization of + * route types. + * 3. shortNames that begin with alphabetic characters. shortNames that do not + * start with alphabetic characters will be place beneath those that do. + * 4. shortName as integer. shortNames that cannot be parsed as integers will * be placed beneath those that are valid. - * 4. shortName as string. Routes without shortNames will be placed beneath + * 5. shortName as string. Routes without shortNames will be placed beneath * those with shortNames. - * 5. longName as string. - * - * @param {Boolean} [sortOnIntegerShortName=true] Set to false to omit integer - * shortName criteria sort + * 6. longName as string. */ -export function makeRouteComparator (sortOnIntegerShortName = true) { - const criteria = [ - makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)), - routeTypeComparator - ] - if (sortOnIntegerShortName) { - criteria.push(makeNumericValueComparator(obj => parseInt(obj.shortName))) - } - criteria.push(makeStringValueComparator(obj => obj.shortName)) - criteria.push(makeStringValueComparator(obj => obj.longName)) - return makeMultiCriteriaSort(...criteria) -} +export const routeComparator = makeMultiCriteriaSort( + makeNumericValueComparator(obj => getRouteSortOrderValue(obj.sortOrder)), + routeTypeComparator, + alphabeticShortNameComparator, + makeNumericValueComparator(obj => parseInt(obj.shortName)), + makeStringValueComparator(obj => obj.shortName), + makeStringValueComparator(obj => obj.longName) +) /* Returns an interpolated lat-lon at a specified distance along a leg */ From 3a46a3d79496e5402fd29f62ef9ce22e6de03636 Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Tue, 4 Feb 2020 18:05:01 -0800 Subject: [PATCH 14/16] refactor: rename a test and remove a test that's no longer needed --- .../util/__snapshots__/itinerary.js.snap | 35 +++++-------------- __tests__/util/itinerary.js | 6 +--- 2 files changed, 10 insertions(+), 31 deletions(-) diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index 41bc49626..a74444f61 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -1,33 +1,33 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`util > itinerary routeComparator should prioritize routes with shortNames over those with just longNames 1`] = ` +exports[`util > itinerary routeComparator should prioritize routes with integer shortNames over alphabetic shortNames 1`] = ` Array [ Object { - "longName": "B-line", + "longName": "A-line", "mode": "BUS", - "shortName": "B", + "shortName": "A", "sortOrder": -999, }, Object { - "longName": "A meandering route", + "longName": "Loop route", "mode": "BUS", + "shortName": "2", "sortOrder": -999, }, ] `; -exports[`util > itinerary routeComparator should prioritize routes with valid integer shortNames 1`] = ` +exports[`util > itinerary routeComparator should prioritize routes with shortNames over those with just longNames 1`] = ` Array [ Object { - "longName": "A-line", + "longName": "B-line", "mode": "BUS", - "shortName": "A", + "shortName": "B", "sortOrder": -999, }, Object { - "longName": "Loop route", + "longName": "A meandering route", "mode": "BUS", - "shortName": "2", "sortOrder": -999, }, ] @@ -67,23 +67,6 @@ Array [ ] `; -exports[`util > itinerary routeComparator should sort routes based off of alphabetic shortName with routes with same sortOrder 1`] = ` -Array [ - Object { - "longName": "Around town", - "mode": "BUS", - "shortName": "20", - "sortOrder": 2, - }, - Object { - "longName": "Zig-zagging route", - "mode": "BUS", - "shortName": "30", - "sortOrder": 2, - }, -] -`; - exports[`util > itinerary routeComparator should sort routes based off of integer shortName 1`] = ` Array [ Object { diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 8ceae7a37..936efbec3 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -35,15 +35,11 @@ describe('util > itinerary', () => { expect(sortRoutes(route2, route3)).toMatchSnapshot() }) - it('should sort routes based off of alphabetic shortName with routes with same sortOrder', () => { - expect(sortRoutes(route8, route2)).toMatchSnapshot() - }) - it('should sort routes based off of integer shortName', () => { expect(sortRoutes(route3, route4)).toMatchSnapshot() }) - it('should prioritize routes with valid integer shortNames', () => { + it('should prioritize routes with integer shortNames over alphabetic shortNames', () => { expect(sortRoutes(route4, route5)).toMatchSnapshot() }) From f9f208dd5e3d5b178a11f63710fbd167168050ac Mon Sep 17 00:00:00 2001 From: Evan Siroky Date: Tue, 4 Feb 2020 18:12:36 -0800 Subject: [PATCH 15/16] test: add test case with alphanumeric shortNames --- __tests__/util/__mocks__/itinerary.json | 12 ++++++++ .../util/__snapshots__/itinerary.js.snap | 29 +++++++++++++++++++ __tests__/util/itinerary.js | 12 ++++++-- 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/__tests__/util/__mocks__/itinerary.json b/__tests__/util/__mocks__/itinerary.json index a24b224f7..545c9dd28 100644 --- a/__tests__/util/__mocks__/itinerary.json +++ b/__tests__/util/__mocks__/itinerary.json @@ -75,5 +75,17 @@ "mode": "SUBWAY", "shortName": "Yellow", "sortOrder": 2 + }, + "route14": { + "longName": "Xpress route C", + "mode": "BUS", + "shortName": "30C", + "sortOrder": 2 + }, + "route15": { + "longName": "Express route X", + "mode": "BUS", + "shortName": "30X", + "sortOrder": 2 } } diff --git a/__tests__/util/__snapshots__/itinerary.js.snap b/__tests__/util/__snapshots__/itinerary.js.snap index a74444f61..13af42b1d 100644 --- a/__tests__/util/__snapshots__/itinerary.js.snap +++ b/__tests__/util/__snapshots__/itinerary.js.snap @@ -179,6 +179,18 @@ Array [ "shortName": "30", "sortOrder": 2, }, + Object { + "longName": "Xpress route C", + "mode": "BUS", + "shortName": "30C", + "sortOrder": 2, + }, + Object { + "longName": "Express route X", + "mode": "BUS", + "shortName": "30X", + "sortOrder": 2, + }, Object { "longName": "Across town", "mode": "BUS", @@ -216,3 +228,20 @@ Array [ }, ] `; + +exports[`util > itinerary routeComparator should sort routes with alphanumeric shortNames 1`] = ` +Array [ + Object { + "longName": "Xpress route C", + "mode": "BUS", + "shortName": "30C", + "sortOrder": 2, + }, + Object { + "longName": "Express route X", + "mode": "BUS", + "shortName": "30X", + "sortOrder": 2, + }, +] +`; diff --git a/__tests__/util/itinerary.js b/__tests__/util/itinerary.js index 936efbec3..74e5d5a56 100644 --- a/__tests__/util/itinerary.js +++ b/__tests__/util/itinerary.js @@ -13,7 +13,9 @@ const { route10, route11, route12, - route13 + route13, + route14, + route15 } = require('./__mocks__/itinerary.json') function sortRoutes (...routes) { @@ -47,6 +49,10 @@ describe('util > itinerary', () => { expect(sortRoutes(route5, route6)).toMatchSnapshot() }) + it('should sort routes with alphanumeric shortNames', () => { + expect(sortRoutes(route14, route15)).toMatchSnapshot() + }) + it('should prioritize routes with shortNames over those with just longNames', () => { expect(sortRoutes(route6, route7)).toMatchSnapshot() }) @@ -69,7 +75,9 @@ describe('util > itinerary', () => { route10, route11, route12, - route13 + route13, + route14, + route15 )).toMatchSnapshot() }) From 4a6a64bd998b0c876b9cc081f33fe3634669b457 Mon Sep 17 00:00:00 2001 From: Landon Reed Date: Thu, 13 Feb 2020 14:18:07 -0500 Subject: [PATCH 16/16] fix(geocoder): add fetch options to support custom headers fix #127 --- example-config.yml | 4 ++++ lib/util/geocoder.js | 15 ++++++++----- package.json | 2 +- yarn.lock | 52 +++++--------------------------------------- 4 files changed, 21 insertions(+), 52 deletions(-) diff --git a/example-config.yml b/example-config.yml index 5c762a76f..6588b401f 100644 --- a/example-config.yml +++ b/example-config.yml @@ -53,6 +53,10 @@ geocoder: focusPoint: lat: 45.5223452 lon: -122.6821804 + # Custom fetch options to pass to geocoder resource. + # options: + # headers: + # x-custom-header: abc123 # required geocoder type. type: PELIAS # This base URL is required as the libraries will default to using now-defunct diff --git a/lib/util/geocoder.js b/lib/util/geocoder.js index 8ce68c9dc..c6ac8d6cf 100644 --- a/lib/util/geocoder.js +++ b/lib/util/geocoder.js @@ -62,11 +62,12 @@ class Geocoder { * Default autocomplete query generator */ getAutocompleteQuery (query) { - const {apiKey, baseUrl, boundary, focusPoint} = this.geocoderConfig + const {apiKey, baseUrl, boundary, options, focusPoint} = this.geocoderConfig return { apiKey, boundary, focusPoint, + options, url: baseUrl ? `${baseUrl}/autocomplete` : undefined, ...query } @@ -76,10 +77,11 @@ class Geocoder { * Default reverse query generator */ getReverseQuery (query) { - const {apiKey, baseUrl} = this.geocoderConfig + const {apiKey, baseUrl, options} = this.geocoderConfig return { apiKey, format: true, + options, url: baseUrl ? `${baseUrl}/reverse` : undefined, ...query } @@ -89,11 +91,12 @@ class Geocoder { * Default search query generator. */ getSearchQuery (query) { - const {apiKey, baseUrl, boundary, focusPoint} = this.geocoderConfig + const {apiKey, baseUrl, boundary, focusPoint, options} = this.geocoderConfig return { apiKey, boundary, focusPoint, + options, url: baseUrl ? `${baseUrl}/search` : undefined, format: false, // keep as returned GeoJSON, ...query @@ -245,11 +248,12 @@ export class PeliasGeocoder extends Geocoder { * `sources` parameter is a Pelias-specific option. */ getAutocompleteQuery (query) { - const {apiKey, baseUrl, boundary, focusPoint, sources} = this.geocoderConfig + const {apiKey, baseUrl, boundary, focusPoint, options, sources} = this.geocoderConfig return { apiKey, boundary, focusPoint, + options, // explicitly send over null for sources if provided sources is not truthy // in order to avoid default isomorphic-mapzen-search sources form being // applied @@ -264,7 +268,7 @@ export class PeliasGeocoder extends Geocoder { * `sources` parameter is a Pelias-specific option. */ getSearchQuery (query) { - const {apiKey, baseUrl, boundary, focusPoint, sources} = this.geocoderConfig + const {apiKey, baseUrl, boundary, focusPoint, options, sources} = this.geocoderConfig return { apiKey, boundary, @@ -272,6 +276,7 @@ export class PeliasGeocoder extends Geocoder { // explicitly send over null for sources if provided sources is not truthy // in order to avoid default isomorphic-mapzen-search sources form being // applied + options, sources: sources || null, url: baseUrl ? `${baseUrl}/search` : undefined, format: false, // keep as returned GeoJSON, diff --git a/package.json b/package.json index df3ffef9a..843547a72 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "history": "^4.7.2", "immutability-helper": "^2.1.1", "isomorphic-fetch": "^2.2.1", - "isomorphic-mapzen-search": "^1.4.1", + "isomorphic-mapzen-search": "^1.5.1", "leaflet": "^1.5.1", "leaflet.polylinemeasure": "github:ppete2/Leaflet.PolylineMeasure", "lodash.debounce": "^4.0.8", diff --git a/yarn.lock b/yarn.lock index 9c9bdd2c6..d6a58d096 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4756,7 +4756,7 @@ debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -debuglog@*, debuglog@^1.0.1: +debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" integrity sha1-qiT/uaw9+aI1GDfPstJ5NgzXhJI= @@ -7139,7 +7139,7 @@ import-local@^2.0.0: pkg-dir "^3.0.0" resolve-cwd "^2.0.0" -imurmurhash@*, imurmurhash@^0.1.4: +imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= @@ -7842,10 +7842,10 @@ isomorphic-fetch@^2.1.1, isomorphic-fetch@^2.2.1: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" -isomorphic-mapzen-search@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/isomorphic-mapzen-search/-/isomorphic-mapzen-search-1.4.1.tgz#914b85d16c23ac0d1e8fb0c90c3ff12503b1c577" - integrity sha512-5OMaWf3DOU/e2mzU6Q5yCRP9KxMoEX2+tfeZwTWyi3NTKB8pl2nf/dR1XjJ5DpCPlpLWwv8CoBiigeyP7ShmZw== +isomorphic-mapzen-search@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/isomorphic-mapzen-search/-/isomorphic-mapzen-search-1.5.1.tgz#5ac0214cec436fb550e8ef362cf8d11b17de8e9c" + integrity sha512-38GcjidOqjVQkUzDovx+ceUXHwOliIoFq+qJ/zUzaZwn2h8qEANLMTjaZkFvYN2XdSGB65zBOH5n/iP/Vs1ejA== dependencies: "@conveyal/lonlat" "^1.1.2" isomorphic-fetch "^2.2.1" @@ -8824,11 +8824,6 @@ lockfile@^1.0.4: dependencies: signal-exit "^3.0.2" -lodash._baseindexof@*: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash._baseindexof/-/lodash._baseindexof-3.1.0.tgz#fe52b53a1c6761e42618d654e4a25789ed61822c" - integrity sha1-/lK1OhxnYeQmGNZU5KJXie1hgiw= - lodash._baseuniq@~4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash._baseuniq/-/lodash._baseuniq-4.6.0.tgz#0ebb44e456814af7905c6212fa2c9b2d51b841e8" @@ -8837,23 +8832,6 @@ lodash._baseuniq@~4.6.0: lodash._createset "~4.0.0" lodash._root "~3.0.0" -lodash._bindcallback@*: - version "3.0.1" - resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" - integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= - -lodash._cacheindexof@*: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash._cacheindexof/-/lodash._cacheindexof-3.0.2.tgz#3dc69ac82498d2ee5e3ce56091bafd2adc7bde92" - integrity sha1-PcaayCSY0u5ePOVgkbr9Ktx73pI= - -lodash._createcache@*: - version "3.1.2" - resolved "https://registry.yarnpkg.com/lodash._createcache/-/lodash._createcache-3.1.2.tgz#56d6a064017625e79ebca6b8018e17440bdcf093" - integrity sha1-VtagZAF2JeeevKa4AY4XRAvc8JM= - dependencies: - lodash._getnative "^3.0.0" - lodash._createcompounder@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._createcompounder/-/lodash._createcompounder-3.0.0.tgz#5dd2cb55372d6e70e0e2392fb2304d6631091075" @@ -8867,11 +8845,6 @@ lodash._createset@~4.0.0: resolved "https://registry.yarnpkg.com/lodash._createset/-/lodash._createset-4.0.3.tgz#0f4659fbb09d75194fa9e2b88a6644d363c9fe26" integrity sha1-D0ZZ+7CddRlPqeK4imZE02PJ/iY= -lodash._getnative@*, lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - lodash._reinterpolate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -8991,11 +8964,6 @@ lodash.omit@^4.0.1: resolved "https://registry.yarnpkg.com/lodash.omit/-/lodash.omit-4.5.0.tgz#6eb19ae5a1ee1dd9df0b969e66ce0b7fa30b5e60" integrity sha1-brGa5aHuHdnfC5aeZs4Lf6MLXmA= -lodash.restparam@*: - version "3.6.1" - resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" - integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= - lodash.set@^4.3.2: version "4.3.2" resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" @@ -10236,7 +10204,6 @@ npm@^6.8.0: cmd-shim "^3.0.3" columnify "~1.5.4" config-chain "^1.1.12" - debuglog "*" detect-indent "~5.0.0" detect-newline "^2.1.0" dezalgo "~1.0.3" @@ -10251,7 +10218,6 @@ npm@^6.8.0: has-unicode "~2.0.1" hosted-git-info "^2.8.5" iferr "^1.0.2" - imurmurhash "*" infer-owner "^1.0.4" inflight "~1.0.6" inherits "^2.0.4" @@ -10270,14 +10236,8 @@ npm@^6.8.0: libnpx "^10.2.0" lock-verify "^2.1.0" lockfile "^1.0.4" - lodash._baseindexof "*" lodash._baseuniq "~4.6.0" - lodash._bindcallback "*" - lodash._cacheindexof "*" - lodash._createcache "*" - lodash._getnative "*" lodash.clonedeep "~4.5.0" - lodash.restparam "*" lodash.union "~4.6.0" lodash.uniq "~4.5.0" lodash.without "~4.4.0"