diff --git a/package.json b/package.json index 1e7df9ec7..0eb097969 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "reactmap", - "version": "1.2.12", + "version": "1.2.13", "description": "React based frontend map.", "main": "ReactMap.mjs", "author": "TurtIeSocks <58572875+TurtIeSocks@users.noreply.github.com>", @@ -60,6 +60,7 @@ "@material-ui/styles": "^4.11.4", "@sentry/react": "^6.19.7", "@sentry/tracing": "^6.19.7", + "@turf/boolean-overlap": "^6.5.0", "@turf/boolean-point-in-polygon": "^6.5.0", "@turf/center": "^6.3.0", "@turf/destination": "^6.5.0", @@ -114,4 +115,4 @@ "suncalc": "^1.8.0", "zustand": "^4.0.0-rc.1" } -} \ No newline at end of file +} diff --git a/server/src/models/ScanCell.js b/server/src/models/ScanCell.js index 3e0db0156..ad7c5c05e 100644 --- a/server/src/models/ScanCell.js +++ b/server/src/models/ScanCell.js @@ -37,7 +37,7 @@ module.exports = class ScanCell extends Model { .from(isMad ? 'trs_s2cells' : 's2cell') return results.map((cell) => ({ ...cell, - polygon: getPolyVector(cell.id, 'polygon'), + polygon: getPolyVector(cell.id, 'polygon').poly, })) } } diff --git a/server/src/models/Weather.js b/server/src/models/Weather.js index 25818a3b9..fb7f53217 100644 --- a/server/src/models/Weather.js +++ b/server/src/models/Weather.js @@ -1,5 +1,12 @@ const { Model, ref, raw } = require('objection') +const { polygon, point } = require('@turf/helpers') +const { default: pointInPolygon } = require('@turf/boolean-point-in-polygon') +const { default: booleanOverlap } = require('@turf/boolean-overlap') + const getPolyVector = require('../services/functions/getPolyVector') +const config = require('../services/config') +const areas = require('../services/areas') + const { api: { weatherCellLimit }, } = require('../services/config') @@ -9,7 +16,7 @@ module.exports = class Weather extends Model { return 'weather' } - static async getAll(_perms, _args, { isMad }) { + static async getAll(perms, args, { isMad }) { const query = this.query().select([ '*', ref(isMad ? 's2_cell_id' : 'id') @@ -27,9 +34,41 @@ module.exports = class Weather extends Model { query.where('updated', '>=', ms) } const results = await query - return results.map((cell) => ({ - ...cell, - polygon: getPolyVector(cell.id, true), - })) + + const cleanUserAreas = args.filters.onlyAreas.filter((area) => + areas.names.includes(area), + ) + const merged = perms.areaRestrictions.length + ? perms.areaRestrictions.filter( + (area) => !cleanUserAreas.length || cleanUserAreas.includes(area), + ) + : cleanUserAreas + + return results + .map((cell) => { + const { poly, revPoly } = getPolyVector(cell.id, true) + const geojson = polygon([revPoly]) + const hasOverlap = + !merged.length || + merged.some( + (area) => + pointInPolygon( + point(config.scanAreasObj[area].geometry.coordinates[0][0]), + geojson, + ) || + pointInPolygon( + point([cell.longitude, cell.latitude]), + config.scanAreasObj[area], + ) || + booleanOverlap(geojson, config.scanAreasObj[area]), + ) + return ( + hasOverlap && { + ...cell, + polygon: poly, + } + ) + }) + .filter(Boolean) } } diff --git a/server/src/services/config.js b/server/src/services/config.js index bd39c1fb3..6e898d2e4 100644 --- a/server/src/services/config.js +++ b/server/src/services/config.js @@ -253,6 +253,11 @@ config.scanAreasMenu = Object.fromEntries( return [domain, Object.values(parents)] }), ) +config.scanAreasObj = Object.fromEntries( + Object.values(config.scanAreas) + .flatMap((areas) => areas.features) + .map((feature) => [feature.properties.name, feature]), +) config.api.pvp.leagueObj = Object.fromEntries( config.api.pvp.leagues.map((league) => [league.name, league.cp]), diff --git a/server/src/services/functions/getPlacementCells.js b/server/src/services/functions/getPlacementCells.js index 4030dc29f..8805ebbee 100644 --- a/server/src/services/functions/getPlacementCells.js +++ b/server/src/services/functions/getPlacementCells.js @@ -26,13 +26,13 @@ module.exports = function getPlacementCells(bounds, pokestops, gyms) { const coveringCells = regionCoverer.getCoveringCells(region) for (let i = 0; i < coveringCells.length; i += 1) { const cell = coveringCells[i] - const polygon = getPolyVector(cell.id) + const { poly } = getPolyVector(cell.id) const cellId = BigInt(cell.id).toString() indexedCells[cellId] = { id: cellId, level: 17, blocked: false, - polygon, + polygon: poly, } } for (let i = 0; i < allCoords.length; i += 1) { diff --git a/server/src/services/functions/getPolyVector.js b/server/src/services/functions/getPolyVector.js index 195a01077..e8eb8d96e 100644 --- a/server/src/services/functions/getPolyVector.js +++ b/server/src/services/functions/getPolyVector.js @@ -3,16 +3,19 @@ const { S2LatLng, S2Cell, S2CellId, S2Point } = require('nodes2ts') module.exports = function getPolyVector(s2cellId, polyline) { const s2cell = new S2Cell(new S2CellId(BigInt(s2cellId).toString())) - const polygon = [] + const poly = [] + const revPoly = [] for (let i = 0; i <= 3; i += 1) { const coordinate = s2cell.getVertex(i) const point = new S2Point(coordinate.x, coordinate.y, coordinate.z) const latLng = S2LatLng.fromPoint(point) - polygon.push([latLng.latDegrees, latLng.lngDegrees]) + poly.push([latLng.latDegrees, latLng.lngDegrees]) + revPoly.push([latLng.lngDegrees, latLng.latDegrees]) } if (polyline) { - polygon.push(polygon[0]) + poly.push(poly[0]) + revPoly.push(revPoly[0]) } - return polygon + return { poly, revPoly } } diff --git a/server/src/services/functions/getTypeCells.js b/server/src/services/functions/getTypeCells.js index 9fd34c32b..dc0dc6598 100644 --- a/server/src/services/functions/getTypeCells.js +++ b/server/src/services/functions/getTypeCells.js @@ -19,7 +19,7 @@ module.exports = function getTypeCells(bounds, pokestops, gyms) { const coveringCells = regionCoverer.getCoveringCells(region) for (let i = 0; i < coveringCells.length; i += 1) { const cell = coveringCells[i] - const polygon = getPolyVector(cell.id) + const { poly } = getPolyVector(cell.id) const cellId = BigInt(cell.id).toString() indexedCells[cellId] = { id: cellId, @@ -27,7 +27,7 @@ module.exports = function getTypeCells(bounds, pokestops, gyms) { count: 0, count_pokestops: 0, count_gyms: 0, - polygon, + polygon: poly, } } for (let i = 0; i < gyms.length; i += 1) { diff --git a/src/services/queries/portal.js b/src/services/queries/portal.js index a34046a66..a192285b6 100644 --- a/src/services/queries/portal.js +++ b/src/services/queries/portal.js @@ -6,12 +6,14 @@ export const getAllPortals = gql` $minLon: Float! $maxLat: Float! $maxLon: Float! + $filters: JSON ) { portals( minLat: $minLat minLon: $minLon maxLat: $maxLat maxLon: $maxLon + filters: $filters ) { id lat diff --git a/src/services/queries/scanCell.js b/src/services/queries/scanCell.js index ae5256375..aec065f11 100644 --- a/src/services/queries/scanCell.js +++ b/src/services/queries/scanCell.js @@ -7,6 +7,7 @@ const getAllScanCells = gql` $maxLat: Float! $maxLon: Float! $zoom: Int! + $filters: JSON ) { scanCells( minLat: $minLat @@ -14,6 +15,7 @@ const getAllScanCells = gql` maxLat: $maxLat maxLon: $maxLon zoom: $zoom + filters: $filters ) { id center_lat diff --git a/yarn.lock b/yarn.lock index 5b3e56fbe..76f917417 100644 --- a/yarn.lock +++ b/yarn.lock @@ -455,6 +455,14 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-1.1.2.tgz#ccb91445360179a04e7fe6aff78c00ffc1eeaf82" integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw== +"@turf/bbox@*": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.5.0.tgz#bec30a744019eae420dac9ea46fb75caa44d8dc5" + integrity sha512-RBbLaao5hXTYyyg577iuMtDB8ehxMlUqHEJiMs8jT1GHkFhr6sYre3lmLsPeYEi/ZKj5TP5tt7fkzNdJ4GIVyw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/bbox@^6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@turf/bbox/-/bbox-6.3.0.tgz#0e1a9b59f32d6a2a40c806f54cbaa73575bead25" @@ -463,6 +471,26 @@ "@turf/helpers" "^6.3.0" "@turf/meta" "^6.3.0" +"@turf/bearing@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/bearing/-/bearing-6.5.0.tgz#462a053c6c644434bdb636b39f8f43fb0cd857b0" + integrity sha512-dxINYhIEMzgDOztyMZc20I7ssYVNEpSv04VbMo5YPQsqa80KO3TFvbuCahMsCAW5z8Tncc8dwBlEFrmRjJG33A== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + +"@turf/boolean-overlap@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-overlap/-/boolean-overlap-6.5.0.tgz#f27c85888c3665d42d613a91a83adf1657cd1385" + integrity sha512-8btMIdnbXVWUa1M7D4shyaSGxLRw6NjMcqKBcsTXcZdnaixl22k7ar7BvIzkaRYN3SFECk9VGXfLncNS3ckQUw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/line-overlap" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-equality "0.1.6" + "@turf/boolean-point-in-polygon@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@turf/boolean-point-in-polygon/-/boolean-point-in-polygon-6.5.0.tgz#6d2e9c89de4cd2e4365004c1e51490b7795a63cf" @@ -471,6 +499,14 @@ "@turf/helpers" "^6.5.0" "@turf/invariant" "^6.5.0" +"@turf/boolean-point-on-line@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/boolean-point-on-line/-/boolean-point-on-line-6.5.0.tgz#a8efa7bad88760676f395afb9980746bc5b376e9" + integrity sha512-A1BbuQ0LceLHvq7F/P7w3QvfpmZqbmViIUPHdNLvZimFNLo4e6IQunmzbe+8aSStH9QRZm3VOflyvNeXvvpZEQ== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/center@^6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@turf/center/-/center-6.3.0.tgz#dc46b94e77dc19f2822af8786a0e6d5d68deba0d" @@ -487,16 +523,24 @@ "@turf/helpers" "^6.5.0" "@turf/invariant" "^6.5.0" -"@turf/helpers@^6.3.0": - version "6.3.0" - resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.3.0.tgz#87f90f806c3f8ad6385ef8d2041d3662bf3c9fb1" - integrity sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg== +"@turf/distance@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/distance/-/distance-6.5.0.tgz#21f04d5f86e864d54e2abde16f35c15b4f36149a" + integrity sha512-xzykSLfoURec5qvQJcfifw/1mJa+5UwByZZ5TZ8iaqjGYN0vomhV9aiSLeYdUGtYRESZ+DYC/OzY+4RclZYgMg== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" -"@turf/helpers@^6.5.0": +"@turf/helpers@6.x", "@turf/helpers@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.5.0.tgz#f79af094bd6b8ce7ed2bd3e089a8493ee6cae82e" integrity sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw== +"@turf/helpers@^6.3.0": + version "6.3.0" + resolved "https://registry.yarnpkg.com/@turf/helpers/-/helpers-6.3.0.tgz#87f90f806c3f8ad6385ef8d2041d3662bf3c9fb1" + integrity sha512-kr6KuD4Z0GZ30tblTEvi90rvvVNlKieXuMC8CTzE/rVQb0/f/Cb29zCXxTD7giQTEQY/P2nRW23wEqqyNHulCg== + "@turf/invariant@^6.5.0": version "6.5.0" resolved "https://registry.yarnpkg.com/@turf/invariant/-/invariant-6.5.0.tgz#970afc988023e39c7ccab2341bd06979ddc7463f" @@ -504,6 +548,47 @@ dependencies: "@turf/helpers" "^6.5.0" +"@turf/line-intersect@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-intersect/-/line-intersect-6.5.0.tgz#dea48348b30c093715d2195d2dd7524aee4cf020" + integrity sha512-CS6R1tZvVQD390G9Ea4pmpM6mJGPWoL82jD46y0q1KSor9s6HupMIo1kY4Ny+AEYQl9jd21V3Scz20eldpbTVA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + geojson-rbush "3.x" + +"@turf/line-overlap@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-overlap/-/line-overlap-6.5.0.tgz#10ebb805c2d047463379fc1f997785fa8f3f4cc1" + integrity sha512-xHOaWLd0hkaC/1OLcStCpfq55lPHpPNadZySDXYiYjEz5HXr1oKmtMYpn0wGizsLwrOixRdEp+j7bL8dPt4ojQ== + dependencies: + "@turf/boolean-point-on-line" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-segment" "^6.5.0" + "@turf/meta" "^6.5.0" + "@turf/nearest-point-on-line" "^6.5.0" + deep-equal "1.x" + geojson-rbush "3.x" + +"@turf/line-segment@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/line-segment/-/line-segment-6.5.0.tgz#ee73f3ffcb7c956203b64ed966d96af380a4dd65" + integrity sha512-jI625Ho4jSuJESNq66Mmi290ZJ5pPZiQZruPVpmHkUw257Pew0alMmb6YrqYNnLUuiVVONxAAKXUVeeUGtycfw== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/meta" "^6.5.0" + +"@turf/meta@6.x", "@turf/meta@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.5.0.tgz#b725c3653c9f432133eaa04d3421f7e51e0418ca" + integrity sha512-RrArvtsV0vdsCBegoBtOalgdSOfkBrTJ07VkpiCnq/491W67hnMWmDu7e6Ztw0C3WldRYTXkg3SumfdzZxLBHA== + dependencies: + "@turf/helpers" "^6.5.0" + "@turf/meta@^6.3.0": version "6.3.0" resolved "https://registry.yarnpkg.com/@turf/meta/-/meta-6.3.0.tgz#f3e280ab29641f21e4f99310ce77f9c8394ae394" @@ -511,6 +596,19 @@ dependencies: "@turf/helpers" "^6.3.0" +"@turf/nearest-point-on-line@^6.5.0": + version "6.5.0" + resolved "https://registry.yarnpkg.com/@turf/nearest-point-on-line/-/nearest-point-on-line-6.5.0.tgz#8e1cd2cdc0b5acaf4c8d8b3b33bb008d3cb99e7b" + integrity sha512-WthrvddddvmymnC+Vf7BrkHGbDOUu6Z3/6bFYUGv1kxw8tiZ6n83/VG6kHz4poHOfS0RaNflzXSkmCi64fLBlg== + dependencies: + "@turf/bearing" "^6.5.0" + "@turf/destination" "^6.5.0" + "@turf/distance" "^6.5.0" + "@turf/helpers" "^6.5.0" + "@turf/invariant" "^6.5.0" + "@turf/line-intersect" "^6.5.0" + "@turf/meta" "^6.5.0" + "@types/accepts@^1.3.5": version "1.3.5" resolved "https://registry.yarnpkg.com/@types/accepts/-/accepts-1.3.5.tgz#c34bec115cfc746e04fe5a059df4ce7e7b391575" @@ -574,6 +672,11 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/geojson@7946.0.8": + version "7946.0.8" + resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.8.tgz#30744afdb385e2945e22f3b033f897f76b1f12ca" + integrity sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA== + "@types/json5@^0.0.29": version "0.0.29" resolved "https://registry.yarnpkg.com/@types/json5/-/json5-0.0.29.tgz#ee28707ae94e11d2b827bcbe5270bcea7f3e71ee" @@ -1463,6 +1566,18 @@ decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" +deep-equal@1.x, deep-equal@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" + integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== + dependencies: + is-arguments "^1.0.4" + is-date-object "^1.0.1" + is-regex "^1.0.4" + object-is "^1.0.1" + object-keys "^1.1.1" + regexp.prototype.flags "^1.2.0" + deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" @@ -2234,6 +2349,11 @@ functional-red-black-tree@^1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + gauge@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/gauge/-/gauge-4.0.0.tgz#afba07aa0374a93c6219603b1fb83eaa2264d8f8" @@ -2270,6 +2390,24 @@ generate-function@^2.3.1: dependencies: is-property "^1.0.2" +geojson-equality@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/geojson-equality/-/geojson-equality-0.1.6.tgz#a171374ef043e5d4797995840bae4648e0752d72" + integrity sha512-TqG8YbqizP3EfwP5Uw4aLu6pKkg6JQK9uq/XZ1lXQntvTHD1BBKJWhNpJ2M0ax6TuWMP3oyx6Oq7FCIfznrgpQ== + dependencies: + deep-equal "^1.0.0" + +geojson-rbush@3.x: + version "3.2.0" + resolved "https://registry.yarnpkg.com/geojson-rbush/-/geojson-rbush-3.2.0.tgz#8b543cf0d56f99b78faf1da52bb66acad6dfc290" + integrity sha512-oVltQTXolxvsz1sZnutlSuLDEcQAKYC/uXt9zDzJJ6bu0W+baTI8LZBaTup5afzibEH4N3jlq2p+a152wlBJ7w== + dependencies: + "@turf/bbox" "*" + "@turf/helpers" "6.x" + "@turf/meta" "6.x" + "@types/geojson" "7946.0.8" + rbush "^3.0.1" + get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" @@ -2645,6 +2783,14 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-arguments@^1.0.4: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-bigint@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" @@ -2791,7 +2937,7 @@ is-property@^1.0.2: resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= -is-regex@^1.1.4: +is-regex@^1.0.4, is-regex@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== @@ -3462,6 +3608,14 @@ object-inspect@^1.11.0, object-inspect@^1.9.0: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.0.tgz#6e2c120e868fd1fd18cb4f18c31741d0d6e776f0" integrity sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g== +object-is@^1.0.1: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + 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" @@ -3855,6 +4009,11 @@ qs@6.7.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +quickselect@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" + integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== + random-bytes@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" @@ -3875,6 +4034,13 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +rbush@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/rbush/-/rbush-3.0.1.tgz#5fafa8a79b3b9afdfe5008403a720cc1de882ecf" + integrity sha512-XRaVO0YecOpEuIvbhbpTrZgoiI6xBlz6hnlr6EHhd+0x9ase6EmeN+hdwwUaJvLcsFFQ8iWVF1GAK1yB0BWi0w== + dependencies: + quickselect "^2.0.0" + rc@^1.2.8: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -4029,6 +4195,15 @@ regenerator-runtime@^0.13.4: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== +regexp.prototype.flags@^1.2.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz#87cab30f80f66660181a3bb7bf5981a872b367ac" + integrity sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + functions-have-names "^1.2.2" + regexp.prototype.flags@^1.3.1: version "1.4.1" resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz#b3f4c0059af9e47eca9f3f660e51d81307e72307"