From 46585ebb2824096c7d1de606b52918015aaa337b Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 5 Oct 2018 01:39:00 +0300 Subject: [PATCH 001/115] remove repetition in array_types.js (#7359) --- src/data/array_types.js | 175 ++++------------------------ src/util/struct_array_layout.js.ejs | 34 ++---- 2 files changed, 29 insertions(+), 180 deletions(-) diff --git a/src/data/array_types.js b/src/data/array_types.js index efa2ebb6832..68f83333693 100644 --- a/src/data/array_types.js +++ b/src/data/array_types.js @@ -25,10 +25,7 @@ class StructArrayLayout2i4 extends StructArray { emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 2; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - return i; + return this.emplace(i, v0, v1); } emplace(i: number, v0: number, v1: number) { @@ -61,12 +58,7 @@ class StructArrayLayout4i8 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 4; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - return i; + return this.emplace(i, v0, v1, v2, v3); } emplace(i: number, v0: number, v1: number, v2: number, v3: number) { @@ -102,14 +94,7 @@ class StructArrayLayout2i4i12 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 6; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.int16[o2 + 4] = v4; - this.int16[o2 + 5] = v5; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { @@ -147,17 +132,7 @@ class StructArrayLayout4i4ub12 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 6; - const o1 = i * 12; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.uint8[o1 + 8] = v4; - this.uint8[o1 + 9] = v5; - this.uint8[o1 + 10] = v6; - this.uint8[o1 + 11] = v7; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { @@ -197,16 +172,7 @@ class StructArrayLayout8ui16 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 8; - this.uint16[o2 + 0] = v0; - this.uint16[o2 + 1] = v1; - this.uint16[o2 + 2] = v2; - this.uint16[o2 + 3] = v3; - this.uint16[o2 + 4] = v4; - this.uint16[o2 + 5] = v5; - this.uint16[o2 + 6] = v6; - this.uint16[o2 + 7] = v7; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { @@ -248,16 +214,7 @@ class StructArrayLayout4i4ui16 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 8; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.uint16[o2 + 4] = v4; - this.uint16[o2 + 5] = v5; - this.uint16[o2 + 6] = v6; - this.uint16[o2 + 7] = v7; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number) { @@ -296,11 +253,7 @@ class StructArrayLayout3f12 extends StructArray { emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 3; - this.float32[o4 + 0] = v0; - this.float32[o4 + 1] = v1; - this.float32[o4 + 2] = v2; - return i; + return this.emplace(i, v0, v1, v2); } emplace(i: number, v0: number, v1: number, v2: number) { @@ -334,9 +287,7 @@ class StructArrayLayout1ul4 extends StructArray { emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 1; - this.uint32[o4 + 0] = v0; - return i; + return this.emplace(i, v0); } emplace(i: number, v0: number) { @@ -375,20 +326,7 @@ class StructArrayLayout6i1ul2ui2i24 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 12; - const o4 = i * 6; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.int16[o2 + 4] = v4; - this.int16[o2 + 5] = v5; - this.uint32[o4 + 3] = v6; - this.uint16[o2 + 8] = v7; - this.uint16[o2 + 9] = v8; - this.int16[o2 + 10] = v9; - this.int16[o2 + 11] = v10; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number) { @@ -433,14 +371,7 @@ class StructArrayLayout2i2i2i12 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 6; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.int16[o2 + 4] = v4; - this.int16[o2 + 5] = v5; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { @@ -475,10 +406,7 @@ class StructArrayLayout2ub4 extends StructArray { emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); - const o1 = i * 4; - this.uint8[o1 + 0] = v0; - this.uint8[o1 + 1] = v1; - return i; + return this.emplace(i, v0, v1); } emplace(i: number, v0: number, v1: number) { @@ -522,24 +450,7 @@ class StructArrayLayout2i2ui3ul3ui2f2ub40 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 20; - const o4 = i * 10; - const o1 = i * 40; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.uint16[o2 + 2] = v2; - this.uint16[o2 + 3] = v3; - this.uint32[o4 + 2] = v4; - this.uint32[o4 + 3] = v5; - this.uint32[o4 + 4] = v6; - this.uint16[o2 + 10] = v7; - this.uint16[o2 + 11] = v8; - this.uint16[o2 + 12] = v9; - this.float32[o4 + 7] = v10; - this.float32[o4 + 8] = v11; - this.uint8[o1 + 36] = v12; - this.uint8[o1 + 37] = v13; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number) { @@ -592,23 +503,7 @@ class StructArrayLayout4i9ui1ul32 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 16; - const o4 = i * 8; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - this.int16[o2 + 3] = v3; - this.uint16[o2 + 4] = v4; - this.uint16[o2 + 5] = v5; - this.uint16[o2 + 6] = v6; - this.uint16[o2 + 7] = v7; - this.uint16[o2 + 8] = v8; - this.uint16[o2 + 9] = v9; - this.uint16[o2 + 10] = v10; - this.uint16[o2 + 11] = v11; - this.uint16[o2 + 12] = v12; - this.uint32[o4 + 7] = v13; - return i; + return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13); } emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number) { @@ -654,9 +549,7 @@ class StructArrayLayout1f4 extends StructArray { emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 1; - this.float32[o4 + 0] = v0; - return i; + return this.emplace(i, v0); } emplace(i: number, v0: number) { @@ -688,11 +581,7 @@ class StructArrayLayout3i6 extends StructArray { emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 3; - this.int16[o2 + 0] = v0; - this.int16[o2 + 1] = v1; - this.int16[o2 + 2] = v2; - return i; + return this.emplace(i, v0, v1, v2); } emplace(i: number, v0: number, v1: number, v2: number) { @@ -729,12 +618,7 @@ class StructArrayLayout1ul2ui8 extends StructArray { emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 2; - const o2 = i * 4; - this.uint32[o4 + 0] = v0; - this.uint16[o2 + 2] = v1; - this.uint16[o2 + 3] = v2; - return i; + return this.emplace(i, v0, v1, v2); } emplace(i: number, v0: number, v1: number, v2: number) { @@ -769,11 +653,7 @@ class StructArrayLayout3ui6 extends StructArray { emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 3; - this.uint16[o2 + 0] = v0; - this.uint16[o2 + 1] = v1; - this.uint16[o2 + 2] = v2; - return i; + return this.emplace(i, v0, v1, v2); } emplace(i: number, v0: number, v1: number, v2: number) { @@ -807,10 +687,7 @@ class StructArrayLayout2ui4 extends StructArray { emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 2; - this.uint16[o2 + 0] = v0; - this.uint16[o2 + 1] = v1; - return i; + return this.emplace(i, v0, v1); } emplace(i: number, v0: number, v1: number) { @@ -843,9 +720,7 @@ class StructArrayLayout1ui2 extends StructArray { emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); - const o2 = i * 1; - this.uint16[o2 + 0] = v0; - return i; + return this.emplace(i, v0); } emplace(i: number, v0: number) { @@ -877,10 +752,7 @@ class StructArrayLayout2f8 extends StructArray { emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 2; - this.float32[o4 + 0] = v0; - this.float32[o4 + 1] = v1; - return i; + return this.emplace(i, v0, v1); } emplace(i: number, v0: number, v1: number) { @@ -913,12 +785,7 @@ class StructArrayLayout4f16 extends StructArray { emplaceBack(v0: number, v1: number, v2: number, v3: number) { const i = this.length; this.resize(i + 1); - const o4 = i * 4; - this.float32[o4 + 0] = v0; - this.float32[o4 + 1] = v1; - this.float32[o4 + 2] = v2; - this.float32[o4 + 3] = v3; - return i; + return this.emplace(i, v0, v1, v2, v3); } emplace(i: number, v0: number, v1: number, v2: number, v3: number) { diff --git a/src/util/struct_array_layout.js.ejs b/src/util/struct_array_layout.js.ejs index ada5e8f4243..4eb3841489f 100644 --- a/src/util/struct_array_layout.js.ejs +++ b/src/util/struct_array_layout.js.ejs @@ -46,6 +46,7 @@ for (const type of usedTypes) { const bytesPerElement = size; const usedTypeSizes = []; const argNames = []; +const argNamesTyped = []; for (const member of members) { if (usedTypeSizes.indexOf(member.size) < 0) { usedTypeSizes.push(member.size); @@ -53,38 +54,19 @@ for (const member of members) { for (let c = 0; c < member.components; c++) { // arguments v0, v1, v2, ... are, in order, the components of // member 0, then the components of member 1, etc. - argNames.push(`v${argNames.length}: number`); + const name = `v${argNames.length}`; + argNames.push(name); + argNamesTyped.push(`${name}: number`); } } -%> - emplaceBack(<%=argNames.join(', ')%>) { + emplaceBack(<%=argNamesTyped.join(', ')%>) { const i = this.length; this.resize(i + 1); -<% -for (const size of usedTypeSizes) { --%> - const o<%=size.toFixed(0)%> = i * <%=(bytesPerElement / size).toFixed(0)%>; -<% -} - -let argIndex = 0; -for (const member of members) { - for (let c = 0; c < member.components; c++) { - // The index for `member` component `c` into the appropriate type array is: - // this.{TYPE}[o{SIZE} + MEMBER_OFFSET + {c}] = v{X} - // where MEMBER_OFFSET = ROUND(member.offset / size) is the per-element - // offset of this member into the array - const index = `o${member.size.toFixed(0)} + ${(member.offset / member.size + c).toFixed(0)}`; --%> - this.<%=member.view%>[<%=index%>] = v<%=argIndex++%>; -<% - } -} --%> - return i; + return this.emplace(i, <%=argNames.join(', ')%>); } - emplace(i: number, <%=argNames.join(', ')%>) { + emplace(i: number, <%=argNamesTyped.join(', ')%>) { <% { for (const size of usedTypeSizes) { @@ -92,7 +74,7 @@ for (const size of usedTypeSizes) { const o<%=size.toFixed(0)%> = i * <%=(bytesPerElement / size).toFixed(0)%>; <% } - + let argIndex = 0; for (const member of members) { for (let c = 0; c < member.components; c++) { From 4d86572a106aaad917ced4ce8ce1007718f52562 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Thu, 4 Oct 2018 15:39:31 -0400 Subject: [PATCH 002/115] fix custom layers example in safari It was relying on the ability of some browsers to render without any buffers or attributes. I guess that isn't allowed by the spec. The expands the example to use attributes and buffers, which is probably better anyways. --- docs/pages/example/.eslintrc | 3 ++- docs/pages/example/custom-style-layer.html | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/docs/pages/example/.eslintrc b/docs/pages/example/.eslintrc index ebf0cf4b759..06f7379d50e 100644 --- a/docs/pages/example/.eslintrc +++ b/docs/pages/example/.eslintrc @@ -13,7 +13,8 @@ "MapboxDirections": true, "turf": true, "d3": true, - "Uint8Array": true + "Uint8Array": true, + "Float32Array": true }, "rules": { "flowtype/require-valid-file-annotation": [0], diff --git a/docs/pages/example/custom-style-layer.html b/docs/pages/example/custom-style-layer.html index 7c3aa53b87b..a9887a8407f 100644 --- a/docs/pages/example/custom-style-layer.html +++ b/docs/pages/example/custom-style-layer.html @@ -16,8 +16,9 @@ onAdd: function (map, gl) { var vertexSource = "" + "uniform mat4 u_matrix;" + + "attribute vec2 a_pos;" + "void main() {" + - " gl_Position = u_matrix * vec4(0.5, 0.5, 0.0, 1.0);" + + " gl_Position = u_matrix * vec4(a_pos, 0.0, 1.0);" + " gl_PointSize = 100.0;" + "}"; @@ -37,11 +38,20 @@ gl.attachShader(this.program, vertexShader); gl.attachShader(this.program, fragmentShader); gl.linkProgram(this.program); + + this.aPos = gl.getAttribLocation(this.program, "a_pos"); + + this.buffer = gl.createBuffer(); + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.5, 0.5]), gl.STATIC_DRAW); }, render: function(gl, matrix) { gl.useProgram(this.program); gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix); + gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); + gl.enableVertexAttribArray(this.aPos); + gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, false, 0, 0); gl.drawArrays(gl.POINTS, 0, 1); } }; From 8e57c1d4d9bebd252117294c90b2a9a91894ead6 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 4 Oct 2018 11:51:47 -0700 Subject: [PATCH 003/115] Add benchmark that specifically targets `performSymbolLayout` (e.g. text shaping and line breaking) Use style_locations as input to ensure CJK-dense tiles are tested. --- bench/benchmarks/symbol_layout.js | 47 +++++++++++++++++++++++++++++++ bench/lib/tile_parser.js | 5 ++-- bench/versions/benchmarks.js | 3 ++ src/render/glyph_atlas.js | 4 ++- src/source/worker_source.js | 12 ++++++-- src/source/worker_tile.js | 8 +++++- 6 files changed, 73 insertions(+), 6 deletions(-) create mode 100644 bench/benchmarks/symbol_layout.js diff --git a/bench/benchmarks/symbol_layout.js b/bench/benchmarks/symbol_layout.js new file mode 100644 index 00000000000..cf40af6a641 --- /dev/null +++ b/bench/benchmarks/symbol_layout.js @@ -0,0 +1,47 @@ +// @flow + +import Layout from './layout'; +import SymbolBucket from '../../src/data/bucket/symbol_bucket'; +import { performSymbolLayout } from '../../src/symbol/symbol_layout'; +import { OverscaledTileID } from '../../src/source/tile_id'; + +export default class SymbolLayout extends Layout { + parsedTiles: Array; + + constructor(style: string, locations: ?Array) { + super(style, locations); + this.parsedTiles = []; + } + + setup(): Promise { + return super.setup().then(() => { + // Do initial load/parse of tiles and hold onto all the glyph/icon + // dependencies so that we can re-do symbol layout in isolation + // during the bench step. + return Promise.all(this.tiles.map(tile => + this.parser.parseTile(tile, true).then((tileResult) => { + this.parsedTiles.push(tileResult); + }) + )).then(() => {}); + }); + } + + bench() { + let promise = Promise.resolve(); + for (const tileResult of this.parsedTiles) { + promise = promise.then(() => { + for (const bucket of tileResult.buckets) { + if (bucket instanceof SymbolBucket) { + performSymbolLayout(bucket, + tileResult.glyphMap, + tileResult.glyphPositions, + tileResult.iconMap, + tileResult.imageAtlas.iconPositions, + false); + } + } + }); + } + return promise; + } +} diff --git a/bench/lib/tile_parser.js b/bench/lib/tile_parser.js index 9c90063192f..20aad654918 100644 --- a/bench/lib/tile_parser.js +++ b/bench/lib/tile_parser.js @@ -108,7 +108,7 @@ export default class TileParser { .then(buffer => ({tileID, buffer})); } - parseTile(tile: {tileID: OverscaledTileID, buffer: ArrayBuffer}): Promise { + parseTile(tile: {tileID: OverscaledTileID, buffer: ArrayBuffer}, returnDependencies?: boolean): Promise { const workerTile = new WorkerTile({ tileID: tile.tileID, zoom: tile.tileID.overscaledZ, @@ -123,7 +123,8 @@ export default class TileParser { angle: 0, pitch: 0, cameraToCenterDistance: 0, - cameraToTileDistance: 0 + cameraToTileDistance: 0, + returnDependencies: returnDependencies }); const vectorTile = new VT.VectorTile(new Protobuf(tile.buffer)); diff --git a/bench/versions/benchmarks.js b/bench/versions/benchmarks.js index a35adaafaa4..87e160e09ab 100644 --- a/bench/versions/benchmarks.js +++ b/bench/versions/benchmarks.js @@ -2,6 +2,7 @@ import mapboxgl from '../../src'; import accessToken from '../lib/access_token'; import { summaryStatistics, regression } from '../lib/statistics'; import updateUI from '../benchmarks_view'; +import styleLocations from '../lib/style_locations'; mapboxgl.accessToken = accessToken; @@ -17,6 +18,7 @@ function register(benchmark) { import Layout from '../benchmarks/layout'; import LayoutDDS from '../benchmarks/layout_dds'; +import SymbolLayout from '../benchmarks/symbol_layout'; import WorkerTransfer from '../benchmarks/worker_transfer'; import Paint from '../benchmarks/paint'; import PaintStates from '../benchmarks/paint_states'; @@ -47,6 +49,7 @@ register(new PaintStates(center)); LayerBenchmarks.forEach((Bench) => register(new Bench())); register(new Load()); register(new LayoutDDS()); +register(new SymbolLayout(style, styleLocations.map(location => location.tileID[0]))); register(new FilterCreate()); register(new FilterEvaluate()); diff --git a/src/render/glyph_atlas.js b/src/render/glyph_atlas.js index d417850652e..8a715f7cd79 100644 --- a/src/render/glyph_atlas.js +++ b/src/render/glyph_atlas.js @@ -20,9 +20,11 @@ export type GlyphPosition = { metrics: GlyphMetrics }; +export type GlyphPositions = { [string]: { [number]: GlyphPosition } } + export default class GlyphAtlas { image: AlphaImage; - positions: { [string]: { [number]: GlyphPosition } }; + positions: GlyphPositions; constructor(stacks: { [string]: { [number]: ?StyleGlyph } }) { const positions = {}; diff --git a/src/source/worker_source.js b/src/source/worker_source.js index 85ffb97358c..44e20e296b4 100644 --- a/src/source/worker_source.js +++ b/src/source/worker_source.js @@ -2,6 +2,7 @@ import type {RequestParameters} from '../util/ajax'; import type {RGBAImage, AlphaImage} from '../util/image'; +import type { GlyphPositions } from '../render/glyph_atlas'; import type ImageAtlas from '../render/image_atlas'; import type {OverscaledTileID} from './tile_id'; import type {Bucket} from '../data/bucket'; @@ -9,6 +10,8 @@ import type FeatureIndex from '../data/feature_index'; import type {CollisionBoxArray} from '../data/array_types'; import type DEMData from '../data/dem_data'; import type {PerformanceResourceTiming} from '../types/performance_resource_timing'; +import type { StyleGlyph } from '../style/style_glyph'; +import type { StyleImage } from '../style/style_image'; export type TileParameters = { source: string, @@ -23,7 +26,8 @@ export type WorkerTileParameters = TileParameters & { tileSize: number, pixelRatio: number, showCollisionBoxes: boolean, - collectResourceTiming?: boolean + collectResourceTiming?: boolean, + returnDependencies?: boolean }; export type WorkerDEMTileParameters = TileParameters & { @@ -39,7 +43,11 @@ export type WorkerTileResult = { featureIndex: FeatureIndex, collisionBoxArray: CollisionBoxArray, rawTileData?: ArrayBuffer, - resourceTiming?: Array + resourceTiming?: Array, + // Only used for benchmarking: + glyphMap?: {[string]: {[number]: ?StyleGlyph}} | null, + iconMap?: {[string]: StyleImage} | null, + glyphPositions?: GlyphPositions | null }; export type WorkerTileCallback = (error: ?Error, result: ?WorkerTileResult) => void; diff --git a/src/source/worker_tile.js b/src/source/worker_tile.js index 971e6f7e0cc..07db81e4004 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.js @@ -37,6 +37,7 @@ class WorkerTile { overscaling: number; showCollisionBoxes: boolean; collectResourceTiming: boolean; + returnDependencies: boolean; status: 'parsing' | 'done'; data: VectorTile; @@ -56,6 +57,7 @@ class WorkerTile { this.overscaling = this.tileID.overscaleFactor(); this.showCollisionBoxes = params.showCollisionBoxes; this.collectResourceTiming = !!params.collectResourceTiming; + this.returnDependencies = !!params.returnDependencies; } parse(data: VectorTile, layerIndex: StyleLayerIndex, actor: Actor, callback: WorkerTileCallback) { @@ -196,7 +198,11 @@ class WorkerTile { featureIndex, collisionBoxArray: this.collisionBoxArray, glyphAtlasImage: glyphAtlas.image, - imageAtlas: imageAtlas + imageAtlas: imageAtlas, + // Only used for benchmarking: + glyphMap: this.returnDependencies ? glyphMap : null, + iconMap: this.returnDependencies ? iconMap : null, + glyphPositions: this.returnDependencies ? glyphAtlas.positions : null }); } } From dc53cd32c8bfeef7401b87b3788bcb71242d4888 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 5 Oct 2018 21:42:11 +0300 Subject: [PATCH 004/115] switch shaders to ES modules, minify them (#7368) --- build/rollup_plugins.js | 32 +- package.json | 7 +- src/render/painter.js | 2 +- src/render/program.js | 6 +- src/shaders/index.js | 217 +---- src/shaders/shaders.js | 180 ++++ yarn.lock | 1752 +++++++++++++++++++++++++++++++++++++-- 7 files changed, 1894 insertions(+), 302 deletions(-) create mode 100644 src/shaders/shaders.js diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index be5576362b6..6c756d1873b 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -5,10 +5,9 @@ import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import unassert from 'rollup-plugin-unassert'; import json from 'rollup-plugin-json'; -import browserifyPlugin from 'rollup-plugin-browserify-transform'; -import brfs from 'brfs'; import uglify from 'rollup-plugin-uglify'; import minifyStyleSpec from './rollup_plugin_minify_style_spec'; +import { createFilter } from 'rollup-pluginutils'; const production = process.env.BUILD === 'production'; @@ -19,15 +18,13 @@ export const plugins = () => [ flow(), minifyStyleSpec(), json(), + glsl('./src/shaders/*.glsl', production), buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}), production ? unassert() : false, resolve({ browser: true, preferBuiltins: false }), - browserifyPlugin(brfs, { - include: 'src/shaders/index.js' - }), commonjs({ // global keyword handling causes Webpack compatibility issues, so we disabled it: // https://github.com/mapbox/mapbox-gl-js/pull/6956 @@ -48,3 +45,28 @@ export function flow() { }; } +// Using this instead of rollup-plugin-string to add minification +function glsl(include, minify) { + const filter = createFilter(include); + return { + name: 'glsl', + transform(code, id) { + if (!filter(id)) return; + + // barebones GLSL minification + if (minify) { + code = code.trim() // strip whitespace at the start/end + .replace(/\s*\/\/[^\n]*\n/g, '\n') // strip double-slash comments + .replace(/\n+/g, '\n') // collapse multi line breaks + .replace(/\n\s+/g, '\n') // strip identation + .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators + .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks + } + + return { + code: `export default ${JSON.stringify(code)};`, + map: {mappings: ''} + }; + } + }; +} diff --git a/package.json b/package.json index ad343c6b360..8f334793b8a 100644 --- a/package.json +++ b/package.json @@ -21,9 +21,9 @@ "@mapbox/unitbezier": "^0.0.0", "@mapbox/vector-tile": "^1.3.1", "@mapbox/whoots-js": "^3.1.0", - "brfs": "^1.4.4", "csscolorparser": "~1.0.2", "earcut": "^2.1.3", + "esm": "^3.0.84", "geojson-rewind": "^0.3.0", "geojson-vt": "^3.2.0", "gl-matrix": "^2.6.1", @@ -56,7 +56,6 @@ "eslint-plugin-html": "^3.0.0", "eslint-plugin-import": "^2.9.0", "eslint-plugin-react": "^7.3.0", - "esm": "^3.0.72", "execcommand-copy": "^1.1.0", "flow-bin": "^0.77.0", "flow-coverage-report": "^0.3.0", @@ -86,8 +85,7 @@ "remark-html": "^5.0.1", "remark-react": "^4.0.1", "request": "^2.79.0", - "rollup": "^0.63.4", - "rollup-plugin-browserify-transform": "^1.0.1", + "rollup": "^0.66.2", "rollup-plugin-buble": "^0.18.0", "rollup-plugin-commonjs": "^9.1.6", "rollup-plugin-json": "^2.3.0", @@ -104,6 +102,7 @@ "tap": "^11.1.2" }, "browser": { + "./src/shaders/index.js": "./src/shaders/shaders.js", "./src/util/window.js": "./src/util/browser/window.js", "./src/util/web_worker.js": "./src/util/browser/web_worker.js" }, diff --git a/src/render/painter.js b/src/render/painter.js index 12e633e59ce..5475baf6298 100644 --- a/src/render/painter.js +++ b/src/render/painter.js @@ -12,7 +12,7 @@ import rasterBoundsAttributes from '../data/raster_bounds_attributes'; import posAttributes from '../data/pos_attributes'; import ProgramConfiguration from '../data/program_configuration'; import CrossTileSymbolIndex from '../symbol/cross_tile_symbol_index'; -import shaders from '../shaders'; +import * as shaders from '../shaders'; import Program from './program'; import { programUniforms } from './program/program_uniforms'; import Context from '../gl/context'; diff --git a/src/render/program.js b/src/render/program.js index 58c2e9d1758..6f9960454b3 100644 --- a/src/render/program.js +++ b/src/render/program.js @@ -2,7 +2,7 @@ import browser from '../util/browser'; -import shaders from '../shaders'; +import {prelude} from '../shaders'; import assert from 'assert'; import ProgramConfiguration from '../data/program_configuration'; import VertexArrayObject from './vertex_array_object'; @@ -43,8 +43,8 @@ class Program { defines.push('#define OVERDRAW_INSPECTOR;'); } - const fragmentSource = defines.concat(shaders.prelude.fragmentSource, source.fragmentSource).join('\n'); - const vertexSource = defines.concat(shaders.prelude.vertexSource, source.vertexSource).join('\n'); + const fragmentSource = defines.concat(prelude.fragmentSource, source.fragmentSource).join('\n'); + const vertexSource = defines.concat(prelude.vertexSource, source.vertexSource).join('\n'); const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); gl.shaderSource(fragmentShader, fragmentSource); gl.compileShader(fragmentShader); diff --git a/src/shaders/index.js b/src/shaders/index.js index a0403723501..84d4d0d0b4c 100644 --- a/src/shaders/index.js +++ b/src/shaders/index.js @@ -1,213 +1,16 @@ -// @flow -// We use brfs, a browserify transform, to inline shader sources during bundling. As a result: -// - readFileSync calls must be written out long-form -// - this module must use CommonJS rather than ES2015 syntax -/* eslint-disable prefer-template, no-path-concat, import/unambiguous, import/no-commonjs */ +// Shaders entry point for Node (tests and GL Native) +/* eslint-disable import/unambiguous, import/no-commonjs, flowtype/require-valid-file-annotation, no-global-assign */ const fs = require('fs'); -const shaders: {[string]: {fragmentSource: string, vertexSource: string}} = { - prelude: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/_prelude.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/_prelude.vertex.glsl', 'utf8') - }, - background: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/background.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/background.vertex.glsl', 'utf8') - }, - backgroundPattern: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/background_pattern.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/background_pattern.vertex.glsl', 'utf8') - }, - circle: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/circle.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/circle.vertex.glsl', 'utf8') - }, - clippingMask: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/clipping_mask.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/clipping_mask.vertex.glsl', 'utf8') - }, - heatmap: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/heatmap.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/heatmap.vertex.glsl', 'utf8') - }, - heatmapTexture: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/heatmap_texture.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/heatmap_texture.vertex.glsl', 'utf8') - }, - collisionBox: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/collision_box.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/collision_box.vertex.glsl', 'utf8') - }, - collisionCircle: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/collision_circle.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/collision_circle.vertex.glsl', 'utf8') - }, - debug: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/debug.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/debug.vertex.glsl', 'utf8') - }, - fill: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill.vertex.glsl', 'utf8') - }, - fillOutline: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill_outline.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill_outline.vertex.glsl', 'utf8') - }, - fillOutlinePattern: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill_outline_pattern.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill_outline_pattern.vertex.glsl', 'utf8') - }, - fillPattern: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill_pattern.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill_pattern.vertex.glsl', 'utf8') - }, - fillExtrusion: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill_extrusion.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill_extrusion.vertex.glsl', 'utf8') - }, - fillExtrusionPattern: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/fill_extrusion_pattern.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/fill_extrusion_pattern.vertex.glsl', 'utf8') - }, - extrusionTexture: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/extrusion_texture.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/extrusion_texture.vertex.glsl', 'utf8') - }, - hillshadePrepare: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/hillshade_prepare.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/hillshade_prepare.vertex.glsl', 'utf8') - }, - hillshade: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/hillshade.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/hillshade.vertex.glsl', 'utf8') - }, - line: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/line.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/line.vertex.glsl', 'utf8') - }, - lineGradient: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/line_gradient.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/line_gradient.vertex.glsl', 'utf8') - }, - linePattern: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/line_pattern.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/line_pattern.vertex.glsl', 'utf8') - }, - lineSDF: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/line_sdf.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/line_sdf.vertex.glsl', 'utf8') - }, - raster: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/raster.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/raster.vertex.glsl', 'utf8') - }, - symbolIcon: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/symbol_icon.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/symbol_icon.vertex.glsl', 'utf8') - }, - symbolSDF: { - fragmentSource: fs.readFileSync(__dirname + '/../shaders/symbol_sdf.fragment.glsl', 'utf8'), - vertexSource: fs.readFileSync(__dirname + '/../shaders/symbol_sdf.vertex.glsl', 'utf8') - } -}; - -// Expand #pragmas to #ifdefs. - -const re = /#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g; - -for (const programName in shaders) { - const program = shaders[programName]; - const fragmentPragmas: {[string]: boolean} = {}; +// enable ES Modules in Node +require = require("esm")(module); - program.fragmentSource = program.fragmentSource.replace(re, (match: string, operation: string, precision: string, type: string, name: string) => { - fragmentPragmas[name] = true; - if (operation === 'define') { - return ` -#ifndef HAS_UNIFORM_u_${name} -varying ${precision} ${type} ${name}; -#else -uniform ${precision} ${type} u_${name}; -#endif -`; - } else /* if (operation === 'initialize') */ { - return ` -#ifdef HAS_UNIFORM_u_${name} - ${precision} ${type} ${name} = u_${name}; -#endif -`; - } - }); - - program.vertexSource = program.vertexSource.replace(re, (match: string, operation: string, precision: string, type: string, name: string) => { - const attrType = type === 'float' ? 'vec2' : 'vec4'; - const unpackType = name.match(/color/) ? 'color' : attrType; - - if (fragmentPragmas[name]) { - if (operation === 'define') { - return ` -#ifndef HAS_UNIFORM_u_${name} -uniform lowp float a_${name}_t; -attribute ${precision} ${attrType} a_${name}; -varying ${precision} ${type} ${name}; -#else -uniform ${precision} ${type} u_${name}; -#endif -`; - } else /* if (operation === 'initialize') */ { - if (unpackType === 'vec4') { - // vec4 attributes are only used for cross-faded properties, and are not packed - return ` -#ifndef HAS_UNIFORM_u_${name} - ${name} = a_${name}; -#else - ${precision} ${type} ${name} = u_${name}; -#endif -`; - } else { - return ` -#ifndef HAS_UNIFORM_u_${name} - ${name} = unpack_mix_${unpackType}(a_${name}, a_${name}_t); -#else - ${precision} ${type} ${name} = u_${name}; -#endif -`; - } - } - } else { - if (operation === 'define') { - return ` -#ifndef HAS_UNIFORM_u_${name} -uniform lowp float a_${name}_t; -attribute ${precision} ${attrType} a_${name}; -#else -uniform ${precision} ${type} u_${name}; -#endif -`; - } else /* if (operation === 'initialize') */ { - if (unpackType === 'vec4') { - // vec4 attributes are only used for cross-faded properties, and are not packed - return ` -#ifndef HAS_UNIFORM_u_${name} - ${precision} ${type} ${name} = a_${name}; -#else - ${precision} ${type} ${name} = u_${name}; -#endif -`; - } else /* */{ - return ` -#ifndef HAS_UNIFORM_u_${name} - ${precision} ${type} ${name} = unpack_mix_${unpackType}(a_${name}, a_${name}_t); -#else - ${precision} ${type} ${name} = u_${name}; -#endif -`; - } - } - } - }); -} +// enable requiring GLSL in Node +require.extensions['.glsl'] = function (module, filename) { + const content = fs.readFileSync(filename, 'utf8'); + module._compile(`module.exports = \`${content}\``, filename); +}; -module.exports = shaders; +module.exports = require("./shaders.js"); diff --git a/src/shaders/shaders.js b/src/shaders/shaders.js new file mode 100644 index 00000000000..7c569fda562 --- /dev/null +++ b/src/shaders/shaders.js @@ -0,0 +1,180 @@ + +// Disable Flow annotations here because Flow doesn't support importing GLSL files +/* eslint-disable flowtype/require-valid-file-annotation */ + +import preludeFrag from './_prelude.fragment.glsl'; +import preludeVert from './_prelude.vertex.glsl'; +import backgroundFrag from './background.fragment.glsl'; +import backgroundVert from './background.vertex.glsl'; +import backgroundPatternFrag from './background_pattern.fragment.glsl'; +import backgroundPatternVert from './background_pattern.vertex.glsl'; +import circleFrag from './circle.fragment.glsl'; +import circleVert from './circle.vertex.glsl'; +import clippingMaskFrag from './clipping_mask.fragment.glsl'; +import clippingMaskVert from './clipping_mask.vertex.glsl'; +import heatmapFrag from './heatmap.fragment.glsl'; +import heatmapVert from './heatmap.vertex.glsl'; +import heatmapTextureFrag from './heatmap_texture.fragment.glsl'; +import heatmapTextureVert from './heatmap_texture.vertex.glsl'; +import collisionBoxFrag from './collision_box.fragment.glsl'; +import collisionBoxVert from './collision_box.vertex.glsl'; +import collisionCircleFrag from './collision_circle.fragment.glsl'; +import collisionCircleVert from './collision_circle.vertex.glsl'; +import debugFrag from './debug.fragment.glsl'; +import debugVert from './debug.vertex.glsl'; +import fillFrag from './fill.fragment.glsl'; +import fillVert from './fill.vertex.glsl'; +import fillOutlineFrag from './fill_outline.fragment.glsl'; +import fillOutlineVert from './fill_outline.vertex.glsl'; +import fillOutlinePatternFrag from './fill_outline_pattern.fragment.glsl'; +import fillOutlinePatternVert from './fill_outline_pattern.vertex.glsl'; +import fillPatternFrag from './fill_pattern.fragment.glsl'; +import fillPatternVert from './fill_pattern.vertex.glsl'; +import fillExtrusionFrag from './fill_extrusion.fragment.glsl'; +import fillExtrusionVert from './fill_extrusion.vertex.glsl'; +import fillExtrusionPatternFrag from './fill_extrusion_pattern.fragment.glsl'; +import fillExtrusionPatternVert from './fill_extrusion_pattern.vertex.glsl'; +import extrusionTextureFrag from './extrusion_texture.fragment.glsl'; +import extrusionTextureVert from './extrusion_texture.vertex.glsl'; +import hillshadePrepareFrag from './hillshade_prepare.fragment.glsl'; +import hillshadePrepareVert from './hillshade_prepare.vertex.glsl'; +import hillshadeFrag from './hillshade.fragment.glsl'; +import hillshadeVert from './hillshade.vertex.glsl'; +import lineFrag from './line.fragment.glsl'; +import lineVert from './line.vertex.glsl'; +import lineGradientFrag from './line_gradient.fragment.glsl'; +import lineGradientVert from './line_gradient.vertex.glsl'; +import linePatternFrag from './line_pattern.fragment.glsl'; +import linePatternVert from './line_pattern.vertex.glsl'; +import lineSDFFrag from './line_sdf.fragment.glsl'; +import lineSDFVert from './line_sdf.vertex.glsl'; +import rasterFrag from './raster.fragment.glsl'; +import rasterVert from './raster.vertex.glsl'; +import symbolIconFrag from './symbol_icon.fragment.glsl'; +import symbolIconVert from './symbol_icon.vertex.glsl'; +import symbolSDFFrag from './symbol_sdf.fragment.glsl'; +import symbolSDFVert from './symbol_sdf.vertex.glsl'; + +export const prelude = compile(preludeFrag, preludeVert); +export const background = compile(backgroundFrag, backgroundVert); +export const backgroundPattern = compile(backgroundPatternFrag, backgroundPatternVert); +export const circle = compile(circleFrag, circleVert); +export const clippingMask = compile(clippingMaskFrag, clippingMaskVert); +export const heatmap = compile(heatmapFrag, heatmapVert); +export const heatmapTexture = compile(heatmapTextureFrag, heatmapTextureVert); +export const collisionBox = compile(collisionBoxFrag, collisionBoxVert); +export const collisionCircle = compile(collisionCircleFrag, collisionCircleVert); +export const debug = compile(debugFrag, debugVert); +export const fill = compile(fillFrag, fillVert); +export const fillOutline = compile(fillOutlineFrag, fillOutlineVert); +export const fillOutlinePattern = compile(fillOutlinePatternFrag, fillOutlinePatternVert); +export const fillPattern = compile(fillPatternFrag, fillPatternVert); +export const fillExtrusion = compile(fillExtrusionFrag, fillExtrusionVert); +export const fillExtrusionPattern = compile(fillExtrusionPatternFrag, fillExtrusionPatternVert); +export const extrusionTexture = compile(extrusionTextureFrag, extrusionTextureVert); +export const hillshadePrepare = compile(hillshadePrepareFrag, hillshadePrepareVert); +export const hillshade = compile(hillshadeFrag, hillshadeVert); +export const line = compile(lineFrag, lineVert); +export const lineGradient = compile(lineGradientFrag, lineGradientVert); +export const linePattern = compile(linePatternFrag, linePatternVert); +export const lineSDF = compile(lineSDFFrag, lineSDFVert); +export const raster = compile(rasterFrag, rasterVert); +export const symbolIcon = compile(symbolIconFrag, symbolIconVert); +export const symbolSDF = compile(symbolSDFFrag, symbolSDFVert); + +// Expand #pragmas to #ifdefs. + +function compile(fragmentSource, vertexSource) { + const re = /#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g; + + const fragmentPragmas = {}; + + fragmentSource = fragmentSource.replace(re, (match, operation, precision, type, name) => { + fragmentPragmas[name] = true; + if (operation === 'define') { + return ` +#ifndef HAS_UNIFORM_u_${name} +varying ${precision} ${type} ${name}; +#else +uniform ${precision} ${type} u_${name}; +#endif +`; + } else /* if (operation === 'initialize') */ { + return ` +#ifdef HAS_UNIFORM_u_${name} + ${precision} ${type} ${name} = u_${name}; +#endif +`; + } + }); + + vertexSource = vertexSource.replace(re, (match, operation, precision, type, name) => { + const attrType = type === 'float' ? 'vec2' : 'vec4'; + const unpackType = name.match(/color/) ? 'color' : attrType; + + if (fragmentPragmas[name]) { + if (operation === 'define') { + return ` +#ifndef HAS_UNIFORM_u_${name} +uniform lowp float a_${name}_t; +attribute ${precision} ${attrType} a_${name}; +varying ${precision} ${type} ${name}; +#else +uniform ${precision} ${type} u_${name}; +#endif +`; + } else /* if (operation === 'initialize') */ { + if (unpackType === 'vec4') { + // vec4 attributes are only used for cross-faded properties, and are not packed + return ` +#ifndef HAS_UNIFORM_u_${name} + ${name} = a_${name}; +#else + ${precision} ${type} ${name} = u_${name}; +#endif +`; + } else { + return ` +#ifndef HAS_UNIFORM_u_${name} + ${name} = unpack_mix_${unpackType}(a_${name}, a_${name}_t); +#else + ${precision} ${type} ${name} = u_${name}; +#endif +`; + } + } + } else { + if (operation === 'define') { + return ` +#ifndef HAS_UNIFORM_u_${name} +uniform lowp float a_${name}_t; +attribute ${precision} ${attrType} a_${name}; +#else +uniform ${precision} ${type} u_${name}; +#endif +`; + } else /* if (operation === 'initialize') */ { + if (unpackType === 'vec4') { + // vec4 attributes are only used for cross-faded properties, and are not packed + return ` +#ifndef HAS_UNIFORM_u_${name} + ${precision} ${type} ${name} = a_${name}; +#else + ${precision} ${type} ${name} = u_${name}; +#endif +`; + } else /* */{ + return ` +#ifndef HAS_UNIFORM_u_${name} + ${precision} ${type} ${name} = unpack_mix_${unpackType}(a_${name}, a_${name}_t); +#else + ${precision} ${type} ${name} = u_${name}; +#endif +`; + } + } + } + }); + + return {fragmentSource, vertexSource}; +} diff --git a/yarn.lock b/yarn.lock index ecf4fb15c10..4d70235e237 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5,12 +5,14 @@ "@babel/code-frame@^7.0.0-beta.42": version "7.0.0-beta.56" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.56.tgz#09f76300673ac085d3b90e02aafa0ffc2c96846a" + integrity sha512-OBeGs8UXWpKl0oK2T5nUXNl2yu8RKxqL/7aUnMtKDXCU6VUrNP3npdrPivBA11HPB15TVI49nWf2lntTzoUuAg== dependencies: "@babel/highlight" "7.0.0-beta.56" "@babel/highlight@7.0.0-beta.56": version "7.0.0-beta.56" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.56.tgz#f8b0fc8c5c2de53bb2c12f9001ad3d99e573696d" + integrity sha512-q4TfI+jJISul6vVpZJktzH4tupwRiVk6KXRhB8PHqJ7erl966I6ePDXl9mAbE8jMM7YswhnnB0j1SYP7LBVyhg== dependencies: chalk "^2.0.0" esutils "^2.0.2" @@ -19,6 +21,7 @@ "@mapbox/babel-plugin-transform-jsxtreme-markdown@^0.5.0": version "0.5.3" resolved "https://registry.yarnpkg.com/@mapbox/babel-plugin-transform-jsxtreme-markdown/-/babel-plugin-transform-jsxtreme-markdown-0.5.3.tgz#fdd4a519dbd897d7e8c67d833f0e7b6fd16d7c2f" + integrity sha512-EdIxxqc2nmZhN1iw/6rGyaEj9XzD2/x/2k3re/OcmLyJwjICEMtrYTgSDvgZyAf/eX/BPOrlK3rizRlGpImnLw== dependencies: "@mapbox/jsxtreme-markdown" "^0.9.3" babylon "^6.18.0" @@ -26,6 +29,7 @@ "@mapbox/batfish@^1.9.4": version "1.9.4" resolved "https://registry.yarnpkg.com/@mapbox/batfish/-/batfish-1.9.4.tgz#53c73ded1a71393cac81eb481b976db7ff206e80" + integrity sha512-nasnpBEYNWUNVso9AtzLKp+93iUlCyl5pTC9aUfW1sRP4e4l+3t3+5QPiupmYFC+12D+qByUiTYLE4qPBi6ycA== dependencies: "@babel/code-frame" "^7.0.0-beta.42" "@mapbox/babel-plugin-transform-jsxtreme-markdown" "^0.5.0" @@ -102,6 +106,7 @@ "@mapbox/flow-remove-types@^1.3.0-await.upstream.1": version "1.3.0-await.upstream.1" resolved "https://registry.yarnpkg.com/@mapbox/flow-remove-types/-/flow-remove-types-1.3.0-await.upstream.1.tgz#58ac26d5270ae3d2d1f95efd0a73eec6651d65c3" + integrity sha512-lWk2ca7N4KUFm1gHV7kEpghMydgH0gcjaQCU7bxCd1Pv1SFR2jKyylwJWUMM4FXPSJm/9fqwRDRgmSUfGH5Geg== dependencies: babylon "^7.0.0-beta.41" pirates "^3.0.2" @@ -110,22 +115,26 @@ "@mapbox/geojson-area@0.2.2": version "0.2.2" resolved "https://registry.yarnpkg.com/@mapbox/geojson-area/-/geojson-area-0.2.2.tgz#18d7814aa36bf23fbbcc379f8e26a22927debf10" + integrity sha1-GNeBSqNr8j+7zDefjiaiKSfevxA= dependencies: wgs84 "0.0.0" "@mapbox/geojson-types@^1.0.2": version "1.0.2" resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" + integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== "@mapbox/hast-util-table-cell-style@^0.1.2": version "0.1.3" resolved "https://registry.yarnpkg.com/@mapbox/hast-util-table-cell-style/-/hast-util-table-cell-style-0.1.3.tgz#5b7166ae01297d72216932b245e4b2f0b642dca6" + integrity sha512-QsEsh5YaDvHoMQ2YHdvZy2iDnU3GgKVBTcHf6cILyoWDZtPSdlG444pL/ioPYO/GpXSfODBb9sefEetfC4v9oA== dependencies: unist-util-visit "^1.3.0" "@mapbox/hast-util-to-jsx@^0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@mapbox/hast-util-to-jsx/-/hast-util-to-jsx-0.1.0.tgz#bf7b475fb949a601dbdaa9437f9c0c4cee94f95c" + integrity sha512-eUPtWyyCXdWEks6rRV6SHArNIiEUIiSn1KmU+poeZ3kCaMQSr2di3Xxukh+RZtQgWyUF7g8IfwjkFdfqtaq9SQ== dependencies: kebab-case "^1.0.0" postcss "^6.0.21" @@ -137,10 +146,12 @@ "@mapbox/jsonlint-lines-primitives@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" + integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= "@mapbox/jsxtreme-markdown-loader@^0.8.2": version "0.8.3" resolved "https://registry.yarnpkg.com/@mapbox/jsxtreme-markdown-loader/-/jsxtreme-markdown-loader-0.8.3.tgz#8a0ef391219997aab0b64136702dc83766de70d2" + integrity sha512-tj7flXQtuS/ClRJ+gm+I6J/8oNaMv5AsfKg3sFLrpV6Ie41JiwgEHAl8zQZQQw8UqS0p4ZCjdhGrhO/sEFneYQ== dependencies: "@mapbox/jsxtreme-markdown" "^0.9.3" loader-utils "^1.1.0" @@ -149,6 +160,7 @@ "@mapbox/jsxtreme-markdown@^0.9.3": version "0.9.3" resolved "https://registry.yarnpkg.com/@mapbox/jsxtreme-markdown/-/jsxtreme-markdown-0.9.3.tgz#c22181ea62414e6cb9a46b0fed4dcfed4d8ece29" + integrity sha512-69CHfV6MfOayOKTas6be4slfX5fZqsYey+zEik7ZMPSq0sTATpEWi8SORxqGG2ek2Ttqot4LLUuuKzzpLTZVkw== dependencies: "@mapbox/hast-util-table-cell-style" "^0.1.2" "@mapbox/hast-util-to-jsx" "^0.1.0" @@ -175,18 +187,22 @@ "@mapbox/link-hijacker@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@mapbox/link-hijacker/-/link-hijacker-1.1.0.tgz#f14a68edabe45424d8bec7375ad13e18cac22bf8" + integrity sha512-Y2Qm9zMFX8Png7fPkjoOfA7d5hs+GR7QRawyb47OgHUOtaeQA4Xa/cPvTpOLNLBGte1mCwXXJw42B4oooEIk5A== "@mapbox/link-to-location@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@mapbox/link-to-location/-/link-to-location-1.0.0.tgz#484a4d922e3e6f7b54fd7964d8035bcb00bbf59a" + integrity sha512-KwqOLogwEQKghRMSNfIPC4GoCcaxngXocopNzhv7INoGmYMRY079zNNyStiOLL00aVY4p5sSVUKsJFt9/f34Tg== "@mapbox/mapbox-gl-rtl-text@^0.2.0": version "0.2.0" resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-rtl-text/-/mapbox-gl-rtl-text-0.2.0.tgz#332fa991dcf6913be369c21f4c20c6c73b5d1c8c" + integrity sha512-oijFgP0DTMRtLzEpZM5lCrlagoQaOXUhZOMKOXaCF56QohKdRO4uu8RUKcuvfpWz6ruQcyH2yikBl09aWh3Duw== "@mapbox/mapbox-gl-supported@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.4.0.tgz#36946b22944fe2cfa43cfafd5ef36fdb54a069e4" + integrity sha512-ZD0Io4XK+/vU/4zpANjOtdWfVszAgnaMPsGR6LKsWh4kLIEv9qoobTVmJPPuwuM+ZI2b3BlZ6DYw1XHVmv6YTA== "@mapbox/mapbox-gl-test-suite@file:test/integration": version "0.0.0" @@ -207,6 +223,7 @@ "@mapbox/mvt-fixtures@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@mapbox/mvt-fixtures/-/mvt-fixtures-3.2.0.tgz#9312bfe1437f889cbc65a9d56efac02bbcb9a91d" + integrity sha512-KfLQfvfqvhQTr+R36EEMRH/NDQA27PSjJNemC2ZW7G+yei7EZAHxaBOLH3jHxQEzsX95vFq9chaKAf/X7VJV7A== dependencies: "@mapbox/sphericalmercator" "^1.0.5" "@mapbox/vector-tile" "^1.3.0" @@ -217,10 +234,12 @@ "@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": version "0.1.0" resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" + integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= "@mapbox/postcss-html-filter@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@mapbox/postcss-html-filter/-/postcss-html-filter-1.0.1.tgz#25d8bcdb20c226d3a3a1d2a3dfc3c4021242e663" + integrity sha512-MN3gNu4o5/OH7XQF3ZeqVTc8459lNLdxc6Y6ZWI36b6vSaL8Mt7s4M/3LldyEmK0AvyguOHTcS7Hfzyz2inCew== dependencies: cheerio "^1.0.0-rc.2" lodash "^4.17.5" @@ -231,10 +250,12 @@ "@mapbox/query-selector-contains-node@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@mapbox/query-selector-contains-node/-/query-selector-contains-node-1.0.0.tgz#b5e1fdbaa0f7e627dc7eeeb625619f09ba2cca0c" + integrity sha512-Z5ENbYjbN5NgfITHq/o9Yspm/tx4H+LdcfnPGksb0KjK2DmRlSY4fN8vzrNLLHcMX05puARr2EU+LkFMK+UNtQ== "@mapbox/scroll-restorer@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@mapbox/scroll-restorer/-/scroll-restorer-1.0.0.tgz#a4eb70a4266612d8e638ff8857c295d57c1c8ead" + integrity sha512-9I1LM4It7968f8dulRoK2VwbWfxY4SL26BWTvQFKFTgPK1Xi+/GhLMe32u4Nm04mR2dhLDQjmAUYQ/p79bESyg== dependencies: debounce "^1.0.2" xtend "^4.0.1" @@ -242,28 +263,34 @@ "@mapbox/sphericalmercator@^1.0.5": version "1.0.5" resolved "https://registry.yarnpkg.com/@mapbox/sphericalmercator/-/sphericalmercator-1.0.5.tgz#70237b9774095ed1cfdbcea7a8fd1fc82b2691f2" + integrity sha1-cCN7l3QJXtHP286nqP0fyCsmkfI= "@mapbox/tiny-sdf@^1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.0.tgz#b0b8f5c22005e6ddb838f421ffd257c1f74f9a20" + integrity sha512-dnhyk8X2BkDRWImgHILYAGgo+kuciNYX30CUKj/Qd5eNjh54OWM/mdOS/PWsPeN+3abtN+QDGYM4G220ynVJKA== "@mapbox/unitbezier@^0.0.0": version "0.0.0" resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" + integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= "@mapbox/vector-tile@^1.3.0", "@mapbox/vector-tile@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" + integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== dependencies: "@mapbox/point-geometry" "~0.1.0" "@mapbox/whoots-js@^3.1.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" + integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" + integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== dependencies: call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" @@ -271,6 +298,7 @@ "@octokit/rest@^15.9.5": version "15.9.5" resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.9.5.tgz#e356d202bd0b517e381f705ad77d98ccb84e0c65" + integrity sha512-vJEHSTnI4UAbCDTjVSQljPeX81zsQVNj2ruM5Oj5gxOttHD0TcfWeElcJYoITCMxQTgN6Y+bJFo6/+/0CqoacA== dependencies: before-after-hook "^1.1.0" btoa-lite "^1.0.0" @@ -284,24 +312,29 @@ "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" + integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== "@sinonjs/formatio@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" + integrity sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg== dependencies: samsam "1.3.0" "@types/estree@0.0.39": version "0.0.39" resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" + integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== "@types/node@*": version "9.4.6" resolved "https://registry.yarnpkg.com/@types/node/-/node-9.4.6.tgz#d8176d864ee48753d053783e4e463aec86b8d82e" + integrity sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ== JSONStream@^1.0.3, JSONStream@^1.0.4: version "1.3.2" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.2.tgz#c102371b6ec3a7cf3b847ca00c20bb0fce4c6dea" + integrity sha1-wQI3G27Dp887hHygDCC7D85Mbeo= dependencies: jsonparse "^1.2.0" through ">=2.2.7 <3" @@ -309,14 +342,17 @@ JSONStream@^1.0.3, JSONStream@^1.0.4: abab@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" + integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== accepts@~1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + integrity sha1-hiRnWMfdbSGmR0/whKR0DsBesh8= dependencies: mime-types "~2.1.16" negotiator "0.6.1" @@ -324,24 +360,28 @@ accepts@~1.3.4: acorn-dynamic-import@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= dependencies: acorn "^4.0.3" acorn-globals@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" + integrity sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ== dependencies: acorn "^5.0.0" acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" + integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= dependencies: acorn "^3.0.4" acorn-node@^1.2.0, acorn-node@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" + integrity sha512-efP54n3d1aLfjL2UMdaXa6DsswwzJeI5rqhbFvXMrKiJ6eJFpf+7R0zN7t8IC+XKn2YOAFAv6xbBNgHUkoHWLw== dependencies: acorn "^5.4.1" xtend "^4.0.1" @@ -349,58 +389,71 @@ acorn-node@^1.2.0, acorn-node@^1.3.0: acorn5-object-spread@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/acorn5-object-spread/-/acorn5-object-spread-4.0.0.tgz#d5758081eed97121ab0be47e31caaef2aa399697" + integrity sha1-1XWAge7ZcSGrC+R+Mcqu8qo5lpc= dependencies: acorn "^5.1.2" acorn@^3.0.4: version "3.3.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" + integrity sha1-ReN/s56No/JbruP/U2niu18iAXo= acorn@^4.0.0, acorn@^4.0.3, acorn@^4.0.4: version "4.0.13" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= acorn@^5.0.0: version "5.5.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" + integrity sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ== acorn@^5.1.2, acorn@^5.2.1, acorn@^5.4.0: version "5.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" + integrity sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ== acorn@^5.3.0: version "5.7.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" + integrity sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ== acorn@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" + integrity sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g== add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" + integrity sha1-anmQQ3ynNtXhKI25K9MmbV9csqo= address@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/address/-/address-1.0.3.tgz#b5f50631f8d6cec8bd20c963963afb55e06cbce9" + integrity sha512-z55ocwKBRLryBs394Sm3ushTtBeg6VAeuku7utSoSnsJKvKcnXFIyC6vh27n3rXyxSgkJBBCAvyOn7gSUcTYjg== agent-base@4, agent-base@^4.1.0: version "4.2.1" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.2.1.tgz#d89e5999f797875674c07d87f260fc41e83e8ca9" + integrity sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg== dependencies: es6-promisify "^5.0.0" ajv-keywords@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" + integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= ajv-keywords@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" + integrity sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74= ajv@^4.9.1: version "4.11.8" resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + integrity sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY= dependencies: co "^4.6.0" json-stable-stringify "^1.0.1" @@ -408,6 +461,7 @@ ajv@^4.9.1: ajv@^5.1.0, ajv@^5.2.3: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" + integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= dependencies: co "^4.6.0" fast-deep-equal "^1.0.0" @@ -417,6 +471,7 @@ ajv@^5.1.0, ajv@^5.2.3: ajv@^6.1.0: version "6.1.1" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.1.1.tgz#978d597fbc2b7d0e5a5c3ddeb149a682f2abfa0e" + integrity sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4= dependencies: fast-deep-equal "^1.0.0" fast-json-stable-stringify "^2.0.0" @@ -425,6 +480,7 @@ ajv@^6.1.0: align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= dependencies: kind-of "^3.0.2" longest "^1.0.1" @@ -433,48 +489,58 @@ align-text@^0.1.1, align-text@^0.1.3: amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= ansi-align@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha1-w2rsy6VjuJzrVW82kPCx2eNUf38= dependencies: string-width "^2.0.0" ansi-escapes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.0.0.tgz#ec3e8b4e9f8064fc02c3ac9b65f1c275bda8ef92" + integrity sha512-O/klc27mWNUigtv0F8NJWbLF00OcegQalkqKURWdosW08YZKi4m6CnSUSvIZG1otNJbTWhN01Hhz389DW7mvDQ== ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" + integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= ansi-regex@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= ansi-styles@^2.0.1, ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" + integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= ansi-styles@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + integrity sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug== dependencies: color-convert "^1.9.0" ansi-styles@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== dependencies: color-convert "^1.9.0" anymatch@^1.3.0: version "1.3.2" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + integrity sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA== dependencies: micromatch "^2.1.5" normalize-path "^2.0.0" @@ -482,6 +548,7 @@ anymatch@^1.3.0: anymatch@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== dependencies: micromatch "^3.1.4" normalize-path "^2.1.1" @@ -489,36 +556,43 @@ anymatch@^2.0.0: apache-crypt@^1.1.2: version "1.2.1" resolved "https://registry.yarnpkg.com/apache-crypt/-/apache-crypt-1.2.1.tgz#d6fc72aa6d27d99c95a94fd188d731eefffa663c" + integrity sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw= dependencies: unix-crypt-td-js "^1.0.0" apache-md5@^1.0.6: version "1.1.2" resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.2.tgz#ee49736b639b4f108b6e9e626c6da99306b41692" + integrity sha1-7klza2ObTxCLbp5ibG2pkwa0FpI= append-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" + integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= dependencies: buffer-equal "^1.0.0" append-transform@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-0.4.0.tgz#d76ebf8ca94d276e247a36bad44a4b74ab611991" + integrity sha1-126/jKlNJ24keja61EpLdKthGZE= dependencies: default-require-extensions "^1.0.0" aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== archy@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= are-we-there-yet@~1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + integrity sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0= dependencies: delegates "^1.0.0" readable-stream "^2.0.6" @@ -526,46 +600,56 @@ are-we-there-yet@~1.1.2: argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" arr-diff@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + integrity sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8= dependencies: arr-flatten "^1.0.1" arr-diff@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= arr-flatten@^1.0.1, arr-flatten@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== arr-union@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" + integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= array-filter@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec" + integrity sha1-fajPLiZijtcygDWB/SH2fKzS7uw= array-find-index@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" + integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4= array-includes@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.0.3.tgz#184b48f62d92d7452bb31b323165c7f8bd02266d" + integrity sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0= dependencies: define-properties "^1.1.2" es-abstract "^1.7.0" @@ -573,36 +657,44 @@ array-includes@^3.0.3: array-iterate@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/array-iterate/-/array-iterate-1.1.1.tgz#865bf7f8af39d6b0982c60902914ac76bc0108f6" + integrity sha1-hlv3+K851rCYLGCQKRSsdrwBCPY= array-map@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-map/-/array-map-0.0.0.tgz#88a2bab73d1cf7bcd5c1b118a003f66f665fa662" + integrity sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI= array-reduce@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/array-reduce/-/array-reduce-0.0.0.tgz#173899d3ffd1c7d9383e4479525dbe278cab5f2b" + integrity sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys= array-union@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" + integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= dependencies: array-uniq "^1.0.1" array-uniq@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + integrity sha1-odl8yvy8JiXMcPrc6zalDFiwGlM= array-unique@^0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= array.prototype.find@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.0.tgz#56a9ab1edde2a7701ed6d9166acec338919d8430" + integrity sha1-VqmrHt3ip3Ae1tkWas7DOJGdhDA= dependencies: define-properties "^1.1.2" es-abstract "^1.5.0" @@ -610,14 +702,17 @@ array.prototype.find@2.0.0: arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= asap@~2.0.3: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY= asn1.js@^4.0.0: version "4.10.1" resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" + integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== dependencies: bn.js "^4.0.0" inherits "^2.0.1" @@ -626,24 +721,29 @@ asn1.js@^4.0.0: asn1@~0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y= assert-plus@1.0.0, assert-plus@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= assert-plus@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + integrity sha1-104bh+ev/A24qttwIfP+SBAasjQ= assert@^1.1.1, assert@^1.4.0: version "1.4.1" resolved "https://registry.yarnpkg.com/assert/-/assert-1.4.1.tgz#99912d591836b5a6f5b345c0f07eefc08fc65d91" + integrity sha1-mZEtWRg2tab1s0XA8H7vwI/GXZE= dependencies: util "0.10.3" assets-webpack-plugin@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/assets-webpack-plugin/-/assets-webpack-plugin-3.5.1.tgz#931ce0d66d42e88ed5e7f18d65522943c57a387d" + integrity sha1-kxzg1m1C6I7V5/GNZVIpQ8V6OH0= dependencies: camelcase "^1.2.1" escape-string-regexp "^1.0.3" @@ -654,48 +754,58 @@ assets-webpack-plugin@^3.5.1: assign-symbols@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= astw@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/astw/-/astw-2.2.0.tgz#7bd41784d32493987aeb239b6b4e1c57a873b917" + integrity sha1-e9QXhNMkk5h66yOba04cV6hzuRc= dependencies: acorn "^4.0.3" async-cache@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a" + integrity sha1-SppaidBl7F2OUlS9nulrp2xTK1o= dependencies: lru-cache "^4.0.0" async-each@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + integrity sha1-GdOGodntxufByF04iu28xW0zYC0= async-limiter@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" + integrity sha512-jp/uFnooOiO+L211eZOoSyzpOITMXx1rBITauYykG3BRYPu8h0UcxsPNB04RR5vo4Tyz3+ay17tR6JVf9qzYWg== async@^1.4.0: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= async@^2.1.2: version "2.6.0" resolved "https://registry.yarnpkg.com/async/-/async-2.6.0.tgz#61a29abb6fcc026fea77e56d1c6ec53a795951f4" + integrity sha512-xAfGg1/NTLBBKlHFmnd7PlmUW9KhVQIUuSrYem9xzFUZy13ScvtyGGejaae9iAVRiRq9+Cx7DPFaAAhCpyxyPw== dependencies: lodash "^4.14.0" asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" + integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10= autoprefixer@^7.1.2: version "7.2.6" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" + integrity sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ== dependencies: browserslist "^2.11.3" caniuse-lite "^1.0.30000805" @@ -707,6 +817,7 @@ autoprefixer@^7.1.2: autoprefixer@^8.2.0: version "8.6.5" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" + integrity sha512-PLWJN3Xo/rycNkx+mp8iBDMTm3FeWe4VmYaZDSqL5QQB9sLsQkG5k8n+LNDFnhh9kdq2K+egL/icpctOmDHwig== dependencies: browserslist "^3.2.8" caniuse-lite "^1.0.30000864" @@ -718,18 +829,22 @@ autoprefixer@^8.2.0: aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + integrity sha1-FDQt0428yU0OW4fXY81jYSwOeU8= aws-sign2@~0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= aws4@^1.2.1, aws4@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= dependencies: chalk "^1.1.3" esutils "^2.0.2" @@ -738,6 +853,7 @@ babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: babel-core@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.0.tgz#af32f78b31a6fcef119c87b0fd8d9753f03a0bb8" + integrity sha1-rzL3izGm/O8RnIew/Y2XU/A6C7g= dependencies: babel-code-frame "^6.26.0" babel-generator "^6.26.0" @@ -762,6 +878,7 @@ babel-core@^6.26.0: babel-eslint@^7.0.0: version "7.2.3" resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" + integrity sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc= dependencies: babel-code-frame "^6.22.0" babel-traverse "^6.23.1" @@ -771,6 +888,7 @@ babel-eslint@^7.0.0: babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== dependencies: babel-messages "^6.23.0" babel-runtime "^6.26.0" @@ -784,6 +902,7 @@ babel-generator@^6.18.0, babel-generator@^6.26.0: babel-helper-bindify-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-bindify-decorators/-/babel-helper-bindify-decorators-6.24.1.tgz#14c19e5f142d7b47f19a52431e52b1ccbc40a330" + integrity sha1-FMGeXxQte0fxmlJDHlKxzLxAozA= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -792,6 +911,7 @@ babel-helper-bindify-decorators@^6.24.1: babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-builder-binary-assignment-operator-visitor/-/babel-helper-builder-binary-assignment-operator-visitor-6.24.1.tgz#cce4517ada356f4220bcae8a02c2b346f9a56664" + integrity sha1-zORReto1b0IgvK6KAsKzRvmlZmQ= dependencies: babel-helper-explode-assignable-expression "^6.24.1" babel-runtime "^6.22.0" @@ -800,6 +920,7 @@ babel-helper-builder-binary-assignment-operator-visitor@^6.24.1: babel-helper-builder-react-jsx@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-builder-react-jsx/-/babel-helper-builder-react-jsx-6.26.0.tgz#39ff8313b75c8b65dceff1f31d383e0ff2a408a0" + integrity sha1-Of+DE7dci2Xc7/HzHTg+D/KkCKA= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -808,6 +929,7 @@ babel-helper-builder-react-jsx@^6.24.1: babel-helper-call-delegate@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-call-delegate/-/babel-helper-call-delegate-6.24.1.tgz#ece6aacddc76e41c3461f88bfc575bd0daa2df8d" + integrity sha1-7Oaqzdx25Bw0YfiL/Fdb0Nqi340= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -817,6 +939,7 @@ babel-helper-call-delegate@^6.24.1: babel-helper-define-map@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.26.0.tgz#a5f56dab41a25f97ecb498c7ebaca9819f95be5f" + integrity sha1-pfVtq0GiX5fstJjH66ypgZ+Vvl8= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.26.0" @@ -826,6 +949,7 @@ babel-helper-define-map@^6.24.1: babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" + integrity sha1-8luCz33BBDPFX3BZLVdGQArCLKo= dependencies: babel-runtime "^6.22.0" babel-traverse "^6.24.1" @@ -834,6 +958,7 @@ babel-helper-explode-assignable-expression@^6.24.1: babel-helper-explode-class@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-class/-/babel-helper-explode-class-6.24.1.tgz#7dc2a3910dee007056e1e31d640ced3d54eaa9eb" + integrity sha1-fcKjkQ3uAHBW4eMdZAztPVTqqes= dependencies: babel-helper-bindify-decorators "^6.24.1" babel-runtime "^6.22.0" @@ -843,6 +968,7 @@ babel-helper-explode-class@^6.24.1: babel-helper-function-name@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-function-name/-/babel-helper-function-name-6.24.1.tgz#d3475b8c03ed98242a25b48351ab18399d3580a9" + integrity sha1-00dbjAPtmCQqJbSDUasYOZ01gKk= dependencies: babel-helper-get-function-arity "^6.24.1" babel-runtime "^6.22.0" @@ -853,6 +979,7 @@ babel-helper-function-name@^6.24.1: babel-helper-get-function-arity@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-get-function-arity/-/babel-helper-get-function-arity-6.24.1.tgz#8f7782aa93407c41d3aa50908f89b031b1b6853d" + integrity sha1-j3eCqpNAfEHTqlCQj4mwMbG2hT0= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -860,6 +987,7 @@ babel-helper-get-function-arity@^6.24.1: babel-helper-hoist-variables@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-hoist-variables/-/babel-helper-hoist-variables-6.24.1.tgz#1ecb27689c9d25513eadbc9914a73f5408be7a76" + integrity sha1-HssnaJydJVE+rbyZFKc/VAi+enY= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -867,6 +995,7 @@ babel-helper-hoist-variables@^6.24.1: babel-helper-optimise-call-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" + integrity sha1-96E0J7qfc/j0+pk8VKl4gtEkQlc= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -874,6 +1003,7 @@ babel-helper-optimise-call-expression@^6.24.1: babel-helper-regex@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.26.0.tgz#325c59f902f82f24b74faceed0363954f6495e72" + integrity sha1-MlxZ+QL4LyS3T6zu0DY5VPZJXnI= dependencies: babel-runtime "^6.26.0" babel-types "^6.26.0" @@ -882,6 +1012,7 @@ babel-helper-regex@^6.24.1: babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" + integrity sha1-XsWBgnrXI/7N04HxySg5BnbkVRs= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -892,6 +1023,7 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-helper-replace-supers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" + integrity sha1-v22/5Dk40XNpohPKiov3S2qQqxo= dependencies: babel-helper-optimise-call-expression "^6.24.1" babel-messages "^6.23.0" @@ -903,6 +1035,7 @@ babel-helper-replace-supers@^6.24.1: babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -910,6 +1043,7 @@ babel-helpers@^6.24.1: babel-loader@^7.1.4: version "7.1.5" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-7.1.5.tgz#e3ee0cd7394aa557e013b02d3e492bfd07aa6d68" + integrity sha512-iCHfbieL5d1LfOQeeVJEUyD9rTwBcP/fcEbRCfempxTDuqrKpu0AZjLAQHEQa3Yqyj9ORKe2iHfoj4rHLf7xpw== dependencies: find-cache-dir "^1.0.0" loader-utils "^1.0.2" @@ -918,80 +1052,98 @@ babel-loader@^7.1.4: babel-messages@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= dependencies: babel-runtime "^6.22.0" babel-plugin-check-es2015-constants@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" + integrity sha1-NRV7EBQm/S/9PaP3XH0ekYNbv4o= dependencies: babel-runtime "^6.22.0" babel-plugin-syntax-async-functions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-functions/-/babel-plugin-syntax-async-functions-6.13.0.tgz#cad9cad1191b5ad634bf30ae0872391e0647be95" + integrity sha1-ytnK0RkbWtY0vzCuCHI5HgZHvpU= babel-plugin-syntax-async-generators@^6.5.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-async-generators/-/babel-plugin-syntax-async-generators-6.13.0.tgz#6bc963ebb16eccbae6b92b596eb7f35c342a8b9a" + integrity sha1-a8lj67FuzLrmuStZbrfzXDQqi5o= babel-plugin-syntax-class-constructor-call@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-constructor-call/-/babel-plugin-syntax-class-constructor-call-6.18.0.tgz#9cb9d39fe43c8600bec8146456ddcbd4e1a76416" + integrity sha1-nLnTn+Q8hgC+yBRkVt3L1OGnZBY= babel-plugin-syntax-class-properties@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-class-properties/-/babel-plugin-syntax-class-properties-6.13.0.tgz#d7eb23b79a317f8543962c505b827c7d6cac27de" + integrity sha1-1+sjt5oxf4VDlixQW4J8fWysJ94= babel-plugin-syntax-decorators@^6.1.18, babel-plugin-syntax-decorators@^6.13.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-decorators/-/babel-plugin-syntax-decorators-6.13.0.tgz#312563b4dbde3cc806cee3e416cceeaddd11ac0b" + integrity sha1-MSVjtNvePMgGzuPkFszurd0RrAs= babel-plugin-syntax-do-expressions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-do-expressions/-/babel-plugin-syntax-do-expressions-6.13.0.tgz#5747756139aa26d390d09410b03744ba07e4796d" + integrity sha1-V0d1YTmqJtOQ0JQQsDdEugfkeW0= babel-plugin-syntax-dynamic-import@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-dynamic-import/-/babel-plugin-syntax-dynamic-import-6.18.0.tgz#8d6a26229c83745a9982a441051572caa179b1da" + integrity sha1-jWomIpyDdFqZgqRBBRVyyqF5sdo= babel-plugin-syntax-exponentiation-operator@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-exponentiation-operator/-/babel-plugin-syntax-exponentiation-operator-6.13.0.tgz#9ee7e8337290da95288201a6a57f4170317830de" + integrity sha1-nufoM3KQ2pUoggGmpX9BcDF4MN4= babel-plugin-syntax-export-extensions@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-export-extensions/-/babel-plugin-syntax-export-extensions-6.13.0.tgz#70a1484f0f9089a4e84ad44bac353c95b9b12721" + integrity sha1-cKFITw+QiaToStRLrDU8lbmxJyE= babel-plugin-syntax-flow@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-flow/-/babel-plugin-syntax-flow-6.18.0.tgz#4c3ab20a2af26aa20cd25995c398c4eb70310c8d" + integrity sha1-TDqyCiryaqIM0lmVw5jE63AxDI0= babel-plugin-syntax-function-bind@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-function-bind/-/babel-plugin-syntax-function-bind-6.13.0.tgz#48c495f177bdf31a981e732f55adc0bdd2601f46" + integrity sha1-SMSV8Xe98xqYHnMvVa3AvdJgH0Y= babel-plugin-syntax-jsx@^6.3.13, babel-plugin-syntax-jsx@^6.8.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-jsx/-/babel-plugin-syntax-jsx-6.18.0.tgz#0af32a9a6e13ca7a3fd5069e62d7b0f58d0d8946" + integrity sha1-CvMqmm4Tyno/1QaeYtew9Y0NiUY= babel-plugin-syntax-object-rest-spread@^6.8.0: version "6.13.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz#fd6536f2bce13836ffa3a5458c4903a597bb3bf5" + integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U= babel-plugin-syntax-trailing-function-commas@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-syntax-trailing-function-commas/-/babel-plugin-syntax-trailing-function-commas-6.22.0.tgz#ba0360937f8d06e40180a43fe0d5616fff532cf3" + integrity sha1-ugNgk3+NBuQBgKQ/4NVhb/9TLPM= babel-plugin-system-import-transformer@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-system-import-transformer/-/babel-plugin-system-import-transformer-3.1.0.tgz#d37f0cae8e61ef39060208331d931b5e630d7c5f" + integrity sha1-038Mro5h7zkGAggzHZMbXmMNfF8= dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-async-generator-functions@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-generator-functions/-/babel-plugin-transform-async-generator-functions-6.24.1.tgz#f058900145fd3e9907a6ddf28da59f215258a5db" + integrity sha1-8FiQAUX9PpkHpt3yjaWfIVJYpds= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-generators "^6.5.0" @@ -1000,6 +1152,7 @@ babel-plugin-transform-async-generator-functions@^6.24.1: babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-generator/-/babel-plugin-transform-async-to-generator-6.24.1.tgz#6536e378aff6cb1d5517ac0e40eb3e9fc8d08761" + integrity sha1-ZTbjeK/2yx1VF6wOQOs+n8jQh2E= dependencies: babel-helper-remap-async-to-generator "^6.24.1" babel-plugin-syntax-async-functions "^6.8.0" @@ -1008,6 +1161,7 @@ babel-plugin-transform-async-to-generator@^6.22.0, babel-plugin-transform-async- babel-plugin-transform-class-constructor-call@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-constructor-call/-/babel-plugin-transform-class-constructor-call-6.24.1.tgz#80dc285505ac067dcb8d6c65e2f6f11ab7765ef9" + integrity sha1-gNwoVQWsBn3LjWxl4vbxGrd2Xvk= dependencies: babel-plugin-syntax-class-constructor-call "^6.18.0" babel-runtime "^6.22.0" @@ -1016,6 +1170,7 @@ babel-plugin-transform-class-constructor-call@^6.24.1: babel-plugin-transform-class-properties@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-class-properties/-/babel-plugin-transform-class-properties-6.24.1.tgz#6a79763ea61d33d36f37b611aa9def81a81b46ac" + integrity sha1-anl2PqYdM9NvN7YRqp3vgagbRqw= dependencies: babel-helper-function-name "^6.24.1" babel-plugin-syntax-class-properties "^6.8.0" @@ -1025,6 +1180,7 @@ babel-plugin-transform-class-properties@^6.24.1: babel-plugin-transform-decorators-legacy@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators-legacy/-/babel-plugin-transform-decorators-legacy-1.3.4.tgz#741b58f6c5bce9e6027e0882d9c994f04f366925" + integrity sha1-dBtY9sW86eYCfgiC2cmU8E82aSU= dependencies: babel-plugin-syntax-decorators "^6.1.18" babel-runtime "^6.2.0" @@ -1033,6 +1189,7 @@ babel-plugin-transform-decorators-legacy@^1.3.4: babel-plugin-transform-decorators@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-decorators/-/babel-plugin-transform-decorators-6.24.1.tgz#788013d8f8c6b5222bdf7b344390dfd77569e24d" + integrity sha1-eIAT2PjGtSIr33s0Q5Df13Vp4k0= dependencies: babel-helper-explode-class "^6.24.1" babel-plugin-syntax-decorators "^6.13.0" @@ -1043,6 +1200,7 @@ babel-plugin-transform-decorators@^6.24.1: babel-plugin-transform-do-expressions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-do-expressions/-/babel-plugin-transform-do-expressions-6.22.0.tgz#28ccaf92812d949c2cd1281f690c8fdc468ae9bb" + integrity sha1-KMyvkoEtlJws0SgfaQyP3EaK6bs= dependencies: babel-plugin-syntax-do-expressions "^6.8.0" babel-runtime "^6.22.0" @@ -1050,18 +1208,21 @@ babel-plugin-transform-do-expressions@^6.22.0: babel-plugin-transform-es2015-arrow-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" + integrity sha1-RSaSy3EdX3ncf4XkQM5BufJE0iE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" + integrity sha1-u8UbSflk1wy42OC5ToICRs46YUE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-block-scoping@^6.23.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" + integrity sha1-1w9SmcEwjQXBL0Y4E7CgnnOxiV8= dependencies: babel-runtime "^6.26.0" babel-template "^6.26.0" @@ -1072,6 +1233,7 @@ babel-plugin-transform-es2015-block-scoping@^6.23.0: babel-plugin-transform-es2015-classes@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" + integrity sha1-WkxYpQyclGHlZLSyo7+ryXolhNs= dependencies: babel-helper-define-map "^6.24.1" babel-helper-function-name "^6.24.1" @@ -1086,6 +1248,7 @@ babel-plugin-transform-es2015-classes@^6.23.0: babel-plugin-transform-es2015-computed-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" + integrity sha1-b+Ko0WiV1WNPTNmZttNICjCBWbM= dependencies: babel-runtime "^6.22.0" babel-template "^6.24.1" @@ -1093,12 +1256,14 @@ babel-plugin-transform-es2015-computed-properties@^6.22.0: babel-plugin-transform-es2015-destructuring@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" + integrity sha1-mXux8auWf2gtKwh2/jWNYOdlxW0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-duplicate-keys@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" + integrity sha1-c+s9MQypaePvnskcU3QabxV2Qj4= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1106,12 +1271,14 @@ babel-plugin-transform-es2015-duplicate-keys@^6.22.0: babel-plugin-transform-es2015-for-of@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" + integrity sha1-9HyVsrYT3x0+zC/bdXNiPHUkhpE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-function-name@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" + integrity sha1-g0yJhTvDaxrw86TF26qU/Y6sqos= dependencies: babel-helper-function-name "^6.24.1" babel-runtime "^6.22.0" @@ -1120,12 +1287,14 @@ babel-plugin-transform-es2015-function-name@^6.22.0: babel-plugin-transform-es2015-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" + integrity sha1-T1SgLWzWbPkVKAAZox0xklN3yi4= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015-modules-amd@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" + integrity sha1-Oz5UAXI5hC1tGcMBHEvS8AoA0VQ= dependencies: babel-plugin-transform-es2015-modules-commonjs "^6.24.1" babel-runtime "^6.22.0" @@ -1134,6 +1303,7 @@ babel-plugin-transform-es2015-modules-amd@^6.22.0, babel-plugin-transform-es2015 babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" + integrity sha1-DYOUApt9xqvhqX7xgeAHWN0uXYo= dependencies: babel-plugin-transform-strict-mode "^6.24.1" babel-runtime "^6.26.0" @@ -1143,6 +1313,7 @@ babel-plugin-transform-es2015-modules-commonjs@^6.23.0, babel-plugin-transform-e babel-plugin-transform-es2015-modules-systemjs@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" + integrity sha1-/4mhQrkRmpBhlfXxBuzzBdlAfSM= dependencies: babel-helper-hoist-variables "^6.24.1" babel-runtime "^6.22.0" @@ -1151,6 +1322,7 @@ babel-plugin-transform-es2015-modules-systemjs@^6.23.0: babel-plugin-transform-es2015-modules-umd@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" + integrity sha1-rJl+YoXNGO1hdq22B9YCNErThGg= dependencies: babel-plugin-transform-es2015-modules-amd "^6.24.1" babel-runtime "^6.22.0" @@ -1159,6 +1331,7 @@ babel-plugin-transform-es2015-modules-umd@^6.23.0: babel-plugin-transform-es2015-object-super@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" + integrity sha1-JM72muIcuDp/hgPa0CH1cusnj40= dependencies: babel-helper-replace-supers "^6.24.1" babel-runtime "^6.22.0" @@ -1166,6 +1339,7 @@ babel-plugin-transform-es2015-object-super@^6.22.0: babel-plugin-transform-es2015-parameters@^6.23.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" + integrity sha1-V6w1GrScrxSpfNE7CfZv3wpiXys= dependencies: babel-helper-call-delegate "^6.24.1" babel-helper-get-function-arity "^6.24.1" @@ -1177,6 +1351,7 @@ babel-plugin-transform-es2015-parameters@^6.23.0: babel-plugin-transform-es2015-shorthand-properties@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" + integrity sha1-JPh11nIch2YbvZmkYi5R8U3jiqA= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1184,12 +1359,14 @@ babel-plugin-transform-es2015-shorthand-properties@^6.22.0: babel-plugin-transform-es2015-spread@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" + integrity sha1-1taKmfia7cRTbIGlQujdnxdG+NE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-sticky-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" + integrity sha1-AMHNsaynERLN8M9hJsLta0V8zbw= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -1198,18 +1375,21 @@ babel-plugin-transform-es2015-sticky-regex@^6.22.0: babel-plugin-transform-es2015-template-literals@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" + integrity sha1-qEs0UPfp+PH2g51taH2oS7EjbY0= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-typeof-symbol@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" + integrity sha1-3sCfHN3/lLUqxz1QXITfWdzOs3I= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-es2015-unicode-regex@^6.22.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" + integrity sha1-04sS9C6nMj9yk4fxinxa4frrNek= dependencies: babel-helper-regex "^6.24.1" babel-runtime "^6.22.0" @@ -1218,6 +1398,7 @@ babel-plugin-transform-es2015-unicode-regex@^6.22.0: babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" + integrity sha1-KrDJx/MJj6SJB3cruBP+QejeOg4= dependencies: babel-helper-builder-binary-assignment-operator-visitor "^6.24.1" babel-plugin-syntax-exponentiation-operator "^6.8.0" @@ -1226,6 +1407,7 @@ babel-plugin-transform-exponentiation-operator@^6.22.0, babel-plugin-transform-e babel-plugin-transform-export-extensions@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-export-extensions/-/babel-plugin-transform-export-extensions-6.22.0.tgz#53738b47e75e8218589eea946cbbd39109bbe653" + integrity sha1-U3OLR+deghhYnuqUbLvTkQm75lM= dependencies: babel-plugin-syntax-export-extensions "^6.8.0" babel-runtime "^6.22.0" @@ -1233,6 +1415,7 @@ babel-plugin-transform-export-extensions@^6.22.0: babel-plugin-transform-flow-strip-types@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-flow-strip-types/-/babel-plugin-transform-flow-strip-types-6.22.0.tgz#84cb672935d43714fdc32bce84568d87441cf7cf" + integrity sha1-hMtnKTXUNxT9wyvOhFaNh0Qc988= dependencies: babel-plugin-syntax-flow "^6.18.0" babel-runtime "^6.22.0" @@ -1240,6 +1423,7 @@ babel-plugin-transform-flow-strip-types@^6.22.0: babel-plugin-transform-function-bind@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-function-bind/-/babel-plugin-transform-function-bind-6.22.0.tgz#c6fb8e96ac296a310b8cf8ea401462407ddf6a97" + integrity sha1-xvuOlqwpajELjPjqQBRiQH3fapc= dependencies: babel-plugin-syntax-function-bind "^6.8.0" babel-runtime "^6.22.0" @@ -1247,6 +1431,7 @@ babel-plugin-transform-function-bind@^6.22.0: babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object-rest-spread@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-object-rest-spread/-/babel-plugin-transform-object-rest-spread-6.26.0.tgz#0f36692d50fef6b7e2d4b3ac1478137a963b7b06" + integrity sha1-DzZpLVD+9rfi1LOsFHgTepY7ewY= dependencies: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.26.0" @@ -1254,12 +1439,14 @@ babel-plugin-transform-object-rest-spread@^6.22.0, babel-plugin-transform-object babel-plugin-transform-react-display-name@^6.23.0: version "6.25.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-display-name/-/babel-plugin-transform-react-display-name-6.25.0.tgz#67e2bf1f1e9c93ab08db96792e05392bf2cc28d1" + integrity sha1-Z+K/Hx6ck6sI25Z5LgU5K/LMKNE= dependencies: babel-runtime "^6.22.0" babel-plugin-transform-react-jsx-self@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-self/-/babel-plugin-transform-react-jsx-self-6.22.0.tgz#df6d80a9da2612a121e6ddd7558bcbecf06e636e" + integrity sha1-322AqdomEqEh5t3XVYvL7PBuY24= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1267,6 +1454,7 @@ babel-plugin-transform-react-jsx-self@^6.22.0: babel-plugin-transform-react-jsx-source@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx-source/-/babel-plugin-transform-react-jsx-source-6.22.0.tgz#66ac12153f5cd2d17b3c19268f4bf0197f44ecd6" + integrity sha1-ZqwSFT9c0tF7PBkmj0vwGX9E7NY= dependencies: babel-plugin-syntax-jsx "^6.8.0" babel-runtime "^6.22.0" @@ -1274,6 +1462,7 @@ babel-plugin-transform-react-jsx-source@^6.22.0: babel-plugin-transform-react-jsx@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-jsx/-/babel-plugin-transform-react-jsx-6.24.1.tgz#840a028e7df460dfc3a2d29f0c0d91f6376e66a3" + integrity sha1-hAoCjn30YN/DotKfDA2R9jduZqM= dependencies: babel-helper-builder-react-jsx "^6.24.1" babel-plugin-syntax-jsx "^6.8.0" @@ -1282,16 +1471,19 @@ babel-plugin-transform-react-jsx@^6.24.1: babel-plugin-transform-react-remove-prop-types@^0.4.13: version "0.4.13" resolved "https://registry.yarnpkg.com/babel-plugin-transform-react-remove-prop-types/-/babel-plugin-transform-react-remove-prop-types-0.4.13.tgz#331cfc05099a808238311d78319c27460d481189" + integrity sha1-Mxz8BQmagII4MR14MZwnRg1IEYk= babel-plugin-transform-regenerator@^6.22.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.26.0.tgz#e0703696fbde27f0a3efcacf8b4dca2f7b3a8f2f" + integrity sha1-4HA2lvveJ/Cj78rPi03KL3s6jy8= dependencies: regenerator-transform "^0.10.0" babel-plugin-transform-strict-mode@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-strict-mode/-/babel-plugin-transform-strict-mode-6.24.1.tgz#d5faf7aa578a65bbe591cf5edae04a0c67020758" + integrity sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g= dependencies: babel-runtime "^6.22.0" babel-types "^6.24.1" @@ -1299,6 +1491,7 @@ babel-plugin-transform-strict-mode@^6.24.1: babel-preset-env@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/babel-preset-env/-/babel-preset-env-1.6.1.tgz#a18b564cc9b9afdf4aae57ae3c1b0d99188e6f48" + integrity sha512-W6VIyA6Ch9ePMI7VptNn2wBM6dbG0eSz25HEiL40nQXCsXGTGZSTZu1Iap+cj3Q0S5a7T9+529l/5Bkvd+afNA== dependencies: babel-plugin-check-es2015-constants "^6.22.0" babel-plugin-syntax-trailing-function-commas "^6.22.0" @@ -1334,12 +1527,14 @@ babel-preset-env@^1.6.1: babel-preset-flow@^6.23.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-preset-flow/-/babel-preset-flow-6.23.0.tgz#e71218887085ae9a24b5be4169affb599816c49d" + integrity sha1-5xIYiHCFrpoktb5Baa/7WZgWxJ0= dependencies: babel-plugin-transform-flow-strip-types "^6.22.0" babel-preset-react@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-react/-/babel-preset-react-6.24.1.tgz#ba69dfaea45fc3ec639b6a4ecea6e17702c91380" + integrity sha1-umnfrqRfw+xjm2pOzqbhdwLJE4A= dependencies: babel-plugin-syntax-jsx "^6.3.13" babel-plugin-transform-react-display-name "^6.23.0" @@ -1351,6 +1546,7 @@ babel-preset-react@^6.24.1: babel-preset-stage-0@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-0/-/babel-preset-stage-0-6.24.1.tgz#5642d15042f91384d7e5af8bc88b1db95b039e6a" + integrity sha1-VkLRUEL5E4TX5a+LyIsduVsDnmo= dependencies: babel-plugin-transform-do-expressions "^6.22.0" babel-plugin-transform-function-bind "^6.22.0" @@ -1359,6 +1555,7 @@ babel-preset-stage-0@^6.24.1: babel-preset-stage-1@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-1/-/babel-preset-stage-1-6.24.1.tgz#7692cd7dcd6849907e6ae4a0a85589cfb9e2bfb0" + integrity sha1-dpLNfc1oSZB+auSgqFWJz7niv7A= dependencies: babel-plugin-transform-class-constructor-call "^6.24.1" babel-plugin-transform-export-extensions "^6.22.0" @@ -1367,6 +1564,7 @@ babel-preset-stage-1@^6.24.1: babel-preset-stage-2@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-2/-/babel-preset-stage-2-6.24.1.tgz#d9e2960fb3d71187f0e64eec62bc07767219bdc1" + integrity sha1-2eKWD7PXEYfw5k7sYrwHdnIZvcE= dependencies: babel-plugin-syntax-dynamic-import "^6.18.0" babel-plugin-transform-class-properties "^6.24.1" @@ -1376,6 +1574,7 @@ babel-preset-stage-2@^6.24.1: babel-preset-stage-3@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-preset-stage-3/-/babel-preset-stage-3-6.24.1.tgz#836ada0a9e7a7fa37cb138fb9326f87934a48395" + integrity sha1-g2raCp56f6N8sTj7kyb4eTSkg5U= dependencies: babel-plugin-syntax-trailing-function-commas "^6.22.0" babel-plugin-transform-async-generator-functions "^6.24.1" @@ -1386,6 +1585,7 @@ babel-preset-stage-3@^6.24.1: babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= dependencies: babel-core "^6.26.0" babel-runtime "^6.26.0" @@ -1398,6 +1598,7 @@ babel-register@^6.26.0: babel-runtime@6.11.6: version "6.11.6" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" + integrity sha1-bbcH/vLUnEm/o8tk79tDa1GLgiI= dependencies: core-js "^2.4.0" regenerator-runtime "^0.9.5" @@ -1405,6 +1606,7 @@ babel-runtime@6.11.6: babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= dependencies: core-js "^2.4.0" regenerator-runtime "^0.11.0" @@ -1412,6 +1614,7 @@ babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtim babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-template@^6.3.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= dependencies: babel-runtime "^6.26.0" babel-traverse "^6.26.0" @@ -1422,6 +1625,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= dependencies: babel-code-frame "^6.26.0" babel-messages "^6.23.0" @@ -1436,6 +1640,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= dependencies: babel-runtime "^6.26.0" esutils "^2.0.2" @@ -1445,30 +1650,37 @@ babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24 babelify@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/babelify/-/babelify-8.0.0.tgz#6f60f5f062bfe7695754ef2403b842014a580ed3" + integrity sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw== babylon@^6.17.0, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== babylon@^7.0.0-beta.41: version "7.0.0-beta.42" resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.42.tgz#67cfabcd4f3ec82999d29031ccdea89d0ba99657" + integrity sha512-h6E/OkkvcBw/JimbL0p8dIaxrcuQn3QmIYGC/GtJlRYif5LTKBYPHXYwqluJpfS/kOXoz0go+9mkmOVC0M+zWw== bail@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.2.tgz#f7d6c1731630a9f9f0d4d35ed1f962e2074a1764" + integrity sha1-99bBcxYwqfnw1NNe0fli4gdKF2Q= balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= base64-js@^1.0.2: version "1.2.3" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.2.3.tgz#fb13668233d9614cf5fb4bce95a9ba4096cdf801" + integrity sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w== base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== dependencies: cache-base "^1.0.1" class-utils "^0.3.5" @@ -1481,30 +1693,36 @@ base@^0.11.1: basic-auth@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.0.tgz#015db3f353e02e56377755f962742e8981e7bbba" + integrity sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o= dependencies: safe-buffer "5.1.1" batch@0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/batch/-/batch-0.6.1.tgz#dc34314f4e679318093fc760272525f94bf25c16" + integrity sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY= bcrypt-pbkdf@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + integrity sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40= dependencies: tweetnacl "^0.14.3" bcryptjs@^2.3.0: version "2.4.3" resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= before-after-hook@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-1.1.0.tgz#83165e15a59460d13702cb8febd6a1807896db5a" + integrity sha512-VOMDtYPwLbIncTxNoSzRyvaMxtXmLWLUqr8k5AfC1BzLk34HvBXaQX8snOwQZ4c0aX8aSERqtJSiI9/m2u5kuA== benchmark@~2.1.0: version "2.1.4" resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" + integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= dependencies: lodash "^4.17.4" platform "^1.3.3" @@ -1512,50 +1730,61 @@ benchmark@~2.1.0: big.js@^3.1.3: version "3.2.0" resolved "https://registry.yarnpkg.com/big.js/-/big.js-3.2.0.tgz#a5fc298b81b9e0dca2e458824784b65c52ba588e" + integrity sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q== binary-extensions@^1.0.0: version "1.11.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" + integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= bind-obj-methods@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz#4f5979cac15793adf70e488161e463e209ca509c" + integrity sha1-T1l5ysFXk633DkiBYeRj4gnKUJw= bindings@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.3.0.tgz#b346f6ecf6a95f5a815c5839fc7cdb22502f1ed7" + integrity sha512-DpLh5EzMR2kzvX1KIlVC0VkC3iZtHKTgdtZ0a3pglBZdaQFjt5S9g9xd1lE+YvXyfd6mtCeRnrUfOLYiTMlNSw== bit-twiddle@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" + integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= bl@^1.0.0, bl@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.1.tgz#cac328f7bee45730d404b692203fcb590e172d5e" + integrity sha1-ysMo977kVzDUBLaSID/LWQ4XLV4= dependencies: readable-stream "^2.0.5" block-elements@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/block-elements/-/block-elements-1.2.0.tgz#8e04ccab638c7e2596f5065fb6c1c7518c905a5d" + integrity sha1-jgTMq2OMfiWW9QZftsHHUYyQWl0= block-stream@*: version "0.0.9" resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= dependencies: inherits "~2.0.0" bluebird@^3.5.1: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: version "4.11.8" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" + integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== body@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= dependencies: continuable-cache "^0.3.1" error "^7.0.0" @@ -1565,28 +1794,33 @@ body@^5.1.0: boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" + integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= boom@2.x.x: version "2.10.1" resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + integrity sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8= dependencies: hoek "2.x.x" boom@4.x.x: version "4.3.1" resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + integrity sha1-T4owBctKfjiJ90kDD9JbluAdLjE= dependencies: hoek "4.x.x" boom@5.x.x: version "5.2.0" resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + integrity sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw== dependencies: hoek "4.x.x" boxen@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== dependencies: ansi-align "^2.0.0" camelcase "^4.0.0" @@ -1599,6 +1833,7 @@ boxen@^1.2.1: brace-expansion@^1.0.0, brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -1606,6 +1841,7 @@ brace-expansion@^1.0.0, brace-expansion@^1.1.7: braces@^1.8.2: version "1.8.5" resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + integrity sha1-uneWLhLf+WnWt2cR6RS3N4V79qc= dependencies: expand-range "^1.8.1" preserve "^0.2.0" @@ -1614,6 +1850,7 @@ braces@^1.8.2: braces@^2.3.0, braces@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.1.tgz#7086c913b4e5a08dbe37ac0ee6a2500c4ba691bb" + integrity sha512-SO5lYHA3vO6gz66erVvedSCkp7AKWdv6VcQ2N4ysXfPxdAlxAMMAdwegGGcv1Bqwm7naF1hNdk5d6AAIEHV2nQ== dependencies: arr-flatten "^1.1.0" array-unique "^0.3.2" @@ -1628,22 +1865,15 @@ braces@^2.3.0, braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -brfs@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/brfs/-/brfs-1.4.4.tgz#fc316bc4880180fa8ee25bcaab65f86910ce1dd5" - dependencies: - quote-stream "^1.0.1" - resolve "^1.1.5" - static-module "^2.1.1" - through2 "^2.0.0" - brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= browser-pack@^6.0.1: version "6.0.4" resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.0.4.tgz#9a73beb3b48f9e36868be007b64400102c04a99f" + integrity sha512-Q4Rvn7P6ObyWfc4stqLWHtG1MJ8vVtjgT24Zbu+8UTzxYuZouqZsmNRRTFVMY/Ux0eIKv1d+JWzsInTX+fdHPQ== dependencies: JSONStream "^1.0.3" combine-source-map "~0.8.0" @@ -1655,16 +1885,19 @@ browser-pack@^6.0.1: browser-process-hrtime@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.2.tgz#425d68a58d3447f02a04aa894187fce8af8b7b8e" + integrity sha1-Ql1opY00R/AqBKqJQYf86K+Le44= browser-resolve@^1.11.0, browser-resolve@^1.7.0: version "1.11.2" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.2.tgz#8ff09b0a2c421718a1051c260b32e48f442938ce" + integrity sha1-j/CbCixCFxihBRwmCzLkj0QpOM4= dependencies: resolve "1.1.7" browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.1.1" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.1.1.tgz#38b7ab55edb806ff2dcda1a7f1620773a477c49f" + integrity sha512-UGnTYAnB2a3YuYKIRy1/4FB2HdM866E0qC46JXvVTYKlBlZlnvfpSfY6OKfXZAkv70eJ2a1SqzpAo5CRhZGDFg== dependencies: buffer-xor "^1.0.3" cipher-base "^1.0.0" @@ -1676,6 +1909,7 @@ browserify-aes@^1.0.0, browserify-aes@^1.0.4: browserify-cipher@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.0.tgz#9988244874bf5ed4e28da95666dcd66ac8fc363a" + integrity sha1-mYgkSHS/XtTijalWZtzWasj8Njo= dependencies: browserify-aes "^1.0.4" browserify-des "^1.0.0" @@ -1684,6 +1918,7 @@ browserify-cipher@^1.0.0: browserify-des@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.0.tgz#daa277717470922ed2fe18594118a175439721dd" + integrity sha1-2qJ3cXRwki7S/hhZQRihdUOXId0= dependencies: cipher-base "^1.0.1" des.js "^1.0.0" @@ -1692,6 +1927,7 @@ browserify-des@^1.0.0: browserify-rsa@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" + integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= dependencies: bn.js "^4.1.0" randombytes "^2.0.1" @@ -1699,6 +1935,7 @@ browserify-rsa@^4.0.0: browserify-sign@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" + integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= dependencies: bn.js "^4.1.1" browserify-rsa "^4.0.0" @@ -1711,12 +1948,14 @@ browserify-sign@^4.0.0: browserify-zlib@^0.2.0, browserify-zlib@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== dependencies: pako "~1.0.5" browserify@^16.1.0: version "16.1.0" resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.1.0.tgz#00b86844f89482bbd0d5d1b584b324762ef3f698" + integrity sha512-jwSlLNDlNzX6ETpLN12n+BIXN5PlOWqnwNVFQeJ7oN4L26Uy7N8gXXvlVOdwTLi0Q1EVp2oGm1LMqYt0dvVryg== dependencies: JSONStream "^1.0.3" assert "^1.4.0" @@ -1770,6 +2009,7 @@ browserify@^16.1.0: browserslist@^2.1.2, browserslist@^2.11.3: version "2.11.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" + integrity sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA== dependencies: caniuse-lite "^1.0.30000792" electron-to-chromium "^1.3.30" @@ -1777,6 +2017,7 @@ browserslist@^2.1.2, browserslist@^2.11.3: browserslist@^3.2.8: version "3.2.8" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-3.2.8.tgz#b0005361d6471f0f5952797a76fc985f1f978fc6" + integrity sha512-WHVocJYavUwVgVViC0ORikPHQquXwVh939TaelZ4WDqpWgTX/FsGhl/+P4qBUAGcRvtOgDgC+xftNWWp2RUTAQ== dependencies: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" @@ -1784,10 +2025,12 @@ browserslist@^3.2.8: btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= buble@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/buble/-/buble-0.18.0.tgz#63b338b8248c474b46fd3e3546560ae08d8abe91" + integrity sha512-U3NJxUiSz0H1EB54PEHAuBTxdXgQH4DaQkvkINFXf9kEKCDWSn67EgQfFKbkTzsok4xRrIPsoxWDl2czCHR65g== dependencies: acorn "^5.1.2" acorn-jsx "^3.0.1" @@ -1801,30 +2044,32 @@ buble@^0.18.0: buffer-equal-constant-time@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - -buffer-equal@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-0.0.1.tgz#91bc74b11ea405bc916bc6aa908faafa5b4aac4b" + integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= buffer-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" + integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= buffer-from@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== buffer-shims@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= buffer@^4.3.0: version "4.9.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.1.tgz#6d1bb601b07a4efced97094132093027c95bc298" + integrity sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg= dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1833,6 +2078,7 @@ buffer@^4.3.0: buffer@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.1.0.tgz#c913e43678c7cb7c8bd16afbcddb6c5505e8f9fe" + integrity sha512-YkIRgwsZwJWTnyQrsBTWefizHh+8GYj3kbL1BTiAQ/9pwpino0G7B2gp5tx/FUBqUlvtxV85KNR3mwfAtv15Yw== dependencies: base64-js "^1.0.2" ieee754 "^1.1.4" @@ -1840,22 +2086,27 @@ buffer@^5.0.2: builtin-modules@^1.0.0, builtin-modules@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" + integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= builtin-modules@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" + integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@1: version "1.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= cacache@^10.0.4: version "10.0.4" resolved "https://registry.yarnpkg.com/cacache/-/cacache-10.0.4.tgz#6452367999eff9d4188aefd9a14e9d7c6a263460" + integrity sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA== dependencies: bluebird "^3.5.1" chownr "^1.0.1" @@ -1874,6 +2125,7 @@ cacache@^10.0.4: cache-base@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== dependencies: collection-visit "^1.0.0" component-emitter "^1.2.1" @@ -1888,6 +2140,7 @@ cache-base@^1.0.1: cacheable-request@^2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-2.1.4.tgz#0d808801b6342ad33c91df9d0b44dc09b91e5c3d" + integrity sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0= dependencies: clone-response "1.0.2" get-stream "3.0.0" @@ -1900,10 +2153,12 @@ cacheable-request@^2.1.1: cached-path-relative@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.1.tgz#d09c4b52800aa4c078e2dd81a869aac90d2e54e7" + integrity sha1-0JxLUoAKpMB44t2BqGmqyQ0uVOc= caching-transform@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-1.0.1.tgz#6dbdb2f20f8d8fbce79f3e94e9d1742dcdf5c0a1" + integrity sha1-bb2y8g+Nj7znnz6U6dF0Lc31wKE= dependencies: md5-hex "^1.2.0" mkdirp "^0.5.1" @@ -1912,6 +2167,7 @@ caching-transform@^1.0.0: call-matcher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" + integrity sha1-UTTQd5hPcSpU2tPL9i3ijc5BbKg= dependencies: core-js "^2.0.0" deep-equal "^1.0.0" @@ -1921,20 +2177,24 @@ call-matcher@^1.0.1: call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" + integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= caller-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" + integrity sha1-lAhe9jWB7NPaqSREqP6U6CV3dR8= dependencies: callsites "^0.2.0" callsites@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" + integrity sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo= camel-case@3.0.x, camel-case@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= dependencies: no-case "^2.2.0" upper-case "^1.1.1" @@ -1942,10 +2202,12 @@ camel-case@3.0.x, camel-case@^3.0.0: camelcase-css@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705" + integrity sha1-FXxCOCZfXPlKHf/ehkRlUsvz9wU= camelcase-keys@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" + integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= dependencies: camelcase "^2.0.0" map-obj "^1.0.0" @@ -1953,6 +2215,7 @@ camelcase-keys@^2.0.0: camelcase-keys@^4.0.0: version "4.2.0" resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" + integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= dependencies: camelcase "^4.1.0" map-obj "^2.0.0" @@ -1961,46 +2224,57 @@ camelcase-keys@^4.0.0: camelcase@^1.0.2, camelcase@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= camelcase@^2.0.0: version "2.1.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" + integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= camelcase@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= camelcase@^4.0.0, camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: version "1.0.30000810" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9" + integrity sha512-/0Q00Oie9C72P8zQHtFvzmkrMC3oOFUnMWjCy5F2+BE8lzICm91hQPhh0+XIsAFPKOe2Dh3pKgbRmU3EKxfldA== caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: version "1.0.30000874" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000874.tgz#a641b1f1c420d58d9b132920ef6ba87bbdcd2223" + integrity sha512-29nr1EPiHwrJTAHHsEmTt2h+55L8j2GNFdAcYPlRy2NX6iFz7ZZiepVI7kP/QqlnHLq3KvfWpbmGa0d063U09w== capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= caseless@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" + integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c= caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= ccount@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.2.tgz#53b6a2f815bb77b9c2871f7b9a72c3a25f1d8e89" + integrity sha1-U7ai+BW7d7nChx97mnLDol8djok= center-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: align-text "^0.1.3" lazy-cache "^1.0.3" @@ -2008,6 +2282,7 @@ center-align@^0.1.1: chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" + integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= dependencies: ansi-styles "^2.2.1" escape-string-regexp "^1.0.2" @@ -2018,6 +2293,7 @@ chalk@^1.1.1, chalk@^1.1.3: chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1: version "2.3.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.1.tgz#523fe2678aec7b04e8041909292fe8b17059b796" + integrity sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g== dependencies: ansi-styles "^3.2.0" escape-string-regexp "^1.0.5" @@ -2026,6 +2302,7 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3.1: chalk@^2.3.2, chalk@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.1.tgz#18c49ab16a037b6eb0152cc83e3471338215b66e" + integrity sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ== dependencies: ansi-styles "^3.2.1" escape-string-regexp "^1.0.5" @@ -2034,26 +2311,32 @@ chalk@^2.3.2, chalk@^2.4.1: character-entities-html4@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.1.tgz#359a2a4a0f7e29d3dc2ac99bdbe21ee39438ea50" + integrity sha1-NZoqSg9+KdPcKsmb2+Ie45Q46lA= character-entities-legacy@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.1.tgz#f40779df1a101872bb510a3d295e1fccf147202f" + integrity sha1-9Ad53xoQGHK7UQo9KV4fzPFHIC8= character-entities@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.1.tgz#f76871be5ef66ddb7f8f8e3478ecc374c27d6dca" + integrity sha1-92hxvl72bdt/j440eOzDdMJ9bco= character-reference-invalid@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" + integrity sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw= chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" + integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.2.tgz#4b9f53a81b27e4d5dac31c0ffd0cfa03cc6830db" + integrity sha1-S59TqBsn5NXawxwP/Qz6A8xoMNs= dependencies: css-select "~1.2.0" dom-serializer "~0.1.0" @@ -2065,6 +2348,7 @@ cheerio@^1.0.0-rc.2: chokidar@^1.6.0, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + integrity sha1-eY5ol3gVHIB2tLNg5e3SjNortGg= dependencies: anymatch "^1.3.0" async-each "^1.0.0" @@ -2080,6 +2364,7 @@ chokidar@^1.6.0, chokidar@^1.7.0: chokidar@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.3.tgz#dcbd4f6cbb2a55b4799ba8a840ac527e5f4b1176" + integrity sha512-zW8iXYZtXMx4kux/nuZVXjkLP+CyIK5Al5FHnj1OgTKGZfp4Oy6/ymtMSKFv3GD8DviEmUPmJg9eFdJ/JzudMg== dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -2098,6 +2383,7 @@ chokidar@^2.0.0: chokidar@^2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.0.4.tgz#356ff4e2b0e8e43e322d18a372460bbcf3accd26" + integrity sha512-z9n7yt9rOvIJrMhvDtDictKrkFHeihkNl6uWMmZlmL6tJtX9Cs+87oK+teBx+JIgzvbX3yZHT3eF8vpbDxHJXQ== dependencies: anymatch "^2.0.0" async-each "^1.0.0" @@ -2117,10 +2403,12 @@ chokidar@^2.0.3: chownr@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.0.1.tgz#e2a75042a9551908bebd25b8523d5f9769d79181" + integrity sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE= cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -2128,10 +2416,12 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: circular-json@^0.3.1: version "0.3.3" resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.3.tgz#815c99ea84f6809529d2f45791bdf82711352d66" + integrity sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A== class-utils@^0.3.5: version "0.3.6" resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== dependencies: arr-union "^3.1.0" define-property "^0.2.5" @@ -2141,30 +2431,36 @@ class-utils@^0.3.5: clean-css@4.1.x: version "4.1.9" resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.1.9.tgz#35cee8ae7687a49b98034f70de00c4edd3826301" + integrity sha1-Nc7ornaHpJuYA09w3gDE7dOCYwE= dependencies: source-map "0.5.x" clean-yaml-object@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" + integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= cli-boxes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha1-T6kXw+WclKAEzWH47lCdplFocUM= cli-cursor@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" + integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= dependencies: restore-cursor "^2.0.0" cli-width@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" + integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= clipboard@^1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/clipboard/-/clipboard-1.7.1.tgz#360d6d6946e99a7a1fef395e42ba92b5e9b5a16b" + integrity sha1-Ng1taUbpmnof7zleQrqStem1oWs= dependencies: good-listener "^1.2.2" select "^1.1.2" @@ -2173,6 +2469,7 @@ clipboard@^1.7.1: cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= dependencies: center-align "^0.1.1" right-align "^0.1.1" @@ -2181,6 +2478,7 @@ cliui@^2.1.0: cliui@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -2189,6 +2487,7 @@ cliui@^3.2.0: cliui@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.0.0.tgz#743d4650e05f36d1ed2575b59638d87322bfbbcc" + integrity sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw== dependencies: string-width "^2.1.1" strip-ansi "^4.0.0" @@ -2197,10 +2496,12 @@ cliui@^4.0.0: clone-buffer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" + integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= clone-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.0.tgz#eae0a2413f55c0942f818c229fefce845d7f3b1c" + integrity sha1-6uCiQT9VwJQvgYwin+/OhF1/Oxw= dependencies: is-regexp "^1.0.0" is-supported-regexp-flag "^1.0.0" @@ -2208,20 +2509,24 @@ clone-regexp@^1.0.0: clone-response@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= dependencies: mimic-response "^1.0.0" clone-stats@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" + integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= clone@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.1.tgz#d217d1e961118e3ac9a4b8bba3285553bf647cdb" + integrity sha1-0hfR6WERjjrJpLi7oyhVU79kfNs= cloneable-readable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.0.0.tgz#a6290d413f217a61232f95e458ff38418cfb0117" + integrity sha1-pikNQT8hemEjL5XkWP84QYz7ARc= dependencies: inherits "^2.0.1" process-nextick-args "^1.0.6" @@ -2230,22 +2535,27 @@ cloneable-readable@^1.0.0: clorox@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/clorox/-/clorox-1.0.3.tgz#6fa63653f280c33d69f548fb14d239ddcfa1590d" + integrity sha512-w3gKAUKMJYmmaJyc+p+iDrDtLvsFasrx/y6/zWo2U1TZfsz3y4Vl4T9PHCZrOwk1eMTOSRI6xHdpDR4PhTdy8Q== co@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ= code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.3.tgz#4b906f670e5a963a87b76b0e1689643341b6023c" + integrity sha1-S5BvZw5aljqHt2sOFolkM0G2Ajw= collection-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= dependencies: map-visit "^1.0.0" object-visit "^1.0.0" @@ -2253,28 +2563,34 @@ collection-visit@^1.0.0: color-convert@^1.9.0: version "1.9.1" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" + integrity sha512-mjGanIiwQJskCC18rPR6OmrZ6fm2Lc7PeGFYwCmy5J34wC6F1PzdGL6xeMfmgicfYcNLGuVFA3WzXtIDCQSZxQ== dependencies: color-name "^1.1.1" color-name@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= color-support@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" + integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== colors@^1.0.3: version "1.1.2" resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" + integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= colors@latest: version "1.3.1" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.1.tgz#4accdb89cf2cabc7f982771925e9468784f32f3d" + integrity sha512-jg/vxRmv430jixZrC+La5kMbUWqIg32/JsYNZb94+JEmzceYbWKTsv1OuTp+7EaqiaWRR2tPcykibwCRgclIsw== combine-source-map@~0.7.1: version "0.7.2" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.7.2.tgz#0870312856b307a87cc4ac486f3a9a62aeccc09e" + integrity sha1-CHAxKFazB6h8xKxIbzqaYq7MwJ4= dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" @@ -2284,6 +2600,7 @@ combine-source-map@~0.7.1: combine-source-map@~0.8.0: version "0.8.0" resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" + integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= dependencies: convert-source-map "~1.1.0" inline-source-map "~0.6.0" @@ -2293,30 +2610,36 @@ combine-source-map@~0.8.0: combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.6.tgz#723e7df6e801ac5613113a7e445a9b69cb632818" + integrity sha1-cj599ugBrFYTETp+RFqbactjKBg= dependencies: delayed-stream "~1.0.0" comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.4.tgz#72083e58d4a462f01866f6617f4d98a3cd3b8a46" + integrity sha1-cgg+WNSkYvAYZvZhf02Yo807ikY= dependencies: trim "0.0.1" commander@2, commander@2.14.x, commander@^2.9.0, commander@~2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" + integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== commander@~2.16.0: version "2.16.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" + integrity sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew== commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= compare-func@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-1.3.2.tgz#99dd0ba457e1f9bc722b12c08ec33eeab31fa648" + integrity sha1-md0LpFfh+bxyKxLAjsM+6rMfpkg= dependencies: array-ify "^1.0.0" dot-prop "^3.0.0" @@ -2324,14 +2647,17 @@ compare-func@^1.3.1: component-emitter@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" + integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= -concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@~1.6.0: +concat-stream@^1.5.0, concat-stream@^1.6.0, concat-stream@~1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" + integrity sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc= dependencies: inherits "^2.0.3" readable-stream "^2.2.2" @@ -2340,6 +2666,7 @@ concat-stream@^1.5.0, concat-stream@^1.5.1, concat-stream@^1.6.0, concat-stream@ concat-stream@~1.5.0, concat-stream@~1.5.1: version "1.5.2" resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= dependencies: inherits "~2.0.1" readable-stream "~2.0.0" @@ -2348,12 +2675,14 @@ concat-stream@~1.5.0, concat-stream@~1.5.1: concat-with-sourcemaps@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.5.tgz#8964bc2347d05819b63798104d87d6e001bed8d0" + integrity sha512-YtnS0VEY+e2Khzsey/6mra9EoM6h/5gxaC0e3mcHpA5yfDxafhygytNmcJWodvUgyXzSiL5MSkPO6bQGgfliHw== dependencies: source-map "^0.6.1" configstore@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" + integrity sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw== dependencies: dot-prop "^4.1.0" graceful-fs "^4.1.2" @@ -2365,10 +2694,12 @@ configstore@^3.0.0: connect-history-api-fallback@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a" + integrity sha1-sGhzk0vF40T+9hGhlqb6rgruAVo= connect@3.5.x: version "3.5.1" resolved "https://registry.yarnpkg.com/connect/-/connect-3.5.1.tgz#6d30d7a63c7f170857a6b3aa6b363d973dca588e" + integrity sha1-bTDXpjx/FwhXprOqazY9lz3KWI4= dependencies: debug "~2.2.0" finalhandler "0.5.1" @@ -2378,6 +2709,7 @@ connect@3.5.x: connect@^3.6.6: version "3.6.6" resolved "https://registry.yarnpkg.com/connect/-/connect-3.6.6.tgz#09eff6c55af7236e137135a72574858b6786f524" + integrity sha1-Ce/2xVr3I24TcTWnJXSFi2eG9SQ= dependencies: debug "2.6.9" finalhandler "1.1.0" @@ -2387,28 +2719,34 @@ connect@^3.6.6: console-browserify@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10" + integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA= dependencies: date-now "^0.1.4" console-control-strings@^1.0.0, console-control-strings@~1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= constants-browserify@^1.0.0, constants-browserify@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= contains-path@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" + integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= continuable-cache@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= conventional-changelog-angular@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-0.1.0.tgz#ac3d4b869878de5ad57726696b21eedd798ae3c7" + integrity sha1-rD1Lhph43lrVdyZpayHu3XmK48c= dependencies: compare-func "^1.3.1" q "^1.4.1" @@ -2416,6 +2754,7 @@ conventional-changelog-angular@^0.1.0: conventional-changelog-core@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/conventional-changelog-core/-/conventional-changelog-core-0.0.2.tgz#795a298de84f8801398cd0fee20fb799a1f02089" + integrity sha1-eVopjehPiAE5jND+4g+3maHwIIk= dependencies: conventional-changelog-writer "^0.4.1" conventional-commits-parser "^0.1.2" @@ -2432,6 +2771,7 @@ conventional-changelog-core@^0.0.2: conventional-changelog-writer@^0.4.1: version "0.4.2" resolved "https://registry.yarnpkg.com/conventional-changelog-writer/-/conventional-changelog-writer-0.4.2.tgz#ccb03c5ebd17ceb94a236cb80b27f4ef6bee7731" + integrity sha1-zLA8Xr0XzrlKI2y4Cyf072vudzE= dependencies: compare-func "^1.3.1" conventional-commits-filter "^0.1.0" @@ -2446,6 +2786,7 @@ conventional-changelog-writer@^0.4.1: conventional-commits-filter@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/conventional-commits-filter/-/conventional-commits-filter-0.1.1.tgz#d9d26c7599f89de3d249cba3def7911fc51c0dab" + integrity sha1-2dJsdZn4nePSScuj3veRH8UcDas= dependencies: is-subset "^0.1.1" modify-values "^1.0.0" @@ -2453,6 +2794,7 @@ conventional-commits-filter@^0.1.0: conventional-commits-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-0.1.2.tgz#4a624010634f02122520ecbaf19ca0ba23120437" + integrity sha1-SmJAEGNPAhIlIOy68ZyguiMSBDc= dependencies: JSONStream "^1.0.4" is-text-path "^1.0.0" @@ -2465,14 +2807,17 @@ conventional-commits-parser@^0.1.2: convert-source-map@^1.3.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" + integrity sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU= convert-source-map@~1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" + integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= copy-concurrently@^1.0.0: version "1.0.5" resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0" + integrity sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A== dependencies: aproba "^1.1.1" fs-write-stream-atomic "^1.0.8" @@ -2484,22 +2829,27 @@ copy-concurrently@^1.0.0: copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js@^1.0.0: version "1.2.7" resolved "https://registry.yarnpkg.com/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636" + integrity sha1-ZSKUwUZR2yj6k70tX/KYOk8IxjY= core-js@^2.0.0, core-js@^2.4.0, core-js@^2.5.0: version "2.5.3" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.3.tgz#8acc38345824f16d8365b7c9b4259168e8ed603e" + integrity sha1-isw4NFgk8W2DZbfJtCWRaOjtYD4= core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= cors@latest: version "2.8.4" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.4.tgz#2bd381f2eb201020105cd50ea59da63090694686" + integrity sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY= dependencies: object-assign "^4" vary "^1" @@ -2507,6 +2857,7 @@ cors@latest: cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: version "2.2.2" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892" + integrity sha512-GiNXLwAFPYHy25XmTPpafYvn3CLAkJ8FLsscq78MQd1Kh0OU6Yzhn4eV2MVF4G9WEQZoWEGltatdR+ntGPMl5A== dependencies: is-directory "^0.3.1" js-yaml "^3.4.3" @@ -2519,6 +2870,7 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: cosmiconfig@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" + integrity sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q== dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" @@ -2528,6 +2880,7 @@ cosmiconfig@^3.1.0: coveralls@^2.13.3: version "2.13.3" resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7" + integrity sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw== dependencies: js-yaml "3.6.1" lcov-parse "0.0.10" @@ -2538,6 +2891,7 @@ coveralls@^2.13.3: cp-file@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-5.0.0.tgz#bc700fd30ca32d24d46c7fb02b992e435fc5a978" + integrity sha1-vHAP0wyjLSTUbH+wK5kuQ1/FqXg= dependencies: graceful-fs "^4.1.2" make-dir "^1.0.0" @@ -2548,6 +2902,7 @@ cp-file@^5.0.0: cpy@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/cpy/-/cpy-6.0.0.tgz#0b6888e037bb5a7b02a62249551316208a523253" + integrity sha512-7uBKHhKOFgjCVx6Vv2gx/LqdrM9F7l0vunzmyS3CdStn3U02H1ehhS1SCpZ1qJFZqPi40IMUWAPkN/nQ4RXAiA== dependencies: arrify "^1.0.1" cp-file "^5.0.0" @@ -2557,6 +2912,7 @@ cpy@^6.0.0: create-ecdh@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.0.tgz#888c723596cdf7612f6498233eebd7a35301737d" + integrity sha1-iIxyNZbN92EvZJgjPuvXo1MBc30= dependencies: bn.js "^4.1.0" elliptic "^6.0.0" @@ -2564,12 +2920,14 @@ create-ecdh@^4.0.0: create-error-class@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= dependencies: capture-stack-trace "^1.0.0" create-hash@^1.1.0, create-hash@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.1.3.tgz#606042ac8b9262750f483caddab0f5819172d8fd" + integrity sha1-YGBCrIuSYnUPSDyt2rD1gZFy2P0= dependencies: cipher-base "^1.0.1" inherits "^2.0.1" @@ -2579,6 +2937,7 @@ create-hash@^1.1.0, create-hash@^1.1.2: create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: version "1.1.6" resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.6.tgz#acb9e221a4e17bdb076e90657c42b93e3726cf06" + integrity sha1-rLniIaThe9sHbpBlfEK5PjcmzwY= dependencies: cipher-base "^1.0.3" create-hash "^1.1.0" @@ -2590,6 +2949,7 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: cross-spawn@^4: version "4.0.2" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= dependencies: lru-cache "^4.0.1" which "^1.2.9" @@ -2597,6 +2957,7 @@ cross-spawn@^4: cross-spawn@^5.0.1, cross-spawn@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= dependencies: lru-cache "^4.0.1" shebang-command "^1.2.0" @@ -2605,18 +2966,21 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + integrity sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g= dependencies: boom "2.x.x" cryptiles@3.x.x: version "3.1.2" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + integrity sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4= dependencies: boom "5.x.x" crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" + integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== dependencies: browserify-cipher "^1.0.0" browserify-sign "^4.0.0" @@ -2633,10 +2997,12 @@ crypto-browserify@^3.0.0, crypto-browserify@^3.11.0: crypto-random-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4= css-select@^1.1.0, css-select@^1.2.0, css-select@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" + integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= dependencies: boolbase "~1.0.0" css-what "2.1" @@ -2646,6 +3012,7 @@ css-select@^1.1.0, css-select@^1.2.0, css-select@~1.2.0: css-tree@1.0.0-alpha25: version "1.0.0-alpha25" resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha25.tgz#1bbfabfbf6eeef4f01d9108ff2edd0be2fe35597" + integrity sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A== dependencies: mdn-data "^1.0.0" source-map "^0.5.3" @@ -2653,52 +3020,63 @@ css-tree@1.0.0-alpha25: css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" + integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= csscolorparser@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" + integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= csso@~3.3.0: version "3.3.1" resolved "https://registry.yarnpkg.com/csso/-/csso-3.3.1.tgz#e069a8f52adcf53685a8a7374256ccbc22c6ce3e" + integrity sha512-OjETffCFB/OzwxVL3eF0+5tXOXCMukVO6rEUxlkIhscE1KRObyg+zMrLUbkPn9kxgBrFWicc37Gv5/22dOh5EA== dependencies: css-tree "1.0.0-alpha25" cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" + integrity sha1-uANhcMefB6kP8vFuIihAJ6JDhIs= "cssstyle@>= 0.3.1 < 0.4.0": version "0.3.1" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.3.1.tgz#6da9b4cff1bc5d716e6e5fe8e04fcb1b50a49adf" + integrity sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA== dependencies: cssom "0.3.x" cuint@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/cuint/-/cuint-0.2.2.tgz#408086d409550c2631155619e9fa7bcadc3b991b" + integrity sha1-QICG1AlVDCYxFVYZ6fp7ytw7mRs= currently-unhandled@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" + integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= 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= d3-array@1, d3-array@1.2.1, d3-array@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" + integrity sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw== d3-axis@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa" + integrity sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo= d3-brush@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4" + integrity sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q= dependencies: d3-dispatch "1" d3-drag "1" @@ -2709,6 +3087,7 @@ d3-brush@1.0.4: d3-chord@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c" + integrity sha1-fexPC6iG9xP+ERxF92NBT290yiw= dependencies: d3-array "1" d3-path "1" @@ -2716,18 +3095,22 @@ d3-chord@1.0.4: d3-collection@1, d3-collection@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" + integrity sha1-NC39EoN8kJdPM/HMCnha6lcNzcI= d3-color@1, d3-color@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" + integrity sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs= d3-dispatch@1, d3-dispatch@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" + integrity sha1-RuFJHqqbWMNY/OW+TovtYm54cfg= d3-drag@1, d3-drag@1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" + integrity sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ== dependencies: d3-dispatch "1" d3-selection "1" @@ -2735,6 +3118,7 @@ d3-drag@1, d3-drag@1.2.1: d3-dsv@1, d3-dsv@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae" + integrity sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A== dependencies: commander "2" iconv-lite "0.4" @@ -2743,10 +3127,12 @@ d3-dsv@1, d3-dsv@1.0.8: d3-ease@1, d3-ease@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" + integrity sha1-aL+8NJM4o4DETYrMT7wzBKotjA4= d3-force@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" + integrity sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg== dependencies: d3-collection "1" d3-dispatch "1" @@ -2756,46 +3142,56 @@ d3-force@1.1.0: d3-format@1, d3-format@1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" + integrity sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw== d3-geo@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.9.1.tgz#157e3b0f917379d0f73bebfff3be537f49fa7356" + integrity sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA== dependencies: d3-array "1" d3-hierarchy@1.1.5: version "1.1.5" resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26" + integrity sha1-ochFxC+Eoga88cAcAQmOpN2qeiY= d3-interpolate@1, d3-interpolate@1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" + integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== dependencies: d3-color "1" d3-path@1, d3-path@1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" + integrity sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q= d3-polygon@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62" + integrity sha1-FoiOkCZGCTPysXllKtN4Ik04LGI= d3-quadtree@1, d3-quadtree@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" + integrity sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg= d3-queue@3.0.7, d3-queue@^3.0.3, d3-queue@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" + integrity sha1-yTouVLQXwJWRKdfXP2z31Ckudhg= d3-random@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3" + integrity sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM= d3-request@1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.6.tgz#a1044a9ef4ec28c824171c9379fae6d79474b19f" + integrity sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w== dependencies: d3-collection "1" d3-dispatch "1" @@ -2805,6 +3201,7 @@ d3-request@1.0.6: d3-scale@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" + integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== dependencies: d3-array "^1.2.0" d3-collection "1" @@ -2817,30 +3214,36 @@ d3-scale@1.0.7: d3-selection@1, d3-selection@1.3.0, d3-selection@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" + integrity sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA== d3-shape@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" + integrity sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c= dependencies: d3-path "1" d3-time-format@2, d3-time-format@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" + integrity sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw== dependencies: d3-time "1" d3-time@1, d3-time@1.0.8: version "1.0.8" resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" + integrity sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ== d3-timer@1, d3-timer@1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" + integrity sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA== d3-transition@1, d3-transition@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" + integrity sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ== dependencies: d3-color "1" d3-dispatch "1" @@ -2852,10 +3255,12 @@ d3-transition@1, d3-transition@1.1.1: d3-voronoi@1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" + integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= d3-zoom@1.7.1: version "1.7.1" resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" + integrity sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ== dependencies: d3-dispatch "1" d3-drag "1" @@ -2866,6 +3271,7 @@ d3-zoom@1.7.1: d3@^4.12.0: version "4.13.0" resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d" + integrity sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ== dependencies: d3-array "1.2.1" d3-axis "1.0.8" @@ -2901,24 +3307,28 @@ d3@^4.12.0: d@1: version "1.0.0" resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f" + integrity sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8= dependencies: es5-ext "^0.10.9" dargs@^4.0.1: version "4.1.0" resolved "https://registry.yarnpkg.com/dargs/-/dargs-4.1.0.tgz#03a9dbb4b5c2f139bf14ae53f0b8a2a6a86f4e17" + integrity sha1-A6nbtLXC8Tm/FK5T8LiipqhvThc= dependencies: number-is-nan "^1.0.0" dashdash@^1.12.0: version "1.14.1" resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= dependencies: assert-plus "^1.0.0" data-urls@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" + integrity sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA== dependencies: abab "^1.0.4" whatwg-mimetype "^2.0.0" @@ -2927,10 +3337,12 @@ data-urls@^1.0.0: date-now@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b" + integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs= dateformat@^1.0.11, dateformat@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.12.tgz#9f124b67594c937ff706932e4a642cca8dbbfee9" + integrity sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk= dependencies: get-stdin "^4.0.1" meow "^3.3.0" @@ -2938,36 +3350,43 @@ dateformat@^1.0.11, dateformat@^1.0.12: de-indent@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= debounce@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/debounce/-/debounce-1.1.0.tgz#6a1a4ee2a9dc4b7c24bb012558dbcdb05b37f408" + integrity sha512-ZQVKfRVlwRfD150ndzEK8M90ABT+Y/JQKs4Y7U4MXdpuoUkkrr4DwKbVux3YjylA5bUMUj0Nc3pMxPJX6N2QQQ== debug-log@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" + integrity sha1-IwdjLUwEOCuN+KMvcLiVBG1SdF8= debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@3.1.0, debug@^3.0.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" + integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" + integrity sha1-+HBX6ZWxofauaklgZkE3vFbwOdo= dependencies: ms "0.7.1" decamelize-keys@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" + integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= dependencies: decamelize "^1.1.0" map-obj "^1.0.0" @@ -2975,42 +3394,51 @@ decamelize-keys@^1.0.0: decamelize@^1.0.0, decamelize@^1.1.0, decamelize@^1.1.1, decamelize@^1.1.2: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= decode-uri-component@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= decompress-response@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= dependencies: mimic-response "^1.0.0" deep-equal@^1.0.0, deep-equal@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5" + integrity sha1-9dJgKStmDghO/0zbyfCK0yR0SLU= deep-extend@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== deep-extend@~0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + integrity sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8= deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" + integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" + integrity sha1-836hXT4T/9m0N9M+GnW1+5eHTLg= dependencies: strip-bom "^2.0.0" define-properties@^1.1.1, define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + integrity sha1-g6c/L+pWmJj7c3GTyPhzyvbUXJQ= dependencies: foreach "^2.0.5" object-keys "^1.0.8" @@ -3018,18 +3446,21 @@ define-properties@^1.1.1, define-properties@^1.1.2: define-property@^0.2.5: version "0.2.5" resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= dependencies: is-descriptor "^0.1.0" define-property@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= dependencies: is-descriptor "^1.0.0" define-property@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== dependencies: is-descriptor "^1.0.2" isobject "^3.0.1" @@ -3037,10 +3468,12 @@ define-property@^2.0.2: defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= del-cli@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/del-cli/-/del-cli-1.1.0.tgz#27557d69a0b7df99dcbaa1e34a09e6ac6591d2c4" + integrity sha1-J1V9aaC335ncuqHjSgnmrGWR0sQ= dependencies: del "^3.0.0" meow "^3.6.0" @@ -3049,6 +3482,7 @@ del-cli@^1.1.0: del@^2.0.2: version "2.2.2" resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" + integrity sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag= dependencies: globby "^5.0.0" is-path-cwd "^1.0.0" @@ -3061,6 +3495,7 @@ del@^2.0.2: del@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/del/-/del-3.0.0.tgz#53ecf699ffcbcb39637691ab13baf160819766e5" + integrity sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU= dependencies: globby "^6.1.0" is-path-cwd "^1.0.0" @@ -3072,26 +3507,32 @@ del@^3.0.0: delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= delegate@^3.1.2: version "3.2.0" resolved "https://registry.yarnpkg.com/delegate/-/delegate-3.2.0.tgz#b66b71c3158522e8ab5744f720d8ca0c2af59166" + integrity sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw== delegates@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= depd@~1.1.1, depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= dependency-graph@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.7.0.tgz#8fc7991ad236e47f0d5742701b5e307b83d7c0d0" + integrity sha512-QzVBbA603vbxF1SMvYmGbE9ZXl+ggb+2SbHvIeOw0w753lgbXC2bZOnCmvG9qr+zlrKK/E0rqtCXOfrRGKH4/Q== deps-sort@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.0.tgz#091724902e84658260eb910748cccd1af6e21fb5" + integrity sha1-CRckkC6EZYJg65EHSMzNGvbiH7U= dependencies: JSONStream "^1.0.3" shasum "^1.0.0" @@ -3101,6 +3542,7 @@ deps-sort@^2.0.0: des.js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.0.tgz#c074d2e2aa6a8a9a07dbd61f9a15c2cd83ec8ecc" + integrity sha1-wHTS4qpqipoH29YfmhXCzYPsjsw= dependencies: inherits "^2.0.1" minimalistic-assert "^1.0.0" @@ -3108,26 +3550,31 @@ des.js@^1.0.0: destroy@~1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= detab@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.1.tgz#531f5e326620e2fd4f03264a905fb3bcc8af4df4" + integrity sha512-/hhdqdQc5thGrqzjyO/pz76lDZ5GSuAs6goxOaKTsvPk7HNnzAyFN5lyHgqpX4/s1i66K8qMGj+VhA9504x7DQ== dependencies: repeat-string "^1.5.4" detect-indent@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= dependencies: repeating "^2.0.0" detect-libc@^1.0.2, detect-libc@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" + integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= detective@^4.0.0: version "4.7.1" resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== dependencies: acorn "^5.2.1" defined "^1.0.0" @@ -3135,6 +3582,7 @@ detective@^4.0.0: detective@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/detective/-/detective-5.1.0.tgz#7a20d89236d7b331ccea65832e7123b5551bb7cb" + integrity sha512-TFHMqfOvxlgrfVzTEkNBSh9SvSNX/HfF4OFI2QFGCyPm02EsyILqnUeb5P6q7JZ3SFNTBL5t2sePRgrN4epUWQ== dependencies: acorn-node "^1.3.0" defined "^1.0.0" @@ -3143,14 +3591,17 @@ detective@^5.0.2: diff@^1.3.2, diff@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= diff@^3.1.0: version "3.4.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" + integrity sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA== diffie-hellman@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.2.tgz#b5835739270cfe26acf632099fded2a07f209e5e" + integrity sha1-tYNXOScM/ias9jIJn97SoH8gnl4= dependencies: bn.js "^4.1.0" miller-rabin "^4.0.0" @@ -3159,6 +3610,7 @@ diffie-hellman@^5.0.0: dir-glob@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.0.0.tgz#0b205d2b6aef98238ca286598a8204d29d0a0034" + integrity sha512-37qirFDz8cA5fimp9feo43fSuRo2gHwaIn6dXL8Ber1dGwUosDrGZeCCXq57WnIqE4aQ+u3eQZzsk1yOzhdwag== dependencies: arrify "^1.0.1" path-type "^3.0.0" @@ -3166,6 +3618,7 @@ dir-glob@^2.0.0: disparity@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/disparity/-/disparity-2.0.0.tgz#57ddacb47324ae5f58d2cc0da886db4ce9eeb718" + integrity sha1-V92stHMkrl9Y0swNqIbbTOnutxg= dependencies: ansi-styles "^2.0.1" diff "^1.3.2" @@ -3173,12 +3626,14 @@ disparity@^2.0.0: doctrine-temporary-fork@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/doctrine-temporary-fork/-/doctrine-temporary-fork-2.0.1.tgz#23f0b6275c65f48893324b02338178e496b2e4bf" + integrity sha512-+GQh3niRkKtSr7cKDo8po+NHkJZyC2Ebwvjz9fvq0ReQr9kIDS6BY9MDrzx+KbbLxvSj3vD/eUaeIoURHzEAFQ== dependencies: esutils "^2.0.2" doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" + integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= dependencies: esutils "^2.0.2" isarray "^1.0.0" @@ -3186,12 +3641,14 @@ doctrine@1.5.0: doctrine@^2.0.0, doctrine@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" + integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== dependencies: esutils "^2.0.2" documentation@~8.1.1: version "8.1.1" resolved "https://registry.yarnpkg.com/documentation/-/documentation-8.1.1.tgz#dc95604886f7ae5e25520e59714ed2d4d73ad968" + integrity sha512-CFcGYk15adEuKSCa1iXmUnQ7QtTwGGUtNKh/sIUSQ6s5HAx76stjG5F0HpsrU+RKNlb76fG3SxmGqZdA/Q45xQ== dependencies: ansi-html "^0.0.7" babel-core "^6.26.0" @@ -3246,12 +3703,14 @@ documentation@~8.1.1: dom-converter@~0.1: version "0.1.4" resolved "https://registry.yarnpkg.com/dom-converter/-/dom-converter-0.1.4.tgz#a45ef5727b890c9bffe6d7c876e7b19cb0e17f3b" + integrity sha1-pF71cnuJDJv/5tfIduexnLDhfzs= dependencies: utila "~0.3" dom-serializer@0, dom-serializer@^0.1.0, dom-serializer@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.0.tgz#073c697546ce0780ce23be4a28e293e40bc30c82" + integrity sha1-BzxpdUbOB4DOI75KKOKT5AvDDII= dependencies: domelementtype "~1.1.1" entities "~1.1.1" @@ -3259,42 +3718,50 @@ dom-serializer@0, dom-serializer@^0.1.0, dom-serializer@~0.1.0: domain-browser@^1.1.1, domain-browser@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== domelementtype@1, domelementtype@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" + integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" + integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= domexception@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" + integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== dependencies: webidl-conversions "^4.0.2" domhandler@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.1.0.tgz#d2646f5e57f6c3bab11cf6cb05d3c0acf7412594" + integrity sha1-0mRvXlf2w7qxHPbLBdPArPdBJZQ= dependencies: domelementtype "1" domhandler@^2.3.0: version "2.4.1" resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.1.tgz#892e47000a99be55bbf3774ffea0561d8879c259" + integrity sha1-iS5HAAqZvlW783dP/qBWHYh5wlk= dependencies: domelementtype "1" domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" + integrity sha1-vdw94Jm5ou+sxRxiPyj0FuzFdIU= dependencies: domelementtype "1" domutils@1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" + integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= dependencies: dom-serializer "0" domelementtype "1" @@ -3302,6 +3769,7 @@ domutils@1.5.1: domutils@^1.5.1: version "1.7.0" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" + integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== dependencies: dom-serializer "0" domelementtype "1" @@ -3309,32 +3777,38 @@ domutils@^1.5.1: dot-prop@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-3.0.0.tgz#1b708af094a49c9a0e7dbcad790aba539dac1177" + integrity sha1-G3CK8JSknJoOfbyteQq6U52sEXc= dependencies: is-obj "^1.0.0" dot-prop@^4.1.0, dot-prop@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + integrity sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ== dependencies: is-obj "^1.0.0" -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2, duplexer2@~0.1.4: +duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= dependencies: readable-stream "^2.0.2" duplexer3@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= duplexer@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + integrity sha1-rOb/gIwc5mtX0ev5eXessCM0z8E= duplexify@^3.4.2, duplexify@^3.5.3: version "3.5.3" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.5.3.tgz#8b5818800df92fd0125b27ab896491912858243e" + integrity sha512-g8ID9OroF9hKt2POf8YLayy+9594PzmM3scI00/uBXocX3TWNgoB67hjzkFe9ITAbQOne/lLdBxHXvYUM4ZgGA== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -3344,6 +3818,7 @@ duplexify@^3.4.2, duplexify@^3.5.3: duplexify@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.0.tgz#592903f5d80b38d037220541264d69a198fb3410" + integrity sha512-fO3Di4tBKJpYTFHAxTU00BcfWMY9w24r/x21a6rZRbsD/ToUgGxsMbiGRmB7uVAXeGKXD9MwiLZa5E97EVgIRQ== dependencies: end-of-stream "^1.0.0" inherits "^2.0.1" @@ -3353,42 +3828,51 @@ duplexify@^3.6.0: earcut@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.3.tgz#ca579545f351941af7c3d0df49c9f7d34af99b0c" + integrity sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A== eastasianwidth@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" + integrity sha1-RNZW3p2kFWlEZzNTZfsxR7hXK3w= ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + integrity sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU= dependencies: jsbn "~0.1.0" ecdsa-sig-formatter@1.0.10: version "1.0.10" resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.10.tgz#1c595000f04a8897dfb85000892a0f4c33af86c3" + integrity sha1-HFlQAPBKiJffuFAAiSoPTDOvhsM= dependencies: safe-buffer "^5.0.1" ee-first@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= ejs@^2.5.7: version "2.5.7" resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.5.7.tgz#cc872c168880ae3c7189762fd5ffc00896c9518a" + integrity sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo= electron-to-chromium@^1.3.30: version "1.3.33" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz#bf00703d62a7c65238136578c352d6c5c042a545" + integrity sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU= electron-to-chromium@^1.3.47: version "1.3.55" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.55.tgz#f150e10b20b77d9d41afcca312efe0c3b1a7fdce" + integrity sha1-8VDhCyC3fZ1Br8yjEu/gw7Gn/c4= elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" + integrity sha1-ysmvh2LIWDYYcAPI3+GT5eLq5d8= dependencies: bn.js "^4.4.0" brorand "^1.0.1" @@ -3401,30 +3885,36 @@ elliptic@^6.0.0: "emoji-regex@>=6.0.0 <=6.1.1": version "6.1.1" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" + integrity sha1-TapNnbAPmBmIDHn6RXrlsJof04k= encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= encoding@^0.1.11: version "0.1.12" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= dependencies: 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== dependencies: once "^1.4.0" enhanced-resolve@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= dependencies: graceful-fs "^4.1.2" memory-fs "^0.4.0" @@ -3434,22 +3924,26 @@ enhanced-resolve@^3.4.0: entities@^1.1.1, entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" + integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= errno@^0.1.3, errno@^0.1.4, errno@~0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618" + integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg== dependencies: prr "~1.0.1" error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc" + integrity sha1-+FWobOYa3E6GIcPNoh56dhLDqNw= dependencies: is-arrayish "^0.2.1" error@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= dependencies: string-template "~0.2.1" xtend "~4.0.0" @@ -3457,6 +3951,7 @@ error@^7.0.0: es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" + integrity sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ== dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -3467,6 +3962,7 @@ es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.6.1, es-abstract@^1.7.0: es-abstract@^1.5.1: version "1.12.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.12.0.tgz#9dbbdd27c6856f0001421ca18782d786bf8a6165" + integrity sha512-C8Fx/0jFmV5IPoMOFPA9P9G5NtqW+4cOPit3MIuvR2t7Ag2K15EJTpxnHAYTzL+aYQJIESYeXZmDBfOBE1HcpA== dependencies: es-to-primitive "^1.1.1" function-bind "^1.1.1" @@ -3477,6 +3973,7 @@ es-abstract@^1.5.1: es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" + integrity sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0= dependencies: is-callable "^1.1.1" is-date-object "^1.0.1" @@ -3485,6 +3982,7 @@ es-to-primitive@^1.1.1: es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.39" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.39.tgz#fca21b67559277ca4ac1a1ed7048b107b6f76d87" + integrity sha512-AlaXZhPHl0po/uxMx1tyrlt1O86M6D5iVaDH8UgLfgek4kXTX6vzsRfJQWC2Ku+aG8pkw1XWzh9eTkwfVrsD5g== dependencies: es6-iterator "~2.0.3" es6-symbol "~3.1.1" @@ -3492,6 +3990,7 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= dependencies: d "1" es5-ext "^0.10.35" @@ -3500,6 +3999,7 @@ es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: es6-map@^0.1.3: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= dependencies: d "1" es5-ext "~0.10.14" @@ -3511,16 +4011,19 @@ es6-map@^0.1.3: es6-promise@^4.0.3, es6-promise@^4.2.4: version "4.2.4" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.4.tgz#dc4221c2b16518760bd8c39a52d8f356fc00ed29" + integrity sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ== es6-promisify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= dependencies: es6-promise "^4.0.3" es6-set@~0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= dependencies: d "1" es5-ext "~0.10.14" @@ -3531,6 +4034,7 @@ es6-set@~0.1.5: es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= dependencies: d "1" es5-ext "~0.10.14" @@ -3538,6 +4042,7 @@ es6-symbol@3.1.1, es6-symbol@^3.1.1, es6-symbol@~3.1.1: es6-weak-map@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f" + integrity sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8= dependencies: d "1" es5-ext "^0.10.14" @@ -3547,14 +4052,17 @@ es6-weak-map@^2.0.1: escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.8.1, escodegen@~1.9.0: +escodegen@^1.8.1: version "1.9.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + integrity sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3566,6 +4074,7 @@ escodegen@^1.8.1, escodegen@~1.9.0: escodegen@^1.9.0: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" @@ -3577,6 +4086,7 @@ escodegen@^1.9.0: escope@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= dependencies: es6-map "^0.1.3" es6-weak-map "^2.0.1" @@ -3586,10 +4096,12 @@ escope@^3.6.0: eslint-config-mourner@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/eslint-config-mourner/-/eslint-config-mourner-2.0.3.tgz#c858a7bdd03ceb5c124bc307af1270bb054f6c0c" + integrity sha512-ydFFzE/WkqvmozI3CM0lAtDZoYfmN03ycjlHzdPZW5x+o3Me1pI0lyfpsWoz9kOqykZk8qlvOVC5BN5UMwtXrg== eslint-import-resolver-node@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz#58f15fb839b8d0576ca980413476aab2472db66a" + integrity sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q== dependencies: debug "^2.6.9" resolve "^1.5.0" @@ -3597,6 +4109,7 @@ eslint-import-resolver-node@^0.3.1: eslint-module-utils@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" + integrity sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw== dependencies: debug "^2.6.8" pkg-dir "^1.0.0" @@ -3604,12 +4117,14 @@ eslint-module-utils@^2.1.1: eslint-plugin-flowtype@^2.34.0: version "2.45.0" resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.45.0.tgz#20d8b15d1e1e71ea4e9498e8be3fc62c0752fcbf" + integrity sha512-oUZgzkZOrqxvQvYZnkhojo/XfMhJ4rFy+TVwHTkgh6pNCom9hEzTS9QCeDaya+XP9vUqGopyQq983ExNtg96EA== dependencies: lodash "^4.15.0" eslint-plugin-html@^3.0.0: version "3.2.2" resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz#ef7093621d3a93de3206fd1f92f347ea9a1a4dfa" + integrity sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ== dependencies: htmlparser2 "^3.8.2" semver "^5.4.1" @@ -3617,6 +4132,7 @@ eslint-plugin-html@^3.0.0: eslint-plugin-import@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" + integrity sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk= dependencies: builtin-modules "^1.1.1" contains-path "^0.1.0" @@ -3632,6 +4148,7 @@ eslint-plugin-import@^2.9.0: eslint-plugin-react@^7.3.0: version "7.7.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" + integrity sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA== dependencies: doctrine "^2.0.2" has "^1.0.1" @@ -3641,6 +4158,7 @@ eslint-plugin-react@^7.3.0: eslint-scope@^3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" + integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= dependencies: esrecurse "^4.1.0" estraverse "^4.1.1" @@ -3648,6 +4166,7 @@ eslint-scope@^3.7.1: eslint@4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.1.1.tgz#facbdfcfe3e0facd3a8b80dc98c4e6c13ae582df" + integrity sha1-+svfz+Pg+s06i4DcmMTmwTrlgt8= dependencies: babel-code-frame "^6.22.0" chalk "^1.1.3" @@ -3683,13 +4202,15 @@ eslint@4.1.1: table "^4.0.1" text-table "~0.2.0" -esm@^3.0.72: - version "3.0.72" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.72.tgz#8f71b3f54b978bbbcbb9788f7f3569a36578c136" +esm@^3.0.84: + version "3.0.84" + resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" + integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== espree@^3.4.3: version "3.5.3" resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" + integrity sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ== dependencies: acorn "^5.4.0" acorn-jsx "^3.0.0" @@ -3697,30 +4218,36 @@ espree@^3.4.3: esprima@^2.6.0: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" + integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" + integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== espurify@^1.3.0, espurify@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/espurify/-/espurify-1.7.0.tgz#1c5cf6cbccc32e6f639380bd4f991fab9ba9d226" + integrity sha1-HFz2y8zDLm9jk4C9T5kfq5up0iY= dependencies: core-js "^2.0.0" esquery@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" + integrity sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo= dependencies: estraverse "^4.0.0" esrecurse@^4.1.0: version "4.2.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.0.tgz#fa9568d98d3823f9a41d91e902dcab9ea6e5b163" + integrity sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM= dependencies: estraverse "^4.1.0" object-assign "^4.0.1" @@ -3728,26 +4255,32 @@ esrecurse@^4.1.0: estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" + integrity sha1-De4/7TH81GlhjOc0IJn8GvoL2xM= estree-walker@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.3.1.tgz#e6b1a51cf7292524e7237c312e5fe6660c1ce1aa" + integrity sha1-5rGlHPcpJSTnI3wxLl/mZgwc4ao= estree-walker@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" + integrity sha512-XpCnW/AE10ws/kDAs37cngSkvgIR8aN3G0MS85m7dUpuK2EREo9VJ00uvw6Dg/hXEpfsE1I1TvJOJr+Z+TL+ig== esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" + integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= event-emitter@~0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= dependencies: d "1" es5-ext "~0.10.14" @@ -3755,6 +4288,7 @@ event-emitter@~0.3.5: event-stream@latest, event-stream@~3.3.0: version "3.3.4" resolved "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + integrity sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE= dependencies: duplexer "~0.1.1" from "~0" @@ -3767,18 +4301,22 @@ event-stream@latest, event-stream@~3.3.0: events-to-array@^1.0.1: version "1.1.2" resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" + integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= events@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha1-nr23Y1rQmccNzEwqH1AEKI6L2SQ= events@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/events/-/events-2.0.0.tgz#cbbb56bf3ab1ac18d71c43bb32c86255062769f2" + integrity sha512-r/M5YkNg9zwI8QbSf7tsDWWJvO3PGwZXyG7GpFAxtMASnHL2eblFd7iHiGPtyGKKFPZ59S63NeX10Ws6WqGDcg== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== dependencies: md5.js "^1.3.4" safe-buffer "^5.1.1" @@ -3786,6 +4324,7 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: execa@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= dependencies: cross-spawn "^5.0.1" get-stream "^3.0.0" @@ -3798,26 +4337,31 @@ execa@^0.7.0: execall@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" + integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= dependencies: clone-regexp "^1.0.0" execcommand-copy@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/execcommand-copy/-/execcommand-copy-1.1.0.tgz#36c159936560d81c4fe447043a473e5e09478989" + integrity sha1-NsFZk2Vg2BxP5EcEOkc+XglHiYk= exenv@^1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/exenv/-/exenv-1.2.2.tgz#2ae78e85d9894158670b03d47bec1f03bd91bb9d" + integrity sha1-KueOhdmJQVhnCwPUe+wfA72Ru50= expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + integrity sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s= dependencies: is-posix-bracket "^0.1.0" expand-brackets@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= dependencies: debug "^2.3.3" define-property "^0.2.5" @@ -3830,22 +4374,26 @@ expand-brackets@^2.1.4: expand-range@^1.8.1: version "1.8.2" resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + integrity sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc= dependencies: fill-range "^2.1.0" expand-template@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" + integrity sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ== extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= dependencies: is-extendable "^0.1.0" extend-shallow@^3.0.0, extend-shallow@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= dependencies: assign-symbols "^1.0.0" is-extendable "^1.0.1" @@ -3853,10 +4401,12 @@ extend-shallow@^3.0.0, extend-shallow@^3.0.2: extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= external-editor@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" + integrity sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA== dependencies: chardet "^0.4.0" iconv-lite "^0.4.17" @@ -3865,12 +4415,14 @@ external-editor@^2.0.4: extglob@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + integrity sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE= dependencies: is-extglob "^1.0.0" extglob@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== dependencies: array-unique "^0.3.2" define-property "^1.0.0" @@ -3884,27 +4436,22 @@ extglob@^2.0.4: extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: version "1.4.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - -falafel@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/falafel/-/falafel-2.1.0.tgz#96bb17761daba94f46d001738b3cedf3a67fe06c" - dependencies: - acorn "^5.0.0" - foreach "^2.0.5" - isarray "0.0.1" - object-keys "^1.0.6" + integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= fast-deep-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + integrity sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8= fast-glob@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.1.0.tgz#50ee95e6a112f09e886cfff5215de69ca4a6a861" + integrity sha512-QSSKZwDHLznUXdVtWvsfdbojmYI5igtVwfVbKW/LwNsy0JdM1cZ5yyP1kl5npg2ddugdnOk66QlNhbJ1c1hErg== dependencies: "@mrmlnc/readdir-enhanced" "^2.2.1" glob-parent "^3.1.0" @@ -3915,30 +4462,36 @@ fast-glob@^2.0.2: fast-json-stable-stringify@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz#d5142c0caee6b1189f87d3a76111064f86c8bbf2" + integrity sha1-1RQsDK7msRifh9OnYREGT4bIu/I= fast-levenshtein@~2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fasterror@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/fasterror/-/fasterror-1.1.0.tgz#0bc11c02117a9ae7b3e9ea57db606eb09f8523ac" + integrity sha1-C8EcAhF6muez6epX22BusJ+FI6w= faye-websocket@0.11.x: version "0.11.1" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.11.1.tgz#f0efe18c4f56e4f40afc7e06c719fd5ee6188f38" + integrity sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg= dependencies: websocket-driver ">=0.5.1" faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" + integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= dependencies: websocket-driver ">=0.5.1" fbjs@^0.8.16, fbjs@^0.8.4: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" + integrity sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s= dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -3951,16 +4504,19 @@ fbjs@^0.8.16, fbjs@^0.8.4: fd@~0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.2.tgz#e0edb2bd7a88cc86dd9f16391cba832418fd87ee" + integrity sha1-4O2yvXqIzIbdnxY5HLqDJBj9h+4= figures@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" + integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= dependencies: escape-string-regexp "^1.0.5" file-entry-cache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" + integrity sha1-w5KZDD5oR4PYOLjISkXYoEhFg2E= dependencies: flat-cache "^1.2.1" object-assign "^4.0.1" @@ -3968,6 +4524,7 @@ file-entry-cache@^2.0.0: file-loader@^1.1.11: version "1.1.11" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-1.1.11.tgz#6fe886449b0f2a936e43cabaac0cdbfb369506f8" + integrity sha512-TGR4HU7HUsGg6GCOPJnFk06RhWgEWFLAGWiT6rcD+GRC2keU3s9RGJ+b3Z6/U73jwwNb2gKLJ7YCrp+jvU4ALg== dependencies: loader-utils "^1.0.2" schema-utils "^0.4.5" @@ -3975,10 +4532,12 @@ file-loader@^1.1.11: filename-regex@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + integrity sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY= fill-range@^2.1.0: version "2.2.3" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + integrity sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM= dependencies: is-number "^2.1.0" isobject "^2.0.0" @@ -3989,6 +4548,7 @@ fill-range@^2.1.0: fill-range@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= dependencies: extend-shallow "^2.0.1" is-number "^3.0.0" @@ -3998,6 +4558,7 @@ fill-range@^4.0.0: finalhandler@0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-0.5.1.tgz#2c400d8d4530935bc232549c5fa385ec07de6fcd" + integrity sha1-LEANjUUwk1vCMlScX6OF7Afeb80= dependencies: debug "~2.2.0" escape-html "~1.0.3" @@ -4008,6 +4569,7 @@ finalhandler@0.5.1: finalhandler@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + integrity sha1-zgtoVbRYU+eRsvzGgARtiCU91/U= dependencies: debug "2.6.9" encodeurl "~1.0.1" @@ -4020,6 +4582,7 @@ finalhandler@1.1.0: find-cache-dir@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz#c8defae57c8a52a8a784f9e31c57c742e993a0b9" + integrity sha1-yN765XyKUqinhPnjHFfHQumToLk= dependencies: commondir "^1.0.1" mkdirp "^0.5.1" @@ -4028,6 +4591,7 @@ find-cache-dir@^0.1.1: find-cache-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz#9288e3e9e3cc3748717d39eade17cf71fc30ee6f" + integrity sha1-kojj6ePMN0hxfTnq3hfPcfww7m8= dependencies: commondir "^1.0.1" make-dir "^1.0.0" @@ -4036,6 +4600,7 @@ find-cache-dir@^1.0.0: find-up@^1.0.0, find-up@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= dependencies: path-exists "^2.0.0" pinkie-promise "^2.0.0" @@ -4043,22 +4608,26 @@ find-up@^1.0.0, find-up@^1.1.2: find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" + integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= dependencies: locate-path "^2.0.0" find-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== dependencies: locate-path "^3.0.0" findit@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/findit/-/findit-2.0.0.tgz#6509f0126af4c178551cfa99394e032e13a4d56e" + integrity sha1-ZQnwEmr0wXhVHPqZOU4DLhOk1W4= flat-cache@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.3.0.tgz#d3030b32b38154f4e3b7e9c709f490f7ef97c481" + integrity sha1-0wMLMrOBVPTjt+nHCfSQ9++XxIE= dependencies: circular-json "^0.3.1" del "^2.0.2" @@ -4068,10 +4637,12 @@ flat-cache@^1.2.1: flow-bin@^0.77.0: version "0.77.0" resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.77.0.tgz#4e5c93929f289a0c28e08fb361a9734944a11297" + integrity sha1-TlyTkp8omgwo4I+zYalzSUShEpc= flow-coverage-report@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/flow-coverage-report/-/flow-coverage-report-0.3.0.tgz#a22d52fc9fa9c24ae0be02712a6fe1ac156f0d93" + integrity sha1-oi1S/J+pwkrgvgJxKm/hrBVvDZM= dependencies: array.prototype.find "2.0.0" babel-runtime "6.11.6" @@ -4089,6 +4660,7 @@ flow-coverage-report@^0.3.0: flush-write-stream@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.2.tgz#c81b90d8746766f1a609a46809946c45dd8ae417" + integrity sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc= dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -4096,6 +4668,7 @@ flush-write-stream@^1.0.0: flush-write-stream@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.0.3.tgz#c5d586ef38af6097650b49bc41b55fabb19f35bd" + integrity sha512-calZMC10u0FMUqoiunI2AiGIIUtUIvifNwkHhNupZH4cbNnW1Itkoh/Nf5HFYmDrwWPjrUxpkZT0KhuCq0jmGw== dependencies: inherits "^2.0.1" readable-stream "^2.0.4" @@ -4103,20 +4676,24 @@ flush-write-stream@^1.0.2: for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= for-own@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= dependencies: for-in "^1.0.1" foreach@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + integrity sha1-C+4AUBiusmDQo6865ljdATbsG5k= foreground-child@^1.3.3, foreground-child@^1.5.3, foreground-child@^1.5.6: version "1.5.6" resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= dependencies: cross-spawn "^4" signal-exit "^3.0.0" @@ -4124,10 +4701,12 @@ foreground-child@^1.3.3, foreground-child@^1.5.3, foreground-child@^1.5.6: forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= form-data@~2.1.1: version "2.1.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + integrity sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE= dependencies: asynckit "^0.4.0" combined-stream "^1.0.5" @@ -4136,6 +4715,7 @@ form-data@~2.1.1: form-data@~2.3.1: version "2.3.2" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.2.tgz#4970498be604c20c005d4f5c23aecd21d6b49099" + integrity sha1-SXBJi+YEwgwAXU9cI67NIda0kJk= dependencies: asynckit "^0.4.0" combined-stream "1.0.6" @@ -4144,16 +4724,19 @@ form-data@~2.3.1: fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= dependencies: map-cache "^0.2.2" fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= from2@^2.1.0, from2@^2.1.1: version "2.3.0" resolved "https://registry.yarnpkg.com/from2/-/from2-2.3.0.tgz#8bfb5502bde4a4d36cfdeea007fcca21d7e382af" + integrity sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8= dependencies: inherits "^2.0.1" readable-stream "^2.0.0" @@ -4161,20 +4744,24 @@ from2@^2.1.0, from2@^2.1.1: from@~0: version "0.1.7" resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + integrity sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4= front-matter@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-2.3.0.tgz#7203af896ce357ee04e2aa45169ea91ed7f67504" + integrity sha1-cgOviWzjV+4E4qpFFp6pHtf2dQQ= dependencies: js-yaml "^3.10.0" fs-exists-cached@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" + integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= fs-extra@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-5.0.0.tgz#414d0110cdd06705734d055652c5411260c31abd" + integrity sha512-66Pm4RYbjzdyeuqudYqhFiNBbCIuI9kgRqLPSHIlXHidW8NIQtVdkM1yeZ4lXwuhbTETv3EUGMNHAAw6hiundQ== dependencies: graceful-fs "^4.1.2" jsonfile "^4.0.0" @@ -4183,12 +4770,14 @@ fs-extra@^5.0.0: fs-minipass@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.5.tgz#06c277218454ec288df77ada54a03b8702aacb9d" + integrity sha512-JhBl0skXjUPCFH7x6x61gQxrKyXsxB5gcgePLZCwfyCGGsTISMoIeObbrvVeP6Xmyaudw4TT43qV2Gz+iyd2oQ== dependencies: minipass "^2.2.1" fs-mkdirp-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" + integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= dependencies: graceful-fs "^4.1.11" through2 "^2.0.3" @@ -4196,6 +4785,7 @@ fs-mkdirp-stream@^1.0.0: fs-write-stream-atomic@^1.0.8: version "1.0.10" resolved "https://registry.yarnpkg.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz#b47df53493ef911df75731e70a9ded0189db40c9" + integrity sha1-tH31NJPvkR33VzHnCp3tAYnbQMk= dependencies: graceful-fs "^4.1.2" iferr "^0.1.5" @@ -4205,10 +4795,12 @@ fs-write-stream-atomic@^1.0.8: fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= fsevents@^1.0.0, fsevents@^1.1.2: version "1.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" + integrity sha512-WIr7iDkdmdbxu/Gh6eKEZJL6KPE74/5MEsf2whTOFNxbIoIixogroLdKYqB6FDav4Wavh/lZdzzd3b2KxIXC5Q== dependencies: nan "^2.3.0" node-pre-gyp "^0.6.39" @@ -4216,6 +4808,7 @@ fsevents@^1.0.0, fsevents@^1.1.2: fsevents@^1.2.2: version "1.2.4" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426" + integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg== dependencies: nan "^2.9.2" node-pre-gyp "^0.10.0" @@ -4223,6 +4816,7 @@ fsevents@^1.2.2: fstream-ignore@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + integrity sha1-nDHa40dnAY/h0kmyTa2mfQktoQU= dependencies: fstream "^1.0.0" inherits "2" @@ -4231,6 +4825,7 @@ fstream-ignore@^1.0.5: fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: version "1.0.11" resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -4240,14 +4835,17 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: function-bind@^1.0.2, function-bind@^1.1.0, function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== function-loop@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/function-loop/-/function-loop-1.0.1.tgz#8076bb305e8e6a3cceee2920765f330d190f340c" + integrity sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw= gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= dependencies: aproba "^1.0.3" console-control-strings "^1.0.0" @@ -4261,16 +4859,19 @@ gauge@~2.7.3: generate-function@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" + integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ= generate-object-property@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= dependencies: is-property "^1.0.0" geojson-rewind@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/geojson-rewind/-/geojson-rewind-0.3.0.tgz#d5c35025fa708910e2da1a97fc23a2e2478a876a" + integrity sha512-5dsjiZGk6p///Ju9kh7uGW+I74CZriHsxqBNPbIN4bbInfKmHwwM+f8fZ42fmpV5emeUYLTTC+GWs3EC1TMjNQ== dependencies: "@mapbox/geojson-area" "0.2.2" concat-stream "~1.6.0" @@ -4279,18 +4880,22 @@ geojson-rewind@^0.3.0: geojson-vt@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.0.tgz#039cea549df5f892c48cff8eb66c2e217d61c241" + integrity sha512-qk7sEv7dMfuGzflwClsgtO1fWPut/TqCInWEEUJc/Ofn4tmqBGznnPv3eUdxtwMkulMaAwSL3osHiyN03XJd/w== get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" + integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U= get-own-enumerable-property-symbols@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-2.0.1.tgz#5c4ad87f2834c4b9b4e84549dc1e0650fb38c24b" + integrity sha512-TtY/sbOemiMKPRUDDanGCSgBYe7Mf0vbRsWnBZ+9yghpZ1MvcpSpuZFjHdEeY/LZjZy0vdLjS77L6HosisFiug== get-pkg-repo@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/get-pkg-repo/-/get-pkg-repo-0.1.0.tgz#7f04d968564bf9cd2e901810577f84c37f2b03bd" + integrity sha1-fwTZaFZL+c0ukBgQV3+Ew38rA70= dependencies: hosted-git-info "^2.1.4" meow "^3.3.0" @@ -4300,36 +4905,44 @@ get-pkg-repo@^0.1.0: get-port@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw= get-port@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.0.0.tgz#373c85960138ee20027c070e3cb08019fea29816" + integrity sha512-Yy3yNI2oShgbaWg4cmPhWjkZfktEvpKI09aDX4PZzNtlU9obuYrX7x2mumQsrNxlF+Ls7OtMQW/u+X4s896bOQ== get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" + integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= get-stdin@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" + integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= dependencies: assert-plus "^1.0.0" git-raw-commits@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-0.1.2.tgz#2becbdcd3f96ef0b19f16863f7a2f6d9d8ab8369" + integrity sha1-K+y9zT+W7wsZ8Whj96L22dirg2k= dependencies: dargs "^4.0.1" lodash.template "^3.6.1" @@ -4340,6 +4953,7 @@ git-raw-commits@^0.1.2: git-semver-tags@^1.1.0: version "1.3.3" resolved "https://registry.yarnpkg.com/git-semver-tags/-/git-semver-tags-1.3.3.tgz#0b0416c43285adfdc93a8038ea25502a09319245" + integrity sha512-FK/ZQeFwANfsoo+3FFhO1XRVVKgSZgcO0ABtydFrPQj7U2N5ELVr8MxBqlXa5TdpRKTp6/H5ki1cK2Anxr2kJw== dependencies: meow "^3.3.0" semver "^5.0.1" @@ -4347,6 +4961,7 @@ git-semver-tags@^1.1.0: git-up@^2.0.0: version "2.0.10" resolved "https://registry.yarnpkg.com/git-up/-/git-up-2.0.10.tgz#20fe6bafbef4384cae253dc4f463c49a0c3bd2ec" + integrity sha512-2v4UN3qV2RGypD9QpmUjpk+4+RlYpW8GFuiZqQnKmvei08HsFPd0RfbDvEhnE4wBvnYs8ORVtYpOFuuCEmBVBw== dependencies: is-ssh "^1.3.0" parse-url "^1.3.0" @@ -4354,26 +4969,31 @@ git-up@^2.0.0: git-url-parse@^10.0.1: version "10.0.1" resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-10.0.1.tgz#75f153b24ac7297447fc583cf9fac23a5ae687c1" + integrity sha512-Tq2u8UPXc/FawC/dO8bvh8jcck0Lkor5OhuZvmVSeyJGRucDBfw9y2zy/GNCx28lMYh1N12IzPwDexjUNFyAeg== dependencies: git-up "^2.0.0" github-from-package@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" + integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= github-slugger@1.2.0, github-slugger@^1.0.0, github-slugger@^1.1.1, github-slugger@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a" + integrity sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q== dependencies: emoji-regex ">=6.0.0 <=6.1.1" gl-matrix@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-2.6.1.tgz#1bc7f7b396f4ae80abdb4db9a98cd07d170b9004" + integrity sha512-fK37p7vkpw5H4WSypfa6TUV8nlB8+Fd1pZj15sMtvRPnfzArvTI4U4E25x2Hmp+UxZX11ve0aGaHarRieP+gSw== gl@^4.0.1: version "4.0.4" resolved "https://registry.yarnpkg.com/gl/-/gl-4.0.4.tgz#46745f365a230672b2f988d85018f737e64c3343" + integrity sha512-J/l/QSjbW9UHQjWqmCtXe2H1Gt8ednfC1tofmwABg9z+36DMNBs8W3i/2NgLg4Mdg+bED/DKnU1B3HIpSSidFQ== dependencies: bindings "^1.2.1" bit-twiddle "^1.0.2" @@ -4385,6 +5005,7 @@ gl@^4.0.1: glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + integrity sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q= dependencies: glob-parent "^2.0.0" is-glob "^2.0.0" @@ -4392,12 +5013,14 @@ glob-base@^0.3.0: glob-parent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + integrity sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg= dependencies: is-glob "^2.0.0" glob-parent@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= dependencies: is-glob "^3.1.0" path-dirname "^1.0.0" @@ -4405,6 +5028,7 @@ glob-parent@^3.1.0: glob-stream@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" + integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= dependencies: extend "^3.0.0" glob "^7.1.1" @@ -4420,10 +5044,12 @@ glob-stream@^6.1.0: glob-to-regexp@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" + integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= glob@7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" + integrity sha1-tCAqaQmbu00pKnwblbZoK2fr3JU= dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4435,6 +5061,7 @@ glob@7.0.5: glob@^5.0.14: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= dependencies: inflight "^1.0.4" inherits "2" @@ -4445,6 +5072,7 @@ glob@^5.0.14: glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2: version "7.1.2" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + integrity sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4456,20 +5084,24 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, gl global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU= dependencies: ini "^1.3.4" globals-docs@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.0.tgz#f2c647544eb6161c7c38452808e16e693c2dafbb" + integrity sha512-B69mWcqCmT3jNYmSxRxxOXWfzu3Go8NQXPfl2o0qPd1EEFhwW0dFUg9ztTu915zPQzqwIhWAlw6hmfIcCK4kkQ== globals@^9.17.0, globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== globby@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" + integrity sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0= dependencies: array-union "^1.0.1" arrify "^1.0.0" @@ -4481,6 +5113,7 @@ globby@^5.0.0: globby@^6.0.0, globby@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-6.1.0.tgz#f5a6d70e8395e21c858fb0489d64df02424d506c" + integrity sha1-9abXDoOV4hyFj7BInWTfAkJNUGw= dependencies: array-union "^1.0.1" glob "^7.0.3" @@ -4491,6 +5124,7 @@ globby@^6.0.0, globby@^6.1.0: globby@^7.0.0, globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" + integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -4502,6 +5136,7 @@ globby@^7.0.0, globby@^7.1.1: globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" + integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== dependencies: array-union "^1.0.1" dir-glob "^2.0.0" @@ -4514,28 +5149,33 @@ globby@^8.0.1: globjoin@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" + integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= glsl-tokenizer@^2.0.2: version "2.1.2" resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.2.tgz#720307522e03c57af35c00551950c4a70ef2dfb9" + integrity sha1-cgMHUi4DxXrzXABVGVDEpw7y37k= dependencies: through2 "^0.6.3" gonzales-pe@^4.0.3: version "4.2.3" resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" + integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw== dependencies: minimist "1.1.x" good-listener@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/good-listener/-/good-listener-1.2.2.tgz#d53b30cdf9313dffb7dc9a0d477096aa6d145c50" + integrity sha1-1TswzfkxPf+33JoNR3CWqm0UXFA= dependencies: delegate "^3.1.2" got@^6.7.1: version "6.7.1" resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= dependencies: create-error-class "^3.0.0" duplexer3 "^0.1.4" @@ -4552,6 +5192,7 @@ got@^6.7.1: got@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/got/-/got-8.3.2.tgz#1d23f64390e97f776cac52e5b936e5f514d2e937" + integrity sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw== dependencies: "@sindresorhus/is" "^0.7.0" cacheable-request "^2.1.1" @@ -4574,10 +5215,12 @@ got@^8.3.0: graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@~4.1.11: version "4.1.11" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= gray-matter@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/gray-matter/-/gray-matter-3.1.1.tgz#101f80d9e69eeca6765cdce437705b18f40876ac" + integrity sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA== dependencies: extend-shallow "^2.0.1" js-yaml "^3.10.0" @@ -4587,10 +5230,12 @@ gray-matter@^3.1.1: grid-index@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.0.0.tgz#ad2c5d54ce5b35437faff1d70a9aeb3d1d261110" + integrity sha1-rSxdVM5bNUN/r/HXCprrPR0mERA= handlebars@^4.0.2, handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + integrity sha1-Ywo13+ApS8KB7a5v/F0yn8eYLcw= dependencies: async "^1.4.0" optimist "^0.6.1" @@ -4601,14 +5246,17 @@ handlebars@^4.0.2, handlebars@^4.0.3: har-schema@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + integrity sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4= har-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= har-validator@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" + integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0= dependencies: chalk "^1.1.1" commander "^2.9.0" @@ -4618,6 +5266,7 @@ har-validator@~2.0.6: har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + integrity sha1-M0gdDxu/9gDdID11gSpqX7oALio= dependencies: ajv "^4.9.1" har-schema "^1.0.5" @@ -4625,6 +5274,7 @@ har-validator@~4.2.1: har-validator@~5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + integrity sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0= dependencies: ajv "^5.1.0" har-schema "^2.0.0" @@ -4632,42 +5282,51 @@ har-validator@~5.0.3: has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" + integrity sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE= dependencies: ansi-regex "^2.0.0" has-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo= has-flag@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + integrity sha1-6CB68cx7MNRGzHC3NLXovhj4jVE= has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= has-symbol-support-x@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/has-symbol-support-x/-/has-symbol-support-x-1.4.1.tgz#66ec2e377e0c7d7ccedb07a3a84d77510ff1bc4c" + integrity sha512-JkaetveU7hFbqnAC1EV1sF4rlojU2D4Usc5CmS69l6NfmPDnpnFUegzFg33eDkkpNCxZ0mQp65HwUDrNFS/8MA== 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-to-string-tag-x@^1.2.0: version "1.4.1" resolved "https://registry.yarnpkg.com/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz#a045ab383d7b4b2012a00148ab0aa5f290044d4d" + integrity sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw== dependencies: has-symbol-support-x "^1.4.1" has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= dependencies: get-value "^2.0.3" has-values "^0.1.4" @@ -4676,6 +5335,7 @@ has-value@^0.3.1: has-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= dependencies: get-value "^2.0.6" has-values "^1.0.0" @@ -4684,10 +5344,12 @@ has-value@^1.0.0: has-values@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= has-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -4695,18 +5357,21 @@ has-values@^1.0.0: has@^1.0.0, has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" + integrity sha1-hGFzP1OLCDfJNh45qauelwTcLyg= dependencies: function-bind "^1.0.2" hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" + integrity sha1-ZuodhW206KVHDK32/OI65SRO8uE= dependencies: inherits "^2.0.1" hash-base@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" + integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" @@ -4714,6 +5379,7 @@ hash-base@^3.0.0: hash.js@^1.0.0, hash.js@^1.0.3: version "1.1.3" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.3.tgz#340dedbe6290187151c1ea1d777a3448935df846" + integrity sha512-/UETyP0W22QILqS+6HowevwhEFJ3MBJnwTf75Qob9Wz9t0DPuisL8kW8YZMK62dHAKE1c1p+gY1TtOLY+USEHA== dependencies: inherits "^2.0.3" minimalistic-assert "^1.0.0" @@ -4721,12 +5387,14 @@ hash.js@^1.0.0, hash.js@^1.0.3: hasha@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" + integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= dependencies: is-stream "^1.0.1" hast-to-hyperscript@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hast-to-hyperscript/-/hast-to-hyperscript-3.1.0.tgz#58ef4af5344f4da22f0622e072a8d5fa062693d3" + integrity sha512-/At2y6sQLTAcL6y+3hRQFcaBoRlKrmHSpvvdOZqRz6uI2YyjrU8rJ7e1LbmLtWUmzaIqKEdNSku+AJC0pt4+aw== dependencies: comma-separated-tokens "^1.0.0" is-nan "^1.2.1" @@ -4739,6 +5407,7 @@ hast-to-hyperscript@^3.0.0: hast-util-from-parse5@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hast-util-from-parse5/-/hast-util-from-parse5-2.1.0.tgz#f6123d83d3689630b097e13e430d16d9d1bd8884" + integrity sha1-9hI9g9NoljCwl+E+Qw0W2dG9iIQ= dependencies: camelcase "^3.0.0" hastscript "^3.0.0" @@ -4748,14 +5417,17 @@ hast-util-from-parse5@^2.0.0: hast-util-is-element@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.0.tgz#3f7216978b2ae14d98749878782675f33be3ce00" + integrity sha1-P3IWl4sq4U2YdJh4eCZ18zvjzgA= hast-util-parse-selector@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/hast-util-parse-selector/-/hast-util-parse-selector-2.1.0.tgz#b55c0f4bb7bb2040c889c325ef87ab29c38102b4" + integrity sha1-tVwPS7e7IEDIicMl74erKcOBArQ= hast-util-raw@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hast-util-raw/-/hast-util-raw-2.0.2.tgz#20674cfb45428213917a54ec929e6774df0642d8" + integrity sha512-ujytXSAZC85bvh38f8ALzfE2IZDdCwB9XeHUs9l20C1p4/1YeAoZqq9z9U17vWQ9hMmqbVaROuSK8feL3wTCJg== dependencies: hast-util-from-parse5 "^2.0.0" hast-util-to-parse5 "^2.0.0" @@ -4768,12 +5440,14 @@ hast-util-raw@^2.0.0: hast-util-sanitize@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-1.1.2.tgz#d10bd6757a21e59c13abc8ae3530dd3b6d7d679e" + integrity sha1-0QvWdXoh5ZwTq8iuNTDdO219Z54= dependencies: xtend "^4.0.1" hast-util-to-html@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-3.1.0.tgz#882c99849e40130e991c042e456d453d95c36cff" + integrity sha1-iCyZhJ5AEw6ZHAQuRW1FPZXDbP8= dependencies: ccount "^1.0.0" comma-separated-tokens "^1.0.1" @@ -4790,6 +5464,7 @@ hast-util-to-html@^3.0.0: hast-util-to-parse5@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/hast-util-to-parse5/-/hast-util-to-parse5-2.2.0.tgz#48c8f7f783020c04c3625db06109d02017033cbc" + integrity sha512-Eg1mrf0VTT/PipFN5z1+mVi+4GNhinKk/i/HKeX1h17IYiMdm3G8vgA0FU04XCuD1cWV58f5zziFKcBkr+WuKw== dependencies: hast-to-hyperscript "^3.0.0" mapz "^1.0.0" @@ -4800,10 +5475,12 @@ hast-util-to-parse5@^2.0.0: hast-util-whitespace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.0.tgz#bd096919625d2936e1ff17bc4df7fd727f17ece9" + integrity sha1-vQlpGWJdKTbh/xe8Tff9cn8X7Ok= hastscript@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/hastscript/-/hastscript-3.1.0.tgz#66628ba6d7f1ad07d9277dd09028aba7f4934599" + integrity sha512-8V34dMSDT1Ik+ZSgTzCLdyp89MrWxcxctXPxhmb72GQj1Xkw1aHPM9UaHCWewvH2Q+PVkYUm4ZJVw4T0dgEGNA== dependencies: camelcase "^3.0.0" comma-separated-tokens "^1.0.0" @@ -4814,6 +5491,7 @@ hastscript@^3.0.0: hawk@3.1.3, hawk@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + integrity sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ= dependencies: boom "2.x.x" cryptiles "2.x.x" @@ -4823,6 +5501,7 @@ hawk@3.1.3, hawk@~3.1.3: hawk@~6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + integrity sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ== dependencies: boom "4.x.x" cryptiles "3.x.x" @@ -4832,14 +5511,17 @@ hawk@~6.0.2: he@1.1.x, he@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + integrity sha1-k0EP0hsAlzUVH4howvJx80J+I/0= highlight.js@^9.12.0: version "9.12.0" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.12.0.tgz#e6d9dbe57cbefe60751f02af336195870c90c01e" + integrity sha1-5tnb5Xy+/mB1HwKvM2GVhwyQwB4= hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= dependencies: hash.js "^1.0.3" minimalistic-assert "^1.0.0" @@ -4848,14 +5530,17 @@ hmac-drbg@^1.0.0: hoek@2.x.x: version "2.16.3" resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + integrity sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0= hoek@4.x.x: version "4.2.1" resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb" + integrity sha512-QLg82fGkfnJ/4iy1xZ81/9SIJiq1NGFUMGs6ParyjBZr6jW2Ufj/snDqTHixNlHdPNwN2RLVD0Pi3igeK9+JfA== home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.1" @@ -4863,16 +5548,19 @@ home-or-tmp@^2.0.0: hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" + integrity sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg== html-encoding-sniffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" + integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== dependencies: whatwg-encoding "^1.0.1" html-minifier@^3.2.3: version "3.5.9" resolved "https://registry.yarnpkg.com/html-minifier/-/html-minifier-3.5.9.tgz#74424014b872598d4bb0e20ac420926ec61024b6" + integrity sha512-EZqO91XJwkj8BeLx9C12sKB/AHoTANaZax39vEOP9f/X/9jgJ3r1O2+neabuHqpz5kJO71TapP9JrtCY39su1A== dependencies: camel-case "3.0.x" clean-css "4.1.x" @@ -4886,14 +5574,17 @@ html-minifier@^3.2.3: html-tags@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" + integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= html-void-elements@^1.0.0, html-void-elements@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.2.tgz#9d22e0ca32acc95b3f45b8d5b4f6fbdc05affd55" + integrity sha1-nSLgyjKsyVs/RbjVtPb73AWv/VU= html-webpack-plugin@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" + integrity sha1-sBq71yOsqqeze2r0SS69oD2d03s= dependencies: html-minifier "^3.2.3" loader-utils "^0.2.16" @@ -4906,10 +5597,12 @@ html-webpack-plugin@^3.1.0: htmlescape@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" + integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= htmlparser2@^3.8.2, htmlparser2@^3.9.0, htmlparser2@^3.9.1, htmlparser2@^3.9.2: version "3.9.2" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.9.2.tgz#1bdf87acca0f3f9e53fa4fcceb0f4b4cbb00b338" + integrity sha1-G9+HrMoPP55T+k/M6w9LTLsAszg= dependencies: domelementtype "^1.3.0" domhandler "^2.3.0" @@ -4921,6 +5614,7 @@ htmlparser2@^3.8.2, htmlparser2@^3.9.0, htmlparser2@^3.9.1, htmlparser2@^3.9.2: htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" + integrity sha1-zHDQWln2VC5D8OaFyYLhTJJKnv4= dependencies: domelementtype "1" domhandler "2.1" @@ -4930,6 +5624,7 @@ htmlparser2@~3.3.0: http-auth@3.1.x: version "3.1.3" resolved "https://registry.yarnpkg.com/http-auth/-/http-auth-3.1.3.tgz#945cfadd66521eaf8f7c84913d377d7b15f24e31" + integrity sha1-lFz63WZSHq+PfISRPTd9exXyTjE= dependencies: apache-crypt "^1.1.2" apache-md5 "^1.0.6" @@ -4939,10 +5634,12 @@ http-auth@3.1.x: http-cache-semantics@3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz#39b0e16add9b605bf0a9ef3d9daaf4843b4cacd2" + integrity sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w== http-errors@~1.6.2: version "1.6.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.3.tgz#8b55680bb4be283a0b5bf4ea2e38580be1d9320d" + integrity sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0= dependencies: depd "~1.1.2" inherits "2.0.3" @@ -4952,10 +5649,12 @@ http-errors@~1.6.2: http-parser-js@>=0.4.0: version "0.4.10" resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" + integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= http-proxy-agent@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz#e4821beef5b2142a2026bd73926fe537631c5405" + integrity sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg== dependencies: agent-base "4" debug "3.1.0" @@ -4963,6 +5662,7 @@ http-proxy-agent@^2.1.0: http-signature@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + integrity sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8= dependencies: assert-plus "^0.2.0" jsprim "^1.2.2" @@ -4971,6 +5671,7 @@ http-signature@~1.1.0: http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= dependencies: assert-plus "^1.0.0" jsprim "^1.2.2" @@ -4979,10 +5680,12 @@ http-signature@~1.2.0: https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= https-proxy-agent@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.1.tgz#51552970fa04d723e04c56d04178c3f92592bbc0" + integrity sha512-HPCTS1LW51bcyMYbxUIOO4HEOlQ1/1qRaFWcyxvwaqUS9TY88aoEuHUY33kuAh1YhVVaDQhLZsnPd+XNARWZlQ== dependencies: agent-base "^4.1.0" debug "^3.1.0" @@ -4990,68 +5693,83 @@ https-proxy-agent@^2.2.0: iconv-lite@0.4, iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" + integrity sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.4, ieee754@^1.1.6: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" + integrity sha1-vjPUCsEO8ZJnAfbwii2G+/0a0+Q= iferr@^0.1.5: version "0.1.5" resolved "https://registry.yarnpkg.com/iferr/-/iferr-0.1.5.tgz#c60eed69e6d8fdb6b3104a1fcbca1c192dc5b501" + integrity sha1-xg7taebY/bazEEofy8ocGS3FtQE= ignore-loader@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/ignore-loader/-/ignore-loader-0.1.2.tgz#d81f240376d0ba4f0d778972c3ad25874117a463" + integrity sha1-2B8kA3bQuk8Nd4lyw60lh0EXpGM= 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== dependencies: minimatch "^3.0.4" ignore@^3.3.3, ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" + integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= indefinite@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/indefinite/-/indefinite-2.1.1.tgz#c51fbfdf6f857bbad7a9e36f2bb9296ccc3c6d6a" + integrity sha512-HzvHWUjP7gpEx9K0PJ/aQAsMhcKIZHifXKK2R2GnkUs671qrEHWFoLJnxlcqm/ng1K/fRKmOGZ7FKZlxjXBFpw== indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" + integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= dependencies: repeating "^2.0.0" indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" + integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" + integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= indexof@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" + integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= inflight@^1.0.4: version "1.0.6" resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= dependencies: once "^1.3.0" wrappy "1" @@ -5059,24 +5777,29 @@ inflight@^1.0.4: inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= ini@^1.3.3, ini@^1.3.4, ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== inline-source-map@~0.6.0: version "0.6.2" resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" + integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= dependencies: source-map "~0.5.3" inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" + integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" @@ -5096,6 +5819,7 @@ inquirer@^3.0.6: insert-module-globals@^7.0.0: version "7.0.2" resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.0.2.tgz#012c56baa7d3307a8b417d4ec5270cf9741c18f4" + integrity sha512-p3s7g96Nm62MbHRuj9ZXab0DuJNWD7qcmdUXCOQ/ZZn42DtDXfsLill7bq19lDCx3K3StypqUnuE3H2VmIJFUw== dependencies: JSONStream "^1.0.3" combine-source-map "~0.7.1" @@ -5109,10 +5833,12 @@ insert-module-globals@^7.0.0: interpret@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.1.0.tgz#7ed1b1410c6a0e0f78cf95d3b8440c63f78b8614" + integrity sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ= into-stream@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/into-stream/-/into-stream-3.1.0.tgz#96fb0a936c12babd6ff1752a17d05616abd094c6" + integrity sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY= dependencies: from2 "^2.1.1" p-is-promise "^1.1.0" @@ -5120,20 +5846,24 @@ into-stream@^3.1.0: invariant@^2.2.2: version "2.2.3" resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.3.tgz#1a827dfde7dcbd7c323f0ca826be8fa7c5e9d688" + integrity sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA== dependencies: loose-envify "^1.0.0" invert-kv@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= is-absolute-url@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" + integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= is-absolute@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" + integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== dependencies: is-relative "^1.0.0" is-windows "^1.0.1" @@ -5141,26 +5871,31 @@ is-absolute@^1.0.0: is-accessor-descriptor@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= dependencies: kind-of "^3.0.2" is-accessor-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== dependencies: kind-of "^6.0.0" is-alphabetical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.1.tgz#c77079cc91d4efac775be1034bf2d243f95e6f08" + integrity sha1-x3B5zJHU76x3W+EDS/LSQ/lebwg= is-alphanumeric@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= is-alphanumerical@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.1.tgz#dfb4aa4d1085e33bdb61c2dee9c80e9c6c19f53b" + integrity sha1-37SqTRCF4zvbYcLe6cgOnGwZ9Ts= dependencies: is-alphabetical "^1.0.0" is-decimal "^1.0.0" @@ -5168,50 +5903,60 @@ is-alphanumerical@^1.0.0: is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= dependencies: binary-extensions "^1.0.0" is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" + integrity sha1-VAVy0096wxGfj3bDDLwbHgN6/74= dependencies: builtin-modules "^1.0.0" is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" + integrity sha1-hut1OSgF3cM69xySoO7fdO52BLI= is-data-descriptor@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= dependencies: kind-of "^3.0.2" is-data-descriptor@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== dependencies: kind-of "^6.0.0" is-date-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" + integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= is-decimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.1.tgz#f5fb6a94996ad9e8e3761fbfbd091f1fca8c4e82" + integrity sha1-9ftqlJlq2ejjdh+/vQkfH8qMToI= is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== dependencies: is-accessor-descriptor "^0.1.6" is-data-descriptor "^0.1.4" @@ -5220,6 +5965,7 @@ is-descriptor@^0.1.0: is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== dependencies: is-accessor-descriptor "^1.0.0" is-data-descriptor "^1.0.0" @@ -5228,76 +5974,91 @@ is-descriptor@^1.0.0, is-descriptor@^1.0.2: is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" + integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + integrity sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE= is-equal-shallow@^0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + integrity sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ= dependencies: is-primitive "^2.0.0" is-extendable@^0.1.0, is-extendable@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= is-extendable@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== dependencies: is-plain-object "^2.0.4" is-extglob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + integrity sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA= is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= is-finite@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.0.2.tgz#cc6677695602be550ef11e8b4aa6305342b6d0aa" + integrity sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= dependencies: number-is-nan "^1.0.0" is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= is-glob@^2.0.0, is-glob@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + integrity sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM= dependencies: is-extglob "^1.0.0" is-glob@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: is-extglob "^2.1.0" is-glob@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.0.tgz#9521c76845cc2610a85203ddf080a958c2ffabc0" + integrity sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A= dependencies: is-extglob "^2.1.1" is-hexadecimal@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.1.tgz#6e084bbc92061fbb0971ec58b6ce6d404e24da69" + integrity sha1-bghLvJIGH7sJcexYts5tQE4k2mk= is-installed-globally@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA= dependencies: global-dirs "^0.1.0" is-path-inside "^1.0.0" @@ -5305,14 +6066,17 @@ is-installed-globally@^0.1.0: is-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" + integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= is-my-ip-valid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" + integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== is-my-json-valid@^2.12.4, is-my-json-valid@^2.16.0: version "2.17.2" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" + integrity sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg== dependencies: generate-function "^2.0.0" generate-object-property "^1.1.0" @@ -5323,204 +6087,248 @@ is-my-json-valid@^2.12.4, is-my-json-valid@^2.16.0: is-nan@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2" + integrity sha1-n69ltvttskt/XAYoR16nH5iEAeI= dependencies: define-properties "^1.1.1" is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" + integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= is-npm@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha1-8vtjpl5JBbQGyGBydloaTceTufQ= is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + integrity sha1-Afy7s5NGOlSPL0ZszhbezknbkI8= dependencies: kind-of "^3.0.2" is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= dependencies: kind-of "^3.0.2" is-number@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-4.0.0.tgz#0026e37f5454d73e356dfe6564699867c6a7f0ff" + integrity sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ== is-obj@^1.0.0, is-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= is-object@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.1.tgz#8952688c5ec2ffd6b03ecc85e769e02903083470" + integrity sha1-iVJojF7C/9awPsyF52ngKQMINHA= is-odd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-odd/-/is-odd-2.0.0.tgz#7646624671fd7ea558ccd9a2795182f2958f1b24" + integrity sha512-OTiixgpZAT1M4NHgS5IguFp/Vz2VI3U7Goh4/HA1adtwyLtSBrxYlcSYkhpAE07s4fKEcjrFxyvtQBND4vFQyQ== dependencies: is-number "^4.0.0" is-path-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" + integrity sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0= is-path-in-cwd@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" + integrity sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw= dependencies: is-path-inside "^1.0.0" is-path-inside@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha1-jvW33lBDej/cprToZe96pVy0gDY= dependencies: path-is-inside "^1.0.1" is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" is-posix-bracket@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + integrity sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q= is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + integrity sha1-IHurkWOEmcB7Kt8kCkGochADRXU= is-promise@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" + integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= is-property@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= is-regex@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" + integrity sha1-VRdIm1RwkbCTDglWVM7SXul+lJE= dependencies: has "^1.0.1" is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" + integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= is-relative@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" + integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== dependencies: is-unc-path "^1.0.0" is-resolvable@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" + integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== is-retry-allowed@^1.0.0, is-retry-allowed@^1.1.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= is-ssh@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.0.tgz#ebea1169a2614da392a63740366c3ce049d8dff6" + integrity sha1-6+oRaaJhTaOSpjdANmw84EnY3/Y= dependencies: protocols "^1.1.0" is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-subset@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= is-supported-regexp-flag@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.0.tgz#8b520c85fae7a253382d4b02652e045576e13bb8" + integrity sha1-i1IMhfrnolM4LUsCZS4EVXbhO7g= is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" + integrity sha1-PMWfAAJRlLarLjjbrmaJJWtmBXI= is-text-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4= dependencies: text-extensions "^1.0.0" is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= is-unc-path@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" + integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== dependencies: unc-path-regex "^0.1.2" is-utf8@^0.2.0, is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= is-valid-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" + integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= is-whitespace-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.1.tgz#9ae0176f3282b65457a1992cdb084f8a5f833e3b" + integrity sha1-muAXbzKCtlRXoZks2whPil+DPjs= is-windows@^1.0.1, is-windows@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== is-word-character@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.1.tgz#5a03fa1ea91ace8a6eb0c7cd770eb86d65c8befb" + integrity sha1-WgP6HqkazopusMfNdw64bWXIvvs= is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" + integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= isarray@0.0.1, isarray@~0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" + integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= isexe@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= isobject@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= dependencies: isarray "1.0.0" isobject@^3.0.0, isobject@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= isomorphic-fetch@^2.1.1: version "2.2.1" resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9" + integrity sha1-YRrhrPFPXoH3KVB0coGf6XM1WKk= dependencies: node-fetch "^1.0.1" whatwg-fetch ">=0.10.0" @@ -5528,20 +6336,24 @@ isomorphic-fetch@^2.1.1: isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= istanbul-lib-coverage@^1.1.0, istanbul-lib-coverage@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" + integrity sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w== istanbul-lib-hook@^1.0.6, istanbul-lib-hook@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" + integrity sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg== dependencies: append-transform "^0.4.0" istanbul-lib-instrument@^1.7.1, istanbul-lib-instrument@^1.9.2: version "1.9.2" resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" + integrity sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA== dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" @@ -5554,6 +6366,7 @@ istanbul-lib-instrument@^1.7.1, istanbul-lib-instrument@^1.9.2: istanbul-lib-report@^1.1.0, istanbul-lib-report@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" + integrity sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g== dependencies: istanbul-lib-coverage "^1.1.2" mkdirp "^0.5.1" @@ -5563,6 +6376,7 @@ istanbul-lib-report@^1.1.0, istanbul-lib-report@^1.1.3: istanbul-lib-source-maps@^1.2.0, istanbul-lib-source-maps@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" + integrity sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA== dependencies: debug "^3.1.0" istanbul-lib-coverage "^1.1.2" @@ -5573,12 +6387,14 @@ istanbul-lib-source-maps@^1.2.0, istanbul-lib-source-maps@^1.2.3: istanbul-reports@^1.1.0, istanbul-reports@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" + integrity sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg== dependencies: handlebars "^4.0.3" isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" + integrity sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w== dependencies: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" @@ -5586,14 +6402,17 @@ isurl@^1.0.0-alpha5: js-base64@^2.1.9: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" + integrity sha512-H7ErYLM34CvDMto3GbD6xD0JLUGYXR3QTcH6B/tr4Hi/QpSThnCsIp+Sy5FRTw3B0d6py4HcNkW7nO/wdtGWEw== js-tokens@^3.0.0, js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" + integrity sha1-bl/mfYsgXOTSL60Ft3geja3MSzA= dependencies: argparse "^1.0.7" esprima "^2.6.0" @@ -5601,6 +6420,7 @@ js-yaml@3.6.1: js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.8.4, js-yaml@^3.9.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" + integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5608,6 +6428,7 @@ js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.8.4, js-yaml@^3.9.0: js-yaml@^3.4.3: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" + integrity sha512-saJstZWv7oNeOyBh3+Dx1qWzhW0+e6/8eDzo7p5rDFqxntSztloLtuKu+Ejhtq82jsilwOIZYsCz+lIjthg1Hw== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5615,10 +6436,12 @@ js-yaml@^3.4.3: jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= jsdom@11.11.0: version "11.11.0" resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.11.0.tgz#df486efad41aee96c59ad7a190e2449c7eb1110e" + integrity sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A== dependencies: abab "^1.0.4" acorn "^5.3.0" @@ -5650,76 +6473,93 @@ jsdom@11.11.0: jsesc@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" + integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= json-buffer@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= json-loader@^0.5.4: version "0.5.7" resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== json-parse-better-errors@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz#50183cd1b2d25275de069e9e71b467ac9eab973a" + integrity sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw== json-schema-traverse@^0.3.0: version "0.3.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + integrity sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8= dependencies: jsonify "~0.0.0" json-stable-stringify@~0.0.0: version "0.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" + integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= dependencies: jsonify "~0.0.0" json-stringify-pretty-compact@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-1.1.0.tgz#4fa5b898f61a287d64828691baa822a41f3ad5ab" + integrity sha512-KlHWclgmjtRCbMdUxCJY8AZAIlJLeH0lu3VO9ocaY5Lndfc24YvCOUe3izrIcA8A53uCNIolAXsxouDOWj5kww== json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= jsonfile@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= optionalDependencies: graceful-fs "^4.1.6" jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= jsonparse@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= jsonpointer@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" + integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= jsonwebtoken@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" + integrity sha512-oge/hvlmeJCH+iIz1DwcO7vKPkNGJHhgkspk8OH3VKlw+mbi42WtD4ig1+VXRln765vxptAv+xT26Fd3cteqag== dependencies: jws "^3.1.5" lodash.includes "^4.3.0" @@ -5734,6 +6574,7 @@ jsonwebtoken@^8.3.0: jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= dependencies: assert-plus "1.0.0" extsprintf "1.3.0" @@ -5743,16 +6584,19 @@ jsprim@^1.2.2: jsx-ast-utils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.0.1.tgz#e801b1b39985e20fffc87b40e3748080e2dcac7f" + integrity sha1-6AGxs5mF4g//yHtA43SAgOLcrH8= dependencies: array-includes "^3.0.3" just-extend@^1.1.27: version "1.1.27" resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" + integrity sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g== jwa@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.1.6.tgz#87240e76c9808dbde18783cf2264ef4929ee50e6" + integrity sha512-tBO/cf++BUsJkYql/kBbJroKOgHWEigTKBAjjBEmrMGYd1QMBC74Hr4Wo2zCZw6ZrVhlJPvoMrkcOnlWR/DJfw== dependencies: buffer-equal-constant-time "1.0.1" ecdsa-sig-formatter "1.0.10" @@ -5761,6 +6605,7 @@ jwa@^1.1.5: jws@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/jws/-/jws-3.1.5.tgz#80d12d05b293d1e841e7cb8b4e69e561adcf834f" + integrity sha512-GsCSexFADNQUr8T5HPJvayTjvPIfoyJPtLQBwn5a4WZQchcrPMPMAWcC1AzJVRDKyD6ZPROPAxgv6rfHViO4uQ== dependencies: jwa "^1.1.5" safe-buffer "^5.0.1" @@ -5768,44 +6613,53 @@ jws@^3.1.5: kdbush@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-2.0.1.tgz#90c6128e3001ac68c550d7c9e2f222c0269666f1" + integrity sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ== kebab-case@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/kebab-case/-/kebab-case-1.0.0.tgz#3f9e4990adcad0c686c0e701f7645868f75f91eb" + integrity sha1-P55JkK3K0MaGwOcB92RYaPdfkes= keyv@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.0.0.tgz#44923ba39e68b12a7cec7df6c3268c031f2ef373" + integrity sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA== dependencies: json-buffer "3.0.0" kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= dependencies: is-buffer "^1.1.5" kind-of@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= dependencies: is-buffer "^1.1.5" kind-of@^5.0.0, kind-of@^5.0.2: version "5.1.0" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" + integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== known-css-properties@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084" + integrity sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA== labeled-stream-splicer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.0.tgz#a52e1d138024c00b86b1c0c91f677918b8ae0a59" + integrity sha1-pS4dE4AkwAuGscDJH2d5GLiuClk= dependencies: inherits "^2.0.1" isarray "~0.0.1" @@ -5814,48 +6668,57 @@ labeled-stream-splicer@^2.0.0: latest-version@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU= dependencies: package-json "^4.0.0" lazy-cache@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= lazy-cache@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-2.0.2.tgz#b9190a4f913354694840859f8a8f7084d8822264" + integrity sha1-uRkKT5EzVGlIQIWfio9whNiCImQ= dependencies: set-getter "^0.1.0" lazystream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" + integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= dependencies: readable-stream "^2.0.5" lcid@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= dependencies: invert-kv "^1.0.0" lcov-parse@0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" + integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= lead@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" + integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= dependencies: flush-write-stream "^1.0.2" left-pad@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" + integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= dependencies: prelude-ls "~1.1.2" type-check "~0.3.2" @@ -5863,12 +6726,14 @@ levn@^0.3.0, levn@~0.3.0: lexical-scope@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/lexical-scope/-/lexical-scope-1.2.0.tgz#fcea5edc704a4b3a8796cdca419c3a0afaf22df4" + integrity sha1-/Ope3HBKSzqHls3KQZw6CvryLfQ= dependencies: astw "^2.0.0" line-column@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= dependencies: isarray "^1.0.0" isobject "^2.0.0" @@ -5876,6 +6741,7 @@ line-column@^1.0.2: live-server@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/live-server/-/live-server-1.2.0.tgz#4498644bbf81a66f18dd8dffdef61c4c1c374ca3" + integrity sha1-RJhkS7+Bpm8Y3Y3/3vYcTBw3TKM= dependencies: chokidar "^1.6.0" colors latest @@ -5894,10 +6760,12 @@ live-server@^1.2.0: livereload-js@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.3.0.tgz#c3ab22e8aaf5bf3505d80d098cbad67726548c9a" + integrity sha512-j1R0/FeGa64Y+NmqfZhyoVRzcFlOZ8sNlKzHjh4VvLULFACZhn68XrX5DFg2FhMvSMJmROuFxRSa560ECWKBMg== load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -5908,6 +6776,7 @@ load-json-file@^1.0.0: load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= dependencies: graceful-fs "^4.1.2" parse-json "^2.2.0" @@ -5917,6 +6786,7 @@ load-json-file@^2.0.0: load-json-file@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= dependencies: graceful-fs "^4.1.2" parse-json "^4.0.0" @@ -5926,10 +6796,12 @@ load-json-file@^4.0.0: loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" + integrity sha1-9IKuqC1UPgeSFwDVpG7yb9rGuKI= loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" + integrity sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g= dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -5939,6 +6811,7 @@ loader-utils@^0.2.16: loader-utils@^1.0.2, loader-utils@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.1.0.tgz#c98aef488bcceda2ffb5e2de646d6a754429f5cd" + integrity sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0= dependencies: big.js "^3.1.3" emojis-list "^2.0.0" @@ -5947,6 +6820,7 @@ loader-utils@^1.0.2, loader-utils@^1.1.0: locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= dependencies: p-locate "^2.0.0" path-exists "^3.0.0" @@ -5954,6 +6828,7 @@ locate-path@^2.0.0: locate-path@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== dependencies: p-locate "^3.0.0" path-exists "^3.0.0" @@ -5961,14 +6836,17 @@ locate-path@^3.0.0: lodash._arraycopy@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arraycopy/-/lodash._arraycopy-3.0.0.tgz#76e7b7c1f1fb92547374878a562ed06a3e50f6e1" + integrity sha1-due3wfH7klRzdIeKVi7Qaj5Q9uE= lodash._arrayeach@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._arrayeach/-/lodash._arrayeach-3.0.0.tgz#bab156b2a90d3f1bbd5c653403349e5e5933ef9e" + integrity sha1-urFWsqkNPxu9XGU0AzSeXlkz754= lodash._baseassign@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + integrity sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4= dependencies: lodash._basecopy "^3.0.0" lodash.keys "^3.0.0" @@ -5976,26 +6854,32 @@ lodash._baseassign@^3.0.0: lodash._basecopy@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + integrity sha1-jaDmqHbPNEwK2KVIghEd08XHyjY= lodash._basefor@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash._basefor/-/lodash._basefor-3.0.3.tgz#7550b4e9218ef09fad24343b612021c79b4c20c2" + integrity sha1-dVC06SGO8J+tJDQ7YSAhx5tMIMI= lodash._basetostring@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz#d1861d877f824a52f669832dcaf3ee15566a07d5" + integrity sha1-0YYdh3+CSlL2aYMtyvPuFVZqB9U= lodash._basevalues@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz#5b775762802bde3d3297503e26300820fdf661b7" + integrity sha1-W3dXYoAr3j0yl1A+JjAIIP32Ybc= lodash._bindcallback@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + integrity sha1-5THCdkTPi1epnhftlbNcdIeJOS4= lodash._createassigner@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + integrity sha1-g4pbri/aymOsIt7o4Z+k5taXCxE= dependencies: lodash._bindcallback "^3.0.0" lodash._isiterateecall "^3.0.0" @@ -6004,22 +6888,27 @@ lodash._createassigner@^3.0.0: 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._isiterateecall@^3.0.0: version "3.0.9" resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= lodash._reinterpolate@^3.0.0, lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" + integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= lodash._root@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/lodash._root/-/lodash._root-3.0.1.tgz#fba1c4524c19ee9a5f8136b4609f017cf4ded692" + integrity sha1-+6HEUkwZ7ppfgTa0YJ8BfPTe1pI= lodash.assign@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + integrity sha1-POnwI0tLIiPilrj6CsH+6OvKZPo= dependencies: lodash._baseassign "^3.0.0" lodash._createassigner "^3.0.0" @@ -6028,52 +6917,64 @@ lodash.assign@^3.2.0: lodash.assign@^4.1.0, lodash.assign@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= lodash.debounce@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= lodash.escape@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.escape/-/lodash.escape-3.2.0.tgz#995ee0dc18c1b48cc92effae71a10aab5b487698" + integrity sha1-mV7g3BjBtIzJLv+ucaEKq1tIdpg= dependencies: lodash._root "^3.0.0" lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" + integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= lodash.includes@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= lodash.isarguments@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= lodash.isarray@^3.0.0: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= lodash.isboolean@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= lodash.isinteger@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= lodash.isnumber@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= lodash.isplainobject@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-3.2.0.tgz#9a8238ae16b200432960cd7346512d0123fbf4c5" + integrity sha1-moI4rhayAEMpYM1zRlEtASP79MU= dependencies: lodash._basefor "^3.0.0" lodash.isarguments "^3.0.0" @@ -6082,18 +6983,22 @@ lodash.isplainobject@^3.0.0: lodash.isplainobject@^4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= lodash.isstring@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= lodash.istypedarray@^3.0.0: version "3.0.6" resolved "https://registry.yarnpkg.com/lodash.istypedarray/-/lodash.istypedarray-3.0.6.tgz#c9a477498607501d8e8494d283b87c39281cef62" + integrity sha1-yaR3SYYHUB2OhJTSg7h8OSgc72I= lodash.keys@^3.0.0: version "3.1.2" resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + integrity sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo= dependencies: lodash._getnative "^3.0.0" lodash.isarguments "^3.0.0" @@ -6102,6 +7007,7 @@ lodash.keys@^3.0.0: lodash.keysin@^3.0.0: version "3.0.8" resolved "https://registry.yarnpkg.com/lodash.keysin/-/lodash.keysin-3.0.8.tgz#22c4493ebbedb1427962a54b445b2c8a767fb47f" + integrity sha1-IsRJPrvtsUJ5YqVLRFssinZ/tH8= dependencies: lodash.isarguments "^3.0.0" lodash.isarray "^3.0.0" @@ -6109,10 +7015,12 @@ lodash.keysin@^3.0.0: lodash.memoize@~3.0.3: version "3.0.4" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" + integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= lodash.merge@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-3.3.2.tgz#0d90d93ed637b1878437bb3e21601260d7afe994" + integrity sha1-DZDZPtY3sYeEN7s+IWASYNev6ZQ= dependencies: lodash._arraycopy "^3.0.0" lodash._arrayeach "^3.0.0" @@ -6129,18 +7037,22 @@ lodash.merge@^3.3.2: lodash.once@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= lodash.restparam@^3.0.0: version "3.6.1" resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + integrity sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU= lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" + integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= lodash.template@^3.6.1: version "3.6.2" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-3.6.2.tgz#f8cdecc6169a255be9098ae8b0c53d378931d14f" + integrity sha1-+M3sxhaaJVvpCYrosMU9N4kx0U8= dependencies: lodash._basecopy "^3.0.0" lodash._basetostring "^3.0.0" @@ -6155,6 +7067,7 @@ lodash.template@^3.6.1: lodash.template@^4.4.0: version "4.4.0" resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.4.0.tgz#e73a0385c8355591746e020b99679c690e68fba0" + integrity sha1-5zoDhcg1VZF0bgILmWecaQ5o+6A= dependencies: lodash._reinterpolate "~3.0.0" lodash.templatesettings "^4.0.0" @@ -6162,6 +7075,7 @@ lodash.template@^4.4.0: lodash.templatesettings@^3.0.0: version "3.1.1" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz#fb307844753b66b9f1afa54e262c745307dba8e5" + integrity sha1-+zB4RHU7Zrnxr6VOJix0UwfbqOU= dependencies: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" @@ -6169,12 +7083,14 @@ lodash.templatesettings@^3.0.0: lodash.templatesettings@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.1.0.tgz#2b4d4e95ba440d915ff08bc899e4553666713316" + integrity sha1-K01OlbpEDZFf8IvImeRVNmZxMxY= dependencies: lodash._reinterpolate "~3.0.0" lodash.toplainobject@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash.toplainobject/-/lodash.toplainobject-3.0.0.tgz#28790ad942d293d78aa663a07ecf7f52ca04198d" + integrity sha1-KHkK2ULSk9eKpmOgfs9/UsoEGY0= dependencies: lodash._basecopy "^3.0.0" lodash.keysin "^3.0.0" @@ -6182,46 +7098,56 @@ lodash.toplainobject@^3.0.0: lodash@^3.3.1: version "3.10.1" resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" + integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" + integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== lodash@^4.17.10: version "4.17.10" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" + integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg== log-driver@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" + integrity sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY= log-symbols@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== dependencies: chalk "^2.0.1" lolex@^2.2.0, lolex@^2.3.2: version "2.6.0" resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.6.0.tgz#cf9166f3c9dece3cdeb5d6b01fce50f14a1203e3" + integrity sha512-e1UtIo1pbrIqEXib/yMjHciyqkng5lc0rrIbytgjmRgDR9+2ceNIAcwOWSgylRjoEP9VdVguCSRwnNmlbnOUwA== longest-streak@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" + integrity sha512-TmYTeEYxiAmSVdpbnQDXGtvYOIRsCMg89CVZzwzc2o7GFL1CjoiRPjH5ec0NFAVlAx3fVof9dX/t6KKRAo2OWA== longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" + integrity sha1-0aitM/qc4OcT1l/dCsi3SNR4yEg= dependencies: js-tokens "^3.0.0" loud-rejection@^1.0.0: version "1.6.0" resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" + integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= dependencies: currently-unhandled "^0.4.1" signal-exit "^3.0.0" @@ -6229,14 +7155,17 @@ loud-rejection@^1.0.0: lower-case@^1.1.1: version "1.1.4" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= lowercase-keys@1.0.0, lowercase-keys@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + integrity sha1-TjNms55/VFfjXxMkvfb4jQv8cwY= lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + integrity sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew== dependencies: pseudomap "^1.0.2" yallist "^2.1.2" @@ -6244,74 +7173,89 @@ lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.1: magic-string@^0.22.4: version "0.22.4" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" + integrity sha512-kxBL06p6iO2qPBHsqGK2b3cRwiRGpnmSuVWNhwHcMX7qJOUr1HvricYP1LZOCdkQBUp0jiWg2d6WJwR3vYgByw== dependencies: vlq "^0.2.1" make-dir@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.2.0.tgz#6d6a49eead4aae296c53bbf3a1a008bd6c89469b" + integrity sha512-aNUAa4UMg/UougV25bbrU4ZaaKNjJ/3/xnvg/twpmKROPdKZPZ9wGgI0opdZzO8q/zUFawoUuixuOv33eZ61Iw== dependencies: pify "^3.0.0" map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= map-obj@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" + integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= map-stream@~0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + integrity sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ= map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= dependencies: object-visit "^1.0.0" mapbox-gl-styles@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/mapbox-gl-styles/-/mapbox-gl-styles-2.0.2.tgz#bb525b77ea0dc2b041bb8051645176f3783e294a" + integrity sha1-u1Jbd+oNwrBBu4BRZFF283g+KUo= dependencies: glob "^5.0.14" mapz@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mapz/-/mapz-1.0.1.tgz#9ecec757d3c3fe0a8a6f363e328eaee69a428441" + integrity sha1-ns7HV9PD/gqKbzY+Mo6u5ppChEE= dependencies: x-is-array "^0.1.0" markdown-escapes@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.1.tgz#1994df2d3af4811de59a6714934c2b2292734518" + integrity sha1-GZTfLTr0gR3lmmcUk0wrIpJzRRg= markdown-table@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.1.tgz#4b3dd3a133d1518b8ef0dbc709bf2a1b4824bc8c" + integrity sha1-Sz3ToTPRUYuO8NvHCb8qG0gkvIw= mathml-tag-names@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.0.1.tgz#8d41268168bf86d1102b98109e28e531e7a34578" + integrity sha1-jUEmgWi/htEQK5gQnijlMeejRXg= md5-hex@^1.2.0: version "1.3.0" resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-1.3.0.tgz#d2c4afe983c4370662179b8cad145219135046c4" + integrity sha1-0sSv6YPENwZiF5uMrRRSGRNQRsQ= dependencies: md5-o-matic "^0.1.1" md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" + integrity sha1-givM1l4RfFFPqxdrJZRdVBAKA8M= md5.js@^1.3.4: version "1.3.4" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.4.tgz#e9bdbde94a20a5ac18b04340fc5764d5b09d901d" + integrity sha1-6b296UogpawYsENA/Fdk1bCdkB0= dependencies: hash-base "^3.0.0" inherits "^2.0.1" @@ -6319,6 +7263,7 @@ md5.js@^1.3.4: mdast-util-compact@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.1.tgz#cdb5f84e2b6a2d3114df33bd05d9cb32e3c4083a" + integrity sha1-zbX4TitqLTEU3zO9BdnLMuPECDo= dependencies: unist-util-modify-children "^1.0.0" unist-util-visit "^1.1.0" @@ -6326,18 +7271,21 @@ mdast-util-compact@^1.0.0: mdast-util-definitions@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.2.tgz#673f4377c3e23d3de7af7a4fe2214c0e221c5ac7" + integrity sha512-9NloPSwaB9f1PKcGqaScfqRf6zKOEjTIXVIbPOmgWI/JKxznlgVXC5C+8qgl3AjYg2vJBRgLYfLICaNiac89iA== dependencies: unist-util-visit "^1.0.0" mdast-util-inject@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz#db06b8b585be959a2dcd2f87f472ba9b756f3675" + integrity sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU= dependencies: mdast-util-to-string "^1.0.0" mdast-util-to-hast@^2.0.0, mdast-util-to-hast@^2.1.1: version "2.5.0" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-2.5.0.tgz#f087844d255c7540f36906da30ba106c0ee5ee2f" + integrity sha1-8IeETSVcdUDzaQbaMLoQbA7l7i8= dependencies: collapse-white-space "^1.0.0" detab "^2.0.0" @@ -6354,6 +7302,7 @@ mdast-util-to-hast@^2.0.0, mdast-util-to-hast@^2.1.1: mdast-util-to-hast@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.2.tgz#26b1971f49d6db1e3428463a12e66c89db5021cb" + integrity sha512-YI8Ea3TFWEZrS31+6Q/d8ZYTOSDKM06IPc3l2+OMFX1o3JTG2mrztlmzDsUMwIXLWofEdTVl/WXBgRG6ddlU/A== dependencies: collapse-white-space "^1.0.0" detab "^2.0.0" @@ -6370,10 +7319,12 @@ mdast-util-to-hast@^3.0.0: mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.2, mdast-util-to-string@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.4.tgz#5c455c878c9355f0c1e7f3e8b719cf583691acfb" + integrity sha1-XEVch4yTVfDB5/PotxnPWDaRrPs= mdast-util-toc@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-2.0.1.tgz#b1d2cb23bfb01f812fa7b55bffe8b0a8bedf6f21" + integrity sha1-sdLLI7+wH4Evp7Vb/+iwqL7fbyE= dependencies: github-slugger "^1.1.1" mdast-util-to-string "^1.0.2" @@ -6382,20 +7333,24 @@ mdast-util-toc@^2.0.0: mdn-data@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.0.tgz#a7056319da95a2d0881267d7263075042eb061e2" + integrity sha512-jC6B3BFC07cCOU8xx1d+sQtDkVIpGKWv4TzK7pN7PyObdbwlIFJbHYk8ofvr0zrU8SkV1rSi87KAHhWCdLGw1Q== mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= 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" memory-fs@^0.4.0, memory-fs@~0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= dependencies: errno "^0.1.3" readable-stream "^2.0.1" @@ -6403,10 +7358,12 @@ memory-fs@^0.4.0, memory-fs@~0.4.1: memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= meow@^3.1.0, meow@^3.3.0, meow@^3.6.0, meow@^3.7.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" + integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= dependencies: camelcase-keys "^2.0.0" decamelize "^1.1.2" @@ -6422,6 +7379,7 @@ meow@^3.1.0, meow@^3.3.0, meow@^3.6.0, meow@^3.7.0: meow@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/meow/-/meow-4.0.0.tgz#fd5855dd008db5b92c552082db1c307cba20b29d" + integrity sha512-Me/kel335m6vMKmEmA6c87Z6DUFW3JqkINRnxkbC+A/PUm0D5Fl2dEBQrPKnqCL9Te/CIa1MUt/0InMJhuC/sw== dependencies: camelcase-keys "^4.0.0" decamelize-keys "^1.0.0" @@ -6436,16 +7394,19 @@ meow@^4.0.0: merge-source-map@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== dependencies: source-map "^0.6.1" merge2@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.1.tgz#271d2516ff52d4af7f7b710b8bf3e16e183fef66" + integrity sha512-wUqcG5pxrAcaFI1lkqkMnk3Q7nUxV/NWfpAFSeWUwG9TRODnBDCUHa75mi3o3vLWQ5N4CQERWCauSlP0I3ZqUg== micromatch@^2.1.5, micromatch@^2.3.11: version "2.3.11" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + integrity sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU= dependencies: arr-diff "^2.0.0" array-unique "^0.2.1" @@ -6464,6 +7425,7 @@ micromatch@^2.1.5, micromatch@^2.3.11: micromatch@^3.1.10, micromatch@^3.1.5: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6482,6 +7444,7 @@ micromatch@^3.1.10, micromatch@^3.1.5: micromatch@^3.1.4, micromatch@^3.1.8: version "3.1.9" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.9.tgz#15dc93175ae39e52e93087847096effc73efcf89" + integrity sha512-SlIz6sv5UPaAVVFRKodKjCg48EbNoIhgetzfK/Cy0v5U52Z6zB136M8tp0UC9jM53LYbmIRihJszvvqpKkfm9g== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6500,6 +7463,7 @@ micromatch@^3.1.4, micromatch@^3.1.8: miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" + integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== dependencies: bn.js "^4.0.0" brorand "^1.0.1" @@ -6507,56 +7471,68 @@ miller-rabin@^4.0.0: mime-db@~1.33.0: version "1.33.0" resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" + integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" + integrity sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ== dependencies: mime-db "~1.33.0" mime@1.4.1, mime@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== mime@^1.4.1: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== mime@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/mime/-/mime-2.3.1.tgz#b1621c54d63b97c47d3cfe7f7215f7d64517c369" + integrity sha512-OEUllcVoydBHGN1z84yfQDimn58pZNNNXgZlHXSboxMlFvgI6MXSWpWKpFRra7H1HxpVhHTkrghfRW49k6yjeg== mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" + integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== mimic-response@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.0.tgz#df3d3652a73fded6b9b0b24146e6fd052353458e" + integrity sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4= minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" + integrity sha1-cCvi3aazf0g2vLP121ZkG2Sh09M= minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= "minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== dependencies: brace-expansion "^1.1.7" minimatch@3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" + integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= dependencies: brace-expansion "^1.0.0" minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" + integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== dependencies: arrify "^1.0.1" is-plain-obj "^1.1.0" @@ -6564,28 +7540,34 @@ minimist-options@^3.0.1: minimist@0.0.8: version "0.0.8" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= minimist@1.1.x: version "1.1.3" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" + integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= minimist@1.2.0, minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= minimist@~0.0.1: version "0.0.10" resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8= minipass@^2.2.0, minipass@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.2.1.tgz#5ada97538b1027b4cf7213432428578cb564011f" + integrity sha512-u1aUllxPJUI07cOqzR7reGmQxmCqlH88uIIsf6XZFEWgw7gXKpJdR+5R9Y3KEDmWYkdIz9wXZs3C0jOPxejk/Q== dependencies: yallist "^3.0.0" minipass@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" + integrity sha512-/jAn9/tEX4gnpyRATxgHEOV6xbcyxgT7iUnxo9Y3+OB0zX00TgKIv/2FZCf5brBbICcwbLqVv2ImjvWWrQMSYw== dependencies: safe-buffer "^5.1.2" yallist "^3.0.0" @@ -6593,12 +7575,14 @@ minipass@^2.3.3: minizlib@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.1.0.tgz#11e13658ce46bc3a70a267aac58359d1e0c29ceb" + integrity sha512-4T6Ur/GctZ27nHfpt9THOdRZNgyJ9FZchYO1ceg5S8Q3DNLCKYy44nCZzgCJgcvx2UM8czmqak5BCxJMrq37lA== dependencies: minipass "^2.2.1" mississippi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f" + integrity sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw== dependencies: concat-stream "^1.5.0" duplexify "^3.4.2" @@ -6614,6 +7598,7 @@ mississippi@^2.0.0: mixin-deep@^1.2.0: version "1.3.1" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.1.tgz#a49e7268dce1a0d9698e45326c5626df3543d0fe" + integrity sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ== dependencies: for-in "^1.0.2" is-extendable "^1.0.1" @@ -6621,20 +7606,24 @@ mixin-deep@^1.2.0: mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= dependencies: minimist "0.0.8" mock-geolocation@^1.0.11: version "1.0.11" resolved "https://registry.yarnpkg.com/mock-geolocation/-/mock-geolocation-1.0.11.tgz#2c7b99242a2c70dbecd317b392b30311722992c8" + integrity sha1-LHuZJCoscNvs0xezkrMDEXIpksg= modify-values@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.0.tgz#e2b6cdeb9ce19f99317a53722f3dbf5df5eaaab2" + integrity sha1-4rbN65zhn5kxelNyLz2/XfXqqrI= module-deps-sortable@4.0.6: version "4.0.6" resolved "https://registry.yarnpkg.com/module-deps-sortable/-/module-deps-sortable-4.0.6.tgz#1251a4ba2c44a92df6989bd029da121a4f2109b0" + integrity sha1-ElGkuixEqS32mJvQKdoSGk8hCbA= dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" @@ -6654,6 +7643,7 @@ module-deps-sortable@4.0.6: module-deps@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.0.0.tgz#4417b49a4f4d7af79b104186e5389ea99b1dc837" + integrity sha512-BKsMhJJENEM4dTgqq2MDTTHXRHcNUFegoAwlG4HO4VMdUyMcJDKgfgI+MOv6tR5Iv8G3MKZFgsSiyP3ZoosRMw== dependencies: JSONStream "^1.0.3" browser-resolve "^1.7.0" @@ -6674,6 +7664,7 @@ module-deps@^6.0.0: morgan@^1.6.1: version "1.9.0" resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.9.0.tgz#d01fa6c65859b76fcf31b3cb53a3821a311d8051" + integrity sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE= dependencies: basic-auth "~2.0.0" debug "2.6.9" @@ -6684,6 +7675,7 @@ morgan@^1.6.1: move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" + integrity sha1-viwAX9oy4LKa8fBdfEszIUxwH5I= dependencies: aproba "^1.1.1" copy-concurrently "^1.0.0" @@ -6695,40 +7687,49 @@ move-concurrently@^1.0.1: ms@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098" + integrity sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg= ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= ms@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== multi-stage-sourcemap@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/multi-stage-sourcemap/-/multi-stage-sourcemap-0.2.1.tgz#b09fc8586eaa17f81d575c4ad02e0f7a3f6b1105" + integrity sha1-sJ/IWG6qF/gdV1xK0C4Pej9rEQU= dependencies: source-map "^0.1.34" murmurhash-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" + integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= mute-stream@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" + integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= nan@^2.3.0, nan@^2.6.2: version "2.8.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" + integrity sha1-7XFfP+neArV6XmJS2QqWZ14fCFo= nan@^2.9.2: version "2.10.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.10.0.tgz#96d0cd610ebd58d4b4de9cc0c6828cda99c7548f" + integrity sha512-bAdJv7fBLhWC+/Bls0Oza+mvTaNQtP+1RyhhhvD95pgUJz6XM5IzgmxOkItJ9tkoCiplvAnXI1tNmmUD/eScyA== nanomatch@^1.2.9: version "1.2.9" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.9.tgz#879f7150cb2dab7a471259066c104eee6e0fa7c2" + integrity sha512-n8R9bS8yQ6eSXaV6jHUpKzD8gLsin02w1HSFiegwrs9E098Ylhw5jdyKPaYqvHknHaSCKTPp7C8dGCQ0q9koXA== dependencies: arr-diff "^4.0.0" array-unique "^0.3.2" @@ -6746,16 +7747,19 @@ nanomatch@^1.2.9: natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= ncname@1.0.x: version "1.0.0" resolved "https://registry.yarnpkg.com/ncname/-/ncname-1.0.0.tgz#5b57ad18b1ca092864ef62b0b1ed8194f383b71c" + integrity sha1-W1etGLHKCShk72Kwse2BlPODtxw= dependencies: xml-char-classes "^1.0.0" needle@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/needle/-/needle-2.2.1.tgz#b5e325bd3aae8c2678902fa296f729455d1d3a7d" + integrity sha512-t/ZswCM9JTWjAdXS9VpvqhI2Ct2sL2MdY4fUXqGJaGBk13ge99ObqRksRTbBE56K+wxUXwwfZYOuZHifFW9q+Q== dependencies: debug "^2.1.2" iconv-lite "^0.4.4" @@ -6764,16 +7768,19 @@ needle@^2.2.1: negotiator@0.6.1, negotiator@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + integrity sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk= nested-error-stacks@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.0.0.tgz#98b2ffaefb4610fa3936f1e71435d30700de2840" + integrity sha1-mLL/rvtGEPo5NvHnFDXTBwDeKEA= dependencies: inherits "~2.0.1" nise@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/nise/-/nise-1.3.3.tgz#c17a850066a8a1dfeb37f921da02441afc4a82ba" + integrity sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg== dependencies: "@sinonjs/formatio" "^2.0.0" just-extend "^1.1.27" @@ -6784,22 +7791,26 @@ nise@^1.2.0: no-case@^2.2.0: version "2.3.2" resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== dependencies: lower-case "^1.1.1" nocache@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/nocache/-/nocache-2.0.0.tgz#202b48021a0c4cbde2df80de15a17443c8b43980" + integrity sha1-ICtIAhoMTL3i34DeFaF0Q8i0OYA= node-abi@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.2.0.tgz#e802ac7a2408e2c0593fb3176ffdf8a99a9b4dec" + integrity sha512-FqVC0WNNL8fQWQK3GYTESfwZXZKDbSIiEEIvufq7HV6Lj0IDDZRVa4CU/KTA0JVlqY9eTDSuPiC8FS9UfGVuzA== dependencies: semver "^5.4.1" node-fetch@^1.0.1: version "1.7.3" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== dependencies: encoding "^0.1.11" is-stream "^1.0.1" @@ -6807,10 +7818,12 @@ node-fetch@^1.0.1: node-fetch@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5" + integrity sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA== node-gyp@^3.6.2: version "3.6.2" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.6.2.tgz#9bfbe54562286284838e750eac05295853fa1c60" + integrity sha1-m/vlRWIoYoSDjnUOrAUpWFP6HGA= dependencies: fstream "^1.0.0" glob "^7.0.3" @@ -6829,6 +7842,7 @@ node-gyp@^3.6.2: node-libs-browser@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.1.0.tgz#5f94263d404f6e44767d726901fff05478d600df" + integrity sha512-5AzFzdoIMb89hBGMZglEegffzgRg+ZFoUmisQ8HI4j1KDdpx13J0taNp2y9xPbur6W61gepGDDotGBVQ7mfUCg== dependencies: assert "^1.1.1" browserify-zlib "^0.2.0" @@ -6857,10 +7871,12 @@ node-libs-browser@^2.0.0: node-modules-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" + integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= node-pre-gyp@^0.10.0: version "0.10.3" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.10.3.tgz#3070040716afdc778747b61b6887bf78880b80fc" + integrity sha512-d1xFs+C/IPS8Id0qPTZ4bUT8wWryfR/OzzAFxweG+uLN85oPzyo2Iw6bVlLQ/JOdgNonXLCoRyqDzDWq4iw72A== dependencies: detect-libc "^1.0.2" mkdirp "^0.5.1" @@ -6876,6 +7892,7 @@ node-pre-gyp@^0.10.0: node-pre-gyp@^0.6.39: version "0.6.39" resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" + integrity sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ== dependencies: detect-libc "^1.0.2" hawk "3.1.3" @@ -6892,16 +7909,19 @@ node-pre-gyp@^0.6.39: noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" + integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= "nopt@2 || 3": version "3.0.6" resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= dependencies: abbrev "1" nopt@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= dependencies: abbrev "1" osenv "^0.1.4" @@ -6909,6 +7929,7 @@ nopt@^4.0.1: normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: version "2.4.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f" + integrity sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw== dependencies: hosted-git-info "^2.1.4" is-builtin-module "^1.0.0" @@ -6918,20 +7939,24 @@ normalize-package-data@^2.3.0, normalize-package-data@^2.3.2, normalize-package- normalize-path@^2.0.0, normalize-path@^2.0.1, normalize-path@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= dependencies: remove-trailing-separator "^1.0.1" normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" + integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= normalize-selector@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" + integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= normalize-url@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-2.0.1.tgz#835a9da1551fa26f70e92329069a23aa6574d7e6" + integrity sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw== dependencies: prepend-http "^2.0.0" query-string "^5.0.1" @@ -6940,16 +7965,19 @@ normalize-url@2.0.1: now-and-later@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" + integrity sha1-vGHLtFbXnLMiB85HygUTb/Ln1u4= dependencies: once "^1.3.2" npm-bundled@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.0.3.tgz#7e71703d973af3370a9591bafe3a63aca0be2308" + integrity sha512-ByQ3oJ/5ETLyglU2+8dBObvhfWXX8dtPZDMePCahptliFX2iIuhyEszyFk401PZUNQH20vvdW5MLjJxkwU80Ow== npm-packlist@^1.1.6: version "1.1.11" resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.1.11.tgz#84e8c683cbe7867d34b1d357d893ce29e28a02de" + integrity sha512-CxKlZ24urLkJk+9kCm48RTQ7L4hsmgSVzEk0TLGPzzyuFxD7VNgy5Sl24tOLMzQv773a/NeJ1ce1DKeacqffEA== dependencies: ignore-walk "^3.0.1" npm-bundled "^1.0.1" @@ -6957,6 +7985,7 @@ npm-packlist@^1.1.6: npm-run-all@^4.0.1: version "4.1.2" resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.2.tgz#90d62d078792d20669139e718621186656cea056" + integrity sha512-Z2aRlajMK4SQ8u19ZA75NZZu7wupfCNQWdYosIi8S6FgBdGf/8Y6Hgyjdc8zU2cYmIRVCx1nM80tJPkdEd+UYg== dependencies: ansi-styles "^3.2.0" chalk "^2.1.0" @@ -6971,12 +8000,14 @@ npm-run-all@^4.0.1: npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= dependencies: path-key "^2.0.0" "npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.1, npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== dependencies: are-we-there-yet "~1.1.2" console-control-strings "~1.1.0" @@ -6986,24 +8017,29 @@ npm-run-path@^2.0.0: nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" + integrity sha1-mSms32KPwsQQmN6rgqxYDPFJquQ= dependencies: boolbase "~1.0.0" num2fraction@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" + integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= number-is-nan@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= nwsapi@^2.0.0: version "2.0.8" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" + integrity sha512-7RZ+qbFGiVc6v14Y8DSZjPN1wZPOaMbiiP4tzf5eNuyOITAeOIA3cMhjuKUypVIqBgCSg1KaSyAv8Ocq/0ZJ1A== nyc@^10.1.2: version "10.3.2" resolved "https://registry.yarnpkg.com/nyc/-/nyc-10.3.2.tgz#f27f4d91f2a9db36c24f574ff5c6efff0233de46" + integrity sha1-8n9NkfKp2zbCT1dP9cbv/wIz3kY= dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -7036,6 +8072,7 @@ nyc@^10.1.2: nyc@^11.3.0: version "11.5.0" resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.5.0.tgz#29795d8217885e8b384d849fbe74956d58be2252" + integrity sha512-xIYK189By0YiM5/T4TviHu3J7bV7lCj5WYJfyZK3z03QgAaQ60WcLaJuXf0zhKoI6PBnUR92ZpSwBICCrgSBGg== dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -7068,40 +8105,43 @@ nyc@^11.3.0: oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1, object-assign@latest: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= dependencies: copy-descriptor "^0.1.0" define-property "^0.2.5" kind-of "^3.0.3" -object-inspect@~1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.4.1.tgz#37ffb10e71adaf3748d05f713b4c9452f402cbc4" - object-keys@^1.0.11: version "1.0.12" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.12.tgz#09c53855377575310cca62f55bb334abff7b3ed2" + integrity sha512-FTMyFUm2wBcGHnH2eXmz7tC6IwlqQZ6mVZ+6dm6vZ4IQIHjs6FdNsQBuKGPuUUUY6NfJw2PshC08Tn6LzLDOag== -object-keys@^1.0.6, object-keys@^1.0.8: +object-keys@^1.0.8: version "1.0.11" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + integrity sha1-xUYBd4rVYPEULODgG8yotW0TQm0= object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= dependencies: isobject "^3.0.0" object.assign@^4.0.4: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: define-properties "^1.1.2" function-bind "^1.1.1" @@ -7111,6 +8151,7 @@ object.assign@^4.0.4: object.entries@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.0.4.tgz#1bf9a4dd2288f5b33f3a993d257661f05d161a5f" + integrity sha1-G/mk3SKI9bM/Opk9JXZh8F0WGl8= dependencies: define-properties "^1.1.2" es-abstract "^1.6.1" @@ -7120,6 +8161,7 @@ object.entries@^1.0.4: 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= dependencies: define-properties "^1.1.2" es-abstract "^1.5.1" @@ -7127,6 +8169,7 @@ object.getownpropertydescriptors@^2.0.3: object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + integrity sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo= dependencies: for-own "^0.1.4" is-extendable "^0.1.1" @@ -7134,44 +8177,52 @@ object.omit@^2.0.0: object.pick@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: isobject "^3.0.1" on-finished@~2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= dependencies: ee-first "1.1.1" on-headers@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + integrity sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c= once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.3.3, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= dependencies: wrappy "1" onetime@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" + integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= dependencies: mimic-fn "^1.0.0" opener@^1.4.1: version "1.4.3" resolved "https://registry.yarnpkg.com/opener/-/opener-1.4.3.tgz#5c6da2c5d7e5831e8ffa3964950f8d6674ac90b8" + integrity sha1-XG2ixdflgx6P+jlklQ+NZnSskLg= opn@latest: version "5.3.0" resolved "https://registry.yarnpkg.com/opn/-/opn-5.3.0.tgz#64871565c863875f052cfdf53d3e3cb5adb53b1c" + integrity sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g== dependencies: is-wsl "^1.1.0" optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + integrity sha1-2j6nRob6IaGaERwybpDrFaAZZoY= dependencies: minimist "~0.0.1" wordwrap "~0.0.2" @@ -7179,6 +8230,7 @@ optimist@^0.6.1: optionator@^0.8.1, optionator@^0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" + integrity sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q= dependencies: deep-is "~0.1.3" fast-levenshtein "~2.0.4" @@ -7190,26 +8242,31 @@ optionator@^0.8.1, optionator@^0.8.2: ordered-read-streams@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" + integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= dependencies: readable-stream "^2.0.1" os-browserify@^0.3.0, os-browserify@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= os-homedir@^1.0.0, os-homedir@^1.0.1, os-homedir@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= os-locale@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= 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" @@ -7218,10 +8275,12 @@ os-locale@^2.0.0: os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= osenv@0, osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" + integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== dependencies: os-homedir "^1.0.0" os-tmpdir "^1.0.0" @@ -7229,70 +8288,84 @@ osenv@0, osenv@^0.1.4: own-or-env@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/own-or-env/-/own-or-env-1.0.1.tgz#54ce601d3bf78236c5c65633aa1c8ec03f8007e4" + integrity sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw== dependencies: own-or "^1.0.0" own-or@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/own-or/-/own-or-1.0.0.tgz#4e877fbeda9a2ec8000fbc0bcae39645ee8bf8dc" + integrity sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw= p-cancelable@^0.4.0: version "0.4.1" resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-0.4.1.tgz#35f363d67d52081c8d9585e37bcceb7e0bbcb2a0" + integrity sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ== p-finally@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= p-is-promise@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-1.1.0.tgz#9c9456989e9f6588017b0434d56097675c3da05e" + integrity sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4= p-limit@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.2.0.tgz#0e92b6bedcb59f022c13d0f1949dc82d15909f1c" + integrity sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng== dependencies: p-try "^1.0.0" p-limit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.0.0.tgz#e624ed54ee8c460a778b3c9f3670496ff8a57aec" + integrity sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A== dependencies: p-try "^2.0.0" p-locate@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= dependencies: p-limit "^1.1.0" p-locate@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== dependencies: p-limit "^2.0.0" p-map@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-1.2.0.tgz#e4e94f311eabbc8633a1e79908165fca26241b6b" + integrity sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA== p-timeout@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-2.0.1.tgz#d8dd1979595d2dc0139e1fe46b8b646cb3cdf038" + integrity sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA== dependencies: p-finally "^1.0.0" p-try@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= p-try@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" + integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0= dependencies: got "^6.7.1" registry-auth-token "^3.0.1" @@ -7302,10 +8375,12 @@ package-json@^4.0.0: pako@~1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.6.tgz#0101211baa70c4bca4a0f63f2206e97b7dfaf258" + integrity sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg== 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= dependencies: cyclist "~0.2.2" inherits "^2.0.3" @@ -7314,18 +8389,21 @@ parallel-transform@^1.1.0: param-case@2.1.x: version "2.1.1" resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= dependencies: no-case "^2.2.0" parents@^1.0.0, parents@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" + integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= dependencies: path-platform "~0.11.15" parse-asn1@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.0.tgz#37c4f9b7ed3ab65c74817b5f2480937fbf97c712" + integrity sha1-N8T5t+06tlx0gXtfJICTf7+XxxI= dependencies: asn1.js "^4.0.0" browserify-aes "^1.0.0" @@ -7336,6 +8414,7 @@ parse-asn1@^5.0.0: parse-entities@^1.0.2: version "1.1.1" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.1.tgz#8112d88471319f27abae4d64964b122fe4e1b890" + integrity sha1-gRLYhHExnyerrk1klksSL+ThuJA= dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -7347,6 +8426,7 @@ parse-entities@^1.0.2: parse-entities@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.1.2.tgz#9eaf719b29dc3bd62246b4332009072e01527777" + integrity sha512-5N9lmQ7tmxfXf+hO3X6KRG6w7uYO/HL9fHalSySTdyn63C3WNvTM/1R8tn1u1larNcEbo3Slcy2bsVDQqvEpUg== dependencies: character-entities "^1.0.0" character-entities-legacy "^1.0.0" @@ -7358,6 +8438,7 @@ parse-entities@^1.1.0: parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" + integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= dependencies: is-absolute "^1.0.0" map-cache "^0.2.0" @@ -7366,12 +8447,14 @@ parse-filepath@^1.0.2: parse-git-config@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-0.2.0.tgz#272833fdd15fea146fb75d336d236b963b6ff706" + integrity sha1-Jygz/dFf6hRvt10zbSNrljtv9wY= dependencies: ini "^1.3.3" parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + integrity sha1-ssN2z7EfNVE7rdFz7wu246OIORw= dependencies: glob-base "^0.3.0" is-dotfile "^1.0.0" @@ -7381,18 +8464,21 @@ parse-glob@^3.0.4: parse-json@2.2.0, parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= dependencies: error-ex "^1.2.0" parse-json@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" + integrity sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM= dependencies: error-ex "^1.3.1" parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= dependencies: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" @@ -7400,10 +8486,12 @@ parse-json@^4.0.0: parse-ms@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" + integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= parse-url@^1.3.0: version "1.3.11" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-1.3.11.tgz#57c15428ab8a892b1f43869645c711d0e144b554" + integrity sha1-V8FUKKuKiSsfQ4aWRccR0OFEtVQ= dependencies: is-ssh "^1.3.0" protocols "^1.4.0" @@ -7411,20 +8499,24 @@ parse-url@^1.3.0: parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" + integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== parse5@^3.0.1, parse5@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" + integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA== dependencies: "@types/node" "*" parseurl@~1.3.1, parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + integrity sha1-/CidTtiZMRlGDBViUyYs3I3mW/M= pascal-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= dependencies: camel-case "^3.0.0" upper-case-first "^1.1.0" @@ -7432,64 +8524,78 @@ pascal-case@^2.0.1: pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= path-browserify@0.0.0, path-browserify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.0.tgz#a0b870729aae214005b7d5032ec2cbbb0fb4451a" + integrity sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo= path-dirname@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= path-exists@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= dependencies: pinkie-promise "^2.0.0" path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= path-is-inside@^1.0.1, path-is-inside@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= path-parse@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" + integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= path-platform@~0.11.15: version "0.11.15" resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" + integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" + integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= path-root@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" + integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= dependencies: path-root-regex "^0.1.0" path-to-regexp@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d" + integrity sha1-Wf3g9DW62suhA6hOnTvGTpa5k30= dependencies: isarray "0.0.1" path-type@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= dependencies: graceful-fs "^4.1.2" pify "^2.0.0" @@ -7498,24 +8604,28 @@ path-type@^1.0.0: path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= dependencies: pify "^2.0.0" path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== dependencies: pify "^3.0.0" pause-stream@0.0.11: version "0.0.11" resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha1-/lo0sMvOErWqaitAPuLnO2AvFEU= dependencies: through "~2.3" pbf@^3.0.5: version "3.1.0" resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.1.0.tgz#f70004badcb281761eabb1e76c92f179f08189e9" + integrity sha512-/hYJmIsTmh7fMkHAWWXJ5b8IKLWdjdlAFb3IHkRBn1XUhIYBChVGfVwmHEAV3UfXTxsP/AKfYTXTS/dCPxJd5w== dependencies: ieee754 "^1.1.6" resolve-protobuf-schema "^2.0.0" @@ -7523,6 +8633,7 @@ pbf@^3.0.5: pbkdf2@^3.0.3: version "3.0.14" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.14.tgz#a35e13c64799b06ce15320f459c230e68e73bade" + integrity sha512-gjsZW9O34fm0R7PaLHRJmLLVfSoesxztjPjE9o6R+qtVJij90ltg1joIovN9GKrRW3t1PzhDDG3UMEMFfZ+1wA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -7533,76 +8644,92 @@ pbkdf2@^3.0.3: performance-now@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + integrity sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU= performance-now@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= pify@^2.0.0, pify@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= pify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: pinkie "^2.0.0" pinkie@^2.0.0: version "2.0.4" resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= pirates@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9" + integrity sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q== dependencies: node-modules-regexp "^1.0.0" pixelmatch@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-4.0.2.tgz#8f47dcec5011b477b67db03c243bc1f3085e8854" + integrity sha1-j0fc7FARtHe2fbA8JDvB8wheiFQ= dependencies: pngjs "^3.0.0" pkg-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4" + integrity sha1-ektQio1bstYp1EcFb/TpyTFM89Q= dependencies: find-up "^1.0.0" pkg-dir@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" + integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= dependencies: find-up "^2.1.0" platform@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" + integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== pluralize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" + integrity sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I= pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" + integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== pngjs@^3.0.0: version "3.3.2" resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.2.tgz#097c3c2a75feb223eadddea6bc9f0050cf830bc3" + integrity sha512-bVNd3LMXRzdo6s4ehr4XW2wFMu9cb40nPgHEjSSppm8/++Xc+g0b2QQb+SeDesgfANXbjydOr1or9YQ+pcCZPQ== posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= postcss-cli@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-5.0.0.tgz#3d6aee7652b8dc6566f0189dd90d11bb0a535a20" + integrity sha512-LbSZQUu1fh7hiIU/JCitSWd+V3MO60DWi9ETUKiO7i9fDZN/9XqI3ACbAOnymd9a+8v5x5XI5SjeEv4/R+l/Ow== dependencies: chalk "^2.1.0" chokidar "^2.0.0" @@ -7620,6 +8747,7 @@ postcss-cli@^5.0.0: postcss-csso@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-csso/-/postcss-csso-3.0.0.tgz#7473e72f1ec9a098545e36cc93658153704d6881" + integrity sha512-5yvI9IMIJOofYqmYfn65ZTxxlYZ86jXzDMXwYqltx/kqGsSvHRw4gYkn5e/tCPPIgUeFP5MIhIkA02uoUEZsXA== dependencies: csso "~3.3.0" postcss "^6.0.0" @@ -7627,12 +8755,14 @@ postcss-csso@^3.0.0: postcss-discard-empty@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-2.1.0.tgz#d2b4bd9d5ced5ebd8dcade7640c7d7cd7f4f92b5" + integrity sha1-0rS9nVztXr2Nyt52QMfXzX9PkrU= dependencies: postcss "^5.0.14" postcss-discard-unused@^2.2.3: version "2.2.3" resolved "https://registry.yarnpkg.com/postcss-discard-unused/-/postcss-discard-unused-2.2.3.tgz#bce30b2cc591ffc634322b5fb3464b6d934f4433" + integrity sha1-vOMLLMWR/8Y0Mitfs0ZLbZNPRDM= dependencies: postcss "^5.0.14" uniqs "^2.0.0" @@ -7640,6 +8770,7 @@ postcss-discard-unused@^2.2.3: postcss-html@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50" + integrity sha512-KxKUpj7AY7nlCbLcTOYxdfJnGE7QFAfU2n95ADj1Q90RM/pOLdz8k3n4avOyRFs7MDQHcRzJQWM1dehCwJxisQ== dependencies: htmlparser2 "^3.9.2" remark "^8.0.0" @@ -7648,6 +8779,7 @@ postcss-html@^0.12.0: postcss-inline-svg@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-inline-svg/-/postcss-inline-svg-3.1.1.tgz#b4215f4b2bee605889d2ae9e6007d5c70cdec34a" + integrity sha512-G2BkarW6gGpGFGAiKzW7aiulUS0/6QuCgq1riZEiX4oMaUTpU1pdW7BU6UFRDrdKkwS0r4icK2pU0bg6sCSOjw== dependencies: css-select "^1.2.0" dom-serializer "^0.1.0" @@ -7658,6 +8790,7 @@ postcss-inline-svg@^3.1.1: postcss-js@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b" + integrity sha512-smhUUMF5o5W1ZCQSyh5A3lNOXFLdNrxqyhWbLsGolZH2AgVmlyhxhYbIixfsdKE6r1vG5i7O40DPcvEvE1mvjw== dependencies: camelcase-css "^1.0.1" postcss "^6.0.11" @@ -7665,12 +8798,14 @@ postcss-js@^1.0.1: postcss-less@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.3.tgz#6930525271bfe38d5793d33ac09c1a546b87bb51" + integrity sha512-WS0wsQxRm+kmN8wEYAGZ3t4lnoNfoyx9EJZrhiPR1K0lMHR0UNWnz52Ya5QRXChHtY75Ef+kDc05FpnBujebgw== dependencies: postcss "^5.2.16" postcss-load-config@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" + integrity sha1-U56a/J3chiASHr+djDZz4M5Q0oo= dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" @@ -7680,6 +8815,7 @@ postcss-load-config@^1.1.0: postcss-load-options@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-options/-/postcss-load-options-1.2.0.tgz#b098b1559ddac2df04bc0bb375f99a5cfe2b6d8c" + integrity sha1-sJixVZ3awt8EvAuzdfmaXP4rbYw= dependencies: cosmiconfig "^2.1.0" object-assign "^4.1.0" @@ -7687,6 +8823,7 @@ postcss-load-options@^1.2.0: postcss-load-plugins@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/postcss-load-plugins/-/postcss-load-plugins-2.3.0.tgz#745768116599aca2f009fad426b00175049d8d92" + integrity sha1-dFdoEWWZrKLwCfrUJrABdQSdjZI= dependencies: cosmiconfig "^2.1.1" object-assign "^4.1.0" @@ -7694,10 +8831,12 @@ postcss-load-plugins@^2.3.0: postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" + integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= postcss-reporter@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3" + integrity sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg== dependencies: chalk "^2.0.1" lodash "^4.17.4" @@ -7707,16 +8846,19 @@ postcss-reporter@^5.0.0: postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" + integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= postcss-safe-parser@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" + integrity sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI= dependencies: postcss "^6.0.6" postcss-sass@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a" + integrity sha512-cUmYzkP747fPCQE6d+CH2l1L4VSyIlAzZsok3HPjb5Gzsq3jE+VjpAdGlPsnQ310WKWI42sw+ar0UNN59/f3hg== dependencies: gonzales-pe "^4.0.3" postcss "^6.0.6" @@ -7724,12 +8866,14 @@ postcss-sass@^0.2.0: postcss-scss@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.3.tgz#4c00ab440fc1c994134e3d4e600c23341af6cd27" + integrity sha512-N2ZPDOV5PGEGVwdiB7b1QppxKkmkHodNWkemja7PV+/mHqbUlA6ZcYRreden5Ag5nwBBX8/aRE7lfg1xjdszyg== dependencies: postcss "^6.0.15" postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.1.tgz#4f875f4afb0c96573d5cf4d74011aee250a7e865" + integrity sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU= dependencies: dot-prop "^4.1.1" indexes-of "^1.0.1" @@ -7738,6 +8882,7 @@ postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1: postcss-url@^7.3.1: version "7.3.2" resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-7.3.2.tgz#5fea273807fb84b38c461c3c9a9e8abd235f7120" + integrity sha512-QMV5mA+pCYZQcUEPQkmor9vcPQ2MT+Ipuu8qdi1gVxbNiIiErEGft+eny1ak19qALoBkccS5AHaCaCDzh7b9MA== dependencies: mime "^1.4.1" minimatch "^3.0.4" @@ -7748,10 +8893,12 @@ postcss-url@^7.3.1: postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" + integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= postcss@^5.0.14, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" + integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== dependencies: chalk "^1.1.3" js-base64 "^2.1.9" @@ -7761,6 +8908,7 @@ postcss@^5.0.14, postcss@^5.2.16: postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.15, postcss@^6.0.17, postcss@^6.0.6, postcss@^6.0.8: version "6.0.19" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" + integrity sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg== dependencies: chalk "^2.3.1" source-map "^0.6.1" @@ -7769,6 +8917,7 @@ postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.15, postcss@^6.0.1 postcss@^6.0.11, postcss@^6.0.21, postcss@^6.0.23: version "6.0.23" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" + integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== dependencies: chalk "^2.4.1" source-map "^0.6.1" @@ -7777,10 +8926,12 @@ postcss@^6.0.11, postcss@^6.0.21, postcss@^6.0.23: potpack@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" + integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== prebuild-install@^2.1.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" + integrity sha512-3DX9L6pzwc1m1ksMkW3Ky2WLgPQUBiySOfXVl3WZyAeJSyJb4wtoH9OmeRGcubAWsMlLiL8BTHbwfm/jPQE9Ag== dependencies: detect-libc "^1.0.3" expand-template "^1.0.2" @@ -7801,26 +8952,32 @@ prebuild-install@^2.1.1: prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= prepend-http@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= prepend-http@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + integrity sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks= pretty-bytes@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.1.0.tgz#6237ecfbdc6525beaef4de722cc60a58ae0e6c6d" + integrity sha512-wa5+qGVg9Yt7PB6rYm3kXlKzgzgivYTLRandezh43jjRqgyDyP+9YxfJpJiLs9yKD1WeU8/OvtToWpW7255FtA== pretty-error@^2.0.2, pretty-error@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.1.tgz#5f4f87c8f91e5ae3f3ba87ab4cf5e03b1a17f1a3" + integrity sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM= dependencies: renderkid "^2.0.1" utila "~0.4" @@ -7828,52 +8985,63 @@ pretty-error@^2.0.2, pretty-error@^2.1.1: pretty-hrtime@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" + integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= pretty-ms@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-3.2.0.tgz#87a8feaf27fc18414d75441467d411d6e6098a25" + integrity sha512-ZypexbfVUGTFxb0v+m1bUyy92DHe5SyYlnyY0msyms5zd3RwyvNgyxZZsXXgoyzlxjx5MiqtXUdhUfvQbe0A2Q== dependencies: parse-ms "^1.0.0" prismjs@^1.8.1: version "1.11.0" resolved "https://registry.yarnpkg.com/prismjs/-/prismjs-1.11.0.tgz#297aef33eb79421bfdb19273a5092ca515970d29" + integrity sha1-KXrvM+t5Qhv9sZJzpQkspRWXDSk= optionalDependencies: clipboard "^1.7.1" private@^0.1.6, private@^0.1.7: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" + integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== process-nextick-args@^1.0.6, process-nextick-args@~1.0.6: version "1.0.7" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= process-nextick-args@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.0.tgz#a37d732f4271b4ab1ad070d35508e8290788ffaa" + integrity sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw== process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= progress@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.0.tgz#8a1be366bf8fc23db2bd23f10c6fe920b4389d1f" + integrity sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8= promise-inflight@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3" + integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM= promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg== dependencies: asap "~2.0.3" prop-types@^15.5.4, prop-types@^15.6.0: version "15.6.0" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + integrity sha1-zq8IMCL8RrSjX2nhPvda7Q1jmFY= dependencies: fbjs "^0.8.16" loose-envify "^1.3.1" @@ -7882,6 +9050,7 @@ prop-types@^15.5.4, prop-types@^15.6.0: prop-types@^15.6.1: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" + integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== dependencies: loose-envify "^1.3.1" object-assign "^4.1.1" @@ -7889,44 +9058,54 @@ prop-types@^15.6.1: property-information@^3.0.0, property-information@^3.1.0, property-information@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/property-information/-/property-information-3.2.0.tgz#fd1483c8fbac61808f5fe359e7693a1f48a58331" + integrity sha1-/RSDyPusYYCPX+NZ52k6H0ilgzE= protocol-buffers-schema@^2.0.2: version "2.2.0" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-2.2.0.tgz#d29c6cd73fb655978fb6989691180db844119f61" + integrity sha1-0pxs1z+2VZePtpiWkRgNuEQRn2E= protocol-buffers-schema@^3.3.1: version "3.3.2" resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.3.2.tgz#00434f608b4e8df54c59e070efeefc37fb4bb859" + integrity sha512-Xdayp8sB/mU+sUV4G7ws8xtYMGdQnxbeIfLjyO9TZZRJdztBGhlmbI5x1qcY4TG5hBkIKGnc28i7nXxaugu88w== protocols@^1.1.0, protocols@^1.4.0: version "1.4.6" resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.6.tgz#f8bb263ea1b5fd7a7604d26b8be39bd77678bf8a" + integrity sha1-+LsmPqG1/Xp2BNJri+Ob13Z4v4o= proxy-middleware@latest: version "0.15.0" resolved "https://registry.yarnpkg.com/proxy-middleware/-/proxy-middleware-0.15.0.tgz#a3fdf1befb730f951965872ac2f6074c61477a56" + integrity sha1-o/3xvvtzD5UZZYcqwvYHTGFHelY= prr@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" + integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= ps-tree@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + integrity sha1-tCGyQUDWID8e08dplrRCewjowBQ= dependencies: event-stream "~3.3.0" pseudomap@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= psl@^1.1.24: version "1.1.29" resolved "https://registry.yarnpkg.com/psl/-/psl-1.1.29.tgz#60f580d360170bb722a797cc704411e6da850c67" + integrity sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ== public-encrypt@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.0.tgz#39f699f3a46560dd5ebacbca693caf7c65c18cc6" + integrity sha1-OfaZ86RlYN1eusvKaTyvfGXBjMY= dependencies: bn.js "^4.1.0" browserify-rsa "^4.0.0" @@ -7937,6 +9116,7 @@ public-encrypt@^4.0.0: pump@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/pump/-/pump-1.0.3.tgz#5dfe8311c33bbf6fc18261f9f34702c47c08a954" + integrity sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7944,6 +9124,7 @@ pump@^1.0.0: pump@^2.0.0, pump@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -7951,6 +9132,7 @@ pump@^2.0.0, pump@^2.0.1: pumpify@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.4.0.tgz#80b7c5df7e24153d03f0e7ac8a05a5d068bd07fb" + integrity sha512-2kmNR9ry+Pf45opRVirpNuIFotsxUGLaYqxIwuR77AYrYRMuFCz9eryHBS52L360O+NcR383CL4QYlMKPq4zYA== dependencies: duplexify "^3.5.3" inherits "^2.0.3" @@ -7959,6 +9141,7 @@ pumpify@^1.3.3: pumpify@^1.3.5: version "1.5.1" resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== dependencies: duplexify "^3.6.0" inherits "^2.0.3" @@ -7967,34 +9150,42 @@ pumpify@^1.3.5: punycode@1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= punycode@^1.2.4, punycode@^1.3.2, punycode@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= punycode@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" + integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= q@^1.4.1: version "1.5.1" resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= qs@^6.4.0, qs@~6.5.1: version "6.5.1" resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A== qs@~6.3.0: version "6.3.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" + integrity sha1-51vV9uJoEioqDgvaYwslUMFmUCw= qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= query-string@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.0.tgz#9583b15fd1307f899e973ed418886426a9976469" + integrity sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ== dependencies: decode-uri-component "^0.2.0" object-assign "^4.1.0" @@ -8003,30 +9194,27 @@ query-string@^5.0.1: querystring-es3@^0.2.0, querystring-es3@~0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= quick-lru@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" + integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= quickselect@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-1.0.1.tgz#1e6ceaa9db1ca7c75aafcc863c7bef2037ca62a1" - -quote-stream@^1.0.1, quote-stream@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/quote-stream/-/quote-stream-1.0.2.tgz#84963f8c9c26b942e153feeb53aae74652b7e0b2" - dependencies: - buffer-equal "0.0.1" - minimist "^1.1.3" - through2 "^2.0.0" + integrity sha512-Jt30UQSzTbxf6L2bFTMabHtGtYUzQcvOY0a+s5brm8tzndV/XWifBIH9v5QKtH5gGCZ5RRDwRhdhGMDVHAEGNQ== randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + integrity sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how== dependencies: is-number "^3.0.0" kind-of "^4.0.0" @@ -8034,12 +9222,14 @@ randomatic@^1.1.3: randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.6" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.6.tgz#d302c522948588848a8d300c932b44c24231da80" + integrity sha512-CIQ5OFxf4Jou6uOKe9t1AOgqpeU5fd70A8NPdHSGeYXqXsPe6peOwI0cUl88RWZ6sP1vPMV3avd/R6cZ5/sP1A== dependencies: safe-buffer "^5.1.0" randomfill@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" + integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== dependencies: randombytes "^2.0.5" safe-buffer "^5.1.0" @@ -8047,10 +9237,12 @@ randomfill@^1.0.3: range-parser@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + integrity sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4= raw-body@~1.1.0: version "1.1.7" resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= dependencies: bytes "1" string_decoder "0.10" @@ -8058,10 +9250,12 @@ raw-body@~1.1.0: raw-loader@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-0.5.1.tgz#0c3d0beaed8a01c966d9787bf778281252a979aa" + integrity sha1-DD0L6u2KAclm2Xh793goElKpeao= rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: version "1.2.5" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.5.tgz#275cd687f6e3b36cc756baa26dfee80a790301fd" + integrity sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0= dependencies: deep-extend "~0.4.0" ini "~1.3.0" @@ -8071,6 +9265,7 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== dependencies: deep-extend "^0.6.0" ini "~1.3.0" @@ -8080,14 +9275,17 @@ rc@^1.2.7: react-attr-converter@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/react-attr-converter/-/react-attr-converter-0.3.1.tgz#4a2abf6d907b7ddae4d862dfec80e489ce41ad6e" + integrity sha512-dSxo2Mn6Zx4HajeCeQNLefwEO4kNtV/0E682R1+ZTyFRPqxDa5zYb5qM/ocqw9Bxr/kFQO0IUiqdV7wdHw+Cdg== react-dom@15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.1.tgz#6d42cd2b64c8c5e0b693f3ffaec301e6e627e24e" + integrity sha1-bULNK2TIxeC2k/P/rsMB5uYn4k4= react-dom@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" + integrity sha512-zpGAdwHVn9K0091d+hr+R0qrjoJ84cIBFL2uU60KvWBPfZ7LPSrfqviTxGHWN0sjPZb2hxWzMexwrvJdKePvjg== dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -8097,6 +9295,7 @@ react-dom@^16.0.0: react-helmet@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/react-helmet/-/react-helmet-5.2.0.tgz#a81811df21313a6d55c5f058c4aeba5d6f3d97a7" + integrity sha1-qBgR3yExOm1VxfBYxK66XW89l6c= dependencies: deep-equal "^1.0.1" object-assign "^4.1.1" @@ -8106,6 +9305,7 @@ react-helmet@^5.2.0: react-side-effect@^1.1.0: version "1.1.3" resolved "https://registry.yarnpkg.com/react-side-effect/-/react-side-effect-1.1.3.tgz#512c25abe0dec172834c4001ec5c51e04d41bc5c" + integrity sha1-USwlq+DewXKDTEAB7FxR4E1BvFw= dependencies: exenv "^1.2.1" shallowequal "^1.0.1" @@ -8113,6 +9313,7 @@ react-side-effect@^1.1.0: react@15.3.1: version "15.3.1" resolved "https://registry.yarnpkg.com/react/-/react-15.3.1.tgz#f78501ed8c2ec6e6e31c3223652e97f1369d2bd6" + integrity sha1-94UB7YwuxubjHDIjZS6X8TadK9Y= dependencies: fbjs "^0.8.4" loose-envify "^1.1.0" @@ -8121,6 +9322,7 @@ react@15.3.1: react@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" + integrity sha512-ZmIomM7EE1DvPEnSFAHZn9Vs9zJl5A9H7el0EGTE6ZbW9FKe/14IYAlPbC8iH25YarEQxZL+E8VW7Mi7kfQrDQ== dependencies: fbjs "^0.8.16" loose-envify "^1.1.0" @@ -8130,18 +9332,21 @@ react@^16.0.0: read-cache@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" + integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= dependencies: pify "^2.3.0" read-only-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" + integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= dependencies: readable-stream "^2.0.2" read-pkg-up@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= dependencies: find-up "^1.0.0" read-pkg "^1.0.0" @@ -8149,6 +9354,7 @@ read-pkg-up@^1.0.1: read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= dependencies: find-up "^2.0.0" read-pkg "^2.0.0" @@ -8156,6 +9362,7 @@ read-pkg-up@^2.0.0: read-pkg-up@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" + integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= dependencies: find-up "^2.0.0" read-pkg "^3.0.0" @@ -8163,6 +9370,7 @@ read-pkg-up@^3.0.0: read-pkg-up@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== dependencies: find-up "^3.0.0" read-pkg "^3.0.0" @@ -8170,6 +9378,7 @@ read-pkg-up@^4.0.0: read-pkg@^1.0.0, read-pkg@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= dependencies: load-json-file "^1.0.0" normalize-package-data "^2.3.2" @@ -8178,6 +9387,7 @@ read-pkg@^1.0.0, read-pkg@^1.1.0: read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= dependencies: load-json-file "^2.0.0" normalize-package-data "^2.3.2" @@ -8186,14 +9396,16 @@ read-pkg@^2.0.0: read-pkg@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= dependencies: load-json-file "^4.0.0" normalize-package-data "^2.3.2" path-type "^3.0.0" -"readable-stream@1 || 2", readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@~2.3.3: +"readable-stream@1 || 2", readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.4, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3: version "2.3.4" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.4.tgz#c946c3f47fa7d8eabc0b6150f4a12f69a4574071" + integrity sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ== dependencies: core-util-is "~1.0.0" inherits "~2.0.3" @@ -8206,6 +9418,7 @@ read-pkg@^3.0.0: readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" + integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8215,6 +9428,7 @@ readable-stream@1.0, "readable-stream@>=1.0.33-1 <1.1.0-0": readable-stream@~2.0.0: version "2.0.6" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= dependencies: core-util-is "~1.0.0" inherits "~2.0.1" @@ -8226,6 +9440,7 @@ readable-stream@~2.0.0: readable-stream@~2.1.0: version "2.1.5" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= dependencies: buffer-shims "^1.0.0" core-util-is "~1.0.0" @@ -8238,6 +9453,7 @@ readable-stream@~2.1.0: readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + integrity sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg= dependencies: graceful-fs "^4.1.2" minimatch "^3.0.2" @@ -8247,6 +9463,7 @@ readdirp@^2.0.0: redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" + integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= dependencies: indent-string "^2.1.0" strip-indent "^1.0.1" @@ -8254,6 +9471,7 @@ redent@^1.0.0: redent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" + integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= dependencies: indent-string "^3.0.0" strip-indent "^2.0.0" @@ -8261,18 +9479,22 @@ redent@^2.0.0: regenerate@^1.2.1: version "1.3.3" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.3.tgz#0c336d3980553d755c39b586ae3b20aa49c82b7f" + integrity sha512-jVpo1GadrDAK59t/0jRx5VxYWQEDkkEKi6+HjE3joFVLfDOh9Xrdh0dF1eSq+BI/SwvTQ44gSscJ8N5zYL61sg== regenerator-runtime@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" + integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== regenerator-runtime@^0.9.5: version "0.9.6" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" + integrity sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck= regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" + integrity sha512-PJepbvDbuK1xgIgnau7Y90cwaAmO/LCLMI2mPvaXq2heGMR3aWW5/BQvYrhJ8jgmQjXewXvBjzfqKcVOmhjZ6Q== dependencies: babel-runtime "^6.18.0" babel-types "^6.19.0" @@ -8281,12 +9503,14 @@ regenerator-transform@^0.10.0: regex-cache@^0.4.2: version "0.4.4" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + integrity sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ== dependencies: is-equal-shallow "^0.1.3" regex-not@^1.0.0, regex-not@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== dependencies: extend-shallow "^3.0.2" safe-regex "^1.1.0" @@ -8294,6 +9518,7 @@ regex-not@^1.0.0, regex-not@^1.0.2: regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" + integrity sha1-SdA4g3uNz4v6W5pCE5k45uoq4kA= dependencies: regenerate "^1.2.1" regjsgen "^0.2.0" @@ -8302,6 +9527,7 @@ regexpu-core@^2.0.0: registry-auth-token@^3.0.1: version "3.3.2" resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.2.tgz#851fd49038eecb586911115af845260eec983f20" + integrity sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ== dependencies: rc "^1.1.6" safe-buffer "^5.0.1" @@ -8309,32 +9535,38 @@ registry-auth-token@^3.0.1: registry-url@^3.0.3: version "3.1.0" resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha1-PU74cPc93h138M+aOBQyRE4XSUI= dependencies: rc "^1.0.1" regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" + integrity sha1-bAFq3qxVT3WCP+N6wFuS1aTtsfc= regjsparser@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.1.5.tgz#7ee8f84dc6fa792d3fd0ae228d24bd949ead205c" + integrity sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw= dependencies: jsesc "~0.5.0" rehype-raw@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rehype-raw/-/rehype-raw-2.0.0.tgz#5637a9fceef34800fd7c57ca32fd9d5927fd2aaa" + integrity sha1-Vjep/O7zSAD9fFfKMv2dWSf9Kqo= dependencies: hast-util-raw "^2.0.0" relateurl@0.2.x: version "0.2.7" resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" + integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= remark-html@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-7.0.0.tgz#d13dc1ba9352e257fce8800c42c7690d9e3690c8" + integrity sha512-jqRzkZXCkM12gIY2ibMLTW41m7rfanliMTVQCFTezHJFsbH00YaTox/BX4gU+f/zCdzfhFJONtebFByvpMv37w== dependencies: hast-util-sanitize "^1.0.0" hast-util-to-html "^3.0.0" @@ -8344,6 +9576,7 @@ remark-html@7.0.0: remark-html@^5.0.1: version "5.2.0" resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-5.2.0.tgz#c67151f1168354b73b1c3650e678c398267785f6" + integrity sha1-xnFR8RaDVLc7HDZQ5njDmCZ3hfY= dependencies: hast-util-sanitize "^1.0.0" hast-util-to-html "^3.0.0" @@ -8353,6 +9586,7 @@ remark-html@^5.0.1: remark-parse@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-4.0.0.tgz#99f1f049afac80382366e2e0d0bd55429dd45d8b" + integrity sha512-XZgICP2gJ1MHU7+vQaRM+VA9HEL3X253uwUM/BGgx3iv6TH2B3bF3B8q00DKcyP9YrJV+/7WOWEWBFF/u8cIsw== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -8373,6 +9607,7 @@ remark-parse@^4.0.0: remark-parse@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== dependencies: collapse-white-space "^1.0.2" is-alphabetical "^1.0.0" @@ -8393,6 +9628,7 @@ remark-parse@^5.0.0: remark-react@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/remark-react/-/remark-react-4.0.1.tgz#82926c3b445c2e3d1034b354edc292f37369f823" + integrity sha512-Yy52jxwrjHRJhk0b7+0tvpR0SUgROXaOilB+emnvTDngab16ryRda6DmW4peeMWB6eJgG4YgMWodxmOTOLkecg== dependencies: hast-to-hyperscript "^3.0.0" hast-util-sanitize "^1.0.0" @@ -8403,18 +9639,21 @@ remark-react@^4.0.1: remark-reference-links@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/remark-reference-links/-/remark-reference-links-4.0.2.tgz#817c63486901bd4f5f8a0cf48a695f5ecd2c966d" + integrity sha512-871gKTysBtdQUjoqXA0URWmVhI2jFrpLkWrM3/bydAbsngilDYRjjl2LDAgmNooW8bYbHa57YQ13ld+mYr3TLg== dependencies: unist-util-visit "^1.0.0" remark-rehype@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remark-rehype/-/remark-rehype-3.0.0.tgz#699342e76cc1dead191cc924fdf21910b3746160" + integrity sha512-WUinfb6vi34f4VYs2XS4HvuYNd0tCu68HOlG4aMp1dfFyVuVfL3aiL9WPw+Q6W99xTTHyxwr7BGO94jF0psoEA== dependencies: mdast-util-to-hast "^3.0.0" remark-slug@^5.0.0: version "5.1.0" resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-5.1.0.tgz#e55cd92d53395665e26b2994441394127d860abf" + integrity sha512-FW/V7b3ekfDL1eyPDyzfq0qz5HFPKPNWVC2eqFDie45r774FLGoymOS1oU7LVQfdFNEvNLZ6oBJT/oIxAyBISg== dependencies: github-slugger "^1.0.0" mdast-util-to-string "^1.0.0" @@ -8423,6 +9662,7 @@ remark-slug@^5.0.0: remark-stringify@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-4.0.0.tgz#4431884c0418f112da44991b4e356cfe37facd87" + integrity sha512-xLuyKTnuQer3ke9hkU38SUYLiTmS078QOnoFavztmbt/pAJtNSkNtFgR0U//uCcmG0qnyxao+PDuatQav46F1w== dependencies: ccount "^1.0.0" is-alphanumeric "^1.0.0" @@ -8442,6 +9682,7 @@ remark-stringify@^4.0.0: remark-stringify@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + integrity sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w== dependencies: ccount "^1.0.0" is-alphanumeric "^1.0.0" @@ -8461,6 +9702,7 @@ remark-stringify@^5.0.0: remark-toc@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-5.0.0.tgz#f1e13ed11062ad4d102b02e70168bd85015bf129" + integrity sha512-j2A/fpio1nzNRJtY6nVaFUCtXNfFPxaj6I5UHFsFgo4xKmc0VokRRIzGqz4Vfs7u+dPrHjnoHkImu1Dia0jDSQ== dependencies: mdast-util-toc "^2.0.0" remark-slug "^5.0.0" @@ -8468,6 +9710,7 @@ remark-toc@^5.0.0: remark@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/remark/-/remark-8.0.0.tgz#287b6df2fe1190e263c1d15e486d3fa835594d6d" + integrity sha512-K0PTsaZvJlXTl9DN6qYlvjTkqSZBFELhROZMrblm2rB+085flN84nz4g/BscKRMqDvhzlK1oQ/xnWQumdeNZYw== dependencies: remark-parse "^4.0.0" remark-stringify "^4.0.0" @@ -8476,6 +9719,7 @@ remark@^8.0.0: remark@^9.0.0: version "9.0.0" resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + integrity sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A== dependencies: remark-parse "^5.0.0" remark-stringify "^5.0.0" @@ -8484,12 +9728,14 @@ remark@^9.0.0: remote-origin-url@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/remote-origin-url/-/remote-origin-url-0.4.0.tgz#4d3e2902f34e2d37d1c263d87710b77eb4086a30" + integrity sha1-TT4pAvNOLTfRwmPYdxC3frQIajA= dependencies: parse-git-config "^0.2.0" remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" + integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== dependencies: is-buffer "^1.1.5" is-utf8 "^0.2.1" @@ -8497,6 +9743,7 @@ remove-bom-buffer@^3.0.0: remove-bom-stream@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" + integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= dependencies: remove-bom-buffer "^3.0.0" safe-buffer "^5.1.0" @@ -8505,10 +9752,12 @@ remove-bom-stream@^1.2.0: remove-trailing-separator@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= renderkid@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/renderkid/-/renderkid-2.0.1.tgz#898cabfc8bede4b7b91135a3ffd323e58c0db319" + integrity sha1-iYyr/Ivt5Le5ETWj/9Mj5YwNsxk= dependencies: css-select "^1.1.0" dom-converter "~0.1" @@ -8519,30 +9768,36 @@ renderkid@^2.0.1: repeat-element@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= repeating@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" + integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= dependencies: is-finite "^1.0.0" replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" + integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= request-promise-core@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.1.tgz#3eee00b2c5aa83239cfb04c5700da36f81cd08b6" + integrity sha1-Pu4AssWqgyOc+wTFcA2jb4HNCLY= dependencies: lodash "^4.13.1" request-promise-native@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.5.tgz#5281770f68e0c9719e5163fd3fab482215f4fda5" + integrity sha1-UoF3D2jgyXGeUWP9P6tIIhX0/aU= dependencies: request-promise-core "1.1.1" stealthy-require "^1.1.0" @@ -8551,6 +9806,7 @@ request-promise-native@^1.0.5: request@2, request@^2.79.0: version "2.83.0" resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + integrity sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -8578,6 +9834,7 @@ request@2, request@^2.79.0: request@2.79.0: version "2.79.0" resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" + integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4= dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -8603,6 +9860,7 @@ request@2.79.0: request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + integrity sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA= dependencies: aws-sign2 "~0.6.0" aws4 "^1.2.1" @@ -8630,6 +9888,7 @@ request@2.81.0: request@^2.83.0: version "2.87.0" resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" + integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== dependencies: aws-sign2 "~0.7.0" aws4 "^1.6.0" @@ -8655,22 +9914,27 @@ request@^2.83.0: require-directory@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= require-from-string@^1.1.0: version "1.2.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= require-from-string@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" + integrity sha1-xUUjPp19pmFunVmt+zn8n1iGdv8= require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= require-uncached@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" + integrity sha1-Tg1W1slmL9MeQwEcS5WqSZVUIdM= dependencies: caller-path "^0.1.0" resolve-from "^1.0.0" @@ -8678,50 +9942,60 @@ require-uncached@^1.0.3: resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" + integrity sha1-Jsv+k10a7uq7Kbw/5a6wHpPUQiY= resolve-from@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= resolve-from@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== resolve-options@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" + integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= dependencies: value-or-function "^3.0.0" resolve-protobuf-schema@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.0.0.tgz#e67b062a67f02d11bd6886e70efda788407e0fb4" + integrity sha1-5nsGKmfwLRG9aIbnDv2niEB+D7Q= dependencies: protocol-buffers-schema "^2.0.2" resolve-url@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= resolve@1.1.7: version "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.5, resolve@^1.1.6, resolve@^1.4.0, resolve@^1.5.0: +resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.4.0, resolve@^1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.5.0.tgz#1f09acce796c9a762579f31b2c1cc4c3cddf9f36" + integrity sha512-hgoSGrc3pjzAPHNBg+KnFcK2HwlHTs/YrAGUr6qgTVUZmXv1UEXXl0bZNBKMA9fud6lRYFdPGz0xXxycPzmmiw== dependencies: path-parse "^1.0.5" responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= dependencies: lowercase-keys "^1.0.0" restore-cursor@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" + integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= dependencies: onetime "^2.0.0" signal-exit "^3.0.2" @@ -8729,42 +10003,39 @@ restore-cursor@^2.0.0: ret@~0.1.10: version "0.1.15" resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= dependencies: align-text "^0.1.1" rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== dependencies: glob "^7.0.5" rimraf@~2.2.6: version "2.2.8" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" + integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" + integrity sha1-D0WEKVxTo2KK9+bXmsohzlfRxuc= dependencies: hash-base "^2.0.0" inherits "^2.0.1" -rollup-plugin-browserify-transform@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rollup-plugin-browserify-transform/-/rollup-plugin-browserify-transform-1.0.1.tgz#97cd596d5cb14d7fdb43da970b6c3a309a6d81e9" - dependencies: - concat-stream "^1.5.1" - object-assign "^4.0.1" - rollup-pluginutils "^2.0.1" - source-map-url "^0.4.0" - rollup-plugin-buble@^0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.18.0.tgz#6e20d1b2840c59eb496b9f954f75243e51786ac1" + integrity sha512-rd3JG2MxvQXfg5coCw0IyZV8QrsceVI4zfJgGVgkUnntwp+gnjv7TsKWGKGoLNMGAMRKQlhcsSyvUuvOL+vNHw== dependencies: buble "^0.18.0" rollup-pluginutils "^2.0.1" @@ -8772,6 +10043,7 @@ rollup-plugin-buble@^0.18.0: rollup-plugin-commonjs@^9.1.6: version "9.1.6" resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-9.1.6.tgz#ad553813c922b71467152794b98f2fd0f195b8a5" + integrity sha512-J7GOJm9uzEeLqkVxYSgjyoieh34hATWpa9G2M1ilGzWOLYGfQx5IDQ9ewG8QUj/Z2dzgV+d0/AyloAzElkABAA== dependencies: estree-walker "^0.5.1" magic-string "^0.22.4" @@ -8781,12 +10053,14 @@ rollup-plugin-commonjs@^9.1.6: rollup-plugin-json@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-2.3.0.tgz#3c07a452c1b5391be28006fbfff3644056ce0add" + integrity sha512-W45nZH7lmXgkSR/DkeyF4ks0YWFrMysdjUT049gTuAg+lwUEDBKI2+PztqW8UDSMlXCAeEONsLzpDDyBy9m+9A== dependencies: rollup-pluginutils "^2.0.1" rollup-plugin-node-resolve@3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-3.4.0.tgz#908585eda12e393caac7498715a01e08606abc89" + integrity sha512-PJcd85dxfSBWih84ozRtBkB731OjXk0KnzN0oGp7WOWcarAFkVa71cV5hTJg2qpVsV2U8EUwrzHP3tvy9vS3qg== dependencies: builtin-modules "^2.0.0" is-module "^1.0.0" @@ -8795,6 +10069,7 @@ rollup-plugin-node-resolve@3.4.0: rollup-plugin-replace@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.0.0.tgz#19074089c8ed57184b8cc64e967a03d095119277" + integrity sha512-pK9mTd/FNrhtBxcTBXoh0YOwRIShV0gGhv9qvUtNcXHxIMRZMXqfiZKVBmCRGp8/2DJRy62z2JUE7/5tP6WxOQ== dependencies: magic-string "^0.22.4" minimatch "^3.0.2" @@ -8803,6 +10078,7 @@ rollup-plugin-replace@^2.0.0: rollup-plugin-sourcemaps@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#62125aa94087aadf7b83ef4dfaf629b473135e87" + integrity sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= dependencies: rollup-pluginutils "^2.0.1" source-map-resolve "^0.5.0" @@ -8810,12 +10086,14 @@ rollup-plugin-sourcemaps@^0.4.2: rollup-plugin-uglify@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-3.0.0.tgz#a34eca24617709c6bf1778e9653baafa06099b86" + integrity sha512-dehLu9eRRoV4l09aC+ySntRw1OAfoyKdbk8Nelblj03tHoynkSybqyEpgavemi1LBOH6S1vzI58/mpxkZIe1iQ== dependencies: uglify-es "^3.3.7" rollup-plugin-unassert@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/rollup-plugin-unassert/-/rollup-plugin-unassert-0.2.0.tgz#856a1513982a9ff9dcc7cfa6a436be8fe1b6696f" + integrity sha512-UikBhzlkWCx8Ine+fEhN8J5wqyD0C1pc2PUhTddN2W43xqo4XJEM/XGN2oeIOYwUEfHsjEq22QmOj2fdhflDRg== dependencies: acorn "^4.0.4" convert-source-map "^1.5.1" @@ -8827,13 +10105,15 @@ rollup-plugin-unassert@^0.2.0: rollup-pluginutils@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.0.1.tgz#7ec95b3573f6543a46a6461bd9a7c544525d0fc0" + integrity sha1-fslbNXP2VDpGpkYb2afFRFJdD8A= dependencies: estree-walker "^0.3.0" micromatch "^2.3.11" -rollup@^0.63.4: - version "0.63.4" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.63.4.tgz#cb58bf6c2a6c38542cae250684c962799ad7c00c" +rollup@^0.66.2: + version "0.66.2" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.66.2.tgz#77acdb9f4093f5f035ce75480577c40a81ea7999" + integrity sha512-+rOLjWO170M3Y2jyyGU4ZJuTu1T1KuKNyH+RszHRzQdsuI5TulRbkSM4vlaMnwcxHm4XdgBNZ1mmNzhQIImbiQ== dependencies: "@types/estree" "0.0.39" "@types/node" "*" @@ -8841,62 +10121,75 @@ rollup@^0.63.4: run-async@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.3.0.tgz#0371ab4ae0bdd720d4166d7dfda64ff7a445a6c0" + integrity sha1-A3GrSuC91yDUFm19/aZP96RFpsA= dependencies: is-promise "^2.1.0" run-queue@^1.0.0, run-queue@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/run-queue/-/run-queue-1.0.3.tgz#e848396f057d223f24386924618e25694161ec47" + integrity sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec= dependencies: aproba "^1.1.1" rw@1, rw@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" + integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= rx-lite-aggregates@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" + integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= dependencies: rx-lite "*" rx-lite@*, rx-lite@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" + integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== safe-buffer@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-json-parse@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= dependencies: ret "~0.1.10" "safer-buffer@>= 2.1.2 < 3": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== samsam@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" + integrity sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg== sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" + integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== schema-utils@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" + integrity sha512-yYrjb9TX2k/J1Y5UNy3KYdZq10xhYcF8nMpAW6o3hy6Q8WSIEf9lJHG/ePnOBfziPM3fvQwfOwa13U/Fh8qTfA== dependencies: ajv "^6.1.0" ajv-keywords "^3.1.0" @@ -8904,28 +10197,34 @@ schema-utils@^0.4.5: seedrandom@^2.4.2: version "2.4.3" resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.3.tgz#2438504dad33917314bff18ac4d794f16d6aaecc" + integrity sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw= select@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d" + integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0= semver-diff@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY= dependencies: semver "^5.0.3" "semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0, semver@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" + integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" + integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= send@0.16.2, send@latest: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" + integrity sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw== dependencies: debug "2.6.9" depd "~1.1.2" @@ -8944,10 +10243,12 @@ send@0.16.2, send@latest: serialize-javascript@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" + integrity sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU= serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" + integrity sha1-03aNabHn2C5c4FD/9bRTvqEqkjk= dependencies: accepts "~1.3.4" batch "0.6.1" @@ -8960,6 +10261,7 @@ serve-index@^1.7.2: serve-static@^1.13.2: version "1.13.2" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.2.tgz#095e8472fd5b46237db50ce486a43f4b86c6cec1" + integrity sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw== dependencies: encodeurl "~1.0.2" escape-html "~1.0.3" @@ -8969,20 +10271,24 @@ serve-static@^1.13.2: set-blocking@^2.0.0, set-blocking@~2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= set-getter@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/set-getter/-/set-getter-0.1.0.tgz#d769c182c9d5a51f409145f2fba82e5e86e80376" + integrity sha1-12nBgsnVpR9AkUXy+6guXoboA3Y= dependencies: to-object-path "^0.3.0" set-immediate-shim@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= set-value@^0.4.3: version "0.4.3" resolved "https://registry.yarnpkg.com/set-value/-/set-value-0.4.3.tgz#7db08f9d3d22dc7f78e53af3c3bf4666ecdfccf1" + integrity sha1-fbCPnT0i3H945Trzw79GZuzfzPE= dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -8992,6 +10298,7 @@ set-value@^0.4.3: set-value@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.0.tgz#71ae4a88f0feefbbf52d1ea604f3fb315ebb6274" + integrity sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg== dependencies: extend-shallow "^2.0.1" is-extendable "^0.1.1" @@ -9001,29 +10308,30 @@ set-value@^2.0.0: setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= setprototypeof@1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + integrity sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ== sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: version "2.4.10" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.10.tgz#b1fde5cd7d11a5626638a07c604ab909cfa31f9b" + integrity sha512-vnwmrFDlOExK4Nm16J2KMWHLrp14lBrjxMxBJpu++EnsuBmpiYaM/MEs46Vxxm/4FvdP5yTwuCTO9it5FSjrqA== dependencies: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-copy@~0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/shallow-copy/-/shallow-copy-0.0.1.tgz#415f42702d73d810330292cc5ee86eae1a11a170" - shallowequal@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.0.2.tgz#1561dbdefb8c01408100319085764da3fcf83f8f" + integrity sha512-zlVXeVUKvo+HEv1e2KQF/csyeMKx2oHvatQ9l6XjCUj3agvC8XGf6R9HvIPDSmp8FNPvx7b5kaEJTRi7CqxtEw== shasum@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" + integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= dependencies: json-stable-stringify "~0.0.0" sha.js "~2.4.4" @@ -9031,16 +10339,19 @@ shasum@^1.0.0: shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= dependencies: shebang-regex "^1.0.0" shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= shell-quote@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.6.1.tgz#f4781949cce402697127430ea3b3c5476f481767" + integrity sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c= dependencies: array-filter "~0.0.0" array-map "~0.0.0" @@ -9050,24 +10361,29 @@ shell-quote@^1.6.1: shuffle-seed@^1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/shuffle-seed/-/shuffle-seed-1.1.6.tgz#533c12683bab3b4fa3e8751fc4e562146744260b" + integrity sha1-UzwSaDurO0+j6HUfxOViFGdEJgs= dependencies: seedrandom "^2.4.2" signal-exit@^2.0.0: version "2.1.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-2.1.2.tgz#375879b1f92ebc3b334480d038dc546a6d558564" + integrity sha1-N1h5sfkuvDszRIDQONxUam1VhWQ= signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= simple-concat@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" + integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= simple-get@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-2.7.0.tgz#ad37f926d08129237ff08c4f2edfd6f10e0380b5" + integrity sha512-RkE9rGPHcxYZ/baYmgJtOSM63vH0Vyq+ma5TijBcLla41SWlh8t6XYIGMR/oeZcmr+/G8k+zrClkkVrtnQ0esg== dependencies: decompress-response "^3.3.0" once "^1.3.1" @@ -9076,6 +10392,7 @@ simple-get@^2.7.0: sinon@^5.0.0: version "5.0.7" resolved "https://registry.yarnpkg.com/sinon/-/sinon-5.0.7.tgz#3bded6a73613ccc9e512e20246ced69a27c27dab" + integrity sha512-GvNLrwpvLZ8jIMZBUhHGUZDq5wlUdceJWyHvZDmqBxnjazpxY1L0FNbGBX6VpcOEoQ8Q4XMWFzm2myJMvx+VjA== dependencies: "@sinonjs/formatio" "^2.0.0" diff "^3.1.0" @@ -9088,6 +10405,7 @@ sinon@^5.0.0: sitemap-static@^0.4.2: version "0.4.2" resolved "https://registry.yarnpkg.com/sitemap-static/-/sitemap-static-0.4.2.tgz#f7acc86f79f84236fc0e152dec8f6d385fee1e13" + integrity sha1-96zIb3n4Qjb8DhUt7I9tOF/uHhM= dependencies: findit "~2.0.0" minimist "1.2.0" @@ -9095,24 +10413,29 @@ sitemap-static@^0.4.2: slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= slice-ansi@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-1.0.0.tgz#044f1a49d8842ff307aad6b505ed178bd950134d" + integrity sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg== dependencies: is-fullwidth-code-point "^2.0.0" slide@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/slide/-/slide-1.1.6.tgz#56eb027d65b4d2dce6cb2e2d32c4d4afc9e1d707" + integrity sha1-VusCfWW00tzmyy4tMsTUr8nh1wc= slugg@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/slugg/-/slugg-1.2.1.tgz#e752af2241af3f2714463c5de225cea47608740a" + integrity sha1-51KvIkGvPycURjxd4iXOpHYIdAo= snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== dependencies: define-property "^1.0.0" isobject "^3.0.0" @@ -9121,12 +10444,14 @@ snapdragon-node@^2.0.1: snapdragon-util@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== dependencies: kind-of "^3.2.0" snapdragon@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.1.tgz#e12b5487faded3e3dea0ac91e9400bf75b401370" + integrity sha1-4StUh/re0+PeoKyR6UAL91tAE3A= dependencies: base "^0.11.1" debug "^2.2.0" @@ -9140,28 +10465,33 @@ snapdragon@^0.8.1: sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + integrity sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg= dependencies: hoek "2.x.x" sntp@2.x.x: version "2.1.0" resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.1.0.tgz#2c6cec14fedc2222739caf9b5c3d85d1cc5a2cc8" + integrity sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg== dependencies: hoek "4.x.x" sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-2.0.0.tgz#658535584861ec97d730d6cf41822e1f56684128" + integrity sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg= dependencies: is-plain-obj "^1.0.0" source-list-map@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.0.tgz#aaa47403f7b245a92fbc97ea08f250d6087ed085" + integrity sha512-I2UmuJSRr/T8jisiROLU3A3ltr+swpniSmNPI4Ml3ZCX6tVnDsuZzK7F2hl5jTqbZBWCEKlj5HRQiPExXLgE8A== source-map-resolve@^0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.1.tgz#7ad0f593f2281598e854df80f19aae4b92d7a11a" + integrity sha512-0KW2wvzfxm8NCTb30z0LMNyPqWCdDGE2viwzUaucqJdkTRXtZiSY3I+2A6nVAjmdOy0I4gU8DwnVVGsk9jvP2A== dependencies: atob "^2.0.0" decode-uri-component "^0.2.0" @@ -9172,12 +10502,14 @@ source-map-resolve@^0.5.0: source-map-support@^0.4.15, source-map-support@^0.4.18: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== dependencies: source-map "^0.5.6" source-map-support@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.6.tgz#4435cee46b1aab62b8e8610ce60f788091c51c13" + integrity sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" @@ -9185,36 +10517,43 @@ source-map-support@^0.5.4: source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" + integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= source-map@^0.1.34: version "0.1.43" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" + integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= dependencies: amdefine ">=0.0.4" source-map@^0.4.4: version "0.4.4" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + integrity sha1-66T12pwNyZneaAMti092FzZSA2s= dependencies: amdefine ">=0.0.4" source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== space-separated-tokens@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.1.tgz#9695b9df9e65aec1811d4c3f9ce52520bc2f7e4d" + integrity sha1-lpW5355lrsGBHUw/nOUlILwvfk0= dependencies: trim "0.0.1" spawn-wrap@1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.2.4.tgz#920eb211a769c093eebfbd5b0e7a5d2e68ab2e40" + integrity sha1-kg6yEadpwJPuv71bDnpdLmirLkA= dependencies: foreground-child "^1.3.3" mkdirp "^0.5.0" @@ -9226,6 +10565,7 @@ spawn-wrap@1.2.4: spawn-wrap@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" + integrity sha512-vMwR3OmmDhnxCVxM8M+xO/FtIp6Ju/mNaDfCMMW7FDcLRTPFWUswec4LXJHTJE2hwTI9O0YBfygu4DalFl7Ylg== dependencies: foreground-child "^1.5.6" mkdirp "^0.5.0" @@ -9237,52 +10577,62 @@ spawn-wrap@^1.4.2: spdx-correct@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-1.0.2.tgz#4b3073d933ff51f3912f03ac5519498a4150db40" + integrity sha1-SzBz2TP/UfORLwOsVRlJikFQ20A= dependencies: spdx-license-ids "^1.0.2" spdx-expression-parse@~1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz#9bdf2f20e1f40ed447fbe273266191fced51626c" + integrity sha1-m98vIOH0DtRH++JzJmGR/O1RYmw= spdx-license-ids@^1.0.2: version "1.2.2" resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" + integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc= specificity@^0.3.1: version "0.3.2" resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42" + integrity sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== dependencies: extend-shallow "^3.0.0" split2@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/split2/-/split2-1.1.1.tgz#162d9b18865f02ab2f2ad9585522db9b54c481f9" + integrity sha1-Fi2bGIZfAqsvKtlYVSLbm1TEgfk= dependencies: through2 "~2.0.0" split@0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + integrity sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8= dependencies: through "2" split@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/split/-/split-1.0.1.tgz#605bd9be303aa59fb35f9229fbea0ddec9ea07d9" + integrity sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg== dependencies: through "2" sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= sshpk@^1.7.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + integrity sha1-US322mKHFEMW3EwY/hzx2UBzm+M= dependencies: asn1 "~0.2.3" assert-plus "^1.0.0" @@ -9297,12 +10647,14 @@ sshpk@^1.7.0: ssri@^5.2.4: version "5.2.4" resolved "https://registry.yarnpkg.com/ssri/-/ssri-5.2.4.tgz#9985e14041e65fc397af96542be35724ac11da52" + integrity sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ== dependencies: safe-buffer "^5.1.1" st@^1.1.0, st@^1.2.0: version "1.2.2" resolved "https://registry.yarnpkg.com/st/-/st-1.2.2.tgz#b95554f41b457bf0ed1c48f2bad8fccff894b14f" + integrity sha512-goKkumvz0BMLs6KjjPf5Fub/3T34tRVQxInUI5lqtbaKD+s4HcRlJYP2GPJ8RgAmrsnYOPGmOFEP6ho0KJ+E8g== dependencies: async-cache "~1.1.0" bl "~1.2.1" @@ -9315,10 +10667,12 @@ st@^1.1.0, st@^1.2.0: stack-utils@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.1.tgz#d4f33ab54e8e38778b0ca5cfd3b3afb12db68620" + integrity sha1-1PM6tU6OOHeLDKXP07OvsS22hiA= standard-changelog@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/standard-changelog/-/standard-changelog-0.0.1.tgz#b367266fce05ca39ef2bbc09c0d24ddbd4191891" + integrity sha1-s2cmb84FyjnvK7wJwNJN29QZGJE= dependencies: add-stream "^1.0.0" conventional-changelog-angular "^0.1.0" @@ -9330,61 +10684,47 @@ standard-changelog@^0.0.1: state-toggle@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.0.tgz#d20f9a616bb4f0c3b98b91922d25b640aa2bc425" - -static-eval@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/static-eval/-/static-eval-2.0.0.tgz#0e821f8926847def7b4b50cda5d55c04a9b13864" - dependencies: - escodegen "^1.8.1" + integrity sha1-0g+aYWu08MO5i5GSLSW2QKorxCU= static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= dependencies: define-property "^0.2.5" object-copy "^0.1.0" -static-module@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/static-module/-/static-module-2.1.1.tgz#c771f827177507aff941be65a00fb85c210aa668" - dependencies: - concat-stream "~1.6.0" - duplexer2 "~0.1.4" - escodegen "~1.9.0" - falafel "^2.1.0" - has "^1.0.1" - object-inspect "~1.4.0" - quote-stream "~1.0.2" - readable-stream "~2.3.3" - shallow-copy "~0.0.1" - static-eval "^2.0.0" - through2 "~2.0.3" - "statuses@>= 1.4.0 < 2": version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= statuses@~1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + integrity sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4= statuses@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" + integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= stream-array@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/stream-array/-/stream-array-1.1.2.tgz#9e5f7345f2137c30ee3b498b9114e80b52bb7eb5" + integrity sha1-nl9zRfITfDDuO0mLkRToC1K7frU= dependencies: readable-stream "~2.1.0" stream-browserify@^2.0.0, stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" + integrity sha1-ZiZu5fm9uZQKTkUUyvtDu3Hlyds= dependencies: inherits "~2.0.1" readable-stream "^2.0.2" @@ -9392,6 +10732,7 @@ stream-browserify@^2.0.0, stream-browserify@^2.0.1: stream-combiner2@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= dependencies: duplexer2 "~0.1.0" readable-stream "^2.0.2" @@ -9399,12 +10740,14 @@ stream-combiner2@^1.1.1: stream-combiner@~0.0.4: version "0.0.4" resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + integrity sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ= dependencies: duplexer "~0.1.1" stream-each@^1.1.0: version "1.2.2" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.2.tgz#8e8c463f91da8991778765873fe4d960d8f616bd" + integrity sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA== dependencies: end-of-stream "^1.1.0" stream-shift "^1.0.0" @@ -9412,6 +10755,7 @@ stream-each@^1.1.0: stream-http@^2.0.0, stream-http@^2.7.2: version "2.8.0" resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.0.tgz#fd86546dac9b1c91aff8fc5d287b98fafb41bc10" + integrity sha512-sZOFxI/5xw058XIRHl4dU3dZ+TTOIGJR78Dvo0oEAejIt4ou27k+3ne1zYmCV+v7UucbxIFQuOgnkTVHh8YPnw== dependencies: builtin-status-codes "^3.0.0" inherits "^2.0.1" @@ -9422,10 +10766,12 @@ stream-http@^2.0.0, stream-http@^2.7.2: 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= stream-splicer@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.0.tgz#1b63be438a133e4b671cc1935197600175910d83" + integrity sha1-G2O+Q4oTPktnHMGTUZdgAXWRDYM= dependencies: inherits "^2.0.1" readable-stream "^2.0.2" @@ -9433,14 +10779,17 @@ stream-splicer@^2.0.0: strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= string-template@~0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= string-width@^1.0.0, string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= dependencies: code-point-at "^1.0.0" is-fullwidth-code-point "^1.0.0" @@ -9449,6 +10798,7 @@ string-width@^1.0.0, string-width@^1.0.1, string-width@^1.0.2: string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== dependencies: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" @@ -9456,6 +10806,7 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: string.prototype.padend@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.0.0.tgz#f3aaef7c1719f170c5eab1c32bf780d96e21f2f0" + integrity sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA= dependencies: define-properties "^1.1.2" es-abstract "^1.4.3" @@ -9464,16 +10815,19 @@ string.prototype.padend@^3.0.0: 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.0.0, string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + integrity sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ== dependencies: safe-buffer "~5.1.0" stringify-entities@^1.0.1: version "1.3.1" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.1.tgz#b150ec2d72ac4c1b5f324b51fb6b28c9cdff058c" + integrity sha1-sVDsLXKsTBtfMktR+2soyc3/BYw= dependencies: character-entities-html4 "^1.0.0" character-entities-legacy "^1.0.0" @@ -9483,6 +10837,7 @@ stringify-entities@^1.0.1: stringify-entities@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== dependencies: character-entities-html4 "^1.0.0" character-entities-legacy "^1.0.0" @@ -9492,6 +10847,7 @@ stringify-entities@^1.3.1: stringify-object@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.2.2.tgz#9853052e5a88fb605a44cd27445aa257ad7ffbcd" + integrity sha512-O696NF21oLiDy8PhpWu8AEqoZHw++QW6mUv0UvKZe8gWSdSvMXkiLufK7OmnP27Dro4GU5kb9U7JIO0mBuCRQg== dependencies: get-own-enumerable-property-symbols "^2.0.1" is-obj "^1.0.1" @@ -9500,68 +10856,82 @@ stringify-object@^3.2.2: stringstream@~0.0.4, stringstream@~0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + integrity sha1-TkhM1N5aC7vuGORjB3EKioFiGHg= strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= dependencies: ansi-regex "^3.0.0" strip-bom-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-bom-string/-/strip-bom-string-1.0.0.tgz#e5211e9224369fbb81d633a2f00044dc8cedad92" + integrity sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI= strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= dependencies: is-utf8 "^0.2.0" strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= strip-indent@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" + integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= dependencies: get-stdin "^4.0.1" strip-indent@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" + integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= style-search@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" + integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= stylelint-config-recommended@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" + integrity sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA== stylelint-config-standard@^18.0.0: version "18.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.1.0.tgz#e4d977063f5bca77970033d2f76941c3cc19fd9c" + integrity sha512-kjpxnt1fu56ZJk+8wETz0Hr/3vvpj5KfQoBRLVeAJcFtCZBxF5kUDXGqsn4h2ZVyvNTf+2lOfX1dfok5ZOltqg== dependencies: stylelint-config-recommended "^2.0.0" stylelint@^8.4.0: version "8.4.0" resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3" + integrity sha512-56hPH5mTFnk8LzlEuTWq0epa34fHuS54UFYQidBOFt563RJBNi1nz1F2HK2MoT1X1waq47milvRsRahFCCJs/Q== dependencies: autoprefixer "^7.1.2" balanced-match "^1.0.0" @@ -9606,66 +10976,78 @@ stylelint@^8.4.0: subarg@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= dependencies: minimist "^1.1.0" sugarss@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44" + integrity sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA== dependencies: postcss "^6.0.14" supercluster@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-4.1.1.tgz#cf13c3b28a3fb3db5290bfad7f524e244bd4ce78" + integrity sha512-sF0FfUOPFp96DKzwWFLeQOEqqKu2PpcesxAFeFsknA/q7g7igVVn/p3NI2XHEghNSyDAqunKNKqAbqNO8+7NDQ== dependencies: kdbush "^2.0.1" supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" + integrity sha1-U10EXOa2Nj+kARcIRimZXp3zJMc= supports-color@^3.1.2, supports-color@^3.2.3: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha1-ZawFBLOVQXHYpklGsq48u4pfVPY= dependencies: has-flag "^1.0.0" supports-color@^4.1.0, supports-color@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= dependencies: has-flag "^2.0.0" supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: version "5.4.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== dependencies: has-flag "^3.0.0" supports-color@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" + integrity sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q== dependencies: has-flag "^3.0.0" svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" + integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= symbol-tree@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.2.tgz#ae27db38f660a7ae2e1c3b7d1bc290819b8519e6" + integrity sha1-rifbOPZgp64uHDt9G8KQgZuFGeY= syntax-error@^1.1.1: version "1.4.0" resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" + integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== dependencies: acorn-node "^1.2.0" table@^4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" + integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== dependencies: ajv "^5.2.3" ajv-keywords "^2.1.0" @@ -9677,6 +11059,7 @@ table@^4.0.1: tap-mocha-reporter@^3.0.6: version "3.0.6" resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz#12abe97ff409a5a6ecc3d70b6dba34d82184a770" + integrity sha512-UImgw3etckDQCoqZIAIKcQDt0w1JLVs3v0yxLlmwvGLZl6MGFxF7JME5PElXjAoDklVDU42P3vVu5jgr37P4Yg== dependencies: color-support "^1.1.0" debug "^2.1.3" @@ -9692,6 +11075,7 @@ tap-mocha-reporter@^3.0.6: tap-parser@^5.1.0: version "5.4.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-5.4.0.tgz#6907e89725d7b7fa6ae41ee2c464c3db43188aec" + integrity sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA== dependencies: events-to-array "^1.0.1" js-yaml "^3.2.7" @@ -9701,6 +11085,7 @@ tap-parser@^5.1.0: tap-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" + integrity sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA== dependencies: events-to-array "^1.0.1" js-yaml "^3.2.7" @@ -9709,6 +11094,7 @@ tap-parser@^7.0.0: tap@^11.1.2: version "11.1.2" resolved "https://registry.yarnpkg.com/tap/-/tap-11.1.2.tgz#93d3c89b78b67ac659b58dd3f5db2df0445bfe2a" + integrity sha512-uQ4OJ+/2+KJU2Jotozsb35wQVhOweqKb14lz3Md6AZcsOhZ9kYkvxn6h+f1WusBnG/Uk5vBLWvQRb7lgr4Z7Wg== dependencies: bind-obj-methods "^1.0.0" bluebird "^3.5.1" @@ -9743,14 +11129,17 @@ tap@^11.1.2: tapable@^0.2.7: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" + integrity sha1-mTcqXJmb8t8WCvwNdL7U9HlIzSI= tapable@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.0.0.tgz#cbb639d9002eed9c6b5975eb20598d7936f1f9f2" + integrity sha512-dQRhbNQkRnaqauC7WqSJ21EEksgT0fYZX2lqXzGkpo8JNig9zGZTYoMGvyI2nWmXlE2VSVXVDu7wLVGu/mQEsg== tar-fs@^1.13.0: version "1.16.0" resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-1.16.0.tgz#e877a25acbcc51d8c790da1c57c9cf439817b896" + integrity sha512-I9rb6v7mjWLtOfCau9eH5L7sLJyU2BnxtEZRQ5Mt+eRKmf1F0ohXmT/Jc3fr52kDvjJ/HV5MH3soQfPL5bQ0Yg== dependencies: chownr "^1.0.1" mkdirp "^0.5.1" @@ -9760,6 +11149,7 @@ tar-fs@^1.13.0: tar-pack@^3.4.0: version "3.4.1" resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" + integrity sha512-PPRybI9+jM5tjtCbN2cxmmRU7YmqT3Zv/UDy48tAh2XRkLa9bAORtSWLkVc13+GJF+cdTh1yEnHEk3cpTaL5Kg== dependencies: debug "^2.2.0" fstream "^1.0.10" @@ -9773,6 +11163,7 @@ tar-pack@^3.4.0: tar-stream@^1.1.2: version "1.5.5" resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-1.5.5.tgz#5cad84779f45c83b1f2508d96b09d88c7218af55" + integrity sha512-mQdgLPc/Vjfr3VWqWbfxW8yQNiJCbAZ+Gf6GDu1Cy0bdb33ofyiNGBtAY96jHFhDuivCwgW1H9DgTON+INiXgg== dependencies: bl "^1.0.0" end-of-stream "^1.0.0" @@ -9782,6 +11173,7 @@ tar-stream@^1.1.2: tar@^2.0.0, tar@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE= dependencies: block-stream "*" fstream "^1.0.2" @@ -9790,6 +11182,7 @@ tar@^2.0.0, tar@^2.2.1: tar@^4: version "4.4.6" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b" + integrity sha512-tMkTnh9EdzxyfW+6GK6fCahagXsnYk6kE6S9Gr9pjVdys769+laCTbodXDhPAjzVtEBazRgP0gYqOjnk9dQzLg== dependencies: chownr "^1.0.1" fs-minipass "^1.2.5" @@ -9802,10 +11195,12 @@ tar@^4: temp-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" + integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" + integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= dependencies: os-tmpdir "^1.0.0" rimraf "~2.2.6" @@ -9813,6 +11208,7 @@ temp@0.8.3: tempfile@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" + integrity sha1-W8xOrsxKsscH2LwR2ZzMmiyyh/I= dependencies: os-tmpdir "^1.0.0" uuid "^2.0.1" @@ -9820,6 +11216,7 @@ tempfile@^1.1.1: tempy@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/tempy/-/tempy-0.2.1.tgz#9038e4dbd1c201b74472214179bc2c6f7776e54c" + integrity sha512-LB83o9bfZGrntdqPuRdanIVCPReam9SOZKW0fOy5I9X3A854GGWi0tjCqoXEk84XIEYBc/x9Hq3EFop/H5wJaw== dependencies: temp-dir "^1.0.0" unique-string "^1.0.0" @@ -9827,12 +11224,14 @@ tempy@^0.2.1: term-size@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk= dependencies: execa "^0.7.0" terminal-table@0.0.12: version "0.0.12" resolved "https://registry.yarnpkg.com/terminal-table/-/terminal-table-0.0.12.tgz#7b56d009aa6828dfdd10f11b654e79c062965fa2" + integrity sha1-e1bQCapoKN/dEPEbZU55wGKWX6I= dependencies: colors "^1.0.3" eastasianwidth "^0.1.0" @@ -9840,6 +11239,7 @@ terminal-table@0.0.12: test-exclude@^4.1.0, test-exclude@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" + integrity sha512-8hMFzjxbPv6xSlwGhXSvOMJ/vTy3bkng+2pxmf6E1z6VF7I9nIyNfvHtaw+NBPgvz647gADBbMSbwLfZYppT/w== dependencies: arrify "^1.0.1" micromatch "^2.3.11" @@ -9850,18 +11250,22 @@ test-exclude@^4.1.0, test-exclude@^4.2.0: text-encoding@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" + integrity sha1-45mpgiV6J22uQou5KEXLcb3CbRk= text-extensions@^1.0.0: version "1.7.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" + integrity sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg== text-table@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= through2-filter@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-2.0.0.tgz#60bc55a0dacb76085db1f9dae99ab43f83d622ec" + integrity sha1-YLxVoNrLdghdsfna6Zq0P4PWIuw= dependencies: through2 "~2.0.0" xtend "~4.0.0" @@ -9869,13 +11273,15 @@ through2-filter@^2.0.0: through2@^0.6.3: version "0.6.5" resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" + integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= dependencies: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0, through2@~2.0.3: +through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" + integrity sha1-AARWmzfHx0ujnEPzzteNGtlBQL4= dependencies: readable-stream "^2.1.5" xtend "~4.0.1" @@ -9883,34 +11289,41 @@ through2@^2.0.0, through2@^2.0.1, through2@^2.0.3, through2@~2.0.0, through2@~2. through@2, "through@>=2.2.7 <3", through@^2.3.6, through@~2.3, through@~2.3.1: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= time-stamp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" + integrity sha1-lcakRTDhW6jW9KPsuMOj+sRto1c= timed-out@^4.0.0, timed-out@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= timers-browserify@^1.0.1: version "1.4.2" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" + integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= dependencies: process "~0.11.0" timers-browserify@^2.0.4: version "2.0.6" resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.6.tgz#241e76927d9ca05f4d959819022f5b3664b64bae" + integrity sha512-HQ3nbYRAowdVd0ckGFvmJPPCOH/CHleFN/Y0YQCX1DVaB7t+KFvisuyN09fuP8Jtp1CpfSh8O8bMkHbdbPe6Pw== dependencies: setimmediate "^1.0.4" tiny-emitter@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/tiny-emitter/-/tiny-emitter-2.0.2.tgz#82d27468aca5ade8e5fd1e6d22b57dd43ebdfb7c" + integrity sha512-2NM0auVBGft5tee/OxP4PI3d8WItkDM+fPnaRAVo6xTDI2knbz9eC5ArWGqtGlYqiH3RU5yMpdyTTO7MguC4ow== tiny-lr@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== dependencies: body "^5.1.0" debug "^3.1.0" @@ -9922,20 +11335,24 @@ tiny-lr@^1.1.0: tinyqueue@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" + integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== tmatch@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-3.1.0.tgz#701264fd7582d0144a80c85af3358cca269c71e3" + integrity sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ== tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== dependencies: os-tmpdir "~1.0.2" to-absolute-glob@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" + integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= dependencies: is-absolute "^1.0.0" is-negated-glob "^1.0.0" @@ -9943,20 +11360,24 @@ to-absolute-glob@^2.0.0: to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= to-fast-properties@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= dependencies: kind-of "^3.0.2" to-regex-range@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= dependencies: is-number "^3.0.0" repeat-string "^1.6.1" @@ -9964,6 +11385,7 @@ to-regex-range@^2.1.0: to-regex@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.1.tgz#15358bee4a2c83bd76377ba1dc049d0f18837aae" + integrity sha1-FTWL7kosg712N3uh3ASdDxiDeq4= dependencies: define-property "^0.2.5" extend-shallow "^2.0.1" @@ -9972,6 +11394,7 @@ to-regex@^3.0.1: to-regex@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== dependencies: define-property "^2.0.2" extend-shallow "^3.0.2" @@ -9981,22 +11404,26 @@ to-regex@^3.0.2: to-through@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" + integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= dependencies: through2 "^2.0.3" toposort@^1.0.0: version "1.0.6" resolved "https://registry.yarnpkg.com/toposort/-/toposort-1.0.6.tgz#c31748e55d210effc00fdcdc7d6e68d7d7bb9cec" + integrity sha1-wxdI5V0hDv/AD9zcfW5o19e7nOw= tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + integrity sha1-C2GKVWW23qkL80JdBNVe3EdadWE= dependencies: punycode "^1.4.1" tough-cookie@^2.3.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" + integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== dependencies: psl "^1.1.24" punycode "^1.4.1" @@ -10004,92 +11431,113 @@ tough-cookie@^2.3.3: tr46@^1.0.0, tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" + integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= dependencies: punycode "^2.1.0" trim-lines@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.0.tgz#9926d03ede13ba18f7d42222631fb04c79ff26fe" + integrity sha1-mSbQPt4Tuhj31CIiYx+wTHn/Jv4= trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" + integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= trim-newlines@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" + integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= trim-off-newlines@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-off-newlines/-/trim-off-newlines-1.0.1.tgz#9f9ba9d9efa8764c387698bcbfeb2c848f11adb3" + integrity sha1-n5up2e+odkw4dpi8v+sshI8RrbM= trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= trim-trailing-lines@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.0.tgz#7aefbb7808df9d669f6da2e438cac8c46ada7684" + integrity sha1-eu+7eAjfnWafbaLkOMrIxGradoQ= trim@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= trivial-deferred@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trivial-deferred/-/trivial-deferred-1.0.1.tgz#376d4d29d951d6368a6f7a0ae85c2f4d5e0658f3" + integrity sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM= trough@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" + integrity sha1-qf2LA5Swro//guBjOgo2zK1bX4Y= tsame@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/tsame/-/tsame-1.1.2.tgz#5ce0002acf685942789c63018797a2aa5e6b03c5" + integrity sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw== tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= tty-browserify@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" + integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= dependencies: safe-buffer "^5.0.1" tunnel-agent@~0.4.1: version "0.4.3" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" + integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= dependencies: prelude-ls "~1.1.2" type-detect@^4.0.5: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= ua-parser-js@^0.7.9: version "0.7.17" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" + integrity sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g== uglify-es@^3.3.4, uglify-es@^3.3.7: version "3.3.10" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" + integrity sha512-rPzPisCzW68Okj1zNrfa2dR9uEm43SevDmpR6FChoZABFk9dANGnzzBMgHYUXI3609//63fnVkyQ1SQmAMyjww== dependencies: commander "~2.14.1" source-map "~0.6.1" @@ -10097,6 +11545,7 @@ uglify-es@^3.3.4, uglify-es@^3.3.7: uglify-js@3.3.x: version "3.3.11" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.3.11.tgz#e9d058b20715138bb4e8e5cae2ea581686bdaae3" + integrity sha512-AKLsYcdV+sS5eAE4NtVXF6f2u/DCQynQm0jTGxF261+Vltu1dYNuHzjqDmk11gInj+H/zJIM2EAwXG3MzPb3VA== dependencies: commander "~2.14.1" source-map "~0.6.1" @@ -10104,6 +11553,7 @@ uglify-js@3.3.x: uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= dependencies: source-map "~0.5.1" yargs "~3.10.0" @@ -10113,6 +11563,7 @@ uglify-js@^2.6, uglify-js@^2.8.29: uglify-js@^3.3.16: version "3.4.6" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" + integrity sha512-O1D7L6WcOzS1qW2ehopEm4cWm5yA6bQBozlks8jO8ODxYCy4zv+bR/la4Lwp01tpkYGNonnpXvUpYtrvSu8Yzg== dependencies: commander "~2.16.0" source-map "~0.6.1" @@ -10120,10 +11571,12 @@ uglify-js@^3.3.16: uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= uglifyjs-webpack-plugin@^0.4.6: version "0.4.6" resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= dependencies: source-map "^0.5.6" uglify-js "^2.8.29" @@ -10132,6 +11585,7 @@ uglifyjs-webpack-plugin@^0.4.6: uglifyjs-webpack-plugin@^1.2.4: version "1.2.7" resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.7.tgz#57638dd99c853a1ebfe9d97b42160a8a507f9d00" + integrity sha512-1VicfKhCYHLS8m1DCApqBhoulnASsEoJ/BvpUpP4zoNAPpKzdH+ghk0olGJMmwX2/jprK2j3hAHdUbczBSy2FA== dependencies: cacache "^10.0.4" find-cache-dir "^1.0.0" @@ -10145,14 +11599,17 @@ uglifyjs-webpack-plugin@^1.2.4: uid-number@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + integrity sha1-DqEOgDXo61uOREnwbaHHMGY7qoE= umd@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e" + integrity sha1-iuVW4RAR9jwllnCKiDclnwGz1g4= unassert@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/unassert/-/unassert-1.5.1.tgz#cbc88ec387417c5a5e4c02d3cd07be98bd75ff76" + integrity sha1-y8iOw4dBfFpeTALTzQe+mL11/3Y= dependencies: acorn "^4.0.0" call-matcher "^1.0.1" @@ -10165,10 +11622,12 @@ unassert@^1.5.1: unc-path-regex@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" + integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= unherit@^1.0.4: version "1.1.0" resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.0.tgz#6b9aaedfbf73df1756ad9e316dd981885840cd7d" + integrity sha1-a5qu379z3xdWrZ4xbdmBiFhAzX0= dependencies: inherits "^2.0.1" xtend "^4.0.1" @@ -10176,6 +11635,7 @@ unherit@^1.0.4: unicode-length@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/unicode-length/-/unicode-length-1.0.3.tgz#5ada7a7fed51841a418a328cf149478ac8358abb" + integrity sha1-Wtp6f+1RhBpBijKM8UlHisg1irs= dependencies: punycode "^1.3.2" strip-ansi "^3.0.1" @@ -10183,6 +11643,7 @@ unicode-length@^1.0.0: unified@^6.0.0: version "6.1.6" resolved "https://registry.yarnpkg.com/unified/-/unified-6.1.6.tgz#5ea7f807a0898f1f8acdeefe5f25faa010cc42b1" + integrity sha512-pW2f82bCIo2ifuIGYcV12fL96kMMYgw7JKVEgh7ODlrM9rj6vXSY3BV+H6lCcv1ksxynFf582hwWLnA1qRFy4w== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -10195,6 +11656,7 @@ unified@^6.0.0: unified@^6.1.6: version "6.2.0" resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== dependencies: bail "^1.0.0" extend "^3.0.0" @@ -10206,6 +11668,7 @@ unified@^6.1.6: union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" + integrity sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ= dependencies: arr-union "^3.1.0" get-value "^2.0.6" @@ -10215,26 +11678,31 @@ union-value@^1.0.0: uniq@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" + integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= uniqs@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" + integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= unique-filename@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/unique-filename/-/unique-filename-1.1.0.tgz#d05f2fe4032560871f30e93cbe735eea201514f3" + integrity sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM= dependencies: unique-slug "^2.0.0" unique-slug@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/unique-slug/-/unique-slug-2.0.0.tgz#db6676e7c7cc0629878ff196097c78855ae9f4ab" + integrity sha1-22Z258fMBimHj/GWCXx4hVrp9Ks= dependencies: imurmurhash "^0.1.4" unique-stream@^2.0.2: version "2.2.1" resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.2.1.tgz#5aa003cfbe94c5ff866c4e7d668bb1c4dbadb369" + integrity sha1-WqADz76Uxf+GbE59ZouxxNuts2k= dependencies: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" @@ -10242,92 +11710,110 @@ unique-stream@^2.0.2: unique-string@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo= dependencies: crypto-random-string "^1.0.0" unist-builder@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.2.tgz#8c3b9903ef64bcfb117dd7cf6a5d98fc1b3b27b6" + integrity sha1-jDuZA+9kvPsRfdfPal2Y/Bs7J7Y= dependencies: object-assign "^4.1.0" unist-builder@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.3.tgz#ab0f9d0f10936b74f3e913521955b0478e0ff036" + integrity sha512-/KB8GEaoeHRyIqClL+Kam+Y5NWJ6yEiPsAfv1M+O1p+aKGgjR89WwoEHKTyOj17L6kAlqtKpAgv2nWvdbQDEig== dependencies: object-assign "^4.1.0" unist-util-find-all-after@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz#4e5512abfef7e0616781aecf7b1ed751c00af908" + integrity sha1-TlUSq/734GFnga7Pex7XUcAK+Qg= dependencies: unist-util-is "^2.0.0" unist-util-generated@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.1.tgz#99f16c78959ac854dee7c615c291924c8bf4de7f" + integrity sha1-mfFseJWayFTe58YVwpGSTIv03n8= unist-util-is@^2.0.0, unist-util-is@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.1.tgz#0c312629e3f960c66e931e812d3d80e77010947b" + integrity sha1-DDEmKeP5YMZukx6BLT2A53AQlHs= unist-util-is@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.2.tgz#1193fa8f2bfbbb82150633f3a8d2eb9a1c1d55db" + integrity sha512-YkXBK/H9raAmG7KXck+UUpnKiNmUdB+aBGrknfQ4EreE1banuzrKABx3jP6Z5Z3fMSPMQQmeXBlKpCbMwBkxVw== unist-util-modify-children@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-modify-children/-/unist-util-modify-children-1.1.1.tgz#66d7e6a449e6f67220b976ab3cb8b5ebac39e51d" + integrity sha1-ZtfmpEnm9nIguXarPLi166w55R0= dependencies: array-iterate "^1.0.0" unist-util-position@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.0.tgz#e6e1e03eeeb81c5e1afe553e8d4adfbd7c0d8f82" + integrity sha1-5uHgPu64HF4a/lU+jUrfvXwNj4I= unist-util-remove-position@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.1.tgz#5a85c1555fc1ba0c101b86707d15e50fa4c871bb" + integrity sha1-WoXBVV/BugwQG4ZwfRXlD6TIcbs= dependencies: unist-util-visit "^1.1.0" unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.1.tgz#3ccbdc53679eed6ecf3777dd7f5e3229c1b6aa3c" + integrity sha1-PMvcU2ee7W7PN3fdf14yKcG2qjw= unist-util-visit-parents@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.0.1.tgz#63fffc8929027bee04bfef7d2cce474f71cb6217" + integrity sha512-6B0UTiMfdWql4cQ03gDTCSns+64Zkfo2OCbK31Ov0uMizEz+CJeAp0cgZVb5Fhmcd7Bct2iRNywejT0orpbqUA== dependencies: unist-util-is "^2.1.2" unist-util-visit@^1.0.0, unist-util-visit@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.3.0.tgz#41ca7c82981fd1ce6c762aac397fc24e35711444" + integrity sha512-9ntYcxPFtl44gnwXrQKZ5bMqXMY0ZHzUpqMFiU4zcc8mmf/jzYm8GhYgezuUlX4cJIM1zIDYaO6fG/fI+L6iiQ== dependencies: unist-util-is "^2.1.1" unist-util-visit@^1.3.0: version "1.4.0" resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.0.tgz#1cb763647186dc26f5e1df5db6bd1e48b3cc2fb1" + integrity sha512-FiGu34ziNsZA3ZUteZxSFaczIjGmksfSgdKqBfOejrrfzyUy5b7YrlzT1Bcvi+djkYDituJDy2XB7tGTeBieKw== dependencies: unist-util-visit-parents "^2.0.0" universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" + integrity sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc= unix-crypt-td-js@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unix-crypt-td-js/-/unix-crypt-td-js-1.0.0.tgz#1c0824150481bc7a01d49e98f1ec668d82412f3b" + integrity sha1-HAgkFQSBvHoB1J6Y8exmjYJBLzs= unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= dependencies: has-value "^0.3.1" isobject "^3.0.0" @@ -10335,18 +11821,22 @@ unset-value@^1.0.0: unzip-response@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= upath@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" + integrity sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw== upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" + integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== update-notifier@^2.1.0: version "2.3.0" resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" + integrity sha1-TognpruRUUCrCTVZ1wFOPruDdFE= dependencies: boxen "^1.2.1" chalk "^2.0.1" @@ -10361,40 +11851,48 @@ update-notifier@^2.1.0: upper-case-first@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= dependencies: upper-case "^1.1.1" upper-case@^1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= url-parse-lax@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= dependencies: prepend-http "^1.0.1" url-parse-lax@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= dependencies: prepend-http "^2.0.0" url-template@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/url-template/-/url-template-2.0.8.tgz#fc565a3cccbff7730c775f5641f9555791439f21" + integrity sha1-/FZaPMy/93MMd19WQflVV5FDnyE= url-to-options@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" + integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= url@^0.11.0, url@~0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= dependencies: punycode "1.3.2" querystring "0.2.0" @@ -10402,6 +11900,7 @@ url@^0.11.0, url@~0.11.0: use@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/use/-/use-2.0.2.tgz#ae28a0d72f93bf22422a18a2e379993112dec8e8" + integrity sha1-riig1y+TvyJCKhii43mZMRLeyOg= dependencies: define-property "^0.2.5" isobject "^3.0.0" @@ -10410,10 +11909,12 @@ use@^2.0.0: util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= util.promisify@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.0.tgz#440f7165a459c9a16dc145eb8e72f35687097030" + integrity sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA== dependencies: define-properties "^1.1.2" object.getownpropertydescriptors "^2.0.3" @@ -10421,36 +11922,44 @@ util.promisify@1.0.0: util@0.10.3, util@^0.10.3, util@~0.10.1: version "0.10.3" resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: inherits "2.0.1" utila@~0.3: version "0.3.3" resolved "https://registry.yarnpkg.com/utila/-/utila-0.3.3.tgz#d7e8e7d7e309107092b05f8d9688824d633a4226" + integrity sha1-1+jn1+MJEHCSsF+NloiCTWM6QiY= utila@~0.4: version "0.4.0" resolved "https://registry.yarnpkg.com/utila/-/utila-0.4.0.tgz#8a16a05d445657a3aea5eecc5b12a4fa5379772c" + integrity sha1-ihagXURWV6Oupe7MWxKk+lN5dyw= utils-merge@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.0.tgz#0294fb922bb9375153541c4f7096231f287c8af8" + integrity sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg= utils-merge@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= uuid@^2.0.1: version "2.0.3" resolved "https://registry.yarnpkg.com/uuid/-/uuid-2.0.3.tgz#67e2e863797215530dff318e5bf9dcebfd47b21a" + integrity sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho= uuid@^3.0.0, uuid@^3.1.0: version "3.2.1" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" + integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" + integrity sha1-KAS6vnEq0zeUWaz74kdGqywwP7w= dependencies: spdx-correct "~1.0.0" spdx-expression-parse "~1.0.0" @@ -10458,14 +11967,17 @@ validate-npm-package-license@^3.0.1: value-or-function@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" + integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= vary@^1: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= verror@1.10.0: version "1.10.0" resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= dependencies: assert-plus "^1.0.0" core-util-is "1.0.2" @@ -10474,16 +11986,19 @@ verror@1.10.0: vfile-location@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.2.tgz#d3675c59c877498e492b4756ff65e4af1a752255" + integrity sha1-02dcWch3SY5JK0dW/2Xkrxp1IlU= vfile-message@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.0.0.tgz#a6adb0474ea400fa25d929f1d673abea6a17e359" + integrity sha512-HPREhzTOB/sNDc9/Mxf8w0FmHnThg5CRSJdR9VRFkD2riqYWs+fuXlj5z8mIpv2LrD7uU41+oPWFOL4Mjlf+dw== dependencies: unist-util-stringify-position "^1.1.1" vfile-reporter@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-4.0.0.tgz#ea6f0ae1342f4841573985e05f941736f27de9da" + integrity sha1-6m8K4TQvSEFXOYXgX5QXNvJ96do= dependencies: repeat-string "^1.5.0" string-width "^1.0.0" @@ -10494,14 +12009,17 @@ vfile-reporter@^4.0.0: vfile-sort@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.1.1.tgz#03acdc8a4d7870ecf0e35499f095ddd9d14cbc41" + integrity sha512-+fpTWKkVHwI6VF2xtkDTuCA6cH4UPLAxh+KxfU8g8pC0do5RSZCk1HXTTtMJguW0t5jC0PC19owjUZX9SGQ9tw== vfile-statistics@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.0.tgz#02104c60fdeed1d11b1f73ad65330b7634b3d895" + integrity sha1-AhBMYP3u0dEbH3OtZTMLdjSz2JU= vfile@^2.0.0, vfile@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== dependencies: is-buffer "^1.1.4" replace-ext "1.0.0" @@ -10511,6 +12029,7 @@ vfile@^2.0.0, vfile@^2.3.0: vinyl-fs@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" + integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== dependencies: fs-mkdirp-stream "^1.0.0" glob-stream "^6.1.0" @@ -10533,6 +12052,7 @@ vinyl-fs@^3.0.2: vinyl-sourcemap@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" + integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= dependencies: append-buffer "^1.0.2" convert-source-map "^1.5.0" @@ -10545,6 +12065,7 @@ vinyl-sourcemap@^1.1.0: vinyl@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c" + integrity sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw= dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -10556,6 +12077,7 @@ vinyl@^2.0.0: vinyl@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" + integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== dependencies: clone "^2.1.1" clone-buffer "^1.0.0" @@ -10567,16 +12089,19 @@ vinyl@^2.1.0: vlq@^0.2.1, vlq@^0.2.2: version "0.2.3" resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" + integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== vm-browserify@0.0.4, vm-browserify@~0.0.1: version "0.0.4" resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73" + integrity sha1-XX6kW7755Kb/ZflUOOCofDV9WnM= dependencies: indexof "0.0.1" vt-pbf@^3.0.1: version "3.1.0" resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.0.tgz#d7e63f585b362cbff6b84fcd052c159112e0acc7" + integrity sha512-UUCGPkpT1P/bm3R3/HX0SCnRSto44xXx0WuLFVG6C7KspdfQfU+84etoO6cITAGCdq8V5DjuWfDhvk/pyTyt3Q== dependencies: "@mapbox/point-geometry" "0.1.0" "@mapbox/vector-tile" "^1.3.0" @@ -10585,6 +12110,7 @@ vt-pbf@^3.0.1: vue-template-compiler@^2.5.16: version "2.5.17" resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.5.17.tgz#52a4a078c327deb937482a509ae85c06f346c3cb" + integrity sha512-63uI4syCwtGR5IJvZM0LN5tVsahrelomHtCxvRkZPJ/Tf3ADm1U1wG6KWycK3qCfqR+ygM5vewUvmJ0REAYksg== dependencies: de-indent "^1.0.2" he "^1.1.0" @@ -10592,12 +12118,14 @@ vue-template-compiler@^2.5.16: w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" + integrity sha1-gqwr/2PZUOqeMYmlimViX+3xkEU= dependencies: browser-process-hrtime "^0.1.2" watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" + integrity sha1-ShRyvLuVK9Cpu0A2gB+VTfs5+qw= dependencies: async "^2.1.2" chokidar "^1.7.0" @@ -10606,26 +12134,31 @@ watchpack@^1.4.0: web-namespaces@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.1.tgz#742d9fff61ff84f4164f677244f42d29c10c451d" + integrity sha1-dC2f/2H/hPQWT2dyRPQtKcEMRR0= webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" + integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== webpack-format-messages@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/webpack-format-messages/-/webpack-format-messages-1.0.2.tgz#875dba643e4a59af7183413ed79dea3949b51655" + integrity sha1-h126ZD5KWa9xg0E+153qOUm1FlU= dependencies: clorox "^1.0.3" webpack-merge@^4.1.2: version "4.1.4" resolved "https://registry.yarnpkg.com/webpack-merge/-/webpack-merge-4.1.4.tgz#0fde38eabf2d5fd85251c24a5a8c48f8a3f4eb7b" + integrity sha512-TmSe1HZKeOPey3oy1Ov2iS3guIZjWvMT2BBJDzzT5jScHTjVC3mpjJofgueEzaEd6ibhxRDD6MIblDr8tzh8iQ== dependencies: lodash "^4.17.5" webpack-sources@^1.0.1, webpack-sources@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.1.0.tgz#a101ebae59d6507354d71d8013950a3a8b7a5a54" + integrity sha512-aqYp18kPphgoO5c/+NaUvEeACtZjMESmDChuD3NBciVpah3XpMEU9VAAtIaB1BsfJWWTSdv8Vv1m3T0aRk2dUw== dependencies: source-list-map "^2.0.0" source-map "~0.6.1" @@ -10633,6 +12166,7 @@ webpack-sources@^1.0.1, webpack-sources@^1.1.0: webpack@^3.11.0: version "3.11.0" resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.11.0.tgz#77da451b1d7b4b117adaf41a1a93b5742f24d894" + integrity sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg== dependencies: acorn "^5.0.0" acorn-dynamic-import "^2.0.0" @@ -10660,6 +12194,7 @@ webpack@^3.11.0: websocket-driver@>=0.5.1: version "0.7.0" resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.0.tgz#0caf9d2d755d93aee049d4bdd0d3fe2cca2a24eb" + integrity sha1-DK+dLXVdk67gSdS90NP+LMoqJOs= dependencies: http-parser-js ">=0.4.0" websocket-extensions ">=0.1.1" @@ -10667,28 +12202,34 @@ websocket-driver@>=0.5.1: websocket-extensions@>=0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" + integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== wgs84@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" + integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" + integrity sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw== dependencies: iconv-lite "0.4.19" whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" + integrity sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ= whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" + integrity sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew== whatwg-url@^6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" + integrity sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.0" @@ -10697,6 +12238,7 @@ whatwg-url@^6.4.0: whatwg-url@^6.4.1: version "6.5.0" resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" + integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -10705,56 +12247,68 @@ whatwg-url@^6.4.1: which-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" + integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-pm-runs@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" + integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= which@1, which@^1.2.4, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== dependencies: isexe "^2.0.0" wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + integrity sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w== dependencies: string-width "^1.0.2" widest-line@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" + integrity sha1-AUKk6KJD+IgsAjOqDgKBqnYVInM= dependencies: string-width "^2.1.1" window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= window-size@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= wordwrap@~0.0.2: version "0.0.3" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= wordwrap@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= worker-farm@^1.5.2: version "1.5.2" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.5.2.tgz#32b312e5dc3d5d45d79ef44acc2587491cd729ae" + integrity sha512-XxiQ9kZN5n6mmnW+mFJ+wXjNNI/Nx4DIdaAKLX1Bn6LYBWlN/zaBhu34DQYPZ1AJobQuu67S2OfDdNSVULvXkQ== dependencies: errno "^0.1.4" xtend "^4.0.1" @@ -10762,12 +12316,14 @@ worker-farm@^1.5.2: worker-farm@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/worker-farm/-/worker-farm-1.6.0.tgz#aecc405976fab5a95526180846f0dba288f3a4a0" + integrity sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ== dependencies: errno "~0.1.7" wrap-ansi@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= dependencies: string-width "^1.0.1" strip-ansi "^3.0.1" @@ -10775,10 +12331,12 @@ wrap-ansi@^2.0.0: wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= write-file-atomic@^1.1.4: version "1.3.4" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-1.3.4.tgz#f807a4f0b1d9e913ae7a48112e6cc3af1991b45f" + integrity sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8= dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -10787,6 +12345,7 @@ write-file-atomic@^1.1.4: write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + integrity sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA== dependencies: graceful-fs "^4.1.11" imurmurhash "^0.1.4" @@ -10795,12 +12354,14 @@ write-file-atomic@^2.0.0, write-file-atomic@^2.3.0: write@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" + integrity sha1-X8A4KOJkzqP+kUVUdvejxWbLB1c= dependencies: mkdirp "^0.5.1" ws@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" + integrity sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA== dependencies: async-limiter "~1.0.0" safe-buffer "~5.1.0" @@ -10808,64 +12369,79 @@ ws@^4.0.0: x-is-array@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-array/-/x-is-array-0.1.0.tgz#de520171d47b3f416f5587d629b89d26b12dc29d" + integrity sha1-3lIBcdR7P0FvVYfWKbidJrEtwp0= x-is-function@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/x-is-function/-/x-is-function-1.0.4.tgz#5d294dc3d268cbdd062580e0c5df77a391d1fa1e" + integrity sha1-XSlNw9Joy90GJYDgxd93o5HR+h4= x-is-string@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= xdg-basedir@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ= xml-char-classes@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/xml-char-classes/-/xml-char-classes-1.0.0.tgz#64657848a20ffc5df583a42ad8a277b4512bbc4d" + integrity sha1-ZGV4SKIP/F31g6Qq2KJ3tFErvE0= xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" + integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== xmlhttprequest@1: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" + integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= "xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af" + integrity sha1-pcbVMr5lbiPbgg77lDofBJmNY68= xxhashjs@^0.2.1: version "0.2.2" resolved "https://registry.yarnpkg.com/xxhashjs/-/xxhashjs-0.2.2.tgz#8a6251567621a1c46a5ae204da0249c7f8caa9d8" + integrity sha512-AkTuIuVTET12tpsVIQo+ZU6f/qDmKuRUcjaqR+OIvm+aCBsZ95i7UVY5WJ9TMsSaZ0DA2WxoZ4acu0sPH+OKAw== dependencies: cuint "^0.2.2" y18n@^3.2.1: version "3.2.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" + integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" + integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== yallist@^2.1.2: version "2.1.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= yallist@^3.0.0, yallist@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.0.2.tgz#8452b4bb7e83c7c188d8041c1a837c773d6d8bb9" + integrity sha1-hFK0u36Dx8GI2AQcGoN8dz1ti7k= yapool@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/yapool/-/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" + integrity sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o= yargs-parser@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f" + integrity sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8= dependencies: camelcase "^3.0.0" lodash.assign "^4.1.0" @@ -10873,30 +12449,35 @@ yargs-parser@^3.2.0: yargs-parser@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" + integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= dependencies: camelcase "^3.0.0" yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= dependencies: camelcase "^4.1.0" yargs-parser@^8.0.0, yargs-parser@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" + integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== dependencies: camelcase "^4.1.0" yargs-parser@^9.0.2: version "9.0.2" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077" + integrity sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc= dependencies: camelcase "^4.1.0" yargs@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" + integrity sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4= dependencies: cliui "^3.2.0" decamelize "^1.1.1" @@ -10916,6 +12497,7 @@ yargs@5.0.0: yargs@^10.0.3: version "10.1.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" + integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -10933,6 +12515,7 @@ yargs@^10.0.3: yargs@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" + integrity sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw== dependencies: cliui "^4.0.0" decamelize "^1.1.1" @@ -10950,6 +12533,7 @@ yargs@^11.0.0: yargs@^7.1.0: version "7.1.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" + integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= dependencies: camelcase "^3.0.0" cliui "^3.2.0" @@ -10968,6 +12552,7 @@ yargs@^7.1.0: yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -10986,6 +12571,7 @@ yargs@^8.0.2: yargs@^9.0.1: version "9.0.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-9.0.1.tgz#52acc23feecac34042078ee78c0c007f5085db4c" + integrity sha1-UqzCP+7Kw0BCB47njAwAf1CF20w= dependencies: camelcase "^4.1.0" cliui "^3.2.0" @@ -11004,6 +12590,7 @@ yargs@^9.0.1: yargs@~3.10.0: version "3.10.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= dependencies: camelcase "^1.0.2" cliui "^2.1.0" @@ -11013,3 +12600,4 @@ yargs@~3.10.0: zwitch@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/zwitch/-/zwitch-1.0.2.tgz#9b059541bfa844799fe2d903bde609de2503a041" + integrity sha1-mwWVQb+oRHmf4tkDveYJ3iUDoEE= From 287e33098a23f2ffda671a23c6597977413030ed Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 5 Oct 2018 22:22:44 +0300 Subject: [PATCH 005/115] allow browser context menu when possible (#7369) --- src/ui/bind_handlers.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/ui/bind_handlers.js b/src/ui/bind_handlers.js index 1bda2fb3ed4..9ed7c877ab4 100644 --- a/src/ui/bind_handlers.js +++ b/src/ui/bind_handlers.js @@ -178,7 +178,11 @@ export default function bindHandlers(map: Map, options: {interactive: boolean, c contextMenuEvent = e; } - e.preventDefault(); + // prevent browser context menu when necessary; we don't allow it with rotation + // because we can't discern rotation gesture start from contextmenu on Mac + if (map.dragRotate.isEnabled() || map.listens('contextmenu')) { + e.preventDefault(); + } } function onWheel(e: WheelEvent) { From 9f4c304f017e8c942a3848e8ade5e00911329861 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Mon, 8 Oct 2018 15:02:01 +0300 Subject: [PATCH 006/115] Remove code repetition in value.js (#7358) * DRY up value.js for clarity * reintroduce explicit Value set for max perf --- src/gl/value.js | 1061 ++++++++++++++--------------------------------- 1 file changed, 317 insertions(+), 744 deletions(-) diff --git a/src/gl/value.js b/src/gl/value.js index 819e55d2927..3faabc3c24e 100644 --- a/src/gl/value.js +++ b/src/gl/value.js @@ -19,7 +19,6 @@ import type { } from './types'; export interface Value { - context: Context; current: T; default: T; dirty: boolean; @@ -28,920 +27,494 @@ export interface Value { set(value: T): void; } -export class ClearColor implements Value { - context: Context; - current: Color; - default: Color; +class BaseValue implements Value { + gl: WebGLRenderingContext; + current: T; + default: T; dirty: boolean; constructor(context: Context) { - this.context = context; - this.default = Color.transparent; + this.gl = context.gl; + this.default = this.getDefault(); this.current = this.default; this.dirty = false; } - get(): Color { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: Color): void { - const c = this.current; - if (v.r !== c.r || v.g !== c.g || v.b !== c.b || v.a !== c.a || this.dirty === true) { - this.context.gl.clearColor(v.r, v.g, v.b, v.a); - this.current = v; - this.dirty = false; - } + get(): T { + return this.current; } -} - -export class ClearDepth implements Value { - context: Context; - current: number; - default: number; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = 1; - this.current = this.default; - this.dirty = false; + set(value: T) { // eslint-disable-line + // overridden in child classes; } - get(): number { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: number): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.clearDepth(v); - this.current = v; - this.dirty = false; - } + getDefault(): T { + return this.default; // overriden in child classes + } + setDefault() { + this.set(this.default); } } -export class ClearStencil implements Value { - context: Context; - current: number; - default: number; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = 0; - this.current = this.default; +export class ClearColor extends BaseValue { + getDefault(): Color { + return Color.transparent; + } + set(v: Color) { + const c = this.current; + if (v.r === c.r && v.g === c.g && v.b === c.b && v.a === c.a && !this.dirty) return; + this.gl.clearColor(v.r, v.g, v.b, v.a); + this.current = v; this.dirty = false; } +} - get(): number { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: number): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.clearStencil(v); - this.current = v; - this.dirty = false; - } +export class ClearDepth extends BaseValue { + getDefault(): number { + return 1; + } + set(v: number) { + if (v === this.current && !this.dirty) return; + this.gl.clearDepth(v); + this.current = v; + this.dirty = false; } } -export class ColorMask implements Value { - context: Context; - current: ColorMaskType; - default: ColorMaskType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = [true, true, true, true]; - this.current = this.default; +export class ClearStencil extends BaseValue { + getDefault(): number { + return 0; + } + set(v: number) { + if (v === this.current && !this.dirty) return; + this.gl.clearStencil(v); + this.current = v; this.dirty = false; } +} - get(): ColorMaskType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ColorMaskType): void { +export class ColorMask extends BaseValue { + getDefault(): ColorMaskType { + return [true, true, true, true]; + } + set(v: ColorMaskType) { const c = this.current; - if (v[0] !== c[0] || v[1] !== c[1] || v[2] !== c[2] || v[3] !== c[3] || this.dirty === true) { - this.context.gl.colorMask(v[0], v[1], v[2], v[3]); - this.current = v; - this.dirty = false; - } + if (v[0] === c[0] && v[1] === c[1] && v[2] === c[2] && v[3] === c[3] && !this.dirty) return; + this.gl.colorMask(v[0], v[1], v[2], v[3]); + this.current = v; + this.dirty = false; } } -export class DepthMask implements Value { - context: Context; - current: DepthMaskType; - default: DepthMaskType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = true; - this.current = this.default; - this.dirty = false; +export class DepthMask extends BaseValue { + getDefault(): DepthMaskType { + return true; } - - get(): DepthMaskType { return this.current; } - - setDefault(): void { this.set(this.default); } - set(v: DepthMaskType): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.depthMask(v); - this.current = v; - this.dirty = false; - } + if (v === this.current && !this.dirty) return; + this.gl.depthMask(v); + this.current = v; + this.dirty = false; } } -export class StencilMask implements Value { - context: Context; - current: number; - default: number; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = 0xFF; - this.current = this.default; - this.dirty = false; +export class StencilMask extends BaseValue { + getDefault(): number { + return 0xFF; } - - get(): number { return this.current; } - - setDefault(): void { this.set(this.default); } - set(v: number): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.stencilMask(v); - this.current = v; - this.dirty = false; - } + if (v === this.current && !this.dirty) return; + this.gl.stencilMask(v); + this.current = v; + this.dirty = false; } } -export class StencilFunc implements Value { - context: Context; - current: StencilFuncType; - default: StencilFuncType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = { - func: context.gl.ALWAYS, +export class StencilFunc extends BaseValue { + getDefault(): StencilFuncType { + return { + func: this.gl.ALWAYS, ref: 0, mask: 0xFF }; - this.current = this.default; - this.dirty = false; } - - get(): StencilFuncType { return this.current; } - - setDefault(): void { this.set(this.default); } - set(v: StencilFuncType): void { const c = this.current; - if (v.func !== c.func || v.ref !== c.ref || v.mask !== c.mask || this.dirty === true) { - this.context.gl.stencilFunc(v.func, v.ref, v.mask); - this.current = v; - this.dirty = false; - } + if (v.func === c.func && v.ref === c.ref && v.mask === c.mask && !this.dirty) return; + this.gl.stencilFunc(v.func, v.ref, v.mask); + this.current = v; + this.dirty = false; } } -export class StencilOp implements Value { - context: Context; - current: StencilOpType; - default: StencilOpType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - const gl = this.context.gl; - this.default = [gl.KEEP, gl.KEEP, gl.KEEP]; - this.current = this.default; - this.dirty = false; +export class StencilOp extends BaseValue { + getDefault(): StencilOpType { + const gl = this.gl; + return [gl.KEEP, gl.KEEP, gl.KEEP]; } - - get(): StencilOpType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: StencilOpType): void { + set(v: StencilOpType) { const c = this.current; - if (v[0] !== c[0] || v[1] !== c[1] || v[2] !== c[2] || this.dirty === true) { - this.context.gl.stencilOp(v[0], v[1], v[2]); - this.current = v; - this.dirty = false; - } + if (v[0] === c[0] && v[1] === c[1] && v[2] === c[2] && !this.dirty) return; + this.gl.stencilOp(v[0], v[1], v[2]); + this.current = v; + this.dirty = false; } } -export class StencilTest implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; - this.dirty = false; +export class StencilTest extends BaseValue { + getDefault(): boolean { + return false; } - - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - if (v) { - gl.enable(gl.STENCIL_TEST); - } else { - gl.disable(gl.STENCIL_TEST); - } - this.current = v; - this.dirty = false; + set(v: boolean) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + if (v) { + gl.enable(gl.STENCIL_TEST); + } else { + gl.disable(gl.STENCIL_TEST); } + this.current = v; + this.dirty = false; } } -export class DepthRange implements Value { - context: Context; - current: DepthRangeType; - default: DepthRangeType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = [0, 1]; - this.current = this.default; - this.dirty = false; +export class DepthRange extends BaseValue { + getDefault(): DepthRangeType { + return [0, 1]; } - - get(): DepthRangeType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: DepthRangeType): void { + set(v: DepthRangeType) { const c = this.current; - if (v[0] !== c[0] || v[1] !== c[1] || this.dirty === true) { - this.context.gl.depthRange(v[0], v[1]); - this.current = v; - this.dirty = false; - } + if (v[0] === c[0] && v[1] === c[1] && !this.dirty) return; + this.gl.depthRange(v[0], v[1]); + this.current = v; + this.dirty = false; } } -export class DepthTest implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; - this.dirty = false; +export class DepthTest extends BaseValue { + getDefault(): boolean { + return false; } - - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - if (v) { - gl.enable(gl.DEPTH_TEST); - } else { - gl.disable(gl.DEPTH_TEST); - } - this.current = v; - this.dirty = false; + set(v: boolean) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + if (v) { + gl.enable(gl.DEPTH_TEST); + } else { + gl.disable(gl.DEPTH_TEST); } + this.current = v; + this.dirty = false; } } -export class DepthFunc implements Value { - context: Context; - current: DepthFuncType; - default: DepthFuncType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = context.gl.LESS; - this.current = this.default; - this.dirty = false; +export class DepthFunc extends BaseValue { + getDefault(): DepthFuncType { + return this.gl.LESS; } - - get(): DepthFuncType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: DepthFuncType): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.depthFunc(v); - this.current = v; - this.dirty = false; - } + set(v: DepthFuncType) { + if (v === this.current && !this.dirty) return; + this.gl.depthFunc(v); + this.current = v; + this.dirty = false; } } -export class Blend implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; - this.dirty = false; +export class Blend extends BaseValue { + getDefault(): boolean { + return false; } - - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - if (v) { - gl.enable(gl.BLEND); - } else { - gl.disable(gl.BLEND); - } - this.current = v; - this.dirty = false; + set(v: boolean) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + if (v) { + gl.enable(gl.BLEND); + } else { + gl.disable(gl.BLEND); } + this.current = v; + this.dirty = false; } } -export class BlendFunc implements Value { - context: Context; - current: BlendFuncType; - default: BlendFuncType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - const gl = this.context.gl; - this.default = [gl.ONE, gl.ZERO]; - this.current = this.default; - this.dirty = false; +export class BlendFunc extends BaseValue { + getDefault(): BlendFuncType { + const gl = this.gl; + return [gl.ONE, gl.ZERO]; } - - get(): BlendFuncType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: BlendFuncType): void { + set(v: BlendFuncType) { const c = this.current; - if (v[0] !== c[0] || v[1] !== c[1] || this.dirty === true) { - this.context.gl.blendFunc(v[0], v[1]); - this.current = v; - this.dirty = false; - } + if (v[0] === c[0] && v[1] === c[1] && !this.dirty) return; + this.gl.blendFunc(v[0], v[1]); + this.current = v; + this.dirty = false; } } -export class BlendColor implements Value { - context: Context; - current: Color; - default: Color; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = Color.transparent; - this.current = this.default; - this.dirty = false; +export class BlendColor extends BaseValue { + getDefault(): Color { + return Color.transparent; } - - get(): Color { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: Color): void { + set(v: Color) { const c = this.current; - if (v.r !== c.r || v.g !== c.g || v.b !== c.b || v.a !== c.a || this.dirty === true) { - this.context.gl.blendColor(v.r, v.g, v.b, v.a); - this.current = v; - this.dirty = false; - } + if (v.r === c.r && v.g === c.g && v.b === c.b && v.a === c.a && !this.dirty) return; + this.gl.blendColor(v.r, v.g, v.b, v.a); + this.current = v; + this.dirty = false; } } -export class BlendEquation implements Value { - context: Context; - current: BlendEquationType; - default: BlendEquationType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = this.context.gl.FUNC_ADD; - this.current = this.default; - this.dirty = false; +export class BlendEquation extends BaseValue { + getDefault(): BlendEquationType { + return this.gl.FUNC_ADD; } - - get(): BlendEquationType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: BlendEquationType): void { - if (v !== this.current || this.dirty === true) { - this.context.gl.blendEquation(v); - this.current = v; - this.dirty = false; - } + set(v: BlendEquationType) { + if (v === this.current && !this.dirty) return; + this.gl.blendEquation(v); + this.current = v; + this.dirty = false; } } -export class CullFace implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; - this.dirty = false; +export class CullFace extends BaseValue { + getDefault(): boolean { + return false; } - - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - if (v) { - gl.enable(gl.CULL_FACE); - } else { - gl.disable(gl.CULL_FACE); - } - this.current = v; - this.dirty = false; + set(v: boolean) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + if (v) { + gl.enable(gl.CULL_FACE); + } else { + gl.disable(gl.CULL_FACE); } + this.current = v; + this.dirty = false; } } -export class CullFaceSide implements Value { - context: Context; - current: CullFaceModeType; - default: CullFaceModeType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - const gl = this.context.gl; - this.default = gl.BACK; - this.current = this.default; - this.dirty = false; +export class CullFaceSide extends BaseValue { + getDefault(): CullFaceModeType { + return this.gl.BACK; } - - get(): CullFaceModeType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: CullFaceModeType): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.cullFace(v); - this.current = v; - this.dirty = false; - } + set(v: CullFaceModeType) { + if (v === this.current && !this.dirty) return; + this.gl.cullFace(v); + this.current = v; + this.dirty = false; } } -export class FrontFace implements Value { - context: Context; - current: FrontFaceType; - default: FrontFaceType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - const gl = this.context.gl; - this.default = gl.CCW; - this.current = this.default; - this.dirty = false; +export class FrontFace extends BaseValue { + getDefault(): FrontFaceType { + return this.gl.CCW; } - - get(): FrontFaceType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: FrontFaceType): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.frontFace(v); - this.current = v; - this.dirty = false; - } + set(v: FrontFaceType) { + if (v === this.current && !this.dirty) return; + this.gl.frontFace(v); + this.current = v; + this.dirty = false; } } -export class Program implements Value { - context: Context; - current: ?WebGLProgram; - default: ?WebGLProgram; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class Program extends BaseValue { + getDefault(): WebGLProgram { + return null; } - - get(): ?WebGLProgram { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLProgram): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.useProgram(v); - this.current = v; - this.dirty = false; - } + set(v: ?WebGLProgram) { + if (v === this.current && !this.dirty) return; + this.gl.useProgram(v); + this.current = v; + this.dirty = false; } } -export class ActiveTextureUnit implements Value { - context: Context; - current: TextureUnitType; - default: TextureUnitType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = context.gl.TEXTURE0; - this.current = this.default; - this.dirty = false; +export class ActiveTextureUnit extends BaseValue { + getDefault(): TextureUnitType { + return this.gl.TEXTURE0; } - - get(): TextureUnitType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: TextureUnitType): void { - if (this.current !== v || this.dirty === true) { - this.context.gl.activeTexture(v); - this.current = v; - this.dirty = false; - } + set(v: TextureUnitType) { + if (v === this.current && !this.dirty) return; + this.gl.activeTexture(v); + this.current = v; + this.dirty = false; } } -export class Viewport implements Value { - context: Context; - current: ViewportType; - default: ViewportType; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - const gl = this.context.gl; - this.default = [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]; - this.current = this.default; - this.dirty = false; +export class Viewport extends BaseValue { + getDefault(): ViewportType { + const gl = this.gl; + return [0, 0, gl.drawingBufferWidth, gl.drawingBufferHeight]; } - - get(): ViewportType { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ViewportType): void { + set(v: ViewportType) { const c = this.current; - if (v[0] !== c[0] || v[1] !== c[1] || v[2] !== c[2] || v[3] !== c[3] || this.dirty === true) { - this.context.gl.viewport(v[0], v[1], v[2], v[3]); - this.current = v; - this.dirty = false; - } + if (v[0] === c[0] && v[1] === c[1] && v[2] === c[2] && v[3] === c[3] && !this.dirty) return; + this.gl.viewport(v[0], v[1], v[2], v[3]); + this.current = v; + this.dirty = false; } } -export class BindFramebuffer implements Value { - context: Context; - current: ?WebGLFramebuffer; - default: ?WebGLFramebuffer; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class BindFramebuffer extends BaseValue { + getDefault(): WebGLFramebuffer { + return null; } - - get(): ?WebGLFramebuffer { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLFramebuffer): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.bindFramebuffer(gl.FRAMEBUFFER, v); - this.current = v; - this.dirty = false; - } + set(v: ?WebGLFramebuffer) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.bindFramebuffer(gl.FRAMEBUFFER, v); + this.current = v; + this.dirty = false; } } -export class BindRenderbuffer implements Value { - context: Context; - current: ?WebGLRenderbuffer; - default: ?WebGLRenderbuffer; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class BindRenderbuffer extends BaseValue { + getDefault(): WebGLRenderbuffer { + return null; } - - get(): ?WebGLRenderbuffer { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLRenderbuffer): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.bindRenderbuffer(gl.RENDERBUFFER, v); - this.current = v; - this.dirty = false; - } + set(v: ?WebGLRenderbuffer) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.bindRenderbuffer(gl.RENDERBUFFER, v); + this.current = v; + this.dirty = false; } } -export class BindTexture implements Value { - context: Context; - current: ?WebGLTexture; - default: ?WebGLTexture; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class BindTexture extends BaseValue { + getDefault(): WebGLTexture { + return null; } - - get(): ?WebGLTexture { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLTexture): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.bindTexture(gl.TEXTURE_2D, v); - this.current = v; - this.dirty = false; - } + set(v: ?WebGLTexture) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.bindTexture(gl.TEXTURE_2D, v); + this.current = v; + this.dirty = false; } } -export class BindVertexBuffer implements Value { - context: Context; - current: ?WebGLBuffer; - default: ?WebGLBuffer; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class BindVertexBuffer extends BaseValue { + getDefault(): WebGLBuffer { + return null; } - - get(): ?WebGLBuffer { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLBuffer): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.bindBuffer(gl.ARRAY_BUFFER, v); - this.current = v; - this.dirty = false; - } + set(v: ?WebGLBuffer) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.bindBuffer(gl.ARRAY_BUFFER, v); + this.current = v; + this.dirty = false; } } -export class BindElementBuffer implements Value { - context: Context; - current: ?WebGLBuffer; - default: ?WebGLBuffer; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; +export class BindElementBuffer extends BaseValue { + getDefault(): WebGLBuffer { + return null; } - - get(): ?WebGLBuffer { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLBuffer): void { + set(v: ?WebGLBuffer) { // Always rebind - const gl = this.context.gl; + const gl = this.gl; gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, v); this.current = v; this.dirty = false; } } -export class BindVertexArrayOES implements Value { - context: Context; - current: any; - default: any; - dirty: boolean; +export class BindVertexArrayOES extends BaseValue { + vao: any; constructor(context: Context) { - this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; + super(context); + this.vao = context.extVertexArrayObject; } - - get(): any { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: any): void { - if (this.current !== v && this.context.extVertexArrayObject || this.dirty === true) { - this.context.extVertexArrayObject.bindVertexArrayOES(v); - this.current = v; - this.dirty = false; - } + getDefault(): any { + return null; } -} - -export class PixelStoreUnpack implements Value { - context: Context; - current: number; - default: number; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = 4; - this.current = this.default; + set(v: any) { + if (!this.vao || v === this.current && !this.dirty) return; + this.vao.bindVertexArrayOES(v); + this.current = v; this.dirty = false; } - - get(): number { return this.current; } - - setDefault(): void { this.set(this.default); } - - set(v: number): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.pixelStorei(gl.UNPACK_ALIGNMENT, v); - this.current = v; - this.dirty = false; - } - } } -export class PixelStoreUnpackPremultiplyAlpha implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; +export class PixelStoreUnpack extends BaseValue { + getDefault(): number { + return 4; + } + set(v: number) { + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.pixelStorei(gl.UNPACK_ALIGNMENT, v); + this.current = v; this.dirty = false; } +} - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - +export class PixelStoreUnpackPremultiplyAlpha extends BaseValue { + getDefault(): boolean { + return false; + } set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, (v: any)); - this.current = v; - this.dirty = false; - } + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, (v: any)); + this.current = v; + this.dirty = false; } } -export class PixelStoreUnpackFlipY implements Value { - context: Context; - current: boolean; - default: boolean; - dirty: boolean; - - constructor(context: Context) { - this.context = context; - this.default = false; - this.current = this.default; - this.dirty = false; +export class PixelStoreUnpackFlipY extends BaseValue { + getDefault(): boolean { + return false; } - - get(): boolean { return this.current; } - - setDefault(): void { this.set(this.default); } - set(v: boolean): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, (v: any)); - this.current = v; - this.dirty = false; - } + if (v === this.current && !this.dirty) return; + const gl = this.gl; + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, (v: any)); + this.current = v; + this.dirty = false; } } -/** - * Framebuffer values - * @private - */ -export class FramebufferValue { - context: Context; +class FramebufferAttachment extends BaseValue { parent: WebGLFramebuffer; - current: ?T; - default: ?T; - dirty: boolean; + context: Context; constructor(context: Context, parent: WebGLFramebuffer) { + super(context); this.context = context; - this.default = null; - this.current = this.default; - this.dirty = false; this.parent = parent; } - - get(): ?T { return this.current; } -} - -export class ColorAttachment extends FramebufferValue implements Value { - dirty: boolean; - - constructor(context: Context, parent: WebGLFramebuffer) { - super(context, parent); - this.dirty = false; - } - - setDefault(): void { this.set(this.default); } - - set(v: ?WebGLTexture): void { - if (this.dirty || this.current !== v) { - const gl = this.context.gl; - this.context.bindFramebuffer.set(this.parent); - // note: it's possible to attach a renderbuffer to the color - // attachment point, but thus far MBGL only uses textures for color - gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, v, 0); - this.current = v; - this.dirty = false; - } + getDefault() { + return null; } +} +export class ColorAttachment extends FramebufferAttachment { setDirty() { this.dirty = true; } + set(v: ?WebGLTexture): void { + if (v === this.current && !this.dirty) return; + this.context.bindFramebuffer.set(this.parent); + // note: it's possible to attach a renderbuffer to the color + // attachment point, but thus far MBGL only uses textures for color + const gl = this.gl; + gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, v, 0); + this.current = v; + this.dirty = false; + } } -export class DepthAttachment extends FramebufferValue implements Value { - - setDefault(): void { this.set(this.default); } - +export class DepthAttachment extends FramebufferAttachment { set(v: ?WebGLRenderbuffer): void { - if (this.current !== v || this.dirty === true) { - const gl = this.context.gl; - this.context.bindFramebuffer.set(this.parent); - // note: it's possible to attach a texture to the depth attachment - // point, but thus far MBGL only uses renderbuffers for depth - gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, v); - this.current = v; - this.dirty = false; - } + if (v === this.current && !this.dirty) return; + this.context.bindFramebuffer.set(this.parent); + // note: it's possible to attach a texture to the depth attachment + // point, but thus far MBGL only uses renderbuffers for depth + const gl = this.gl; + gl.framebufferRenderbuffer(gl.FRAMEBUFFER, gl.DEPTH_ATTACHMENT, gl.RENDERBUFFER, v); + this.current = v; + this.dirty = false; } } From 83aebca5e8266888ed457ae5f1d92b44ba493908 Mon Sep 17 00:00:00 2001 From: Stepan Kuzmin Date: Mon, 8 Oct 2018 17:28:04 +0300 Subject: [PATCH 007/115] add initial bounds as map constructor option #1970 (#5518) * add initial bounds as map constructor option #1970 * fix map initial bounds test #1970 * resize map before setting initial view #1970 * move this.resize() back to conditional #1970 * fix expected zoom value for initial bounds test #1970 --- src/ui/map.js | 18 ++++++++++++------ test/unit/ui/map.test.js | 14 ++++++++++++++ 2 files changed, 26 insertions(+), 6 deletions(-) diff --git a/src/ui/map.js b/src/ui/map.js index 10842cb063c..8ff6957ac91 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -196,6 +196,7 @@ const defaultOptions = { * @param {number} [options.zoom=0] The initial zoom level of the map. If `zoom` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. * @param {number} [options.bearing=0] The initial bearing (rotation) of the map, measured in degrees counter-clockwise from north. If `bearing` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. * @param {number} [options.pitch=0] The initial pitch (tilt) of the map, measured in degrees away from the plane of the screen (0-60). If `pitch` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. + * @param {LngLatBoundsLike} [options.bounds] The initial bounds of the map. If `bounds` is specified, it overrides `center` and `zoom` constructor options. * @param {boolean} [options.renderWorldCopies=true] If `true`, multiple copies of the world will be rendered, when zoomed out. * @param {number} [options.maxTileCacheSize=null] The maximum number of tiles stored in the tile cache for a given source. If omitted, the cache will be dynamically sized based on the current viewport. * @param {string} [options.localIdeographFontFamily=null] If specified, defines a CSS font-family @@ -369,12 +370,17 @@ class Map extends Camera { this._hash = options.hash && (new Hash()).addTo(this); // don't set position from options if set through hash if (!this._hash || !this._hash._onHashChange()) { - this.jumpTo({ - center: options.center, - zoom: options.zoom, - bearing: options.bearing, - pitch: options.pitch - }); + if (options.bounds) { + this.resize(); + this.fitBounds(options.bounds, { duration: 0 }); + } else { + this.jumpTo({ + center: options.center, + zoom: options.zoom, + bearing: options.bearing, + pitch: options.pitch + }); + } } this.resize(); diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index e4cf2989ee2..bb8f96fbe0f 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -53,6 +53,20 @@ test('Map', (t) => { t.end(); }); + t.test('initial bounds in constructor options', (t) => { + const container = window.document.createElement('div'); + Object.defineProperty(container, 'offsetWidth', {value: 512}); + Object.defineProperty(container, 'offsetHeight', {value: 512}); + + const bounds = [[-133, 16], [-68, 50]]; + const map = createMap(t, {container, bounds}); + + t.deepEqual(fixedLngLat(map.getCenter(), 4), { lng: -100.5, lat: 34.7171 }); + t.equal(fixedNum(map.getZoom(), 3), 2.113); + + t.end(); + }); + t.test('disables handlers', (t) => { t.test('disables all handlers', (t) => { const map = createMap(t, {interactive: false}); From d39a7db478a0b686199b750548397d87d61e8f3b Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Mon, 8 Oct 2018 14:54:06 -0400 Subject: [PATCH 008/115] add tooltips for navigation controls, fix #7115 --- src/ui/control/navigation_control.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/ui/control/navigation_control.js b/src/ui/control/navigation_control.js index c03940f9cbb..395fefd2e45 100644 --- a/src/ui/control/navigation_control.js +++ b/src/ui/control/navigation_control.js @@ -46,14 +46,14 @@ class NavigationControl { this._container.addEventListener('contextmenu', (e) => e.preventDefault()); if (this.options.showZoom) { - this._zoomInButton = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in', 'Zoom In', () => this._map.zoomIn()); - this._zoomOutButton = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out', 'Zoom Out', () => this._map.zoomOut()); + this._zoomInButton = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-in', 'Zoom in', () => this._map.zoomIn()); + this._zoomOutButton = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-zoom-out', 'Zoom out', () => this._map.zoomOut()); } if (this.options.showCompass) { bindAll([ '_rotateCompassArrow' ], this); - this._compass = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-compass', 'Reset North', () => this._map.resetNorth()); + this._compass = this._createButton('mapboxgl-ctrl-icon mapboxgl-ctrl-compass', 'Reset bearing to north', () => this._map.resetNorth()); this._compassArrow = DOM.create('span', 'mapboxgl-ctrl-compass-arrow', this._compass); } } @@ -90,6 +90,7 @@ class NavigationControl { _createButton(className: string, ariaLabel: string, fn: () => mixed) { const a = DOM.create('button', className, this._container); a.type = 'button'; + a.title = ariaLabel; a.setAttribute('aria-label', ariaLabel); a.addEventListener('click', fn); return a; From 200080465a56e173cab41c7d35e319f08e44dd88 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Thu, 4 Oct 2018 18:29:29 -0700 Subject: [PATCH 009/115] [core] filter validation should enforce lack of feature-state support --- src/style-spec/validate/validate_expression.js | 5 +++++ test/unit/style-spec/fixture/filters.input.json | 7 +++++++ test/unit/style-spec/fixture/filters.output.json | 4 ++++ 3 files changed, 16 insertions(+) diff --git a/src/style-spec/validate/validate_expression.js b/src/style-spec/validate/validate_expression.js index 3e35a1055ce..453d16495d4 100644 --- a/src/style-spec/validate/validate_expression.js +++ b/src/style-spec/validate/validate_expression.js @@ -23,5 +23,10 @@ export default function validateExpression(options: any) { (!isStateConstant((expression.value: any)._styleExpression.expression))) { return [new ValidationError(options.key, options.value, '"feature-state" data expressions are not supported with layout properties.')]; } + + if (options.expressionContext === 'filter' && !isStateConstant((expression.value: any).expression)) { + return [new ValidationError(options.key, options.value, '"feature-state" data expressions are not supported with filters.')]; + } + return []; } diff --git a/test/unit/style-spec/fixture/filters.input.json b/test/unit/style-spec/fixture/filters.input.json index 6e9dfe43d5f..86deaa740e8 100644 --- a/test/unit/style-spec/fixture/filters.input.json +++ b/test/unit/style-spec/fixture/filters.input.json @@ -150,6 +150,13 @@ "source": "source", "source-layer": "source-layer", "filter": ["all", [">=", "Constructi", 1930], [">=", ["zoom"], 10]] + }, + { + "id": "filter expressions with feature-state", + "type": "line", + "source": "source", + "source-layer": "source-layer", + "filter": ["<=" , ["feature-state", "height"], 10] } ] } diff --git a/test/unit/style-spec/fixture/filters.output.json b/test/unit/style-spec/fixture/filters.output.json index 4d66de3d4e4..41ce2cf9978 100644 --- a/test/unit/style-spec/fixture/filters.output.json +++ b/test/unit/style-spec/fixture/filters.output.json @@ -54,5 +54,9 @@ { "message": "layers[14].filter[2][1]: string expected, array found", "line": 152 + }, + { + "message": "layers[15].filter: \"feature-state\" data expressions are not supported with filters.", + "line": 159 } ] From 932241f32110d232a081ff00ff806841de945b7e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 4 Oct 2018 15:12:07 +0200 Subject: [PATCH 010/115] reduce code duplication in makeRequest --- src/source/geojson_worker_source.js | 8 +- src/source/load_tilejson.js | 2 +- src/source/vector_tile_worker_source.js | 14 ++-- src/style/load_glyph_range.js | 7 +- src/style/load_sprite.js | 2 +- src/style/style.js | 4 +- src/util/ajax.js | 99 ++++++++++--------------- src/util/mapbox.js | 30 ++++---- test/ajax_stubs.js | 10 +-- test/unit/util/ajax.test.js | 14 +--- 10 files changed, 78 insertions(+), 112 deletions(-) diff --git a/src/source/geojson_worker_source.js b/src/source/geojson_worker_source.js index 9e0353cac70..95defc4aa93 100644 --- a/src/source/geojson_worker_source.js +++ b/src/source/geojson_worker_source.js @@ -20,7 +20,7 @@ import type Actor from '../util/actor'; import type StyleLayerIndex from '../style/style_layer_index'; import type {LoadVectorDataCallback} from './vector_tile_worker_source'; -import type {RequestParameters} from '../util/ajax'; +import type { RequestParameters, ResponseCallback } from '../util/ajax'; import type { Callback } from '../types/callback'; import type {GeoJSONFeature} from '@mapbox/geojson-types'; @@ -33,7 +33,7 @@ export type LoadGeoJSONParameters = { geojsonVtOptions?: Object }; -export type LoadGeoJSON = (params: LoadGeoJSONParameters, callback: Callback) => void; +export type LoadGeoJSON = (params: LoadGeoJSONParameters, callback: ResponseCallback) => void; export interface GeoJSONIndex { getTile(z: number, x: number, y: number): Object; @@ -161,7 +161,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { const perf = (params && params.request && params.request.collectResourceTiming) ? new performance.Performance(params.request) : false; - this.loadGeoJSON(params, (err, data) => { + this.loadGeoJSON(params, (err: ?Error, data: ?Object) => { if (err || !data) { return callback(err); } else if (typeof data !== 'object') { @@ -254,7 +254,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { * @param [params.url] A URL to the remote GeoJSON data. * @param [params.data] Literal GeoJSON data. Must be provided if `params.url` is not. */ - loadGeoJSON(params: LoadGeoJSONParameters, callback: Callback) { + loadGeoJSON(params: LoadGeoJSONParameters, callback: ResponseCallback) { // Because of same origin issues, urls must either include an explicit // origin or absolute path. // ie: /foo/bar.json or http://example.com/bar.json diff --git a/src/source/load_tilejson.js b/src/source/load_tilejson.js index c69bed8015a..06006e8f611 100644 --- a/src/source/load_tilejson.js +++ b/src/source/load_tilejson.js @@ -12,7 +12,7 @@ import type {TileJSON} from '../types/tilejson'; import type {Cancelable} from '../types/cancelable'; export default function(options: any, requestTransformFn: RequestTransformFunction, callback: Callback): Cancelable { - const loaded = function(err, tileJSON: any) { + const loaded = function(err: ?Error, tileJSON: ?Object) { if (err) { return callback(err); } else if (tileJSON) { diff --git a/src/source/vector_tile_worker_source.js b/src/source/vector_tile_worker_source.js index 2ccc9349747..e64909724a0 100644 --- a/src/source/vector_tile_worker_source.js +++ b/src/source/vector_tile_worker_source.js @@ -1,6 +1,6 @@ // @flow -import {getArrayBuffer} from '../util/ajax'; +import { getArrayBuffer } from '../util/ajax'; import vt from '@mapbox/vector-tile'; import Protobuf from 'pbf'; @@ -43,15 +43,15 @@ export type LoadVectorData = (params: WorkerTileParameters, callback: LoadVector * @private */ function loadVectorTile(params: WorkerTileParameters, callback: LoadVectorDataCallback) { - const request = getArrayBuffer(params.request, (err, response) => { + const request = getArrayBuffer(params.request, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { if (err) { callback(err); - } else if (response) { + } else if (data) { callback(null, { - vectorTile: new vt.VectorTile(new Protobuf(response.data)), - rawData: response.data, - cacheControl: response.cacheControl, - expires: response.expires + vectorTile: new vt.VectorTile(new Protobuf(data)), + rawData: data, + cacheControl: cacheControl, + expires: expires }); } }); diff --git a/src/style/load_glyph_range.js b/src/style/load_glyph_range.js index 13208efcf87..2e1061f0604 100644 --- a/src/style/load_glyph_range.js +++ b/src/style/load_glyph_range.js @@ -3,6 +3,7 @@ import { normalizeGlyphsURL } from '../util/mapbox'; import { getArrayBuffer, ResourceType } from '../util/ajax'; + import parseGlyphPBF from './parse_glyph_pbf'; import type {StyleGlyph} from './style_glyph'; @@ -23,13 +24,13 @@ export default function (fontstack: string, .replace('{range}', `${begin}-${end}`), ResourceType.Glyphs); - getArrayBuffer(request, (err, response) => { + getArrayBuffer(request, (err: ?Error, data: ?ArrayBuffer) => { if (err) { callback(err); - } else if (response) { + } else if (data) { const glyphs = {}; - for (const glyph of parseGlyphPBF(response.data)) { + for (const glyph of parseGlyphPBF(data)) { glyphs[glyph.id] = glyph; } diff --git a/src/style/load_sprite.js b/src/style/load_sprite.js index 6b887383f44..eb22f092fc7 100644 --- a/src/style/load_sprite.js +++ b/src/style/load_sprite.js @@ -17,7 +17,7 @@ export default function(baseURL: string, let json: any, image, error; const format = browser.devicePixelRatio > 1 ? '@2x' : ''; - let jsonRequest = getJSON(transformRequestCallback(normalizeSpriteURL(baseURL, format, '.json'), ResourceType.SpriteJSON), (err, data) => { + let jsonRequest = getJSON(transformRequestCallback(normalizeSpriteURL(baseURL, format, '.json'), ResourceType.SpriteJSON), (err: ?Error, data: ?Object) => { jsonRequest = null; if (!error) { error = err; diff --git a/src/style/style.js b/src/style/style.js index a23fc7e4c60..2e9127dae4c 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -188,12 +188,12 @@ class Style extends Evented { url = normalizeStyleURL(url, options.accessToken); const request = this.map._transformRequest(url, ResourceType.Style); - this._request = getJSON(request, (error, json) => { + this._request = getJSON(request, (error: ?Error, json: ?Object) => { this._request = null; if (error) { this.fire(new ErrorEvent(error)); } else if (json) { - this._load((json: any), validate); + this._load(json, validate); } }); } diff --git a/src/util/ajax.js b/src/util/ajax.js index befd99aefc3..f77dcf95758 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -39,10 +39,14 @@ export type RequestParameters = { url: string, headers?: Object, method?: 'GET' | 'POST' | 'PUT', + body?: string, + type?: 'string' | 'json' | 'arraybuffer', credentials?: 'same-origin' | 'include', collectResourceTiming?: boolean }; +export type ResponseCallback = (error: ?Error, data: ?T, cacheControl: ?string, expires: ?string) => void; + class AJAXError extends Error { status: number; url: string; @@ -61,32 +65,35 @@ class AJAXError extends Error { } } -function makeRequest(requestParameters: RequestParameters): XMLHttpRequest { +function makeRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { const xhr: XMLHttpRequest = new window.XMLHttpRequest(); xhr.open(requestParameters.method || 'GET', requestParameters.url, true); + if (requestParameters.type === 'arraybuffer') { + xhr.responseType = 'arraybuffer'; + } for (const k in requestParameters.headers) { xhr.setRequestHeader(k, requestParameters.headers[k]); } + if (requestParameters.type === 'json') { + xhr.setRequestHeader('Accept', 'application/json'); + } xhr.withCredentials = requestParameters.credentials === 'include'; - return xhr; -} - -export const getJSON = function(requestParameters: RequestParameters, callback: Callback): Cancelable { - const xhr = makeRequest(requestParameters); - xhr.setRequestHeader('Accept', 'application/json'); - xhr.onerror = function() { + xhr.onerror = () => { callback(new Error(xhr.statusText)); }; - xhr.onload = function() { - if (((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) && xhr.response) { - let data; - try { - data = JSON.parse(xhr.response); - } catch (err) { - return callback(err); + xhr.onload = () => { + if (((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) && xhr.response !== null) { + let data: mixed = xhr.response; + if (requestParameters.type === 'json') { + // We're manually parsing JSON here to get better error messages. + try { + data = JSON.parse(xhr.response); + } catch (err) { + return callback(err); + } } - callback(null, data); + callback(null, data, xhr.getResponseHeader('Cache-Control'), xhr.getResponseHeader('Expires')); } else { if (xhr.status === 401 && requestParameters.url.match(/mapbox.com/)) { callback(new AJAXError(`${xhr.statusText}: you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens`, xhr.status, requestParameters.url)); @@ -95,50 +102,20 @@ export const getJSON = function(requestParameters: RequestParameters, callback: } } }; - xhr.send(); + xhr.send(requestParameters.body); return { cancel: () => xhr.abort() }; -}; +} -export const getArrayBuffer = function(requestParameters: RequestParameters, callback: Callback<{data: ArrayBuffer, cacheControl: ?string, expires: ?string}>): Cancelable { - const xhr = makeRequest(requestParameters); - xhr.responseType = 'arraybuffer'; - xhr.onerror = function() { - callback(new Error(xhr.statusText)); - }; - xhr.onload = function() { - const response: ArrayBuffer = xhr.response; - if (response.byteLength === 0 && xhr.status === 200) { - return callback(new Error('http status 200 returned without content.')); - } - if (((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) && xhr.response) { - callback(null, { - data: response, - cacheControl: xhr.getResponseHeader('Cache-Control'), - expires: xhr.getResponseHeader('Expires') - }); - } else { - callback(new AJAXError(xhr.statusText, xhr.status, requestParameters.url)); - } - }; - xhr.send(); - return { cancel: () => xhr.abort() }; +export const getJSON = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { + return makeRequest(extend(requestParameters, { type: 'json' }), callback); }; -export const postData = function(requestParameters: RequestParameters, payload: string, callback: Callback): Cancelable { - const xhr = makeRequest(extend(requestParameters, {method: 'POST'})); +export const getArrayBuffer = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { + return makeRequest(extend(requestParameters, { type: 'arraybuffer' }), callback); +}; - xhr.onerror = function() { - callback(new Error(xhr.statusText)); - }; - xhr.onload = function() { - if (xhr.status >= 200 && xhr.status < 300) { - callback(null, xhr.response); - } else { - callback(new AJAXError(xhr.statusText, xhr.status, requestParameters.url)); - } - }; - xhr.send(payload); - return { cancel: () => xhr.abort() }; +export const postData = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { + return makeRequest(extend(requestParameters, { method: 'POST' }), callback); }; function sameOrigin(url) { @@ -152,10 +129,10 @@ const transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAA export const getImage = function(requestParameters: RequestParameters, callback: Callback): Cancelable { // request the image with XHR to work around caching issues // see https://github.com/mapbox/mapbox-gl-js/issues/1470 - return getArrayBuffer(requestParameters, (err, imgData) => { + return getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { if (err) { callback(err); - } else if (imgData) { + } else if (data) { const img: HTMLImageElement = new window.Image(); const URL = window.URL || window.webkitURL; img.onload = () => { @@ -163,10 +140,10 @@ export const getImage = function(requestParameters: RequestParameters, callback: URL.revokeObjectURL(img.src); }; img.onerror = () => callback(new Error('Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.')); - const blob: Blob = new window.Blob([new Uint8Array(imgData.data)], { type: 'image/png' }); - (img: any).cacheControl = imgData.cacheControl; - (img: any).expires = imgData.expires; - img.src = imgData.data.byteLength ? URL.createObjectURL(blob) : transparentPngUrl; + const blob: Blob = new window.Blob([new Uint8Array(data)], { type: 'image/png' }); + (img: any).cacheControl = cacheControl; + (img: any).expires = expires; + img.src = data.byteLength ? URL.createObjectURL(blob) : transparentPngUrl; } }); }; diff --git a/src/util/mapbox.js b/src/util/mapbox.js index bad2e266269..58d05eb35e0 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -199,25 +199,25 @@ export class TurnstileEvent { return this.processRequests(); } - const evenstUrlObject: UrlObject = parseUrl(config.EVENTS_URL); - evenstUrlObject.params.push(`access_token=${config.ACCESS_TOKEN || ''}`); + const eventsUrlObject: UrlObject = parseUrl(config.EVENTS_URL); + eventsUrlObject.params.push(`access_token=${config.ACCESS_TOKEN || ''}`); + const request: RequestParameters = { - url: formatUrl(evenstUrlObject), + url: formatUrl(eventsUrlObject), headers: { - 'Content-Type': 'text/plain' //Skip the pre-flight OPTIONS request - } + 'Content-Type': 'text/plain' // Skip the pre-flight OPTIONS request + }, + body: JSON.stringify([{ + event: 'appUserTurnstile', + created: (new Date(nextUpdate)).toISOString(), + sdkIdentifier: 'mapbox-gl-js', + sdkVersion: version, + 'enabled.telemetry': false, + userId: this.eventData.anonId + }]) }; - const payload = JSON.stringify([{ - event: 'appUserTurnstile', - created: (new Date(nextUpdate)).toISOString(), - sdkIdentifier: 'mapbox-gl-js', - sdkVersion: version, - 'enabled.telemetry': false, - userId: this.eventData.anonId - }]); - - this.pendingRequest = postData(request, payload, (error) => { + this.pendingRequest = postData(request, (error: ?Error) => { this.pendingRequest = null; if (!error) { this.eventData.lastSuccess = nextUpdate; diff --git a/test/ajax_stubs.js b/test/ajax_stubs.js index 495dcdc8579..8ecceaf3d80 100644 --- a/test/ajax_stubs.js +++ b/test/ajax_stubs.js @@ -56,8 +56,8 @@ export const getArrayBuffer = function({ url }, callback) { if (cache[url]) return cached(cache[url], callback); return request({ url, encoding: null }, (error, response, body) => { if (!error && response.statusCode >= 200 && response.statusCode < 300) { - cache[url] = {data: body}; - callback(null, {data: body}); + cache[url] = body; + callback(null, body); } else { if (!error) error = { status: +response.statusCode }; callback(error); @@ -65,10 +65,10 @@ export const getArrayBuffer = function({ url }, callback) { }); }; -export const postData = function({ url }, payload, callback) { - return request.post(url, payload, (error, response, body) => { +export const postData = function({ url, body }, callback) { + return request.post(url, body, (error, response, body) => { if (!error && response.statusCode >= 200 && response.statusCode < 300) { - callback(null, {data: body}); + callback(null, body); } else { callback(error || new Error(response.statusCode)); } diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index 4d7a1b392dd..7adcb25a6e6 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -17,18 +17,6 @@ test('ajax', (t) => { callback(); }); - t.test('getArrayBuffer, no content error', (t) => { - window.server.respondWith(request => { - request.respond(200, {'Content-Type': 'image/png'}, ''); - }); - getArrayBuffer({ url:'' }, (error) => { - t.pass('called getArrayBuffer'); - t.ok(error, 'should error when the status is 200 without content.'); - t.end(); - }); - window.server.respond(); - }); - t.test('getArrayBuffer, 404', (t) => { window.server.respondWith(request => { request.respond(404); @@ -102,7 +90,7 @@ test('ajax', (t) => { window.server.respondWith(request => { request.respond(204); }); - postData({ url:'api.mapbox.com' }, {}, (error) => { + postData({ url:'api.mapbox.com' }, (error) => { t.equal(error, null); t.end(); }); From c87c5d8de5b7e4f8540bc9f25db9069bbb01708e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 5 Oct 2018 16:53:06 +0200 Subject: [PATCH 011/115] extract isMapboxHTTPURL function --- src/util/mapbox.js | 9 +++-- test/unit/util/mapbox.test.js | 66 +++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 58d05eb35e0..356a2f734db 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -46,7 +46,12 @@ function isMapboxURL(url: string) { return url.indexOf('mapbox:') === 0; } -export { isMapboxURL }; +const mapboxHTTPURLRe = /^((https?:)?\/\/)?([^\/]+\.)?mapbox\.c(n|om)(\/|\?|$)/i; +function isMapboxHTTPURL(url: string): boolean { + return mapboxHTTPURLRe.test(url); +} + +export { isMapboxURL, isMapboxHTTPURL }; export const normalizeStyleURL = function(url: string, accessToken?: string): string { if (!isMapboxURL(url)) return url; @@ -146,7 +151,7 @@ export class TurnstileEvent { // mapbox tiles. if (config.ACCESS_TOKEN && Array.isArray(tileUrls) && - tileUrls.some((url) => { return /(mapbox\.c)(n|om)/i.test(url); })) { + tileUrls.some(url => isMapboxHTTPURL(url))) { this.queueRequest(browser.now()); } } diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index 52876d81b97..433802a4933 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -6,6 +6,16 @@ import window from '../../../src/util/window'; import { uuid } from '../../../src/util/util'; import { version } from '../../../package.json'; +const mapboxTileURLs = [ + 'https://a.tiles.mapbox.com/v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7/{z}/{x}/{y}.vector.pbf', + 'https://b.tiles.mapbox.com/v4/mapbox.mapbox-terrain-v2,mapbox.mapbox-streets-v7/{z}/{x}/{y}.vector.pbf' +]; + +const nonMapboxTileURLs = [ + 'https://a.example.com/tiles/{z}/{x}/{y}.mvt', + 'https://b.example.com/tiles/{z}/{x}/{y}.mvt' +]; + test("mapbox", (t) => { const mapboxSource = 'mapbox://user.map'; const nonMapboxSource = 'http://www.example.com/tiles.json'; @@ -15,6 +25,18 @@ test("mapbox", (t) => { callback(); }); + t.test('.isMapboxHTTPURL', (t) => { + t.ok(mapbox.isMapboxHTTPURL('http://mapbox.com')); + t.ok(mapbox.isMapboxHTTPURL('https://mapbox.com')); + t.ok(mapbox.isMapboxHTTPURL('https://mapbox.com/')); + t.ok(mapbox.isMapboxHTTPURL('https://mapbox.com?')); + t.ok(mapbox.isMapboxHTTPURL('https://api.mapbox.com/tiles')); + t.ok(mapbox.isMapboxHTTPURL('https://api.mapbox.cn/tiles')); + t.ok(mapbox.isMapboxHTTPURL('http://a.tiles.mapbox.cn/tiles')); + t.notOk(mapbox.isMapboxHTTPURL('http://example.com/mapbox.com')); + t.end(); + }); + t.test('.normalizeStyleURL', (t) => { t.test('returns an API URL with access_token parameter when no query string', (t) => { t.equal(mapbox.normalizeStyleURL('mapbox://styles/user/style'), 'https://api.mapbox.com/styles/v1/user/style?access_token=key'); @@ -300,14 +322,14 @@ test("mapbox", (t) => { t.test('does not POST when mapboxgl.ACCESS_TOKEN is not set', (t) => { config.ACCESS_TOKEN = null; - event.postTurnstileEvent([' a.tiles.mapxbox.com']); + event.postTurnstileEvent(mapboxTileURLs); t.equal(window.server.requests.length, 0); t.end(); }); t.test('does not POST when url does not point to mapbox.com', (t) => { - event.postTurnstileEvent(['a.tiles.boxmap.com']); + event.postTurnstileEvent(nonMapboxTileURLs); t.equal(window.server.requests.length, 0); t.end(); @@ -317,7 +339,7 @@ test("mapbox", (t) => { const previousUrl = config.API_URL; config.API_URL = 'https://api.mapbox.cn'; - event.postTurnstileEvent(['a.tiles.mapbox.cn']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -361,7 +383,7 @@ test("mapbox", (t) => { t.stub(browser, 'now').callsFake(() => now + 5); // A bit later - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); t.false(window.server.requests.length); t.end(); @@ -377,7 +399,7 @@ test("mapbox", (t) => { t.stub(browser, 'now').callsFake(() => now + ms25Hours); // next day - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -397,7 +419,7 @@ test("mapbox", (t) => { t.stub(browser, 'now').callsFake(() => now); // Past relative ot lastSuccess - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -410,12 +432,12 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time within same calendar day', (t) => { let now = +Date.now(); t.stub(browser, 'now').callsFake(() => now); - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); //Post second event const firstEvent = now; now += (60 * 1000); // A bit later - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -431,12 +453,12 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time when clock goes backwards less than a day', (t) => { let now = +Date.now(); t.stub(browser, 'now').callsFake(() => now); - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); //Post second event const firstEvent = now; now -= (60 * 1000); // A bit earlier - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -452,7 +474,7 @@ test("mapbox", (t) => { t.test('POSTs appuserTurnstile event when access token changes', (t) => { config.ACCESS_TOKEN = 'pk.new.*'; - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -467,7 +489,7 @@ test("mapbox", (t) => { t.test('when LocalStorage is not available', (t) => { t.test('POSTs appuserTurnstile event', (t) => { - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -486,11 +508,11 @@ test("mapbox", (t) => { let now = +Date.now(); const firstEvent = now; t.stub(browser, 'now').callsFake(() => now); - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); //Post second event now += (60 * 1000); // A bit later - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -507,11 +529,11 @@ test("mapbox", (t) => { let now = +Date.now(); const firstEvent = now; t.stub(browser, 'now').callsFake(() => now); - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); //Post second event now -= (60 * 1000); // A bit earlier - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -527,7 +549,7 @@ test("mapbox", (t) => { t.test('POSTs appuserTurnstile event when access token changes', (t) => { config.ACCESS_TOKEN = 'pk.new.*'; - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; req.respond(200); @@ -546,11 +568,11 @@ test("mapbox", (t) => { let now = +Date.now(); t.stub(browser, 'now').callsFake(() => now); - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); now += ms25Hours; // Add a day const tomorrow = now; - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); let req = window.server.requests[0]; req.respond(200); @@ -573,15 +595,15 @@ test("mapbox", (t) => { t.stub(browser, 'now').callsFake(() => now); const today = now; - event.postTurnstileEvent(['a.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const laterToday = now + 1; now = laterToday; - event.postTurnstileEvent(['b.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const tomorrow = laterToday + ms25Hours; // Add a day now = tomorrow; - event.postTurnstileEvent(['c.tiles.mapbox.com']); + event.postTurnstileEvent(mapboxTileURLs); const reqToday = window.server.requests[0]; reqToday.respond(200); From eec8cd5e43ee861b5202a1e1eb2e7d5739e0dfef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 5 Oct 2018 17:59:45 +0200 Subject: [PATCH 012/115] use Fetch API if available and set correct referrer --- src/source/worker.js | 7 ++++- src/style/style.js | 4 ++- src/types/window.js | 3 ++ src/util/ajax.js | 66 ++++++++++++++++++++++++++++++++++++++------ test/ajax_stubs.js | 2 ++ 5 files changed, 71 insertions(+), 11 deletions(-) diff --git a/src/source/worker.js b/src/source/worker.js index 98fcb3a7419..85f1f15691d 100644 --- a/src/source/worker.js +++ b/src/source/worker.js @@ -32,6 +32,7 @@ export default class Worker { workerSourceTypes: { [string]: Class }; workerSources: { [string]: { [string]: { [string]: WorkerSource } } }; demWorkerSources: { [string]: { [string]: RasterDEMTileWorkerSource } }; + referrer: ?string; constructor(self: WorkerGlobalScopeInterface) { this.self = self; @@ -65,6 +66,10 @@ export default class Worker { }; } + setReferrer(mapID: string, referrer: string) { + this.referrer = referrer; + } + setLayers(mapId: string, layers: Array, callback: WorkerTileCallback) { this.getLayerIndex(mapId).replace(layers); callback(); @@ -196,5 +201,5 @@ export default class Worker { if (typeof WorkerGlobalScope !== 'undefined' && typeof self !== 'undefined' && self instanceof WorkerGlobalScope) { - new Worker(self); + self.worker = new Worker(self); } diff --git a/src/style/style.js b/src/style/style.js index 2e9127dae4c..977fa39361f 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -11,7 +11,7 @@ import GlyphManager from '../render/glyph_manager'; import Light from './light'; import LineAtlas from '../render/line_atlas'; import { pick, clone, extend, deepEqual, filterObject, mapObject } from '../util/util'; -import { getJSON, ResourceType } from '../util/ajax'; +import { getJSON, getReferrer, ResourceType } from '../util/ajax'; import { isMapboxURL, normalizeStyleURL } from '../util/mapbox'; import browser from '../util/browser'; import Dispatcher from '../util/dispatcher'; @@ -144,6 +144,8 @@ class Style extends Evented { this._resetUpdates(); + this.dispatcher.broadcast('setReferrer', getReferrer()); + const self = this; this._rtlTextPluginCallback = Style.registerForPluginAvailability((args) => { self.dispatcher.broadcast('loadRTLTextPlugin', args.pluginURL, args.completionCallback); diff --git a/src/types/window.js b/src/types/window.js index 729bc21b3d2..54bf7d2f8c5 100644 --- a/src/types/window.js +++ b/src/types/window.js @@ -18,6 +18,7 @@ export interface Window extends EventTarget, IDBEnvironment { +isSecureContext: boolean; +length: number; +location: Location; + +origin: string; name: string; +navigator: Navigator; offscreenBuffering: string | boolean; @@ -131,6 +132,8 @@ export interface Window extends EventTarget, IDBEnvironment { WheelEvent: typeof WheelEvent; Worker: typeof Worker; XMLHttpRequest: typeof XMLHttpRequest; + Request: typeof Request; + AbortController: any; alert(message?: any): void; blur(): void; diff --git a/src/util/ajax.js b/src/util/ajax.js index f77dcf95758..d8fa3890392 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -2,6 +2,7 @@ import window from './window'; import { extend } from './util'; +import { isMapboxHTTPURL } from './mapbox'; import type { Callback } from '../types/callback'; import type { Cancelable } from '../types/cancelable'; @@ -40,7 +41,7 @@ export type RequestParameters = { headers?: Object, method?: 'GET' | 'POST' | 'PUT', body?: string, - type?: 'string' | 'json' | 'arraybuffer', + type?: 'string' | 'json' | 'arrayBuffer', credentials?: 'same-origin' | 'include', collectResourceTiming?: boolean }; @@ -51,6 +52,9 @@ class AJAXError extends Error { status: number; url: string; constructor(message: string, status: number, url: string) { + if (status === 401 && isMapboxHTTPURL(url)) { + message += ': you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens'; + } super(message); this.status = status; this.url = url; @@ -65,11 +69,57 @@ class AJAXError extends Error { } } -function makeRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { +// Ensure that we're sending the correct referrer from blob URL worker bundles. +// For files loaded from the local file system, `location.origin` will be set +// to the string(!) "null" (Firefox), or "file://" (Chrome, Safari, Edge, IE), +// and we will set an empty referrer. Otherwise, we're using the document's URL. +/* global self, WorkerGlobalScope */ +export const getReferrer = typeof WorkerGlobalScope !== 'undefined' && + typeof self !== 'undefined' && + self instanceof WorkerGlobalScope ? + () => self.worker && self.worker.referrer : + () => { + const origin = window.location.origin; + if (origin && origin !== 'null' && origin !== 'file://') { + return origin + window.location.pathname; + } + }; + +function makeFetchRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { + const controller = new window.AbortController(); + const request = new window.Request(requestParameters.url, { + method: requestParameters.method || 'GET', + body: requestParameters.body, + credentials: requestParameters.credentials, + headers: requestParameters.headers, + referrer: getReferrer(), + signal: controller.signal + }); + + if (requestParameters.type === 'json') { + request.headers.set('Accept', 'application/json'); + } + + window.fetch(request).then(response => { + if (response.ok) { + response[requestParameters.type || 'text']().then(result => { + callback(null, result, response.headers.get('Cache-Control'), response.headers.get('Expires')); + }).catch(callback); + } else { + callback(new AJAXError(response.statusText, response.status, requestParameters.url)); + } + }).catch((error) => { + callback(new Error(error.message)); + }); + + return { cancel: () => controller.abort() }; +} + +function makeXMLHttpRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { const xhr: XMLHttpRequest = new window.XMLHttpRequest(); xhr.open(requestParameters.method || 'GET', requestParameters.url, true); - if (requestParameters.type === 'arraybuffer') { + if (requestParameters.type === 'arrayBuffer') { xhr.responseType = 'arraybuffer'; } for (const k in requestParameters.headers) { @@ -95,23 +145,21 @@ function makeRequest(requestParameters: RequestParameters, callback: ResponseCal } callback(null, data, xhr.getResponseHeader('Cache-Control'), xhr.getResponseHeader('Expires')); } else { - if (xhr.status === 401 && requestParameters.url.match(/mapbox.com/)) { - callback(new AJAXError(`${xhr.statusText}: you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens`, xhr.status, requestParameters.url)); - } else { - callback(new AJAXError(xhr.statusText, xhr.status, requestParameters.url)); - } + callback(new AJAXError(xhr.statusText, xhr.status, requestParameters.url)); } }; xhr.send(requestParameters.body); return { cancel: () => xhr.abort() }; } +const makeRequest = window.fetch && window.Request && window.AbortController ? makeFetchRequest : makeXMLHttpRequest; + export const getJSON = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { return makeRequest(extend(requestParameters, { type: 'json' }), callback); }; export const getArrayBuffer = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { - return makeRequest(extend(requestParameters, { type: 'arraybuffer' }), callback); + return makeRequest(extend(requestParameters, { type: 'arrayBuffer' }), callback); }; export const postData = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { diff --git a/test/ajax_stubs.js b/test/ajax_stubs.js index 8ecceaf3d80..d3e808ff8c2 100644 --- a/test/ajax_stubs.js +++ b/test/ajax_stubs.js @@ -34,6 +34,8 @@ function cached(data, callback) { }); } +export const getReferrer = () => undefined; + export const getJSON = function({ url }, callback) { if (cache[url]) return cached(cache[url], callback); return request(url, (error, response, body) => { From 650635f5812dbaeb3d63264b3e09b05214143fcc Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Tue, 9 Oct 2018 00:11:36 -0400 Subject: [PATCH 013/115] Show attribution only for visible layers, fix #6281 --- src/style/style.js | 8 +++- src/ui/control/attribution_control.js | 13 ++++-- test/unit/ui/control/attribution.test.js | 51 +++++++++++++++++++----- 3 files changed, 57 insertions(+), 15 deletions(-) diff --git a/src/style/style.js b/src/style/style.js index 977fa39361f..e9d20e764e1 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -345,6 +345,7 @@ class Style extends Evented { return; } + const changed = this._changed; if (this._changed) { const updatedIds = Object.keys(this._updatedLayers); const removedIds = Object.keys(this._removedLayers); @@ -369,8 +370,6 @@ class Style extends Evented { this.light.updateTransitions(parameters); this._resetUpdates(); - - this.fire(new Event('data', {dataType: 'style'})); } for (const sourceId in this.sourceCaches) { @@ -388,6 +387,11 @@ class Style extends Evented { this.light.recalculate(parameters); this.z = parameters.zoom; + + if (changed) { + this.fire(new Event('data', {dataType: 'style'})); + } + } _updateWorkerLayers(updatedIds: Array, removedIds: Array) { diff --git a/src/ui/control/attribution_control.js b/src/ui/control/attribution_control.js index 5f2b83944db..133945a7c1d 100644 --- a/src/ui/control/attribution_control.js +++ b/src/ui/control/attribution_control.js @@ -59,6 +59,7 @@ class AttributionControl { this._updateAttributions(); this._updateEditLink(); + this._map.on('styledata', this._updateData); this._map.on('sourcedata', this._updateData); this._map.on('moveend', this._updateEditLink); @@ -73,6 +74,7 @@ class AttributionControl { onRemove() { DOM.remove(this._container); + this._map.off('styledata', this._updateData); this._map.off('sourcedata', this._updateData); this._map.off('moveend', this._updateEditLink); this._map.off('resize', this._updateCompact); @@ -104,7 +106,7 @@ class AttributionControl { } _updateData(e: any) { - if (e && e.sourceDataType === 'metadata') { + if (e && (e.sourceDataType === 'metadata' || e.dataType === 'style')) { this._updateAttributions(); this._updateEditLink(); } @@ -129,9 +131,12 @@ class AttributionControl { const sourceCaches = this._map.style.sourceCaches; for (const id in sourceCaches) { - const source = sourceCaches[id].getSource(); - if (source.attribution && attributions.indexOf(source.attribution) < 0) { - attributions.push(source.attribution); + const sourceCache = sourceCaches[id]; + if (sourceCache.used) { + const source = sourceCache.getSource(); + if (source.attribution && attributions.indexOf(source.attribution) < 0) { + attributions.push(source.attribution); + } } } diff --git a/test/unit/ui/control/attribution.test.js b/test/unit/ui/control/attribution.test.js index 01611cd4e1f..cf4a7f68fe3 100644 --- a/test/unit/ui/control/attribution.test.js +++ b/test/unit/ui/control/attribution.test.js @@ -81,14 +81,20 @@ test('AttributionControl dedupes attributions that are substrings of others', (t map.addControl(attribution); map.on('load', () => { - map.addSource('1', { type: 'vector', attribution: 'World' }); - map.addSource('2', { type: 'vector', attribution: 'Hello World' }); - map.addSource('3', { type: 'vector', attribution: 'Another Source' }); - map.addSource('4', { type: 'vector', attribution: 'Hello' }); - map.addSource('5', { type: 'vector', attribution: 'Hello World' }); + map.addSource('1', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'World' }); + map.addSource('2', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello World' }); + map.addSource('3', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Another Source' }); + map.addSource('4', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello' }); + map.addSource('5', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello World' }); map.addSource('6', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello World' }); map.addSource('7', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'GeoJSON Source' }); - + map.addLayer({ id: '1', type: 'fill', source: '1' }); + map.addLayer({ id: '2', type: 'fill', source: '2' }); + map.addLayer({ id: '3', type: 'fill', source: '3' }); + map.addLayer({ id: '4', type: 'fill', source: '4' }); + map.addLayer({ id: '5', type: 'fill', source: '5' }); + map.addLayer({ id: '6', type: 'fill', source: '6' }); + map.addLayer({ id: '7', type: 'fill', source: '7' }); }); let times = 0; @@ -107,7 +113,8 @@ test('AttributionControl has the correct edit map link', (t) => { const attribution = new AttributionControl(); map.addControl(attribution); map.on('load', () => { - map.addSource('1', {type: 'vector', attribution: 'Improve this map'}); + map.addSource('1', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Improve this map'}); + map.addLayer({ id: '1', type: 'fill', source: '1' }); map.on('data', (e) => { if (e.dataType === 'source' && e.sourceDataType === 'metadata') { t.equal(attribution._editLink.href, 'https://www.mapbox.com/feedback/?owner=mapbox&id=streets-v10&access_token=pk.123#/0/0/0', 'edit link contains map location data'); @@ -124,7 +131,8 @@ test('AttributionControl is hidden if empty', (t) => { const attribution = new AttributionControl(); map.addControl(attribution); map.on('load', () => { - map.addSource('1', { type: 'vector' }); + map.addSource('1', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }}); + map.addLayer({ id: '1', type: 'fill', source: '1' }); }); const container = map.getContainer(); @@ -133,7 +141,8 @@ test('AttributionControl is hidden if empty', (t) => { t.equal(attribution._container.innerHTML, ''); t.equal(container.querySelectorAll('.mapboxgl-attrib-empty').length, 1, 'includes empty class when no attribution strings are provided'); - map.addSource('2', { type: 'vector', attribution: 'Hello World' }); + map.addSource('2', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello World'}); + map.addLayer({ id: '2', type: 'fill', source: '2' }); }; const checkNotEmptyLater = () => { @@ -179,3 +188,27 @@ test('AttributionControl shows all custom attributions if customAttribution arra ); t.end(); }); + +test('AttributionControl hides attributions for sources that are not currently visible', (t) => { + const map = createMap(t); + const attribution = new AttributionControl(); + map.addControl(attribution); + + map.on('load', () => { + map.addSource('1', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Used' }); + map.addSource('2', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Not used' }); + map.addSource('3', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Vibility none' }); + map.addLayer({ id: '1', type: 'fill', source: '1' }); + map.addLayer({ id: '3', type: 'fill', source: '3', layout: { visibility: 'none' } }); + }); + + let times = 0; + map.on('data', (e) => { + if (e.dataType === 'source' && e.sourceDataType === 'metadata') { + if (++times === 3) { + t.equal(attribution._container.innerHTML, 'Used'); + t.end(); + } + } + }); +}); From 1b98c400f3d2647e59f2d0d20d8599f84ec12f4f Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Mon, 8 Oct 2018 15:58:19 -0700 Subject: [PATCH 014/115] Add data-driven format option tests. "text-font" can't be data-driven because we need to be able to statically analyze set of required fonts. --- .../format/data-driven-font/test.json | 48 +++++++++++++++++++ .../format/data-driven-scale/test.json | 23 +++++++++ 2 files changed, 71 insertions(+) create mode 100644 test/integration/expression-tests/format/data-driven-font/test.json create mode 100644 test/integration/expression-tests/format/data-driven-scale/test.json diff --git a/test/integration/expression-tests/format/data-driven-font/test.json b/test/integration/expression-tests/format/data-driven-font/test.json new file mode 100644 index 00000000000..0d731a3d3d1 --- /dev/null +++ b/test/integration/expression-tests/format/data-driven-font/test.json @@ -0,0 +1,48 @@ +{ + "expression": [ + "format", + "a", + { + "font-scale": ["get", "font-scale"] + } + ], + "inputs": [ + [{}, {"properties": {"font-scale": 1.5}}], + [{}, {"properties": {"font-scale": 0.5}}] + ], + "expected": { + "compiled": { + "result": "success", + "isFeatureConstant": false, + "isZoomConstant": true, + "type": "formatted" + }, + "outputs": [ + { + "sections": [ + { + "text": "a", + "scale": 1.5, + "fontStack": null + } + ] + }, + { + "sections": [ + { + "text": "a", + "scale": 0.5, + "fontStack": null + } + ] + } + ], + "serialized": [ + "format", + "a", + { + "font-scale": ["number", ["get", "font-scale"]] + } + ] + } +} diff --git a/test/integration/expression-tests/format/data-driven-scale/test.json b/test/integration/expression-tests/format/data-driven-scale/test.json new file mode 100644 index 00000000000..c34d1a6b9c4 --- /dev/null +++ b/test/integration/expression-tests/format/data-driven-scale/test.json @@ -0,0 +1,23 @@ +{ + "expression": [ + "format", + "a", + { + "text-font": ["array", ["string", ["get", "text-font"]]] + } + ], + "inputs": [ + [{}, {"properties": {"text-font": "test"}}] + ], + "expected": { + "compiled": { + "result": "error", + "errors": [ + { + "error": "Expected array but found array instead.", + "key": "[1]" + } + ] + } + } +} From 544d37759157f59f5dbc8e4e1301c30340c0a176 Mon Sep 17 00:00:00 2001 From: ryanhamley Date: Tue, 9 Oct 2018 14:33:57 -0700 Subject: [PATCH 015/115] Show compact attribution on IE11 --- src/css/mapbox-gl.css | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/css/mapbox-gl.css b/src/css/mapbox-gl.css index 98dbd96017f..03d57dd22cd 100644 --- a/src/css/mapbox-gl.css +++ b/src/css/mapbox-gl.css @@ -217,20 +217,25 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { @media screen { .mapboxgl-ctrl-attrib.mapboxgl-compact { - padding-top: 2px; - padding-bottom: 2px; margin: 0 10px 10px; position: relative; - padding-right: 24px; background-color: #fff; border-radius: 3px 12px 12px 3px; - visibility: hidden; } .mapboxgl-ctrl-attrib.mapboxgl-compact:hover { + padding: 2px 24px 2px 4px; visibility: visible; } + .mapboxgl-ctrl-attrib.mapboxgl-compact > a { + display: none; + } + + .mapboxgl-ctrl-attrib.mapboxgl-compact:hover > a { + display: inline; + } + .mapboxgl-ctrl-attrib.mapboxgl-compact::after { content: ''; cursor: pointer; @@ -242,7 +247,6 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { width: 24px; height: 24px; box-sizing: border-box; - visibility: visible; border-radius: 12px; } } From 5ad058b104dd1f094d148ce7a6da2999477e2c89 Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Tue, 9 Oct 2018 16:52:48 -0700 Subject: [PATCH 016/115] send correct timestamp with turnstile event (#7381) * send correct timestamp with turnstile event * update TurnstileEvent tests --- src/util/mapbox.js | 2 +- test/unit/util/mapbox.test.js | 38 +++++++++++++++++++---------------- 2 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 356a2f734db..18b68167392 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -152,7 +152,7 @@ export class TurnstileEvent { if (config.ACCESS_TOKEN && Array.isArray(tileUrls) && tileUrls.some(url => isMapboxHTTPURL(url))) { - this.queueRequest(browser.now()); + this.queueRequest(Date.now()); } } diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index 433802a4933..d4467c9280c 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -381,9 +381,9 @@ test("mapbox", (t) => { lastSuccess: now })); - t.stub(browser, 'now').callsFake(() => now + 5); // A bit later - + const dateNow = t.stub(Date, 'now').callsFake(() => now + 5); // A bit later event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); t.false(window.server.requests.length); t.end(); @@ -397,9 +397,9 @@ test("mapbox", (t) => { lastSuccess: now })); - t.stub(browser, 'now').callsFake(() => now + ms25Hours); // next day - + const dateNow = t.stub(Date, 'now').callsFake(() => now + ms25Hours); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const req = window.server.requests[0]; req.respond(200); @@ -417,8 +417,6 @@ test("mapbox", (t) => { lastSuccess: now + ms25Hours // 24-hours later })); - t.stub(browser, 'now').callsFake(() => now); // Past relative ot lastSuccess - event.postTurnstileEvent(mapboxTileURLs); const req = window.server.requests[0]; @@ -431,13 +429,14 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time within same calendar day', (t) => { let now = +Date.now(); - t.stub(browser, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); //Post second event const firstEvent = now; now += (60 * 1000); // A bit later + const dateNow = t.stub(Date, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const req = window.server.requests[0]; req.respond(200); @@ -452,13 +451,14 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time when clock goes backwards less than a day', (t) => { let now = +Date.now(); - t.stub(browser, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); //Post second event const firstEvent = now; now -= (60 * 1000); // A bit earlier + const dateNow = t.stub(Date, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const req = window.server.requests[0]; req.respond(200); @@ -507,12 +507,13 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time within same calendar day', (t) => { let now = +Date.now(); const firstEvent = now; - t.stub(browser, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); //Post second event now += (60 * 1000); // A bit later + const dateNow = t.stub(Date, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const req = window.server.requests[0]; req.respond(200); @@ -528,12 +529,13 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time when clock goes backwards less than a day', (t) => { let now = +Date.now(); const firstEvent = now; - t.stub(browser, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); //Post second event now -= (60 * 1000); // A bit earlier + const dateNow = t.stub(Date, 'now').callsFake(() => now); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const req = window.server.requests[0]; req.respond(200); @@ -565,14 +567,13 @@ test("mapbox", (t) => { }); t.test('POSTs appUserTurnstile event on next calendar day', (t) => { - let now = +Date.now(); - t.stub(browser, 'now').callsFake(() => now); - + const now = +Date.now(); event.postTurnstileEvent(mapboxTileURLs); - - now += ms25Hours; // Add a day - const tomorrow = now; + // Add a day + const tomorrow = now + ms25Hours; + const dateNow = t.stub(Date, 'now').callsFake(() => tomorrow); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); let req = window.server.requests[0]; req.respond(200); @@ -592,18 +593,21 @@ test("mapbox", (t) => { t.test('Queues and POSTs appuserTurnstile events when triggerred in quick succession', (t) => { let now = Date.now(); - t.stub(browser, 'now').callsFake(() => now); const today = now; event.postTurnstileEvent(mapboxTileURLs); const laterToday = now + 1; + let dateNow = t.stub(Date, 'now').callsFake(() => laterToday); now = laterToday; event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const tomorrow = laterToday + ms25Hours; // Add a day now = tomorrow; + dateNow = t.stub(Date, 'now').callsFake(() => tomorrow); event.postTurnstileEvent(mapboxTileURLs); + dateNow.restore(); const reqToday = window.server.requests[0]; reqToday.respond(200); From 52c6a7f1ba73d04f8a1aad9e1f5dfebda18a5af5 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Mon, 8 Oct 2018 22:26:46 -0400 Subject: [PATCH 017/115] fix #6236, explain that filters are only evaluated at integer zoom levels --- src/style-spec/reference/v8.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index f2280755460..a19cb0146f7 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -581,7 +581,7 @@ }, "filter": { "type": "filter", - "doc": "A expression specifying conditions on source features. Only features that match the filter are displayed. The `feature-state` expression is not supported in filter expressions." + "doc": "A expression specifying conditions on source features. Only features that match the filter are displayed. Zoom expressions in filters are only evaluated at integer zoom levels. The `feature-state` expression is not supported in filter expressions." }, "layout": { "type": "layout", From 6db59a5a05dc51197af48fe690d2fb88b138896a Mon Sep 17 00:00:00 2001 From: Fabian Guerra Soto Date: Thu, 11 Oct 2018 08:32:45 -0700 Subject: [PATCH 018/115] Update symbol-z-order support on iOS v4.5.0. (#7398) --- src/style-spec/reference/v8.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index a19cb0146f7..6060d7c469c 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -972,7 +972,8 @@ "doc": "Controls the order in which overlapping symbols in the same layer are rendered", "sdk-support": { "basic functionality": { - "js": "0.49.0" + "js": "0.49.0", + "ios": "4.5.0" }, "data-driven styling": {} }, From 3f4045ce314ca02e9ecb0ff3a2859e54de3f09da Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Thu, 11 Oct 2018 19:25:16 -0400 Subject: [PATCH 019/115] avoid SecurityError in IE for custom layers example --- docs/pages/example/custom-style-layer.html | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/pages/example/custom-style-layer.html b/docs/pages/example/custom-style-layer.html index a9887a8407f..605575b25de 100644 --- a/docs/pages/example/custom-style-layer.html +++ b/docs/pages/example/custom-style-layer.html @@ -4,8 +4,7 @@ container: 'map', zoom: 4, center: [0, 0], - style: 'mapbox://styles/mapbox/light-v9', - hash: true + style: 'mapbox://styles/mapbox/light-v9' }); From d9a45c42d54d045b55c250f6bd1135956c4434b7 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Thu, 11 Oct 2018 22:12:10 -0400 Subject: [PATCH 020/115] fix #7410: using hash within iframes in IE11 --- src/ui/hash.js | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ui/hash.js b/src/ui/hash.js index abf657ac635..057addbd265 100644 --- a/src/ui/hash.js +++ b/src/ui/hash.js @@ -93,7 +93,13 @@ class Hash { _updateHashUnthrottled() { const hash = this.getHashString(); - window.history.replaceState(window.history.state, '', hash); + try { + window.history.replaceState(window.history.state, '', hash); + } catch (SecurityError) { + // IE11 does not allow this if the page is within an iframe created + // with iframe.contentWindow.document.write(...). + // https://github.com/mapbox/mapbox-gl-js/issues/7410 + } } } From d9ff173c3387e775e4f060ce1ec2e1c6ad838666 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Fri, 12 Oct 2018 13:32:42 +0300 Subject: [PATCH 021/115] don't use gl_PointSize, since it sometimes crashes in Edge --- docs/pages/example/custom-style-layer.html | 22 ++++++++++++++-------- docs/pages/example/custom-style-layer.js | 2 +- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/docs/pages/example/custom-style-layer.html b/docs/pages/example/custom-style-layer.html index 605575b25de..3cbc1ddc796 100644 --- a/docs/pages/example/custom-style-layer.html +++ b/docs/pages/example/custom-style-layer.html @@ -8,8 +8,8 @@ }); -var nullIslandLayer = { - id: 'null-island', +var highlightLayer = { + id: 'highlight', type: 'custom', onAdd: function (map, gl) { @@ -17,13 +17,12 @@ "uniform mat4 u_matrix;" + "attribute vec2 a_pos;" + "void main() {" + - " gl_Position = u_matrix * vec4(a_pos, 0.0, 1.0);" + - " gl_PointSize = 100.0;" + + " gl_Position = vec4(a_pos, 0.0, 1.0);" + "}"; var fragmentSource = "" + "void main() {" + - " gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);" + + " gl_FragColor = vec4(1.0, 0.0, 0.0, 0.5);" + "}"; var vertexShader = gl.createShader(gl.VERTEX_SHADER); @@ -42,7 +41,12 @@ this.buffer = gl.createBuffer(); gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); - gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([0.5, 0.5]), gl.STATIC_DRAW); + gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([ + -0.5, -0.5, + -0.5, 0.5, + 0.5, -0.5, + 0.5, 0.5 + ]), gl.STATIC_DRAW); }, render: function(gl, matrix) { @@ -51,11 +55,13 @@ gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); gl.enableVertexAttribArray(this.aPos); gl.vertexAttribPointer(this.aPos, 2, gl.FLOAT, false, 0, 0); - gl.drawArrays(gl.POINTS, 0, 1); + gl.enable(gl.BLEND); + gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA); + gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4); } }; map.on('load', function() { - map.addLayer(nullIslandLayer); + map.addLayer(highlightLayer, 'waterway-river-canal'); }); diff --git a/docs/pages/example/custom-style-layer.js b/docs/pages/example/custom-style-layer.js index a179f65b45c..6ba756f6419 100644 --- a/docs/pages/example/custom-style-layer.js +++ b/docs/pages/example/custom-style-layer.js @@ -1,6 +1,6 @@ /*--- title: Add a custom style layer -description: Use a custom style layer to add custom gl rendering. +description: Use a custom style layer to render custom WebGL content. tags: - layers pathname: /mapbox-gl-js/example/custom-style-layer/ From 244104e3cd0039e0d457845d77b034bc775c31c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Konstantin=20K=C3=A4fer?= Date: Thu, 11 Oct 2018 19:52:31 +0300 Subject: [PATCH 022/115] use fixed time in testing to avoid test failures due to millisecond cutovers --- test/unit/util/mapbox.test.js | 51 ++++++++++++++--------------------- 1 file changed, 20 insertions(+), 31 deletions(-) diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index d4467c9280c..06a320388ae 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -16,6 +16,12 @@ const nonMapboxTileURLs = [ 'https://b.example.com/tiles/{z}/{x}/{y}.mvt' ]; +function withFixedDate(t, now, fn) { + const dateNow = t.stub(Date, 'now').callsFake(() => now); + fn(); + dateNow.restore(); +} + test("mapbox", (t) => { const mapboxSource = 'mapbox://user.map'; const nonMapboxSource = 'http://www.example.com/tiles.json'; @@ -381,9 +387,8 @@ test("mapbox", (t) => { lastSuccess: now })); - const dateNow = t.stub(Date, 'now').callsFake(() => now + 5); // A bit later - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + // Post 5 seconds later + withFixedDate(t, now + 5, () => event.postTurnstileEvent(mapboxTileURLs)); t.false(window.server.requests.length); t.end(); @@ -397,9 +402,7 @@ test("mapbox", (t) => { lastSuccess: now })); - const dateNow = t.stub(Date, 'now').callsFake(() => now + ms25Hours); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, now + ms25Hours, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -417,7 +420,7 @@ test("mapbox", (t) => { lastSuccess: now + ms25Hours // 24-hours later })); - event.postTurnstileEvent(mapboxTileURLs); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -429,14 +432,12 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time within same calendar day', (t) => { let now = +Date.now(); - event.postTurnstileEvent(mapboxTileURLs); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); //Post second event const firstEvent = now; now += (60 * 1000); // A bit later - const dateNow = t.stub(Date, 'now').callsFake(() => now); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -451,14 +452,12 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time when clock goes backwards less than a day', (t) => { let now = +Date.now(); - event.postTurnstileEvent(mapboxTileURLs); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); //Post second event const firstEvent = now; now -= (60 * 1000); // A bit earlier - const dateNow = t.stub(Date, 'now').callsFake(() => now); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -507,13 +506,11 @@ test("mapbox", (t) => { t.test('does not POST appuserTurnstile event second time within same calendar day', (t) => { let now = +Date.now(); const firstEvent = now; - event.postTurnstileEvent(mapboxTileURLs); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); //Post second event now += (60 * 1000); // A bit later - const dateNow = t.stub(Date, 'now').callsFake(() => now); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -533,9 +530,7 @@ test("mapbox", (t) => { //Post second event now -= (60 * 1000); // A bit earlier - const dateNow = t.stub(Date, 'now').callsFake(() => now); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, now, () => event.postTurnstileEvent(mapboxTileURLs)); const req = window.server.requests[0]; req.respond(200); @@ -571,9 +566,7 @@ test("mapbox", (t) => { event.postTurnstileEvent(mapboxTileURLs); // Add a day const tomorrow = now + ms25Hours; - const dateNow = t.stub(Date, 'now').callsFake(() => tomorrow); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, tomorrow, () => event.postTurnstileEvent(mapboxTileURLs)); let req = window.server.requests[0]; req.respond(200); @@ -598,16 +591,12 @@ test("mapbox", (t) => { event.postTurnstileEvent(mapboxTileURLs); const laterToday = now + 1; - let dateNow = t.stub(Date, 'now').callsFake(() => laterToday); now = laterToday; - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, laterToday, () => event.postTurnstileEvent(mapboxTileURLs)); const tomorrow = laterToday + ms25Hours; // Add a day now = tomorrow; - dateNow = t.stub(Date, 'now').callsFake(() => tomorrow); - event.postTurnstileEvent(mapboxTileURLs); - dateNow.restore(); + withFixedDate(t, tomorrow, () => event.postTurnstileEvent(mapboxTileURLs)); const reqToday = window.server.requests[0]; reqToday.respond(200); From 11b4228c95fce7fab0d04cb3c20948075da3c4da Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 12 Oct 2018 18:14:26 -0400 Subject: [PATCH 023/115] tighten validation to disallow expressions as stop values (#7396) --- src/style-spec/validate/validate_function.js | 7 ++++++- .../style-spec/fixture/functions.input.json | 19 +++++++++++++++++++ .../style-spec/fixture/functions.output.json | 6 +++++- 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/style-spec/validate/validate_function.js b/src/style-spec/validate/validate_function.js index f34303a06dc..e38ccce1f29 100644 --- a/src/style-spec/validate/validate_function.js +++ b/src/style-spec/validate/validate_function.js @@ -5,7 +5,8 @@ import validate from './validate'; import validateObject from './validate_object'; import validateArray from './validate_array'; import validateNumber from './validate_number'; -import { unbundle } from '../util/unbundle_jsonlint'; +import { isExpression } from '../expression'; +import { unbundle, deepUnbundle } from '../util/unbundle_jsonlint'; import { supportsPropertyExpression, supportsZoomExpression, @@ -138,6 +139,10 @@ export default function validateFunction(options) { }, value)); } + if (isExpression(deepUnbundle(value[1]))) { + return errors.concat([new ValidationError(`${key}[1]`, value[1], 'expressions are not allowed in function stops.')]); + } + return errors.concat(validate({ key: `${key}[1]`, value: value[1], diff --git a/test/unit/style-spec/fixture/functions.input.json b/test/unit/style-spec/fixture/functions.input.json index 82bc2a06e2c..68c63fda0ad 100644 --- a/test/unit/style-spec/fixture/functions.input.json +++ b/test/unit/style-spec/fixture/functions.input.json @@ -967,6 +967,25 @@ "layout": { "line-join": [ "coalesce", ["feature-state", "myState"], "bevel"] } + }, { + "id": "invalid function - expression as stop value", + "type": "line", + "source": "source", + "source-layer": "layer", + "paint": { + "line-width": { + "base": 1, + "stops": [ + [ + 6, + [ + "literal", + 3 + ] + ] + ] + } } + } ] } diff --git a/test/unit/style-spec/fixture/functions.output.json b/test/unit/style-spec/fixture/functions.output.json index c7685c8d7a1..87ec1996fe4 100644 --- a/test/unit/style-spec/fixture/functions.output.json +++ b/test/unit/style-spec/fixture/functions.output.json @@ -198,5 +198,9 @@ { "message": "layers[55].layout.line-join: \"feature-state\" data expressions are not supported with layout properties.", "line": 968 + }, + { + "message": "layers[56].paint.line-width.stops[0][1]: expressions are not allowed in function stops.", + "line": 981 } -] \ No newline at end of file +] From 03f877526dc052f90b5c710d90ef2d7d886fbced Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 17 Oct 2018 13:18:00 +0200 Subject: [PATCH 024/115] Add an unminified production build to the NPM package (#7403) * add an unminified production build to the package * better naming in build scripts * clarify build file names --- .gitignore | 1 + CONTRIBUTING.md | 2 +- build/rollup_plugins.js | 6 ++++-- circle.yml | 2 +- package.json | 7 ++++--- rollup.config.js | 9 ++++++--- 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/.gitignore b/.gitignore index 39b19150806..09a60ab301c 100644 --- a/.gitignore +++ b/.gitignore @@ -3,6 +3,7 @@ /dist/ /docs/pages/dist/mapbox-gl-dev.js /docs/pages/dist/mapbox-gl.js +/docs/pages/dist/mapbox-gl-unminified.js *.js.map node_modules package-lock.json diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e3d4cb357c9..6a681dca680 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -91,7 +91,7 @@ A standalone build allows you to turn the contents of this repository into `mapb To create a standalone build, run ```bash -yarn run build-min +yarn run build-prod-min yarn run build-css ``` diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index 6c756d1873b..933650e05dc 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -9,7 +9,9 @@ import uglify from 'rollup-plugin-uglify'; import minifyStyleSpec from './rollup_plugin_minify_style_spec'; import { createFilter } from 'rollup-pluginutils'; -const production = process.env.BUILD === 'production'; +const {BUILD, MINIFY} = process.env; +const minified = MINIFY === 'true'; +const production = BUILD === 'production'; // Common set of plugins/transformations shared across different rollup // builds (main mapboxgl bundle, style-spec package, benchmarks bundle) @@ -30,7 +32,7 @@ export const plugins = () => [ // https://github.com/mapbox/mapbox-gl-js/pull/6956 ignoreGlobal: true }), - production ? uglify() : false + minified ? uglify() : false ].filter(Boolean); // Using this instead of rollup-plugin-flow due to diff --git a/circle.yml b/circle.yml index c934865c75e..4a433a9a5a5 100644 --- a/circle.yml +++ b/circle.yml @@ -134,7 +134,7 @@ jobs: steps: - attach_workspace: at: . - - run: yarn run build-min + - run: yarn run build-prod-min - run: yarn run build-dev - run: yarn run build-css - run: yarn run build-style-spec diff --git a/package.json b/package.json index 8f334793b8a..f0644191e98 100644 --- a/package.json +++ b/package.json @@ -110,7 +110,8 @@ "scripts": { "build-dev": "rollup -c --environment BUILD:dev", "watch-dev": "rollup -c --environment BUILD:dev --watch", - "build-min": "rollup -c --environment BUILD:production", + "build-prod": "rollup -c --environment BUILD:production", + "build-prod-min": "rollup -c --environment BUILD:production,MINIFY:true", "build-flow-types": "cp build/mapbox-gl.js.flow dist/mapbox-gl.js.flow && cp build/mapbox-gl.js.flow dist/mapbox-gl-dev.js.flow", "build-css": "postcss -o dist/mapbox-gl.css src/css/mapbox-gl.css", "build-style-spec": "cd src/style-spec && npm run build && cd ../.. && mkdir -p dist/style-spec && cp src/style-spec/dist/* dist/style-spec", @@ -125,7 +126,7 @@ "start-bench": "run-p build-token watch-benchmarks watch-style-benchmarks start-server", "build-docs": "documentation build --github --format json --config ./docs/documentation.yml --output docs/components/api.json src/index.js", "build": "run-s build-docs && . build/set-deploy-env.sh && batfish build # invoked by publisher when publishing docs on the mb-pages branch", - "start-docs": "run-s build-min build-css build-docs && DEPLOY_ENV=local batfish start", + "start-docs": "run-s build-prod-min build-css build-docs && DEPLOY_ENV=local batfish start", "lint": "eslint --cache --ignore-path .gitignore src test bench docs docs/pages/example/*.html debug/*.html", "lint-docs": "documentation lint src/index.js", "lint-css": "stylelint 'src/css/mapbox-gl.css'", @@ -141,7 +142,7 @@ "test-flow": "build/run-node build/generate-flow-typed-style-spec && flow .", "test-flow-cov": "flow-coverage-report -i 'src/**/*.js' -t html", "test-cov": "nyc --require=@mapbox/flow-remove-types/register --reporter=text-summary --reporter=lcov --cache run-s test-unit test-expressions test-query test-render", - "prepublishOnly": "run-s build-flow-types build-dev build-min build-css build-style-spec test-build", + "prepublishOnly": "run-s build-flow-types build-dev build-prod-min build-prod build-css build-style-spec test-build", "codegen": "build/run-node build/generate-style-code.js && build/run-node build/generate-struct-arrays.js" }, "files": [ diff --git a/rollup.config.js b/rollup.config.js index f43d11883b0..5617b26aef4 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -3,9 +3,12 @@ import sourcemaps from 'rollup-plugin-sourcemaps'; import {plugins} from './build/rollup_plugins'; const version = JSON.parse(fs.readFileSync('package.json')).version; - -const production = process.env.BUILD === 'production'; -const outputFile = production ? 'dist/mapbox-gl.js' : 'dist/mapbox-gl-dev.js'; +const {BUILD, MINIFY} = process.env; +const minified = MINIFY === 'true'; +const production = BUILD === 'production'; +const outputFile = + !production ? 'dist/mapbox-gl-dev.js' : + minified ? 'dist/mapbox-gl.js' : 'dist/mapbox-gl-unminified.js'; const config = [{ // First, use code splitting to bundle GL JS into three "chunks": From 71ed65a9448eb95c8c523a840052c4a0c1ba706e Mon Sep 17 00:00:00 2001 From: Markus Johnsson Date: Wed, 17 Oct 2018 21:32:55 +0200 Subject: [PATCH 025/115] Set depthMode for 2d custom layers (#7432) --- src/render/draw_custom.js | 4 +- .../custom-layer-js/depth/expected.png | Bin 0 -> 220 bytes .../custom-layer-js/depth/style.json | 66 ++++++++++++++++++ 3 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 test/integration/render-tests/custom-layer-js/depth/expected.png create mode 100644 test/integration/render-tests/custom-layer-js/depth/style.json diff --git a/src/render/draw_custom.js b/src/render/draw_custom.js index 6b198f33ef6..03f74ebabde 100644 --- a/src/render/draw_custom.js +++ b/src/render/draw_custom.js @@ -46,7 +46,9 @@ function drawCustom(painter: Painter, sourceCache: SourceCache, layer: CustomSty painter.setCustomLayerDefaults(); context.setStencilMode(StencilMode.disabled); - context.setDepthMode(DepthMode.disabled); + + const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly); + context.setDepthMode(depthMode); implementation.render(context.gl, painter.transform.customLayerMatrix()); diff --git a/test/integration/render-tests/custom-layer-js/depth/expected.png b/test/integration/render-tests/custom-layer-js/depth/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..7a3ed65b8a2afc8a4663eb8bd91f85295fc99ac4 GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Or9=|Ar*{or0OmKc~e2Wrw2C* z9#&vD;IJ^6W%K`rZ+uJ2r>ZTy@IPTQ=VXgc>}bcy(|_;$xx7nE-E+s&i=s;gz#JfGvp$*pqjKnF5-y85}Sb4q9e0NQq7 AWdHyG literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/custom-layer-js/depth/style.json b/test/integration/render-tests/custom-layer-js/depth/style.json new file mode 100644 index 00000000000..17bde5a735e --- /dev/null +++ b/test/integration/render-tests/custom-layer-js/depth/style.json @@ -0,0 +1,66 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 64, + "height": 64, + "operations": [ + [ + "addCustomLayer", + "null-island", + "fill" + ] + ] + } + }, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "Polygon", + "coordinates": [ + [ + [ + -20, + -10 + ], + [ + -20, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + -10 + ], + [ + -20, + -10 + ] + ] + ] + } + } + }, + "layers": [ + { + "id": "background", + "type": "background", + "paint": { + "background-color": "rgba(0,255,0, 1)" + } + }, + { + "id": "fill", + "type": "fill", + "source": "geojson", + "paint": { + "fill-antialias": false, + "fill-color": "rgba(235, 235,235, 1)" + } + } + ] +} From 58a61d6254129279f1d232d368e9c720a38d32ef Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Thu, 18 Oct 2018 09:59:42 -0700 Subject: [PATCH 026/115] Limit the number of workers that can be spawned (#7430) --- src/util/worker_pool.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/util/worker_pool.js b/src/util/worker_pool.js index 53730b5c187..734f886e23a 100644 --- a/src/util/worker_pool.js +++ b/src/util/worker_pool.js @@ -43,4 +43,5 @@ export default class WorkerPool { } } -WorkerPool.workerCount = Math.max(Math.floor(browser.hardwareConcurrency / 2), 1); +const availableLogicalProcessors = Math.floor(browser.hardwareConcurrency / 2); +WorkerPool.workerCount = Math.max(Math.min(availableLogicalProcessors, 6), 1); From 4a07a877117b760a9fc40ac467e6ce9174e584ad Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Thu, 18 Oct 2018 17:58:48 -0700 Subject: [PATCH 027/115] Fix custom attribution strings in compact mode (#7444) * fix custom attributions in compact mode * fix custom attribution in compact mode --- src/css/mapbox-gl.css | 4 ++-- src/ui/control/attribution_control.js | 11 ++++++++--- test/unit/ui/control/attribution.test.js | 19 ++++++++++++++++--- 3 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/css/mapbox-gl.css b/src/css/mapbox-gl.css index 03d57dd22cd..f80bbe13e03 100644 --- a/src/css/mapbox-gl.css +++ b/src/css/mapbox-gl.css @@ -228,11 +228,11 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { visibility: visible; } - .mapboxgl-ctrl-attrib.mapboxgl-compact > a { + .mapboxgl-ctrl-attrib.mapboxgl-compact > * { display: none; } - .mapboxgl-ctrl-attrib.mapboxgl-compact:hover > a { + .mapboxgl-ctrl-attrib.mapboxgl-compact:hover > * { display: inline; } diff --git a/src/ui/control/attribution_control.js b/src/ui/control/attribution_control.js index 133945a7c1d..d27ae6b7ead 100644 --- a/src/ui/control/attribution_control.js +++ b/src/ui/control/attribution_control.js @@ -117,9 +117,14 @@ class AttributionControl { let attributions: Array = []; if (this.options.customAttribution) { if (Array.isArray(this.options.customAttribution)) { - attributions = attributions.concat(this.options.customAttribution); + attributions = attributions.concat( + this.options.customAttribution.map(attribution => { + if (typeof attribution !== 'string') return ''; + return `

${attribution}

`; + }) + ); } else if (typeof this.options.customAttribution === 'string') { - attributions.push(this.options.customAttribution); + attributions.push(`

${this.options.customAttribution}

`); } } @@ -150,7 +155,7 @@ class AttributionControl { return true; }); if (attributions.length) { - this._container.innerHTML = attributions.join(' | '); + this._container.innerHTML = attributions.join('

|

'); this._container.classList.remove('mapboxgl-attrib-empty'); } else { this._container.classList.add('mapboxgl-attrib-empty'); diff --git a/test/unit/ui/control/attribution.test.js b/test/unit/ui/control/attribution.test.js index cf4a7f68fe3..d0933f44f8c 100644 --- a/test/unit/ui/control/attribution.test.js +++ b/test/unit/ui/control/attribution.test.js @@ -101,7 +101,7 @@ test('AttributionControl dedupes attributions that are substrings of others', (t map.on('data', (e) => { if (e.dataType === 'source' && e.sourceDataType === 'metadata') { if (++times === 7) { - t.equal(attribution._container.innerHTML, 'Hello World | Another Source | GeoJSON Source'); + t.equal(attribution._container.innerHTML, 'Hello World

|

Another Source

|

GeoJSON Source'); t.end(); } } @@ -171,10 +171,23 @@ test('AttributionControl shows custom attribution if customAttribution option is }); map.addControl(attributionControl); - t.equal(attributionControl._container.innerHTML, 'Custom string'); + t.equal(attributionControl._container.innerHTML, '

Custom string

'); t.end(); }); +test('AttributionControl in compact mode shows custom attribution if customAttribution option is provided', (t) => { + const map = createMap(t); + const attributionControl = new AttributionControl({ + customAttribution: 'Custom string', + compact: true + }); + map.addControl(attributionControl); + + t.equal(attributionControl._container.innerHTML, '

Custom string

'); + t.end(); +}); + + test('AttributionControl shows all custom attributions if customAttribution array of strings is provided', (t) => { const map = createMap(t); const attributionControl = new AttributionControl({ @@ -184,7 +197,7 @@ test('AttributionControl shows all custom attributions if customAttribution arra t.equal( attributionControl._container.innerHTML, - 'Custom string | Another custom string | Some very long custom string' + '

Custom string

|

Another custom string

|

Some very long custom string

' ); t.end(); }); From 68ae1ed25e773e50f00257eb6bcdd1d78d52a3de Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 19 Oct 2018 19:25:17 +0200 Subject: [PATCH 028/115] upgrade geojson-vt to 3.2.1 (#7448) --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index f0644191e98..03ac09806ab 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "earcut": "^2.1.3", "esm": "^3.0.84", "geojson-rewind": "^0.3.0", - "geojson-vt": "^3.2.0", + "geojson-vt": "^3.2.1", "gl-matrix": "^2.6.1", "grid-index": "^1.0.0", "minimist": "0.0.8", diff --git a/yarn.lock b/yarn.lock index 4d70235e237..322514e71a8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4877,10 +4877,10 @@ geojson-rewind@^0.3.0: concat-stream "~1.6.0" minimist "1.2.0" -geojson-vt@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.0.tgz#039cea549df5f892c48cff8eb66c2e217d61c241" - integrity sha512-qk7sEv7dMfuGzflwClsgtO1fWPut/TqCInWEEUJc/Ofn4tmqBGznnPv3eUdxtwMkulMaAwSL3osHiyN03XJd/w== +geojson-vt@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" + integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== get-caller-file@^1.0.1: version "1.0.2" From 1d734caa57d9b591ad93bfa569b150d8c7b3671f Mon Sep 17 00:00:00 2001 From: Valjean Clark Date: Fri, 19 Oct 2018 12:13:08 -0700 Subject: [PATCH 029/115] deregister draggable marker mouseup and touchend (#7442) We have run into scenarios where we remove a draggable marker before `mouseup` is ever fired and, because mouseup/touchend never fired once, `_onUp` is called but the marker has already been torn down, leading to errors. Ensuring these listeners are deregistered when tearing down the marker will ensure that doesn't happen. --- src/ui/marker.js | 2 ++ test/unit/ui/marker.test.js | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/src/ui/marker.js b/src/ui/marker.js index 750cb256dd0..d21aba075bf 100644 --- a/src/ui/marker.js +++ b/src/ui/marker.js @@ -221,6 +221,8 @@ export default class Marker extends Evented { this._map.off('moveend', this._update); this._map.off('mousedown', this._addDragHandler); this._map.off('touchstart', this._addDragHandler); + this._map.off('mouseup', this._onUp); + this._map.off('touchend', this._onUp); delete this._map; } DOM.remove(this._element); diff --git a/test/unit/ui/marker.test.js b/test/unit/ui/marker.test.js index e0ba57d0e3d..97c11be7cd0 100644 --- a/test/unit/ui/marker.test.js +++ b/test/unit/ui/marker.test.js @@ -451,3 +451,17 @@ test('Marker with draggable:false does not move to new position in response to a map.remove(); t.end(); }); + +test('Marker with draggable:true does not error if removed on mousedown', (t) => { + const map = createMap(t); + const marker = new Marker({draggable: true}) + .setLngLat([0, 0]) + .addTo(map); + const el = marker.getElement(); + simulate.mousedown(el); + simulate.mousemove(el, {clientX: 10, clientY: 10}); + + marker.remove(); + t.ok(map.fire('mouseup')); + t.end(); +}); From 42d1a5ae11b808a6a2915d394cccbc94f455664c Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Tue, 23 Oct 2018 16:36:37 -0700 Subject: [PATCH 030/115] Workaround for failure to clear depth buffer on some Android devices. Fixes issue #3437. --- src/gl/context.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/gl/context.js b/src/gl/context.js index 8c183868d65..a21987d7f79 100644 --- a/src/gl/context.js +++ b/src/gl/context.js @@ -189,6 +189,11 @@ class Context { if (typeof depth !== 'undefined') { mask |= gl.DEPTH_BUFFER_BIT; + + // Workaround for platforms where clearDepth doesn't seem to work + // without reseting the depthRange. See https://github.com/mapbox/mapbox-gl-js/issues/3437 + this.depthRange.set([0, 1]); + this.clearDepth.set(depth); this.depthMask.set(true); } From 06c7c8ff2e287bb3d270d65b839d2655b74c05ac Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Wed, 24 Oct 2018 17:07:03 -0700 Subject: [PATCH 031/115] Add comments in Node-specific files clarifying that they are replaced by Rollup when bundling for browsers (#7480) --- src/shaders/index.js | 6 +++++- src/util/web_worker.js | 6 ++++++ src/util/window.js | 6 ++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/shaders/index.js b/src/shaders/index.js index 84d4d0d0b4c..3af8f6ae10f 100644 --- a/src/shaders/index.js +++ b/src/shaders/index.js @@ -1,5 +1,9 @@ +// This file is intended for use in the GL-JS test suite +// It provides the shaders entry point for Node (tests and GL Native) +// In a browser environment, this file is replaced with ./src/shaders/shaders.js +// when Rollup builds the main bundle. +// See https://github.com/mapbox/mapbox-gl-js/blob/master/package.json#L104-L108 -// Shaders entry point for Node (tests and GL Native) /* eslint-disable import/unambiguous, import/no-commonjs, flowtype/require-valid-file-annotation, no-global-assign */ const fs = require('fs'); diff --git a/src/util/web_worker.js b/src/util/web_worker.js index 6462e4cdb87..33b9d3489e1 100644 --- a/src/util/web_worker.js +++ b/src/util/web_worker.js @@ -1,5 +1,11 @@ // @flow +// This file is intended for use in the GL-JS test suite +// It implements a MessageBus main thread interface for use in Node environments +// In a browser environment, this file is replaced with ./src/util/browser/web_worker.js +// when Rollup builds the main bundle. +// See https://github.com/mapbox/mapbox-gl-js/blob/master/package.json#L104-L108 + import Worker from '../source/worker'; import type {WorkerSource} from '../source/worker_source'; diff --git a/src/util/window.js b/src/util/window.js index 45f07923940..7019c9650c9 100644 --- a/src/util/window.js +++ b/src/util/window.js @@ -1,5 +1,11 @@ // @flow +// This file is intended for use in the GL-JS test suite +// It implements a JSDOM window object for use in Node environments +// In a browser environment, this file is replaced with ./src/util/browser/window.js +// when Rollup builds the main bundle +// See https://github.com/mapbox/mapbox-gl-js/blob/master/package.json#L104-L108 + import jsdom from 'jsdom'; import gl from 'gl'; From ab7d06a3fff9c67564cf49eb60b83e84bda49121 Mon Sep 17 00:00:00 2001 From: Michael Hedman Date: Thu, 25 Oct 2018 19:16:34 +0200 Subject: [PATCH 032/115] Fix for issue 7438 by improving getRoundNum() function. (#7469) * Fix for issue 7438 by improving getRoundNum() function. Added corresponding unit test and debug page. * Generalized calculation of decimal round number. --- debug/7438.html | 34 ++++++++++++++++++++++++++++++ src/ui/control/scale_control.js | 8 ++++++- test/unit/ui/control/scale.test.js | 13 ++++++++++++ 3 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 debug/7438.html diff --git a/debug/7438.html b/debug/7438.html new file mode 100644 index 00000000000..238152a0ade --- /dev/null +++ b/debug/7438.html @@ -0,0 +1,34 @@ + + + + Mapbox GL JS debug page + + + + + + + +
+ + + + + + diff --git a/src/ui/control/scale_control.js b/src/ui/control/scale_control.js index e53b8bf7b9b..021a1fe4547 100644 --- a/src/ui/control/scale_control.js +++ b/src/ui/control/scale_control.js @@ -140,6 +140,11 @@ function getDistance(latlng1, latlng2) { } +function getDecimalRoundNum(d) { + const multiplier = Math.pow(10, Math.ceil(-Math.log(d) / Math.LN10)); + return Math.round(d * multiplier) / multiplier; +} + function getRoundNum(num) { const pow10 = Math.pow(10, (`${Math.floor(num)}`).length - 1); let d = num / pow10; @@ -147,7 +152,8 @@ function getRoundNum(num) { d = d >= 10 ? 10 : d >= 5 ? 5 : d >= 3 ? 3 : - d >= 2 ? 2 : 1; + d >= 2 ? 2 : + d >= 1 ? 1 : getDecimalRoundNum(d); return pow10 * d; } diff --git a/test/unit/ui/control/scale.test.js b/test/unit/ui/control/scale.test.js index e98ce0da161..b96a7295d3b 100644 --- a/test/unit/ui/control/scale.test.js +++ b/test/unit/ui/control/scale.test.js @@ -33,3 +33,16 @@ test('ScaleControl should change unit of distance after calling setUnit', (t) => t.match(contents, /mi/); t.end(); }); + +test('ScaleControl should respect the maxWidth regardless of the unit and actual scale', (t) => { + const map = createMap(t); + const maxWidth = 100; + const scale = new ScaleControl({ maxWidth: maxWidth, unit: 'nautical' }); + const selector = '.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-scale'; + map.addControl(scale); + map.setZoom(12.5); + + const el = map.getContainer().querySelector(selector); + t.ok(parseFloat(el.style.width, 10) <= maxWidth, 'ScaleControl respects maxWidth'); + t.end(); +}); From c6d9fa5fb8ff7fe1fd8d3fb6cf6c5e43cb81f118 Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Fri, 26 Oct 2018 10:43:34 -0700 Subject: [PATCH 033/115] transform DOMException to Error class so it is serializable (#7453) --- src/util/ajax.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/util/ajax.js b/src/util/ajax.js index d8fa3890392..83dec800d71 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -104,7 +104,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon if (response.ok) { response[requestParameters.type || 'text']().then(result => { callback(null, result, response.headers.get('Cache-Control'), response.headers.get('Expires')); - }).catch(callback); + }).catch(err => callback(new Error(err.message))); } else { callback(new AJAXError(response.statusText, response.status, requestParameters.url)); } From 29cd58686bfc006f71413986bae96a1032a34447 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 26 Oct 2018 14:11:14 -0400 Subject: [PATCH 034/115] fix #7478, remove controls before destroying map (#7479) --- src/ui/map.js | 7 ++++--- test/unit/ui/map.test.js | 24 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/ui/map.js b/src/ui/map.js index 8ff6957ac91..e98550acaef 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -1664,6 +1664,10 @@ class Map extends Camera { */ remove() { if (this._hash) this._hash.remove(); + + for (const control of this._controls) control.onRemove(this); + this._controls = []; + if (this._frame) { this._frame.cancel(); this._frame = null; @@ -1675,9 +1679,6 @@ class Map extends Camera { window.removeEventListener('online', this._onWindowOnline, false); } - for (const control of this._controls) control.onRemove(this); - this._controls = []; - const extension = this.painter.context.gl.getExtension('WEBGL_lose_context'); if (extension) extension.loseContext(); removeNode(this._canvasContainer); diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index bb8f96fbe0f..f8edc784e28 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -817,6 +817,30 @@ test('Map', (t) => { t.end(); }); + t.test('#remove calls onRemove on added controls before style is destroyed', (t) => { + const map = createMap(t); + let onRemoveCalled = 0; + let style; + const control = { + onRemove: function(map) { + onRemoveCalled++; + t.deepEqual(map.getStyle(), style); + }, + onAdd: function (_) { + return window.document.createElement('div'); + } + }; + + map.addControl(control); + + map.on('style.load', () => { + style = map.getStyle(); + map.remove(); + t.equal(onRemoveCalled, 1); + t.end(); + }); + }); + t.test('#addControl', (t) => { const map = createMap(t); const control = { From 033e3d193b77a2023719642975113f785fbc082d Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Mon, 29 Oct 2018 11:14:12 -0700 Subject: [PATCH 035/115] fix compact attribution positioning (#7445) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * artisinal css 👩‍🎨 * make all margin 10px --- src/css/mapbox-gl.css | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) diff --git a/src/css/mapbox-gl.css b/src/css/mapbox-gl.css index f80bbe13e03..72ac12357ae 100644 --- a/src/css/mapbox-gl.css +++ b/src/css/mapbox-gl.css @@ -217,7 +217,7 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { @media screen { .mapboxgl-ctrl-attrib.mapboxgl-compact { - margin: 0 10px 10px; + margin: 10px; position: relative; background-color: #fff; border-radius: 3px 12px 12px 3px; @@ -228,6 +228,12 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { visibility: visible; } + .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:hover, + .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact:hover { + padding: 2px 4px 2px 24px; + border-radius: 12px 3px 3px 12px; + } + .mapboxgl-ctrl-attrib.mapboxgl-compact > * { display: none; } @@ -240,8 +246,6 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { content: ''; cursor: pointer; position: absolute; - bottom: 0; - right: 0; background-image: svg-load('svg/mapboxgl-ctrl-attrib.svg'); background-color: rgba(255, 255, 255, 0.5); width: 24px; @@ -249,6 +253,26 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { box-sizing: border-box; border-radius: 12px; } + + .mapboxgl-ctrl-bottom-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after { + bottom: 0; + right: 0; + } + + .mapboxgl-ctrl-top-right > .mapboxgl-ctrl-attrib.mapboxgl-compact::after { + top: 0; + right: 0; + } + + .mapboxgl-ctrl-top-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after { + top: 0; + left: 0; + } + + .mapboxgl-ctrl-bottom-left > .mapboxgl-ctrl-attrib.mapboxgl-compact::after { + bottom: 0; + left: 0; + } } .mapboxgl-ctrl-attrib a { From cedefd66f6519f20b9f73a1389e02afa868ca39f Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Mon, 29 Oct 2018 14:27:23 -0400 Subject: [PATCH 036/115] add `MercatorCoordinate` type (#7488) fix #7485 --- docs/documentation.yml | 1 + docs/pages/example/custom-style-layer.html | 21 +-- src/geo/coordinate.js | 79 ----------- src/geo/mercator_coordinate.js | 118 ++++++++++++++++ src/geo/transform.js | 136 +++++++------------ src/index.js | 2 + src/render/program/hillshade_program.js | 12 +- src/source/image_source.js | 60 ++++---- src/source/query_features.js | 4 +- src/source/source_cache.js | 31 ++--- src/source/tile_id.js | 15 +- src/style/style_layer/custom_style_layer.js | 8 +- src/util/tile_cover.js | 29 ++-- src/util/util.js | 28 ---- test/node_modules/mapbox-gl-js-test/fixed.js | 6 +- test/unit/geo/coordinate.test.js | 46 ------- test/unit/geo/mercator_coordinate.test.js | 31 +++++ test/unit/geo/transform.test.js | 12 +- test/unit/source/source_cache.test.js | 14 +- test/unit/util/tile_cover.test.js | 49 +++---- test/unit/util/util.test.js | 11 +- 21 files changed, 342 insertions(+), 371 deletions(-) delete mode 100644 src/geo/coordinate.js create mode 100644 src/geo/mercator_coordinate.js delete mode 100644 test/unit/geo/coordinate.test.js create mode 100644 test/unit/geo/mercator_coordinate.test.js diff --git a/docs/documentation.yml b/docs/documentation.yml index 51038ea2ea8..2f69418b898 100644 --- a/docs/documentation.yml +++ b/docs/documentation.yml @@ -19,6 +19,7 @@ toc: - LngLatBoundsLike - Point - PointLike + - MercatorCoordinate - name: User Interface description: | Controls, markers, and popups add new user interface elements to the map. diff --git a/docs/pages/example/custom-style-layer.html b/docs/pages/example/custom-style-layer.html index 3cbc1ddc796..8f2172ebca6 100644 --- a/docs/pages/example/custom-style-layer.html +++ b/docs/pages/example/custom-style-layer.html @@ -2,8 +2,8 @@ diff --git a/src/geo/coordinate.js b/src/geo/coordinate.js deleted file mode 100644 index 52f981d77ab..00000000000 --- a/src/geo/coordinate.js +++ /dev/null @@ -1,79 +0,0 @@ -// @flow - -/** - * A coordinate is a column, row, zoom combination, often used - * as the data component of a tile. - * - * @param {number} column - * @param {number} row - * @param {number} zoom - * @private - */ -class Coordinate { - column: number; - row: number; - zoom: number; - constructor(column: number, row: number, zoom: number) { - this.column = column; - this.row = row; - this.zoom = zoom; - } - - /** - * Create a clone of this coordinate that can be mutated without - * changing the original coordinate - * - * @returns {Coordinate} clone - * @private - * var coord = new Coordinate(0, 0, 0); - * var c2 = coord.clone(); - * // since coord is cloned, modifying a property of c2 does - * // not modify it. - * c2.zoom = 2; - */ - clone() { - return new Coordinate(this.column, this.row, this.zoom); - } - - /** - * Zoom this coordinate to a given zoom level. This returns a new - * coordinate object, not mutating the old one. - * - * @param {number} zoom - * @returns {Coordinate} zoomed coordinate - * @private - * @example - * var coord = new Coordinate(0, 0, 0); - * var c2 = coord.zoomTo(1); - * c2 // equals new Coordinate(0, 0, 1); - */ - zoomTo(zoom: number) { return this.clone()._zoomTo(zoom); } - - /** - * Subtract the column and row values of this coordinate from those - * of another coordinate. The other coordinat will be zoomed to the - * same level as `this` before the subtraction occurs - * - * @param {Coordinate} c other coordinate - * @returns {Coordinate} result - * @private - */ - sub(c: Coordinate) { return this.clone()._sub(c); } - - _zoomTo(zoom: number) { - const scale = Math.pow(2, zoom - this.zoom); - this.column *= scale; - this.row *= scale; - this.zoom = zoom; - return this; - } - - _sub(c: Coordinate) { - c = c.zoomTo(this.zoom); - this.column -= c.column; - this.row -= c.row; - return this; - } -} - -export default Coordinate; diff --git a/src/geo/mercator_coordinate.js b/src/geo/mercator_coordinate.js new file mode 100644 index 00000000000..30d18bd7820 --- /dev/null +++ b/src/geo/mercator_coordinate.js @@ -0,0 +1,118 @@ +// @flow + +import LngLat from '../geo/lng_lat'; +import type {LngLatLike} from '../geo/lng_lat'; + +/* + * The circumference of the world in meters at the given latitude. + */ +function circumferenceAtLatitude(latitude: number) { + const circumference = 2 * Math.PI * 6378137; + return circumference * Math.cos(latitude * Math.PI / 180); +} + +export function mercatorXfromLng(lng: number) { + return (180 + lng) / 360; +} + +export function mercatorYfromLat(lat: number) { + return (180 - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)))) / 360; +} + +export function mercatorZfromAltitude(altitude: number, lat: number) { + return altitude / circumferenceAtLatitude(lat); +} + +export function lngFromMercatorX(x: number) { + return x * 360 - 180; +} + +export function latFromMercatorY(y: number) { + const y2 = 180 - y * 360; + return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90; +} + +export function altitudeFromMercatorZ(z: number, y: number) { + return z * circumferenceAtLatitude(latFromMercatorY(y)); +} + +/** + * A `MercatorCoordinate` object represents a projected three dimensional position. + * + * `MercatorCoordinate` uses the web mercator projection ([EPSG:3857](https://epsg.io/3857)) with slightly different units: + * - the size of 1 unit is the width of the projected world instead of the "mercator meter" + * - the origin of the coordinate space is at the north-west corner instead of the middle + * + * For example, `MercatorCoordinate(0, 0, 0)` is the north-west corner of the mercator world and + * `MercatorCoordinate(1, 1, 0)` is the south-east corner. If you are familiar with + * [vector tiles](https://github.com/mapbox/vector-tile-spec) it may be helpful to think + * of the coordinate space as the `0/0/0` tile with an extent of `1`. + * + * The `z` dimension of `MercatorCoordinate` is conformal. A cube in the mercator coordinate space would be rendered as a cube. + * + * @param {number} x The x component of the position. + * @param {number} y The y component of the position. + * @param {number} z The z component of the position. + * @example + * var nullIsland = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); + * + * @see [Add a custom style layer](https://www.mapbox.com/mapbox-gl-js/example/custom-style-layer/) + */ +class MercatorCoordinate { + x: number; + y: number; + z: number; + + constructor(x: number, y: number, z: number = 0) { + this.x = +x; + this.y = +y; + this.z = +z; + } + + /** + * Project a `LngLat` to a `MercatorCoordinate`. + * + * @param {LngLatLike} lngLatLike The location to project. + * @param {number} altitude The altitude in meters of the position. + * @returns {MercatorCoordinate} The projected mercator coordinate. + * @example + * var coord = mapboxgl.MercatorCoordinate.fromLngLat({ lng: 0, lat: 0}, 0); + * coord; // MercatorCoordinate(0.5, 0.5, 0) + */ + static fromLngLat(lngLatLike: LngLatLike, altitude: number = 0) { + const lngLat = LngLat.convert(lngLatLike); + + return new MercatorCoordinate( + mercatorXfromLng(lngLat.lng), + mercatorYfromLat(lngLat.lat), + mercatorZfromAltitude(altitude, lngLat.lat)); + } + + /** + * Returns the `LatLng` for the coordinate. + * + * @returns {LngLat} The `LngLat` object. + * @example + * var coord = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); + * var latLng = coord.toLatLng(); // LngLat(0, 0) + */ + toLngLat() { + return new LngLat( + lngFromMercatorX(this.x), + latFromMercatorY(this.y)); + } + + /** + * Returns the altitude in meters of the coordinate. + * + * @returns {number} The altitude in meters. + * @example + * var coord = new mapboxgl.MercatorCoordinate(0, 0, 0.02); + * coord.toAltitude(); // 6914.281956295339 + */ + toAltitude() { + return altitudeFromMercatorZ(this.z, this.y); + } +} + +export default MercatorCoordinate; diff --git a/src/geo/transform.js b/src/geo/transform.js index acda6fc631b..3445e4e93c6 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.js @@ -2,8 +2,8 @@ import LngLat from './lng_lat'; import LngLatBounds from './lng_lat_bounds'; +import MercatorCoordinate, {mercatorXfromLng, mercatorYfromLat, mercatorZfromAltitude} from './mercator_coordinate'; import Point from '@mapbox/point-geometry'; -import Coordinate from './coordinate'; import { wrap, clamp } from '../util/util'; import {number as interpolate} from '../style-spec/util/interpolate'; import tileCover from '../util/tile_cover'; @@ -203,12 +203,12 @@ class Transform { getVisibleUnwrappedCoordinates(tileID: CanonicalTileID) { const result = [new UnwrappedTileID(0, tileID)]; if (this._renderWorldCopies) { - const utl = this.pointCoordinate(new Point(0, 0), 0); - const utr = this.pointCoordinate(new Point(this.width, 0), 0); - const ubl = this.pointCoordinate(new Point(this.width, this.height), 0); - const ubr = this.pointCoordinate(new Point(0, this.height), 0); - const w0 = Math.floor(Math.min(utl.column, utr.column, ubl.column, ubr.column)); - const w1 = Math.floor(Math.max(utl.column, utr.column, ubl.column, ubr.column)); + const utl = this.pointCoordinate(new Point(0, 0)); + const utr = this.pointCoordinate(new Point(this.width, 0)); + const ubl = this.pointCoordinate(new Point(this.width, this.height)); + const ubr = this.pointCoordinate(new Point(0, this.height)); + const w0 = Math.floor(Math.min(utl.x, utr.x, ubl.x, ubr.x)); + const w1 = Math.floor(Math.max(utl.x, utr.x, ubl.x, ubr.x)); // Add an extra copy of the world on each side to properly render ImageSources and CanvasSources. // Both sources draw outside the tile boundaries of the tile that "contains them" so we need @@ -251,13 +251,14 @@ class Transform { if (options.minzoom !== undefined && z < options.minzoom) return []; if (options.maxzoom !== undefined && z > options.maxzoom) z = options.maxzoom; - const centerCoord = this.pointCoordinate(this.centerPoint, z); - const centerPoint = new Point(centerCoord.column - 0.5, centerCoord.row - 0.5); + const centerCoord = MercatorCoordinate.fromLngLat(this.center); + const numTiles = Math.pow(2, z); + const centerPoint = new Point(numTiles * centerCoord.x - 0.5, numTiles * centerCoord.y - 0.5); const cornerCoords = [ - this.pointCoordinate(new Point(0, 0), z), - this.pointCoordinate(new Point(this.width, 0), z), - this.pointCoordinate(new Point(this.width, this.height), z), - this.pointCoordinate(new Point(0, this.height), z) + this.pointCoordinate(new Point(0, 0)), + this.pointCoordinate(new Point(this.width, 0)), + this.pointCoordinate(new Point(this.width, this.height)), + this.pointCoordinate(new Point(0, this.height)) ]; return tileCover(z, cornerCoords, options.reparseOverscaled ? actualZ : z, this._renderWorldCopies) .sort((a, b) => centerPoint.dist(a.canonical) - centerPoint.dist(b.canonical)); @@ -278,50 +279,26 @@ class Transform { scaleZoom(scale: number) { return Math.log(scale) / Math.LN2; } project(lnglat: LngLat) { + const lat = clamp(lnglat.lat, -this.maxValidLatitude, this.maxValidLatitude); return new Point( - this.lngX(lnglat.lng), - this.latY(lnglat.lat)); + mercatorXfromLng(lnglat.lng) * this.worldSize, + mercatorYfromLat(lat) * this.worldSize); } unproject(point: Point): LngLat { - return new LngLat( - this.xLng(point.x), - this.yLat(point.y)); + return new MercatorCoordinate(point.x / this.worldSize, point.y / this.worldSize).toLngLat(); } - get x(): number { return this.lngX(this.center.lng); } - get y(): number { return this.latY(this.center.lat); } - - get point(): Point { return new Point(this.x, this.y); } - - /** - * longitude to absolute x coord - * @returns {number} pixel coordinate - */ - lngX(lng: number) { - return (180 + lng) * this.worldSize / 360; - } - /** - * latitude to absolute y coord - * @returns {number} pixel coordinate - */ - latY(lat: number) { - lat = clamp(lat, -this.maxValidLatitude, this.maxValidLatitude); - const y = 180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)); - return (180 - y) * this.worldSize / 360; - } - - xLng(x: number) { - return x * 360 / this.worldSize - 180; - } - yLat(y: number) { - const y2 = 180 - y * 360 / this.worldSize; - return 360 / Math.PI * Math.atan(Math.exp(y2 * Math.PI / 180)) - 90; - } + get point(): Point { return this.project(this.center); } setLocationAtPoint(lnglat: LngLat, point: Point) { - const translate = this.pointCoordinate(point)._sub(this.pointCoordinate(this.centerPoint)); - this.center = this.coordinateLocation(this.locationCoordinate(lnglat)._sub(translate)); + const a = this.pointCoordinate(point); + const b = this.pointCoordinate(this.centerPoint); + const loc = this.locationCoordinate(lnglat); + const newCenter = new MercatorCoordinate( + loc.x - (a.x - b.x), + loc.y - (a.y - b.y)); + this.center = this.coordinateLocation(newCenter); if (this._renderWorldCopies) { this.center = this.center.wrap(); } @@ -352,10 +329,7 @@ class Transform { * @returns {Coordinate} */ locationCoordinate(lnglat: LngLat) { - return new Coordinate( - this.lngX(lnglat.lng) / this.tileSize, - this.latY(lnglat.lat) / this.tileSize, - this.zoom).zoomTo(this.tileZoom); + return MercatorCoordinate.fromLngLat(lnglat); } /** @@ -363,16 +337,11 @@ class Transform { * @param {Coordinate} coord * @returns {LngLat} lnglat */ - coordinateLocation(coord: Coordinate) { - const zoomedCoord = coord.zoomTo(this.zoom); - return new LngLat( - this.xLng(zoomedCoord.column * this.tileSize), - this.yLat(zoomedCoord.row * this.tileSize)); + coordinateLocation(coord: MercatorCoordinate) { + return coord.toLngLat(); } - pointCoordinate(p: Point, zoom?: number) { - if (zoom === undefined) zoom = this.tileZoom; - + pointCoordinate(p: Point) { const targetZ = 0; // since we don't know the correct projected z value for the point, // unproject two points to get a line and then find the point on that @@ -395,10 +364,9 @@ class Transform { const t = z0 === z1 ? 0 : (targetZ - z0) / (z1 - z0); - return new Coordinate( - interpolate(x0, x1, t) / this.tileSize, - interpolate(y0, y1, t) / this.tileSize, - this.zoom)._zoomTo(zoom); + return new MercatorCoordinate( + interpolate(x0, x1, t) / this.worldSize, + interpolate(y0, y1, t) / this.worldSize); } /** @@ -406,9 +374,8 @@ class Transform { * @param {Coordinate} coord * @returns {Point} screen point */ - coordinatePoint(coord: Coordinate) { - const zoomedCoord = coord.zoomTo(this.zoom); - const p = [zoomedCoord.column * this.tileSize, zoomedCoord.row * this.tileSize, 0, 1]; + coordinatePoint(coord: MercatorCoordinate) { + const p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1]; vec4.transformMat4(p, p, this.pixelMatrix); return new Point(p[0] / p[3], p[1] / p[3]); } @@ -492,25 +459,27 @@ class Transform { if (this.latRange) { const latRange = this.latRange; - minY = this.latY(latRange[1]); - maxY = this.latY(latRange[0]); + minY = mercatorYfromLat(latRange[1]) * this.worldSize; + maxY = mercatorYfromLat(latRange[0]) * this.worldSize; sy = maxY - minY < size.y ? size.y / (maxY - minY) : 0; } if (this.lngRange) { const lngRange = this.lngRange; - minX = this.lngX(lngRange[0]); - maxX = this.lngX(lngRange[1]); + minX = mercatorXfromLng(lngRange[0]) * this.worldSize; + maxX = mercatorXfromLng(lngRange[1]) * this.worldSize; sx = maxX - minX < size.x ? size.x / (maxX - minX) : 0; } + const point = this.point; + // how much the map should scale to fit the screen into given latitude/longitude ranges const s = Math.max(sx || 0, sy || 0); if (s) { this.center = this.unproject(new Point( - sx ? (maxX + minX) / 2 : this.x, - sy ? (maxY + minY) / 2 : this.y)); + sx ? (maxX + minX) / 2 : point.x, + sy ? (maxY + minY) / 2 : point.y)); this.zoom += this.scaleZoom(s); this._unmodified = unmodified; this._constraining = false; @@ -518,7 +487,7 @@ class Transform { } if (this.latRange) { - const y = this.y, + const y = point.y, h2 = size.y / 2; if (y - h2 < minY) y2 = minY + h2; @@ -526,7 +495,7 @@ class Transform { } if (this.lngRange) { - const x = this.x, + const x = point.x, w2 = size.x / 2; if (x - w2 < minX) x2 = minX + w2; @@ -536,8 +505,8 @@ class Transform { // pan the map if the screen goes off the range if (x2 !== undefined || y2 !== undefined) { this.center = this.unproject(new Point( - x2 !== undefined ? x2 : this.x, - y2 !== undefined ? y2 : this.y)); + x2 !== undefined ? x2 : point.x, + y2 !== undefined ? y2 : point.y)); } this._unmodified = unmodified; @@ -556,7 +525,8 @@ class Transform { const halfFov = this._fov / 2; const groundAngle = Math.PI / 2 + this._pitch; const topHalfSurfaceDistance = Math.sin(halfFov) * this.cameraToCenterDistance / Math.sin(Math.PI - groundAngle - halfFov); - const x = this.x, y = this.y; + const point = this.point; + const x = point.x, y = point.y; // Calculate z distance of the farthest fragment that should be rendered. const furthestDistance = Math.cos(Math.PI / 2 - this._pitch) * topHalfSurfaceDistance + this.cameraToCenterDistance; @@ -578,9 +548,7 @@ class Transform { this.mercatorMatrix = mat4.scale([], m, [this.worldSize, this.worldSize, this.worldSize]); // scale vertically to meters per pixel (inverse of ground resolution): - // worldSize / (circumferenceOfEarth * cos(lat * π / 180)) - const verticalScale = this.worldSize / (2 * Math.PI * 6378137 * Math.abs(Math.cos(this.center.lat * (Math.PI / 180)))); - mat4.scale(m, m, [1, 1, verticalScale, 1]); + mat4.scale(m, m, [1, 1, mercatorZfromAltitude(1, this.center.lat) * this.worldSize, 1]); this.projMatrix = m; @@ -617,8 +585,8 @@ class Transform { // calcMatrices hasn't run yet if (!this.pixelMatrixInverse) return 1; - const coord = this.pointCoordinate(new Point(0, 0)).zoomTo(this.zoom); - const p = [coord.column * this.tileSize, coord.row * this.tileSize, 0, 1]; + const coord = this.pointCoordinate(new Point(0, 0)); + const p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1]; const topPoint = vec4.transformMat4(p, p, this.pixelMatrix); return topPoint[3] / this.cameraToCenterDistance; } diff --git a/src/index.js b/src/index.js index ca505cd65f6..d04047eb8e0 100644 --- a/src/index.js +++ b/src/index.js @@ -16,6 +16,7 @@ import Style from './style/style'; import LngLat from './geo/lng_lat'; import LngLatBounds from './geo/lng_lat_bounds'; import Point from '@mapbox/point-geometry'; +import MercatorCoordinate from './geo/mercator_coordinate'; import {Evented} from './util/evented'; import config from './util/config'; import {setRTLTextPlugin} from './source/rtl_text_plugin'; @@ -37,6 +38,7 @@ const exported = { LngLat, LngLatBounds, Point, + MercatorCoordinate, Evented, config, diff --git a/src/render/program/hillshade_program.js b/src/render/program/hillshade_program.js index e84c9626427..ddfa8948da1 100644 --- a/src/render/program/hillshade_program.js +++ b/src/render/program/hillshade_program.js @@ -11,7 +11,7 @@ import { UniformMatrix4f } from '../uniform_binding'; import EXTENT from '../../data/extent'; -import Coordinate from '../../geo/coordinate'; +import MercatorCoordinate from '../../geo/mercator_coordinate'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; @@ -104,13 +104,11 @@ const hillshadeUniformPrepareValues = ( function getTileLatRange(painter: Painter, tileID: OverscaledTileID) { // for scaling the magnitude of a points slope by its latitude - const coordinate0 = tileID.toCoordinate(); - const coordinate1 = new Coordinate( - coordinate0.column, coordinate0.row + 1, coordinate0.zoom); + const tilesAtZoom = Math.pow(2, tileID.canonical.z); + const y = tileID.canonical.y; return [ - painter.transform.coordinateLocation(coordinate0).lat, - painter.transform.coordinateLocation(coordinate1).lat - ]; + new MercatorCoordinate(0, y / tilesAtZoom).toLngLat().lat, + new MercatorCoordinate(0, (y + 1) / tilesAtZoom).toLngLat().lat]; } export { diff --git a/src/source/image_source.js b/src/source/image_source.js index 8b7d7ddc323..ce3013f454f 100644 --- a/src/source/image_source.js +++ b/src/source/image_source.js @@ -1,10 +1,6 @@ // @flow -import { getCoordinatesCenter } from '../util/util'; - import { CanonicalTileID } from './tile_id'; -import LngLat from '../geo/lng_lat'; -import Point from '@mapbox/point-geometry'; import { Event, ErrorEvent, Evented } from '../util/evented'; import { getImage, ResourceType } from '../util/ajax'; import browser from '../util/browser'; @@ -13,13 +9,13 @@ import { RasterBoundsArray } from '../data/array_types'; import rasterBoundsAttributes from '../data/raster_bounds_attributes'; import SegmentVector from '../data/segment'; import Texture from '../render/texture'; +import MercatorCoordinate from '../geo/mercator_coordinate'; import type {Source} from './source'; import type {CanvasSourceSpecification} from './canvas_source'; import type Map from '../ui/map'; import type Dispatcher from '../util/dispatcher'; import type Tile from './tile'; -import type Coordinate from '../geo/coordinate'; import type {Callback} from '../types/callback'; import type VertexBuffer from '../gl/vertex_buffer'; import type { @@ -84,7 +80,6 @@ class ImageSource extends Evented implements Source { map: Map; texture: Texture | null; image: ImageData; - centerCoord: Coordinate; tileID: CanonicalTileID; _boundsArray: RasterBoundsArray; boundsBuffer: VertexBuffer; @@ -180,35 +175,21 @@ class ImageSource extends Evented implements Source { // and create a buffer with the corner coordinates. These coordinates // may be outside the tile, because raster tiles aren't clipped when rendering. - const map = this.map; - // transform the geo coordinates into (zoom 0) tile space coordinates - const cornerZ0Coords = coordinates.map((coord) => { - return map.transform.locationCoordinate(LngLat.convert(coord)).zoomTo(0); - }); + const cornerCoords = coordinates.map(MercatorCoordinate.fromLngLat); // Compute the coordinates of the tile we'll use to hold this image's // render data - const centerCoord = this.centerCoord = getCoordinatesCenter(cornerZ0Coords); - // `column` and `row` may be fractional; round them down so that they - // represent integer tile coordinates - centerCoord.column = Math.floor(centerCoord.column); - centerCoord.row = Math.floor(centerCoord.row); - this.tileID = new CanonicalTileID(centerCoord.zoom, centerCoord.column, centerCoord.row); + this.tileID = getCoordinatesCenterTileID(cornerCoords); // Constrain min/max zoom to our tile's zoom level in order to force // SourceCache to request this tile (no matter what the map's zoom // level) - this.minzoom = this.maxzoom = centerCoord.zoom; + this.minzoom = this.maxzoom = this.tileID.z; // Transform the corner coordinates into the coordinate space of our // tile. - const tileCoords = cornerZ0Coords.map((coord) => { - const zoomedCoord = coord.zoomTo(centerCoord.zoom); - return new Point( - Math.round((zoomedCoord.column - centerCoord.column) * EXTENT), - Math.round((zoomedCoord.row - centerCoord.row) * EXTENT)); - }); + const tileCoords = cornerCoords.map((coord) => this.tileID.getTilePoint(coord)._round()); this._boundsArray = new RasterBoundsArray(); this._boundsArray.emplaceBack(tileCoords[0].x, tileCoords[0].y, 0, 0); @@ -285,4 +266,35 @@ class ImageSource extends Evented implements Source { } } +/** + * Given a list of coordinates, get their center as a coordinate. + * + * @returns centerpoint + * @private + */ +export function getCoordinatesCenterTileID(coords: Array) { + let minX = Infinity; + let minY = Infinity; + let maxX = -Infinity; + let maxY = -Infinity; + + for (const coord of coords) { + minX = Math.min(minX, coord.x); + minY = Math.min(minY, coord.y); + maxX = Math.max(maxX, coord.x); + maxY = Math.max(maxY, coord.y); + } + + const dx = maxX - minX; + const dy = maxY - minY; + const dMax = Math.max(dx, dy); + const zoom = Math.max(0, Math.floor(-Math.log(dMax) / Math.LN2)); + const tilesAtZoom = Math.pow(2, zoom); + + return new CanonicalTileID( + zoom, + Math.floor((minX + maxX) / 2 * tilesAtZoom), + Math.floor((minY + maxY) / 2 * tilesAtZoom)); +} + export default ImageSource; diff --git a/src/source/query_features.js b/src/source/query_features.js index 078c5c65a91..ffa9eb18475 100644 --- a/src/source/query_features.js +++ b/src/source/query_features.js @@ -2,7 +2,7 @@ import type SourceCache from './source_cache'; import type StyleLayer from '../style/style_layer'; -import type Coordinate from '../geo/coordinate'; +import type MercatorCoordinate from '../geo/mercator_coordinate'; import type CollisionIndex from '../symbol/collision_index'; import type Transform from '../geo/transform'; import type { RetainedQueryData } from '../symbol/placement'; @@ -11,7 +11,7 @@ import assert from 'assert'; export function queryRenderedFeatures(sourceCache: SourceCache, styleLayers: {[string]: StyleLayer}, - queryGeometry: Array, + queryGeometry: Array, params: { filter: FilterSpecification, layers: Array }, transform: Transform) { const maxPitchScaleFactor = transform.maxPitchScaleFactor(); diff --git a/src/source/source_cache.js b/src/source/source_cache.js index 0976507b204..f80a059d8b0 100644 --- a/src/source/source_cache.js +++ b/src/source/source_cache.js @@ -5,7 +5,7 @@ import { create as createSource } from './source'; import Tile from './tile'; import { Event, ErrorEvent, Evented } from '../util/evented'; import TileCache from './tile_cache'; -import Coordinate from '../geo/coordinate'; +import MercatorCoordinate from '../geo/mercator_coordinate'; import { keysDifference } from '../util/util'; import EXTENT from '../data/extent'; import Context from '../gl/context'; @@ -734,7 +734,7 @@ class SourceCache extends Evented { * @param queryGeometry coordinates of the corners of bounding rectangle * @returns {Array} result items have {tile, minX, maxX, minY, maxY}, where min/max bounding values are the given bounds transformed in into the coordinate space of this tile. */ - tilesIn(queryGeometry: Array, maxPitchScaleFactor: number) { + tilesIn(queryGeometry: Array, maxPitchScaleFactor: number) { const tileResults = []; const ids = this.getIds(); @@ -742,14 +742,13 @@ class SourceCache extends Evented { let minY = Infinity; let maxX = -Infinity; let maxY = -Infinity; - const z = queryGeometry[0].zoom; for (let k = 0; k < queryGeometry.length; k++) { const p = queryGeometry[k]; - minX = Math.min(minX, p.column); - minY = Math.min(minY, p.row); - maxX = Math.max(maxX, p.column); - maxY = Math.max(maxY, p.row); + minX = Math.min(minX, p.x); + minY = Math.min(minY, p.y); + maxX = Math.max(maxX, p.x); + maxY = Math.max(maxY, p.y); } @@ -764,8 +763,8 @@ class SourceCache extends Evented { const queryPadding = maxPitchScaleFactor * tile.queryPadding * EXTENT / tile.tileSize / scale; const tileSpaceBounds = [ - coordinateToTilePoint(tileID, new Coordinate(minX, minY, z)), - coordinateToTilePoint(tileID, new Coordinate(maxX, maxY, z)) + tileID.getTilePoint(new MercatorCoordinate(minX, minY)), + tileID.getTilePoint(new MercatorCoordinate(maxX, maxY)) ]; if (tileSpaceBounds[0].x - queryPadding < EXTENT && tileSpaceBounds[0].y - queryPadding < EXTENT && @@ -773,7 +772,7 @@ class SourceCache extends Evented { const tileSpaceQueryGeometry = []; for (let j = 0; j < queryGeometry.length; j++) { - tileSpaceQueryGeometry.push(coordinateToTilePoint(tileID, queryGeometry[j])); + tileSpaceQueryGeometry.push(tileID.getTilePoint(queryGeometry[j])); } tileResults.push({ @@ -835,18 +834,6 @@ class SourceCache extends Evented { SourceCache.maxOverzooming = 10; SourceCache.maxUnderzooming = 3; -/** - * Convert a coordinate to a point in a tile's coordinate space. - * @private - */ -function coordinateToTilePoint(tileID: OverscaledTileID, coord: Coordinate): Point { - const zoomedCoord = coord.zoomTo(tileID.canonical.z); - return new Point( - (zoomedCoord.column - (tileID.canonical.x + tileID.wrap * Math.pow(2, tileID.canonical.z))) * EXTENT, - (zoomedCoord.row - tileID.canonical.y) * EXTENT - ); -} - function compareKeyZoom(a, b) { return ((a % 32) - (b % 32)) || (b - a); } diff --git a/src/source/tile_id.js b/src/source/tile_id.js index d763ea1df10..d6430920495 100644 --- a/src/source/tile_id.js +++ b/src/source/tile_id.js @@ -1,10 +1,12 @@ // @flow import {getTileBBox} from '@mapbox/whoots-js'; +import EXTENT from '../data/extent'; +import Point from '@mapbox/point-geometry'; +import MercatorCoordinate from '../geo/mercator_coordinate'; import assert from 'assert'; import { register } from '../util/web_worker_transfer'; -import Coordinate from '../geo/coordinate'; export class CanonicalTileID { z: number; @@ -39,6 +41,13 @@ export class CanonicalTileID { .replace('{quadkey}', quadkey) .replace('{bbox-epsg-3857}', bbox); } + + getTilePoint(coord: MercatorCoordinate) { + const tilesAtZoom = Math.pow(2, this.z); + return new Point( + (coord.x * tilesAtZoom - this.x) * EXTENT, + (coord.y * tilesAtZoom - this.y) * EXTENT); + } } export class UnwrappedTileID { @@ -142,8 +151,8 @@ export class OverscaledTileID { return `${this.overscaledZ}/${this.canonical.x}/${this.canonical.y}`; } - toCoordinate() { - return new Coordinate(this.canonical.x + Math.pow(2, this.wrap), this.canonical.y, this.canonical.z); + getTilePoint(coord: MercatorCoordinate) { + return this.canonical.getTilePoint(new MercatorCoordinate(coord.x - this.wrap, coord.y)); } } diff --git a/src/style/style_layer/custom_style_layer.js b/src/style/style_layer/custom_style_layer.js index 3e6f8c46772..402402181c9 100644 --- a/src/style/style_layer/custom_style_layer.js +++ b/src/style/style_layer/custom_style_layer.js @@ -106,10 +106,11 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * @name prerender * @param {WebGLRenderingContext} gl The map's gl context. * @param {Array} matrix The map's camera matrix. It projects spherical mercator - * coordinates to gl coordinates. The spherical mercator coordinate `[0, 0]` represents the + * coordinates to gl coordinates. The mercator coordinate `[0, 0]` represents the * top left corner of the mercator world and `[1, 1]` represents the bottom right corner. When * the `renderingMode` is `"3d"`, the z coordinate is conformal. A box with identical x, y, and z - * lengths in mercator units would be rendered as a cube. + * lengths in mercator units would be rendered as a cube. {@link MercatorCoordinate}.fromLatLng + * can be used to project a `LngLat` to a mercator coordinate. */ /** @@ -131,7 +132,8 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * coordinates to gl coordinates. The spherical mercator coordinate `[0, 0]` represents the * top left corner of the mercator world and `[1, 1]` represents the bottom right corner. When * the `renderingMode` is `"3d"`, the z coordinate is conformal. A box with identical x, y, and z - * lengths in mercator units would be rendered as a cube. + * lengths in mercator units would be rendered as a cube. {@link MercatorCoordinate}.fromLatLng + * can be used to project a `LngLat` to a mercator coordinate. */ export type CustomLayerInterface = { id: string, diff --git a/src/util/tile_cover.js b/src/util/tile_cover.js index ce715afeae3..408ecd907b3 100644 --- a/src/util/tile_cover.js +++ b/src/util/tile_cover.js @@ -1,12 +1,13 @@ // @flow -import Coordinate from '../geo/coordinate'; +import MercatorCoordinate from '../geo/mercator_coordinate'; +import Point from '@mapbox/point-geometry'; import { OverscaledTileID } from '../source/tile_id'; export default tileCover; -function tileCover(z: number, bounds: [Coordinate, Coordinate, Coordinate, Coordinate], +function tileCover(z: number, bounds: [MercatorCoordinate, MercatorCoordinate, MercatorCoordinate, MercatorCoordinate], actualZ: number, renderWorldCopies: boolean | void): Array { if (renderWorldCopies === undefined) { renderWorldCopies = true; @@ -28,12 +29,14 @@ function tileCover(z: number, bounds: [Coordinate, Coordinate, Coordinate, Coord } } + const zoomedBounds = bounds.map((coord) => new Point(coord.x, coord.y)._mult(tiles)); + // Divide the screen up in two triangles and scan each of them: // +---/ // | / | // /---+ - scanTriangle(bounds[0], bounds[1], bounds[2], 0, tiles, scanLine); - scanTriangle(bounds[2], bounds[3], bounds[0], 0, tiles, scanLine); + scanTriangle(zoomedBounds[0], zoomedBounds[1], zoomedBounds[2], 0, tiles, scanLine); + scanTriangle(zoomedBounds[2], zoomedBounds[3], zoomedBounds[0], 0, tiles, scanLine); return Object.keys(t).map((id) => { return t[id]; @@ -44,15 +47,15 @@ function tileCover(z: number, bounds: [Coordinate, Coordinate, Coordinate, Coord // Taken from polymaps src/Layer.js // https://github.com/simplegeo/polymaps/blob/master/src/Layer.js#L333-L383 -function edge(a: Coordinate, b: Coordinate) { - if (a.row > b.row) { const t = a; a = b; b = t; } +function edge(a: Point, b: Point) { + if (a.y > b.y) { const t = a; a = b; b = t; } return { - x0: a.column, - y0: a.row, - x1: b.column, - y1: b.row, - dx: b.column - a.column, - dy: b.row - a.row + x0: a.x, + y0: a.y, + x1: b.x, + y1: b.y, + dx: b.x - a.x, + dy: b.y - a.y }; } @@ -79,7 +82,7 @@ function scanSpans(e0, e1, ymin, ymax, scanLine) { } } -function scanTriangle(a: Coordinate, b: Coordinate, c: Coordinate, ymin, ymax, scanLine) { +function scanTriangle(a: Point, b: Point, c: Point, ymin, ymax, scanLine) { let ab = edge(a, b), bc = edge(b, c), ca = edge(c, a); diff --git a/src/util/util.js b/src/util/util.js index ed67934fa60..ee2f99276d6 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -2,7 +2,6 @@ import UnitBezier from '@mapbox/unitbezier'; -import Coordinate from '../geo/coordinate'; import Point from '@mapbox/point-geometry'; import window from './window'; @@ -248,33 +247,6 @@ export function bindAll(fns: Array, context: Object): void { }); } -/** - * Given a list of coordinates, get their center as a coordinate. - * - * @returns centerpoint - * @private - */ -export function getCoordinatesCenter(coords: Array): Coordinate { - let minX = Infinity; - let minY = Infinity; - let maxX = -Infinity; - let maxY = -Infinity; - - for (let i = 0; i < coords.length; i++) { - minX = Math.min(minX, coords[i].column); - minY = Math.min(minY, coords[i].row); - maxX = Math.max(maxX, coords[i].column); - maxY = Math.max(maxY, coords[i].row); - } - - const dx = maxX - minX; - const dy = maxY - minY; - const dMax = Math.max(dx, dy); - const zoom = Math.max(0, Math.floor(-Math.log(dMax) / Math.LN2)); - return new Coordinate((minX + maxX) / 2, (minY + maxY) / 2, 0) - .zoomTo(zoom); -} - /** * Determine if a string ends with a particular substring * diff --git a/test/node_modules/mapbox-gl-js-test/fixed.js b/test/node_modules/mapbox-gl-js-test/fixed.js index 1f2eff9620a..388144cf405 100644 --- a/test/node_modules/mapbox-gl-js-test/fixed.js +++ b/test/node_modules/mapbox-gl-js-test/fixed.js @@ -22,8 +22,8 @@ function fixedLngLat(l, precision) { function fixedCoord(coord, precision) { if (precision === undefined) precision = 10; return { - column: fixedNum(coord.column, precision), - row: fixedNum(coord.row, precision), - zoom: coord.zoom + x: fixedNum(coord.x, precision), + y: fixedNum(coord.y, precision), + z: fixedNum(coord.z, precision) }; } diff --git a/test/unit/geo/coordinate.test.js b/test/unit/geo/coordinate.test.js deleted file mode 100644 index 944cb41a52b..00000000000 --- a/test/unit/geo/coordinate.test.js +++ /dev/null @@ -1,46 +0,0 @@ -import { test } from 'mapbox-gl-js-test'; -import Coordinate from '../../../src/geo/coordinate'; - -test('Coordinate', (t) => { - t.test('#constructor', (t) => { - const c = new Coordinate(1, 2, 3); - t.equal(c.column, 1); - t.equal(c.row, 2); - t.equal(c.zoom, 3); - t.end(); - }); - - t.test('#zoomTo', (t) => { - let c = new Coordinate(1, 2, 3); - c = c.zoomTo(3); - t.equal(c.column, 1); - t.equal(c.row, 2); - t.equal(c.zoom, 3); - c = c.zoomTo(2); - t.equal(c.column, 0.5); - t.equal(c.row, 1); - t.equal(c.zoom, 2); - c = c.zoomTo(5); - t.equal(c.column, 4); - t.equal(c.row, 8); - t.equal(c.zoom, 5); - t.end(); - }); - - t.test('#sub', (t) => { - const o = new Coordinate(5, 4, 3); - const c = new Coordinate(1, 2, 3); - const r = o.sub(c); - t.equal(r.column, 4); - t.equal(r.row, 2); - t.equal(r.zoom, 3); - const otherZoom = new Coordinate(4, 4, 4); - const r2 = o.sub(otherZoom); - t.equal(r2.column, 3); - t.equal(r2.row, 2); - t.equal(r2.zoom, 3); - t.end(); - }); - - t.end(); -}); diff --git a/test/unit/geo/mercator_coordinate.test.js b/test/unit/geo/mercator_coordinate.test.js new file mode 100644 index 00000000000..be16014deec --- /dev/null +++ b/test/unit/geo/mercator_coordinate.test.js @@ -0,0 +1,31 @@ +import { test } from 'mapbox-gl-js-test'; +import LngLat from '../../../src/geo/lng_lat'; +import MercatorCoordinate from '../../../src/geo/mercator_coordinate'; + +test('LngLat', (t) => { + t.test('#constructor', (t) => { + t.ok(new MercatorCoordinate(0, 0) instanceof MercatorCoordinate, 'creates an object'); + t.ok(new MercatorCoordinate(0, 0, 0) instanceof MercatorCoordinate, 'creates an object with altitude'); + t.end(); + }); + + t.test('#fromLngLat', (t) => { + const nullIsland = new LngLat(0, 0); + t.deepEqual(MercatorCoordinate.fromLngLat(nullIsland), { x: 0.5, y: 0.5, z: 0 }); + t.end(); + }); + + t.test('#toLngLat', (t) => { + const dc = new LngLat(-77, 39); + t.deepEqual(MercatorCoordinate.fromLngLat(dc, 500).toLngLat(), { lng: -77, lat: 39 }); + t.end(); + }); + + t.test('#toAltitude', (t) => { + const dc = new LngLat(-77, 39); + t.equal(MercatorCoordinate.fromLngLat(dc, 500).toAltitude(), 500); + t.end(); + }); + + t.end(); +}); diff --git a/test/unit/geo/transform.test.js b/test/unit/geo/transform.test.js index c6d24a9bc79..45cd538f0fb 100644 --- a/test/unit/geo/transform.test.js +++ b/test/unit/geo/transform.test.js @@ -33,13 +33,11 @@ test('transform', (t) => { t.equal(transform.scaleZoom(0), -Infinity); t.equal(transform.scaleZoom(10), 3.3219280948873626); t.deepEqual(transform.point, new Point(262144, 262144)); - t.equal(transform.x, 262144); - t.equal(transform.y, 262144); t.equal(transform.height, 500); t.deepEqual(fixedLngLat(transform.pointLocation(new Point(250, 250))), { lng: 0, lat: 0 }); - t.deepEqual(fixedCoord(transform.pointCoordinate(new Point(250, 250))), { column: 512, row: 512, zoom: 10 }); + t.deepEqual(fixedCoord(transform.pointCoordinate(new Point(250, 250))), { x: 0.5, y: 0.5, z: 0 }); t.deepEqual(transform.locationPoint(new LngLat(0, 0)), { x: 250, y: 250 }); - t.deepEqual(transform.locationCoordinate(new LngLat(0, 0)), { column: 512, row: 512, zoom: 10 }); + t.deepEqual(transform.locationCoordinate(new LngLat(0, 0)), { x: 0.5, y: 0.5, z: 0 }); t.end(); }); @@ -101,7 +99,7 @@ test('transform', (t) => { t.equal(transform.zoom, 5.135709286104402); transform.center = new LngLat(-50, -30); - t.same(transform.center, new LngLat(0, -0.006358305286099153)); + t.same(transform.center, new LngLat(0, -0.0063583052861417855)); transform.zoom = 10; transform.center = new LngLat(-50, -30); @@ -220,8 +218,8 @@ test('transform', (t) => { t.test('clamps latitude', (t) => { const transform = new Transform(); - t.equal(transform.latY(-90), transform.latY(-transform.maxValidLatitude)); - t.equal(transform.latY(90), transform.latY(transform.maxValidLatitude)); + t.deepEqual(transform.project(new LngLat(0, -90)), transform.project(new LngLat(0, -transform.maxValidLatitude))); + t.deepEqual(transform.project(new LngLat(0, 90)), transform.project(new LngLat(0, transform.maxValidLatitude))); t.end(); }); diff --git a/test/unit/source/source_cache.test.js b/test/unit/source/source_cache.test.js index 8d927427d1c..ff0f43e87b6 100644 --- a/test/unit/source/source_cache.test.js +++ b/test/unit/source/source_cache.test.js @@ -5,10 +5,10 @@ import Tile from '../../../src/source/tile'; import { OverscaledTileID } from '../../../src/source/tile_id'; import Transform from '../../../src/geo/transform'; import LngLat from '../../../src/geo/lng_lat'; -import Coordinate from '../../../src/geo/coordinate'; import { Event, ErrorEvent, Evented } from '../../../src/util/evented'; import { extend } from '../../../src/util/util'; import browser from '../../../src/util/browser'; +import MercatorCoordinate from '../../../src/geo/mercator_coordinate'; // Add a mocked source type for use in these tests function MockSourceType(id, sourceOptions, _dispatcher, eventedParent) { @@ -1231,8 +1231,8 @@ test('SourceCache#tilesIn', (t) => { const sourceCache = createSourceCache({ noLoad: true }); sourceCache.onAdd(); t.same(sourceCache.tilesIn([ - new Coordinate(0.5, 0.25, 1), - new Coordinate(1.5, 0.75, 1) + new MercatorCoordinate(0.25, 0.125), + new MercatorCoordinate(0.75, 0.375) ]), []); t.end(); @@ -1263,8 +1263,8 @@ test('SourceCache#tilesIn', (t) => { ]); const tiles = sourceCache.tilesIn([ - new Coordinate(0.5, 0.25, 1), - new Coordinate(1.5, 0.75, 1) + new MercatorCoordinate(0.25, 0.125), + new MercatorCoordinate(0.75, 0.375) ], 1); tiles.sort((a, b) => { return a.tile.tileID.canonical.x - b.tile.tileID.canonical.x; }); @@ -1314,8 +1314,8 @@ test('SourceCache#tilesIn', (t) => { ]); const tiles = sourceCache.tilesIn([ - new Coordinate(0.5, 0.25, 1), - new Coordinate(1.5, 0.75, 1) + new MercatorCoordinate(0.25, 0.125), + new MercatorCoordinate(0.75, 0.375) ], 1); tiles.sort((a, b) => { return a.tile.tileID.canonical.x - b.tile.tileID.canonical.x; }); diff --git a/test/unit/util/tile_cover.test.js b/test/unit/util/tile_cover.test.js index c788f4976a3..6b6d5e3ea94 100644 --- a/test/unit/util/tile_cover.test.js +++ b/test/unit/util/tile_cover.test.js @@ -1,5 +1,6 @@ import { test } from 'mapbox-gl-js-test'; import tileCover from '../../../src/util/tile_cover'; +import MercatorCoordinate from '../../../src/geo/mercator_coordinate'; import { OverscaledTileID } from '../../../src/source/tile_id'; test('tileCover', (t) => { @@ -8,10 +9,10 @@ test('tileCover', (t) => { t.test('calculates tile coverage at w = 0', (t) => { const z = 2, coords = [ - {column: 0, row: 1, zoom: 2}, - {column: 1, row: 1, zoom: 2}, - {column: 1, row: 2, zoom: 2}, - {column: 0, row: 2, zoom: 2} + new MercatorCoordinate(0, 0.25), + new MercatorCoordinate(0.25, 0.25), + new MercatorCoordinate(0.25, 0.5), + new MercatorCoordinate(0, 0.5) ], res = tileCover(z, coords, z); t.deepEqual(res, [new OverscaledTileID(2, 0, 2, 0, 1)]); @@ -21,10 +22,10 @@ test('tileCover', (t) => { t.test('calculates tile coverage at w > 0', (t) => { const z = 2, coords = [ - {column: 12, row: 1, zoom: 2}, - {column: 13, row: 1, zoom: 2}, - {column: 13, row: 2, zoom: 2}, - {column: 12, row: 2, zoom: 2} + new MercatorCoordinate(3, 0.25), + new MercatorCoordinate(3.25, 0.25), + new MercatorCoordinate(3.25, 0.5), + new MercatorCoordinate(3, 0.5) ], res = tileCover(z, coords, z); t.deepEqual(res, [new OverscaledTileID(2, 3, 2, 0, 1)]); @@ -34,10 +35,10 @@ test('tileCover', (t) => { t.test('calculates tile coverage at w = -1', (t) => { const z = 2, coords = [ - {column: -1, row: 1, zoom: 2}, - {column: 0, row: 1, zoom: 2}, - {column: 0, row: 2, zoom: 2}, - {column: -1, row: 2, zoom: 2} + new MercatorCoordinate(-0.25, 0.25), + new MercatorCoordinate(0, 0.25), + new MercatorCoordinate(0, 0.5), + new MercatorCoordinate(-0.25, 0.5) ], res = tileCover(z, coords, z); t.deepEqual(res, [new OverscaledTileID(2, -1, 2, 3, 1)]); @@ -47,10 +48,10 @@ test('tileCover', (t) => { t.test('calculates tile coverage at w < -1', (t) => { const z = 2, coords = [ - {column: -13, row: 1, zoom: 2}, - {column: -12, row: 1, zoom: 2}, - {column: -12, row: 2, zoom: 2}, - {column: -13, row: 2, zoom: 2} + new MercatorCoordinate(-3.25, 0.25), + new MercatorCoordinate(-3, 0.25), + new MercatorCoordinate(-3, 0.5), + new MercatorCoordinate(-3.25, 0.5) ], res = tileCover(z, coords, z); t.deepEqual(res, [new OverscaledTileID(2, -4, 2, 3, 1)]); @@ -60,10 +61,10 @@ test('tileCover', (t) => { t.test('calculates tile coverage across meridian', (t) => { const z = 2, coords = [ - {column: -0.5, row: 1, zoom: 2}, - {column: 0.5, row: 1, zoom: 2}, - {column: 0.5, row: 2, zoom: 2}, - {column: -0.5, row: 2, zoom: 2} + new MercatorCoordinate(-0.125, 0.25), + new MercatorCoordinate(0.125, 0.25), + new MercatorCoordinate(0.125, 0.5), + new MercatorCoordinate(-0.125, 0.5) ], res = tileCover(z, coords, z); t.deepEqual(res, [ @@ -75,10 +76,10 @@ test('tileCover', (t) => { t.test('only includes tiles for a single world, if renderWorldCopies is set to false', (t) => { const z = 2, coords = [ - {column: -0.5, row: 1, zoom: 2}, - {column: 0.5, row: 1, zoom: 2}, - {column: 0.5, row: 2, zoom: 2}, - {column: -0.5, row: 2, zoom: 2} + new MercatorCoordinate(-0.125, 0.25), + new MercatorCoordinate(0.125, 0.25), + new MercatorCoordinate(0.125, 0.5), + new MercatorCoordinate(-0.125, 0.5) ], renderWorldCopies = false, res = tileCover(z, coords, z, renderWorldCopies); diff --git a/test/unit/util/util.test.js b/test/unit/util/util.test.js index 5b4ddf6f931..d0b2481da9f 100644 --- a/test/unit/util/util.test.js +++ b/test/unit/util/util.test.js @@ -2,8 +2,7 @@ import { test } from 'mapbox-gl-js-test'; -import Coordinate from '../../../src/geo/coordinate'; -import { easeCubicInOut, keysDifference, extend, pick, uniqueId, getCoordinatesCenter, bindAll, asyncAll, clamp, wrap, bezier, endsWith, mapObject, filterObject, deepEqual, clone, arraysIntersect, isCounterClockwise, isClosedPolygon, parseCacheControl, uuid, validateUuid } from '../../../src/util/util'; +import { easeCubicInOut, keysDifference, extend, pick, uniqueId, bindAll, asyncAll, clamp, wrap, bezier, endsWith, mapObject, filterObject, deepEqual, clone, arraysIntersect, isCounterClockwise, isClosedPolygon, parseCacheControl, uuid, validateUuid } from '../../../src/util/util'; import Point from '@mapbox/point-geometry'; test('util', (t) => { @@ -18,14 +17,6 @@ test('util', (t) => { t.deepEqual(pick({a:1, b:2, c:3}, ['a', 'c', 'd']), {a:1, c:3}, 'pick'); t.ok(typeof uniqueId() === 'number', 'uniqueId'); - t.test('getCoordinatesCenter', (t) => { - t.deepEqual(getCoordinatesCenter([ - new Coordinate(0, 0, 2), - new Coordinate(1, 1, 2) - ]), new Coordinate(0.5, 0.5, 0)); - t.end(); - }); - t.test('bindAll', (t) => { function MyClass() { bindAll(['ontimer'], this); From 5549988bb0a44505c0e1a7822a45c0dc29b53a1d Mon Sep 17 00:00:00 2001 From: bfrengley <37278140+bfrengley@users.noreply.github.com> Date: Wed, 31 Oct 2018 06:52:41 +1300 Subject: [PATCH 037/115] Add support for LngLat conversion from {lat, lon} (#7090)(#7507) --- src/geo/lng_lat.js | 20 +++++++++++++------- test/unit/geo/lng_lat.test.js | 5 ++++- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/src/geo/lng_lat.js b/src/geo/lng_lat.js index a61a0f8ffa5..7ddde5d6d32 100644 --- a/src/geo/lng_lat.js +++ b/src/geo/lng_lat.js @@ -92,11 +92,12 @@ class LngLat { } /** - * Converts an array of two numbers to a `LngLat` object. + * Converts an array of two numbers or an object with `lng` and `lat` or `lon` and `lat` properties + * to a `LngLat` object. * * If a `LngLat` object is passed in, the function returns it unchanged. * - * @param {LngLatLike} input An array of two numbers to convert, or a `LngLat` object to return. + * @param {LngLatLike} input An array of two numbers or object to convert, or a `LngLat` object to return. * @returns {LngLat} A new `LngLat` object, if a conversion occurred, or the original `LngLat` object. * @example * var arr = [-73.9749, 40.7736]; @@ -111,21 +112,26 @@ class LngLat { return new LngLat(Number(input[0]), Number(input[1])); } if (!Array.isArray(input) && typeof input === 'object' && input !== null) { - return new LngLat(Number(input.lng), Number(input.lat)); + return new LngLat( + // flow can't refine this to have one of lng or lat, so we have to cast to any + Number('lng' in input ? (input: any).lng : (input: any).lon), + Number(input.lat) + ); } - throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, or an array of [, ]"); + throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]"); } } /** * A {@link LngLat} object, an array of two numbers representing longitude and latitude, - * or an object with `lng` and `lat` properties. + * or an object with `lng` and `lat` or `lon` and `lat` properties. * - * @typedef {LngLat | {lng: number, lat: number} | [number, number]} LngLatLike + * @typedef {LngLat | {lng: number, lat: number} | {lon: number, lat: number} | [number, number]} LngLatLike * @example * var v1 = new mapboxgl.LngLat(-122.420679, 37.772537); * var v2 = [-122.420679, 37.772537]; + * var v3 = {lon: -122.420679, lat: 37.772537}; */ -export type LngLatLike = LngLat | {lng: number, lat: number} | [number, number]; +export type LngLatLike = LngLat | {lng: number, lat: number} | {lon: number, lat: number} | [number, number]; export default LngLat; diff --git a/test/unit/geo/lng_lat.test.js b/test/unit/geo/lng_lat.test.js index b82c51cbfc4..c32bc04e787 100644 --- a/test/unit/geo/lng_lat.test.js +++ b/test/unit/geo/lng_lat.test.js @@ -28,10 +28,13 @@ test('LngLat', (t) => { t.ok(LngLat.convert({lng: 0, lat: 10}) instanceof LngLat, 'convert creates a LngLat instance'); t.ok(LngLat.convert({lng: 0, lat: 0}) instanceof LngLat, 'convert creates a LngLat instance'); t.ok(LngLat.convert({lng: 0, lat: 0, elev: 0}) instanceof LngLat, 'convert creates a LngLat instance'); + t.ok(LngLat.convert({lon: 0, lat: 10}) instanceof LngLat, 'convert creates a LngLat instance'); + t.ok(LngLat.convert({lon: 0, lat: 0}) instanceof LngLat, 'convert creates a LngLat instance'); + t.ok(LngLat.convert({lon: 0, lat: 0, elev: 0}) instanceof LngLat, 'convert creates a LngLat instance'); t.ok(LngLat.convert(new LngLat(0, 0)) instanceof LngLat, 'convert creates a LngLat instance'); t.throws(() => { LngLat.convert(0, 10); - }, "`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, or an array of [, ]", 'detects and throws on invalid input'); + }, "`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]", 'detects and throws on invalid input'); t.end(); }); From 61ae8d29f1c4377463c8f411bfb1f1ad80c52074 Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Tue, 30 Oct 2018 14:38:43 -0700 Subject: [PATCH 038/115] Add map.load telemetry event (#7431) * map load telemetry event * address feedback --- src/source/raster_tile_source.js | 3 +- src/source/vector_tile_source.js | 3 +- src/ui/map.js | 14 +- src/util/mapbox.js | 213 +++++++++---- .../source/raster_dem_tile_source.test.js | 1 + test/unit/source/raster_tile_source.test.js | 1 + test/unit/source/vector_tile_source.test.js | 1 + test/unit/style/style.test.js | 4 + test/unit/ui/control/logo.test.js | 3 +- test/unit/util/mapbox.test.js | 279 +++++++++++++++++- 10 files changed, 450 insertions(+), 72 deletions(-) diff --git a/src/source/raster_tile_source.js b/src/source/raster_tile_source.js index 30055b7525e..855cfdbf8da 100644 --- a/src/source/raster_tile_source.js +++ b/src/source/raster_tile_source.js @@ -5,7 +5,7 @@ import { extend, pick } from '../util/util'; import { getImage, ResourceType } from '../util/ajax'; import { Event, ErrorEvent, Evented } from '../util/evented'; import loadTileJSON from './load_tilejson'; -import { normalizeTileURL as normalizeURL, postTurnstileEvent } from '../util/mapbox'; +import { normalizeTileURL as normalizeURL, postTurnstileEvent, postMapLoadEvent } from '../util/mapbox'; import TileBounds from './tile_bounds'; import Texture from '../render/texture'; @@ -70,6 +70,7 @@ class RasterTileSource extends Evented implements Source { if (tileJSON.bounds) this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom); postTurnstileEvent(tileJSON.tiles); + postMapLoadEvent(tileJSON.tiles, this.map._getMapId()); // `content` is included here to prevent a race condition where `Style#_updateSources` is called // before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives diff --git a/src/source/vector_tile_source.js b/src/source/vector_tile_source.js index cb1a46eaa3b..76c7a2168f2 100644 --- a/src/source/vector_tile_source.js +++ b/src/source/vector_tile_source.js @@ -4,7 +4,7 @@ import { Event, ErrorEvent, Evented } from '../util/evented'; import { extend, pick } from '../util/util'; import loadTileJSON from './load_tilejson'; -import { normalizeTileURL as normalizeURL, postTurnstileEvent } from '../util/mapbox'; +import { normalizeTileURL as normalizeURL, postTurnstileEvent, postMapLoadEvent } from '../util/mapbox'; import TileBounds from './tile_bounds'; import { ResourceType } from '../util/ajax'; import browser from '../util/browser'; @@ -74,6 +74,7 @@ class VectorTileSource extends Evented implements Source { if (tileJSON.bounds) this.tileBounds = new TileBounds(tileJSON.bounds, this.minzoom, this.maxzoom); postTurnstileEvent(tileJSON.tiles); + postMapLoadEvent(tileJSON.tiles, this.map._getMapId()); // `content` is included here to prevent a race condition where `Style#_updateSources` is called // before the TileJSON arrives. this makes sure the tiles needed are loaded once TileJSON arrives diff --git a/src/ui/map.js b/src/ui/map.js index e98550acaef..ce2fe9e8984 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -1,6 +1,6 @@ // @flow -import { extend, bindAll, warnOnce } from '../util/util'; +import { extend, bindAll, warnOnce, uniqueId } from '../util/util'; import browser from '../util/browser'; import window from '../util/window'; @@ -262,6 +262,7 @@ class Map extends Camera { _collectResourceTiming: boolean; _renderTaskQueue: TaskQueue; _controls: Array; + _mapId: number; /** * The map's {@link ScrollZoomHandler}, which implements zooming in and out with a scroll wheel or trackpad. @@ -323,6 +324,7 @@ class Map extends Camera { this._collectResourceTiming = options.collectResourceTiming; this._renderTaskQueue = new TaskQueue(); this._controls = []; + this._mapId = uniqueId(); const transformRequestFn = options.transformRequest; this._transformRequest = transformRequestFn ? @@ -406,6 +408,16 @@ class Map extends Camera { }); } + /* + * Returns a unique number for this map instance which is used for the MapLoadEvent + * to make sure we only fire one event per instantiated map object. + * @private + * @returns {number} + */ + _getMapId() { + return this._mapId; + } + /** * Adds a {@link IControl} to the map, calling `control.onAdd(this)`. * diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 18b68167392..eadb803b42a 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -5,14 +5,14 @@ import config from './config'; import browser from './browser'; import window from './window'; import { version } from '../../package.json'; -import { uuid, validateUuid, storageAvailable, warnOnce } from './util'; +import { uuid, validateUuid, storageAvailable, warnOnce, extend } from './util'; import { postData } from './ajax'; import type { RequestParameters } from './ajax'; import type { Cancelable } from '../types/cancelable'; const help = 'See https://www.mapbox.com/api-documentation/#access-tokens'; -const turnstileEventStorageKey = 'mapbox.turnstileEventData'; +const telemEventKey = 'mapbox.eventData'; type UrlObject = {| protocol: string, @@ -133,19 +133,149 @@ function formatUrl(obj: UrlObject): string { return `${obj.protocol}://${obj.authority}${obj.path}${params}`; } -export class TurnstileEvent { - eventData: { anonId: ?string, lastSuccess: ?number, accessToken: ?string}; - queue: Array; - pending: boolean +type TelemetryEventType = 'appUserTurnstile' | 'map.load'; + +class TelemetryEvent { + eventData: { lastSuccess: ?number, accessToken: ?string}; + anonId: ?string; + queue: Array; + type: TelemetryEventType; pendingRequest: ?Cancelable; - constructor() { - this.eventData = { anonId: null, lastSuccess: null, accessToken: config.ACCESS_TOKEN}; + constructor(type: TelemetryEventType) { + this.type = type; + this.anonId = null; + this.eventData = {lastSuccess: null, accessToken: config.ACCESS_TOKEN}; this.queue = []; - this.pending = false; this.pendingRequest = null; } + fetchEventData() { + const isLocalStorageAvailable = storageAvailable('localStorage'); + const storageKey = `${telemEventKey}:${config.ACCESS_TOKEN || ''}`; + const uuidKey = `${telemEventKey}.uuid:${config.ACCESS_TOKEN || ''}`; + + if (isLocalStorageAvailable) { + //Retrieve cached data + try { + const data = window.localStorage.getItem(storageKey); + if (data) { + this.eventData = JSON.parse(data); + } + + const uuid = window.localStorage.getItem(uuidKey); + if (uuid) this.anonId = uuid; + } catch (e) { + warnOnce('Unable to read from LocalStorage'); + } + } + } + + saveEventData() { + const isLocalStorageAvailable = storageAvailable('localStorage'); + const storageKey = `${telemEventKey}:${config.ACCESS_TOKEN || ''}`; + const uuidKey = `${telemEventKey}.uuid:${config.ACCESS_TOKEN || ''}`; + if (isLocalStorageAvailable) { + try { + window.localStorage.setItem(uuidKey, this.anonId); + if (this.eventData.lastSuccess) { + window.localStorage.setItem(storageKey, JSON.stringify(this.eventData)); + } + } catch (e) { + warnOnce('Unable to write to LocalStorage'); + } + } + + } + + processRequests() {} + + /* + * If any event data should be persisted after the POST request, the callback should modify eventData` + * to the values that should be saved. For this reason, the callback should be invoked prior to the call + * to TelemetryEvent#saveData + */ + postEvent(timestamp: number, additionalPayload: {[string]: any}, callback: (err: ?Error) => void) { + const eventsUrlObject: UrlObject = parseUrl(config.EVENTS_URL); + eventsUrlObject.params.push(`access_token=${config.ACCESS_TOKEN || ''}`); + const payload: Object = { + event: this.type, + created: new Date(timestamp).toISOString(), + sdkIdentifier: 'mapbox-gl-js', + sdkVersion: version, + userId: this.anonId + }; + + const finalPayload = additionalPayload ? extend(payload, additionalPayload) : payload; + const request: RequestParameters = { + url: formatUrl(eventsUrlObject), + headers: { + 'Content-Type': 'text/plain' //Skip the pre-flight OPTIONS request + }, + body: JSON.stringify([finalPayload]) + }; + + this.pendingRequest = postData(request, (error) => { + this.pendingRequest = null; + callback(error); + this.saveEventData(); + this.processRequests(); + }); + } + + queueRequest(event: number | {id: number, timestamp: number}) { + this.queue.push(event); + this.processRequests(); + } +} + +export class MapLoadEvent extends TelemetryEvent { + +success: {[number]: boolean}; + + constructor() { + super('map.load'); + this.success = {}; + } + + postMapLoadEvent(tileUrls: Array, mapId: number) { + //Enabled only when Mapbox Access Token is set and a source uses + // mapbox tiles. + if (config.ACCESS_TOKEN && + Array.isArray(tileUrls) && + tileUrls.some(url => isMapboxHTTPURL(url))) { + this.queueRequest({id: mapId, timestamp: Date.now()}); + } + } + + processRequests() { + if (this.pendingRequest || this.queue.length === 0) return; + const {id, timestamp} = this.queue.shift(); + + // Only one load event should fire per map + if (id && this.success[id]) return; + + if (!this.anonId) { + this.fetchEventData(); + } + + if (!validateUuid(this.anonId)) { + this.anonId = uuid(); + } + + this.postEvent(timestamp, {}, (err) => { + if (!err) { + if (id) this.success[id] = true; + } + }); + } +} + + +export class TurnstileEvent extends TelemetryEvent { + constructor() { + super('appUserTurnstile'); + } + postTurnstileEvent(tileUrls: Array) { //Enabled only when Mapbox Access Token is set and a source uses // mapbox tiles. @@ -156,90 +286,53 @@ export class TurnstileEvent { } } - queueRequest(date: number) { - this.queue.push(date); - this.processRequests(); - } processRequests() { if (this.pendingRequest || this.queue.length === 0) { return; } - const storageKey = `${turnstileEventStorageKey}:${config.ACCESS_TOKEN || ''}`; - const isLocalStorageAvailable = storageAvailable('localStorage'); - let dueForEvent = this.eventData.accessToken ? (this.eventData.accessToken !== config.ACCESS_TOKEN) : false; + let dueForEvent = this.eventData.accessToken ? (this.eventData.accessToken !== config.ACCESS_TOKEN) : false; //Reset event data cache if the access token changed. if (dueForEvent) { - this.eventData.anonId = this.eventData.lastSuccess = null; + this.anonId = this.eventData.lastSuccess = null; } - if ((!this.eventData.anonId || !this.eventData.lastSuccess) && - isLocalStorageAvailable) { + if (!this.anonId || !this.eventData.lastSuccess) { //Retrieve cached data - try { - const data = window.localStorage.getItem(storageKey); - if (data) { - this.eventData = JSON.parse(data); - } - } catch (e) { - warnOnce('Unable to read from LocalStorage'); - } + this.fetchEventData(); } - if (!validateUuid(this.eventData.anonId)) { - this.eventData.anonId = uuid(); + if (!validateUuid(this.anonId)) { + this.anonId = uuid(); dueForEvent = true; } - const nextUpdate = this.queue.shift(); + const nextUpdate = this.queue.shift(); // Record turnstile event once per calendar day. if (this.eventData.lastSuccess) { const lastUpdate = new Date(this.eventData.lastSuccess); const nextDate = new Date(nextUpdate); const daysElapsed = (nextUpdate - this.eventData.lastSuccess) / (24 * 60 * 60 * 1000); dueForEvent = dueForEvent || daysElapsed >= 1 || daysElapsed < -1 || lastUpdate.getDate() !== nextDate.getDate(); + } else { + dueForEvent = true; } if (!dueForEvent) { return this.processRequests(); } - const eventsUrlObject: UrlObject = parseUrl(config.EVENTS_URL); - eventsUrlObject.params.push(`access_token=${config.ACCESS_TOKEN || ''}`); - - const request: RequestParameters = { - url: formatUrl(eventsUrlObject), - headers: { - 'Content-Type': 'text/plain' // Skip the pre-flight OPTIONS request - }, - body: JSON.stringify([{ - event: 'appUserTurnstile', - created: (new Date(nextUpdate)).toISOString(), - sdkIdentifier: 'mapbox-gl-js', - sdkVersion: version, - 'enabled.telemetry': false, - userId: this.eventData.anonId - }]) - }; - - this.pendingRequest = postData(request, (error: ?Error) => { - this.pendingRequest = null; - if (!error) { + this.postEvent(nextUpdate, {"enabled.telemetry": false}, (err)=> { + if (!err) { this.eventData.lastSuccess = nextUpdate; this.eventData.accessToken = config.ACCESS_TOKEN; - if (isLocalStorageAvailable) { - try { - window.localStorage.setItem(storageKey, JSON.stringify(this.eventData)); - } catch (e) { - warnOnce('Unable to write to LocalStorage'); - } - } - this.processRequests(); } }); } } const turnstileEvent_ = new TurnstileEvent(); - export const postTurnstileEvent = turnstileEvent_.postTurnstileEvent.bind(turnstileEvent_); + +const mapLoadEvent_ = new MapLoadEvent(); +export const postMapLoadEvent = mapLoadEvent_.postMapLoadEvent.bind(mapLoadEvent_); diff --git a/test/unit/source/raster_dem_tile_source.test.js b/test/unit/source/raster_dem_tile_source.test.js index 73c45ae6d55..13038efb3e8 100644 --- a/test/unit/source/raster_dem_tile_source.test.js +++ b/test/unit/source/raster_dem_tile_source.test.js @@ -7,6 +7,7 @@ function createSource(options, transformCallback) { const source = new RasterDEMTileSource('id', options, { send: function() {} }, options.eventedParent); source.onAdd({ transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, + _getMapId: () => 1, _transformRequest: transformCallback ? transformCallback : (url) => { return { url }; } }); diff --git a/test/unit/source/raster_tile_source.test.js b/test/unit/source/raster_tile_source.test.js index f20fc2bef10..a6839395f38 100644 --- a/test/unit/source/raster_tile_source.test.js +++ b/test/unit/source/raster_tile_source.test.js @@ -7,6 +7,7 @@ function createSource(options, transformCallback) { const source = new RasterTileSource('id', options, { send: function() {} }, options.eventedParent); source.onAdd({ transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, + _getMapId: () => 1, _transformRequest: transformCallback ? transformCallback : (url) => { return { url }; } }); diff --git a/test/unit/source/vector_tile_source.test.js b/test/unit/source/vector_tile_source.test.js index 15120c962ee..790c53cfea5 100644 --- a/test/unit/source/vector_tile_source.test.js +++ b/test/unit/source/vector_tile_source.test.js @@ -8,6 +8,7 @@ function createSource(options, transformCallback) { const source = new VectorTileSource('id', options, { send: function() {} }, options.eventedParent); source.onAdd({ transform: { showCollisionBoxes: false }, + _getMapId: () => 1, _transformRequest: transformCallback ? transformCallback : (url) => { return { url }; } }); diff --git a/test/unit/style/style.test.js b/test/unit/style/style.test.js index 830d336ba3a..7d19a5d50a5 100644 --- a/test/unit/style/style.test.js +++ b/test/unit/style/style.test.js @@ -52,6 +52,10 @@ class StubMap extends Evented { _transformRequest(url) { return { url }; } + + _getMapId() { + return 1; + } } test('Style', (t) => { diff --git a/test/unit/ui/control/logo.test.js b/test/unit/ui/control/logo.test.js index 567ea35c486..1cee1a9e887 100644 --- a/test/unit/ui/control/logo.test.js +++ b/test/unit/ui/control/logo.test.js @@ -25,7 +25,8 @@ function createMap(t, logoPosition, logoRequired) { function createSource(options, logoRequired) { const source = new VectorTileSource('id', options, { send: function () {} }); source.onAdd({ - transform: { angle: 0, pitch: 0, showCollisionBoxes: false } + transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, + _getMapId: () => 1 }); source.on('error', (e) => { throw e.error; diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index 06a320388ae..82ef089d40e 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -381,15 +381,13 @@ test("mapbox", (t) => { t.test('does not POST event when previously stored data is on the same day', (t) => { const now = +Date.now(); - - window.localStorage.setItem(`mapbox.turnstileEventData:${config.ACCESS_TOKEN}`, JSON.stringify({ - anonId: uuid(), + window.localStorage.setItem(`mapbox.eventData.uuid:${config.ACCESS_TOKEN}`, uuid()); + window.localStorage.setItem(`mapbox.eventData:${config.ACCESS_TOKEN}`, JSON.stringify({ lastSuccess: now })); // Post 5 seconds later withFixedDate(t, now + 5, () => event.postTurnstileEvent(mapboxTileURLs)); - t.false(window.server.requests.length); t.end(); }); @@ -397,8 +395,8 @@ test("mapbox", (t) => { t.test('POSTs event when previously stored anonId is not a valid uuid', (t) => { const now = +Date.now(); - window.localStorage.setItem(`mapbox.turnstileEventData:${config.ACCESS_TOKEN}`, JSON.stringify({ - anonId: 'anonymous', + window.localStorage.setItem(`mapbox.eventData.uuid:${config.ACCESS_TOKEN}`, 'anonymous'); + window.localStorage.setItem(`mapbox.eventData:${config.ACCESS_TOKEN}`, JSON.stringify({ lastSuccess: now })); @@ -415,8 +413,8 @@ test("mapbox", (t) => { t.test('POSTs event when previously stored timestamp is more than 24 hours in the future', (t) => { const now = +Date.now(); - window.localStorage.setItem(`mapbox.turnstileEventData:${config.ACCESS_TOKEN}`, JSON.stringify({ - anonId: uuid(), + window.localStorage.setItem(`mapbox.eventData.uuid:${config.ACCESS_TOKEN}`, uuid()); + window.localStorage.setItem(`mapbox.eventData:${config.ACCESS_TOKEN}`, JSON.stringify({ lastSuccess: now + ms25Hours // 24-hours later })); @@ -616,6 +614,271 @@ test("mapbox", (t) => { t.end(); }); + t.test('MapLoadEvent', (t) => { + let event; + let turnstileEvent; + t.beforeEach((callback) => { + window.useFakeXMLHttpRequest(); + event = new mapbox.MapLoadEvent(); + turnstileEvent = new mapbox.TurnstileEvent(); + callback(); + }); + + t.afterEach((callback) => { + window.restore(); + callback(); + }); + + t.test('mapbox.postMapLoadEvent', (t) => { + t.ok(mapbox.postMapLoadEvent); + t.end(); + }); + + t.test('does not POST when mapboxgl.ACCESS_TOKEN is not set', (t) => { + config.ACCESS_TOKEN = null; + + event.postMapLoadEvent(mapboxTileURLs, 1); + t.equal(window.server.requests.length, 0); + t.end(); + }); + + t.test('does not POST when url does not point to mapbox.com', (t) => { + event.postMapLoadEvent(nonMapboxTileURLs, 1); + + t.equal(window.server.requests.length, 0); + t.end(); + }); + + t.test('POSTs cn event when API_URL changes to cn endpoint', (t) => { + const previousUrl = config.API_URL; + config.API_URL = 'https://api.mapbox.cn'; + + event.postMapLoadEvent(mapboxTileURLs, 1); + + const req = window.server.requests[0]; + req.respond(200); + + t.true(req.url.indexOf('https://events.mapbox.cn') > -1); + config.API_URL = previousUrl; + t.end(); + }); + + t.test('with LocalStorage available', (t) => { + let prevLocalStorage; + t.beforeEach((callback) => { + prevLocalStorage = window.localStorage; + window.localStorage = { + data: {}, + setItem: function (id, val) { + this.data[id] = String(val); + }, + getItem: function (id) { + return this.data.hasOwnProperty(id) ? this.data[id] : undefined; + }, + removeItem: function (id) { + if (this.hasOwnProperty(id)) delete this[id]; + } + }; + callback(); + }); + + t.afterEach((callback) => { + window.localStorage = prevLocalStorage; + callback(); + }); + + t.test('generates new uuid when previously stored anonId is not a valid uuid', (t) => { + window.localStorage.setItem(`mapbox.eventData.uuid:${config.ACCESS_TOKEN}`, JSON.stringify({ + anonId: 'anonymous' + })); + + event.postMapLoadEvent(mapboxTileURLs, 1); + const req = window.server.requests[0]; + req.respond(200); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.notEqual(reqBody.userId, 'anonymous'); + t.end(); + }); + + t.test('does not POST map.load event second time within same calendar day', (t) => { + let now = +Date.now(); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + + //Post second event + const firstEvent = now; + now += (60 * 1000); // A bit later + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + + const req = window.server.requests[0]; + req.respond(200); + + t.equal(window.server.requests.length, 1); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(reqBody.created, new Date(firstEvent).toISOString()); + + t.end(); + }); + + t.test('does not POST map.load event second time when clock goes backwards less than a day', (t) => { + let now = +Date.now(); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + + //Post second event + const firstEvent = now; + now -= (60 * 1000); // A bit earlier + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + + const req = window.server.requests[0]; + req.respond(200); + + t.equal(window.server.requests.length, 1); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(reqBody.created, new Date(firstEvent).toISOString()); + + t.end(); + }); + + t.test('POSTs map.load event when access token changes', (t) => { + config.ACCESS_TOKEN = 'pk.new.*'; + + event.postMapLoadEvent(mapboxTileURLs, 1); + + const req = window.server.requests[0]; + req.respond(200); + + t.equal(req.url, `${config.EVENTS_URL}?access_token=pk.new.*`); + + t.end(); + }); + + t.test('uses the same uuid as TurnstileEvent', (t) => { + const anonId = uuid(); + window.localStorage.setItem(`mapbox.eventData.uuid:${config.ACCESS_TOKEN}`, anonId); + turnstileEvent.postTurnstileEvent(mapboxTileURLs); + event.postMapLoadEvent(mapboxTileURLs, 1); + + + const turnstileReq = window.server.requests[0]; + turnstileReq.respond(200); + const mapLoadReq = window.server.requests[1]; + mapLoadReq.respond(200); + const turnstileBody = JSON.parse(turnstileReq.requestBody)[0]; + const loadBody = JSON.parse(mapLoadReq.requestBody)[0]; + + t.equal(turnstileBody.userId, loadBody.userId); + t.equal(turnstileBody.userId, anonId); + const turnstileEventData = JSON.parse(window.localStorage.getItem(`mapbox.eventData:${config.ACCESS_TOKEN}`)); + t.ok(turnstileEventData.lastSuccess); + t.end(); + }); + + t.end(); + }); + + t.test('when LocalStorage is not available', (t) => { + t.test('POSTs map.load event', (t) => { + event.postMapLoadEvent(mapboxTileURLs, 1); + + const req = window.server.requests[0]; + req.respond(200); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); + t.equal(req.method, 'POST'); + t.equal(reqBody.event, 'map.load'); + t.equal(reqBody.sdkVersion, version); + t.ok(reqBody.userId); + + t.end(); + }); + + t.test('does not POST map.load multiple times for the same map instance', (t) => { + const now = Date.now(); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + withFixedDate(t, now + 5, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + + const req = window.server.requests[0]; + req.respond(200); + + t.equal(window.server.requests.length, 1); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(reqBody.created, new Date(now).toISOString()); + + t.end(); + }); + + t.test('POSTs map.load event when access token changes', (t) => { + config.ACCESS_TOKEN = 'pk.new.*'; + + event.postMapLoadEvent(mapboxTileURLs, 1); + + const req = window.server.requests[0]; + req.respond(200); + + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(req.url, `${config.EVENTS_URL}?access_token=pk.new.*`); + t.equal(req.method, 'POST'); + t.equal(reqBody.event, 'map.load'); + t.equal(reqBody.sdkVersion, version); + t.ok(reqBody.userId); + + t.end(); + }); + + t.test('POSTs distinct map.load for multiple maps', (t) => { + event.postMapLoadEvent(mapboxTileURLs, 1); + const now = +Date.now(); + withFixedDate(t, now, ()=> event.postMapLoadEvent(mapboxTileURLs, 2)); + + let req = window.server.requests[0]; + req.respond(200); + + req = window.server.requests[1]; + req.respond(200); + const reqBody = JSON.parse(req.requestBody)[0]; + t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); + t.equal(req.method, 'POST'); + t.equal(reqBody.event, 'map.load'); + t.equal(reqBody.sdkVersion, version); + t.ok(reqBody.userId); + t.equal(reqBody.created, new Date(now).toISOString()); + + t.end(); + }); + + t.test('Queues and POSTs map.load events when triggerred in quick succession by different maps', (t) => { + const now = Date.now(); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 1)); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 2)); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 3)); + + const reqOne = window.server.requests[0]; + reqOne.respond(200); + let reqBody = JSON.parse(reqOne.requestBody)[0]; + t.equal(reqBody.created, new Date(now).toISOString()); + + const reqTwo = window.server.requests[1]; + reqTwo.respond(200); + reqBody = JSON.parse(reqTwo.requestBody)[0]; + t.equal(reqBody.created, new Date(now).toISOString()); + + const reqThree = window.server.requests[2]; + reqThree.respond(200); + reqBody = JSON.parse(reqThree.requestBody)[0]; + t.equal(reqBody.created, new Date(now).toISOString()); + + t.end(); + }); + + t.end(); + }); + + t.end(); + }); t.end(); }); From 5b5f74cfbbeecf54997b18314dda552e643c5398 Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Tue, 30 Oct 2018 17:17:39 -0700 Subject: [PATCH 039/115] Stub local and session storage in JSDOM (#7516) --- package.json | 2 +- src/util/window.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 93311306f13..35c97b8d6bb 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "gl": "^4.0.1", "glob": "^7.0.3", "is-builtin-module": "^1.0.0", - "jsdom": "11.11.0", + "jsdom": "^11.11.0", "json-stringify-pretty-compact": "^1.0.4", "jsonwebtoken": "^8.3.0", "mock-geolocation": "^1.0.11", diff --git a/src/util/window.js b/src/util/window.js index 7019c9650c9..f053734e6ac 100644 --- a/src/util/window.js +++ b/src/util/window.js @@ -38,6 +38,13 @@ function restore(): Window { virtualConsole: new jsdom.VirtualConsole().sendTo(console) }); + // Delete local and session storage from JSDOM and stub them out with a warning log + // Accessing these properties during extend() produces an error in Node environments + // See https://github.com/mapbox/mapbox-gl-js/pull/7455 for discussion + delete window.localStorage; + delete window.sessionStorage; + window.localStorage = window.sessionStorage = () => console.log('Local and session storage not available in Node. Use a stub implementation if needed for testing.'); + window.devicePixelRatio = 1; window.requestAnimationFrame = function(callback) { From 999a8d99dfbf875b0acc20381d40f21c3ab41dfc Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 31 Oct 2018 16:47:30 +0100 Subject: [PATCH 040/115] Limit parallel image requests for raster performance (#7497) * limit parallel image requests for raster performance * add a test for maxParallelImageRequests * fix flow --- src/index.js | 12 ++++++++++-- src/util/ajax.js | 21 +++++++++++++++++++++ src/util/config.js | 6 ++++-- test/unit/util/ajax.test.js | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index d04047eb8e0..8cfc4f3c665 100644 --- a/src/index.js +++ b/src/index.js @@ -50,7 +50,7 @@ const exported = { * mapboxgl.accessToken = myAccessToken; * @see [Display a map](https://www.mapbox.com/mapbox-gl-js/examples/) */ - get accessToken() { + get accessToken(): ?string { return config.ACCESS_TOKEN; }, @@ -58,7 +58,7 @@ const exported = { config.ACCESS_TOKEN = token; }, - get workerCount() { + get workerCount(): number { return WorkerPool.workerCount; }, @@ -66,6 +66,14 @@ const exported = { WorkerPool.workerCount = count; }, + get maxParallelImageRequests(): number { + return config.MAX_PARALLEL_IMAGE_REQUESTS; + }, + + set maxParallelImageRequests(numRequests: number) { + config.MAX_PARALLEL_IMAGE_REQUESTS = numRequests; + }, + workerUrl: '' }; diff --git a/src/util/ajax.js b/src/util/ajax.js index 83dec800d71..9cce7ff090f 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -3,6 +3,7 @@ import window from './window'; import { extend } from './util'; import { isMapboxHTTPURL } from './mapbox'; +import config from './config'; import type { Callback } from '../types/callback'; import type { Cancelable } from '../types/cancelable'; @@ -174,10 +175,30 @@ function sameOrigin(url) { const transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII='; +const imageQueue = []; +let numImageRequests = 0; + export const getImage = function(requestParameters: RequestParameters, callback: Callback): Cancelable { + // limit concurrent image loads to help with raster sources performance on big screens + if (numImageRequests >= config.MAX_PARALLEL_IMAGE_REQUESTS) { + const queued = {requestParameters, callback, cancelled: false}; + imageQueue.push(queued); + return { cancel() { queued.cancelled = true; } }; + } + numImageRequests++; + // request the image with XHR to work around caching issues // see https://github.com/mapbox/mapbox-gl-js/issues/1470 return getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { + + numImageRequests--; + while (imageQueue.length && numImageRequests < config.MAX_PARALLEL_IMAGE_REQUESTS) { // eslint-disable-line + const {requestParameters, callback, cancelled} = imageQueue.shift(); + if (!cancelled) { + getImage(requestParameters, callback); + } + } + if (err) { callback(err); } else if (data) { diff --git a/src/util/config.js b/src/util/config.js index ed080f6cf91..f2ef586a804 100644 --- a/src/util/config.js +++ b/src/util/config.js @@ -4,7 +4,8 @@ type Config = {| API_URL: string, EVENTS_URL: string, REQUIRE_ACCESS_TOKEN: boolean, - ACCESS_TOKEN: ?string + ACCESS_TOKEN: ?string, + MAX_PARALLEL_IMAGE_REQUESTS: number |}; const config: Config = { @@ -17,7 +18,8 @@ const config: Config = { } }, REQUIRE_ACCESS_TOKEN: true, - ACCESS_TOKEN: null + ACCESS_TOKEN: null, + MAX_PARALLEL_IMAGE_REQUESTS: 16 }; export default config; diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index 7adcb25a6e6..69f24906984 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -2,9 +2,11 @@ import { test } from 'mapbox-gl-js-test'; import { getArrayBuffer, getJSON, - postData + postData, + getImage } from '../../../src/util/ajax'; import window from '../../../src/util/window'; +import config from '../../../src/util/config'; test('ajax', (t) => { t.beforeEach(callback => { @@ -97,5 +99,34 @@ test('ajax', (t) => { window.server.respond(); }); + t.test('getImage respects maxParallelImageRequests', (t) => { + window.server.respondWith(request => request.respond(200, {'Content-Type': 'image/png'}, '')); + + const maxRequests = config.MAX_PARALLEL_IMAGE_REQUESTS; + + // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 + const jsdomImage = window.Image; + window.Image = class { + set src(src) { + setTimeout(() => this.onload()); + } + }; + + function callback(err) { + if (err) return; + // last request is only added after we got a response from one of the previous ones + t.equals(window.server.requests.length, maxRequests + 1); + window.Image = jsdomImage; + t.end(); + } + + for (let i = 0; i < maxRequests + 1; i++) { + getImage({url: ''}, callback); + } + t.equals(window.server.requests.length, maxRequests); + + window.server.requests[0].respond(); + }); + t.end(); }); From f86b13fe4b0d07abcd1be19f12edb0ef41f27bfd Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Tue, 30 Oct 2018 17:17:39 -0700 Subject: [PATCH 041/115] Stub local and session storage in JSDOM (#7516) --- package.json | 2 +- src/util/window.js | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 93311306f13..35c97b8d6bb 100644 --- a/package.json +++ b/package.json @@ -63,7 +63,7 @@ "gl": "^4.0.1", "glob": "^7.0.3", "is-builtin-module": "^1.0.0", - "jsdom": "11.11.0", + "jsdom": "^11.11.0", "json-stringify-pretty-compact": "^1.0.4", "jsonwebtoken": "^8.3.0", "mock-geolocation": "^1.0.11", diff --git a/src/util/window.js b/src/util/window.js index 7019c9650c9..f053734e6ac 100644 --- a/src/util/window.js +++ b/src/util/window.js @@ -38,6 +38,13 @@ function restore(): Window { virtualConsole: new jsdom.VirtualConsole().sendTo(console) }); + // Delete local and session storage from JSDOM and stub them out with a warning log + // Accessing these properties during extend() produces an error in Node environments + // See https://github.com/mapbox/mapbox-gl-js/pull/7455 for discussion + delete window.localStorage; + delete window.sessionStorage; + window.localStorage = window.sessionStorage = () => console.log('Local and session storage not available in Node. Use a stub implementation if needed for testing.'); + window.devicePixelRatio = 1; window.requestAnimationFrame = function(callback) { From 54d6d3411547a4cd3da83de92163457357f97bec Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 31 Oct 2018 16:47:30 +0100 Subject: [PATCH 042/115] Limit parallel image requests for raster performance (#7497) * limit parallel image requests for raster performance * add a test for maxParallelImageRequests * fix flow --- src/index.js | 12 ++++++++++-- src/util/ajax.js | 21 +++++++++++++++++++++ src/util/config.js | 6 ++++-- test/unit/util/ajax.test.js | 33 ++++++++++++++++++++++++++++++++- 4 files changed, 67 insertions(+), 5 deletions(-) diff --git a/src/index.js b/src/index.js index d04047eb8e0..8cfc4f3c665 100644 --- a/src/index.js +++ b/src/index.js @@ -50,7 +50,7 @@ const exported = { * mapboxgl.accessToken = myAccessToken; * @see [Display a map](https://www.mapbox.com/mapbox-gl-js/examples/) */ - get accessToken() { + get accessToken(): ?string { return config.ACCESS_TOKEN; }, @@ -58,7 +58,7 @@ const exported = { config.ACCESS_TOKEN = token; }, - get workerCount() { + get workerCount(): number { return WorkerPool.workerCount; }, @@ -66,6 +66,14 @@ const exported = { WorkerPool.workerCount = count; }, + get maxParallelImageRequests(): number { + return config.MAX_PARALLEL_IMAGE_REQUESTS; + }, + + set maxParallelImageRequests(numRequests: number) { + config.MAX_PARALLEL_IMAGE_REQUESTS = numRequests; + }, + workerUrl: '' }; diff --git a/src/util/ajax.js b/src/util/ajax.js index 83dec800d71..9cce7ff090f 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -3,6 +3,7 @@ import window from './window'; import { extend } from './util'; import { isMapboxHTTPURL } from './mapbox'; +import config from './config'; import type { Callback } from '../types/callback'; import type { Cancelable } from '../types/cancelable'; @@ -174,10 +175,30 @@ function sameOrigin(url) { const transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII='; +const imageQueue = []; +let numImageRequests = 0; + export const getImage = function(requestParameters: RequestParameters, callback: Callback): Cancelable { + // limit concurrent image loads to help with raster sources performance on big screens + if (numImageRequests >= config.MAX_PARALLEL_IMAGE_REQUESTS) { + const queued = {requestParameters, callback, cancelled: false}; + imageQueue.push(queued); + return { cancel() { queued.cancelled = true; } }; + } + numImageRequests++; + // request the image with XHR to work around caching issues // see https://github.com/mapbox/mapbox-gl-js/issues/1470 return getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { + + numImageRequests--; + while (imageQueue.length && numImageRequests < config.MAX_PARALLEL_IMAGE_REQUESTS) { // eslint-disable-line + const {requestParameters, callback, cancelled} = imageQueue.shift(); + if (!cancelled) { + getImage(requestParameters, callback); + } + } + if (err) { callback(err); } else if (data) { diff --git a/src/util/config.js b/src/util/config.js index ed080f6cf91..f2ef586a804 100644 --- a/src/util/config.js +++ b/src/util/config.js @@ -4,7 +4,8 @@ type Config = {| API_URL: string, EVENTS_URL: string, REQUIRE_ACCESS_TOKEN: boolean, - ACCESS_TOKEN: ?string + ACCESS_TOKEN: ?string, + MAX_PARALLEL_IMAGE_REQUESTS: number |}; const config: Config = { @@ -17,7 +18,8 @@ const config: Config = { } }, REQUIRE_ACCESS_TOKEN: true, - ACCESS_TOKEN: null + ACCESS_TOKEN: null, + MAX_PARALLEL_IMAGE_REQUESTS: 16 }; export default config; diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index 7adcb25a6e6..69f24906984 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -2,9 +2,11 @@ import { test } from 'mapbox-gl-js-test'; import { getArrayBuffer, getJSON, - postData + postData, + getImage } from '../../../src/util/ajax'; import window from '../../../src/util/window'; +import config from '../../../src/util/config'; test('ajax', (t) => { t.beforeEach(callback => { @@ -97,5 +99,34 @@ test('ajax', (t) => { window.server.respond(); }); + t.test('getImage respects maxParallelImageRequests', (t) => { + window.server.respondWith(request => request.respond(200, {'Content-Type': 'image/png'}, '')); + + const maxRequests = config.MAX_PARALLEL_IMAGE_REQUESTS; + + // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 + const jsdomImage = window.Image; + window.Image = class { + set src(src) { + setTimeout(() => this.onload()); + } + }; + + function callback(err) { + if (err) return; + // last request is only added after we got a response from one of the previous ones + t.equals(window.server.requests.length, maxRequests + 1); + window.Image = jsdomImage; + t.end(); + } + + for (let i = 0; i < maxRequests + 1; i++) { + getImage({url: ''}, callback); + } + t.equals(window.server.requests.length, maxRequests); + + window.server.requests[0].respond(); + }); + t.end(); }); From 9ef984af2f184853f776ed84b0afb492520292d3 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Tue, 30 Oct 2018 17:34:00 -0700 Subject: [PATCH 043/115] Changelog for v0.51.0-beta.1 --- CHANGELOG.md | 28 ++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f45e9ca346..a40c2d9e104 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,31 @@ +## 0.51.0-beta.1 +(Release date TBD) + +### ✨ Features and improvements +* Add initial bounds as map constructor option ([#5518](https://github.com/mapbox/mapbox-gl-js/pull/5518)) (h/t [stepankuzmin](https://github.com/stepankuzmin)) +* Improve performance on mahcines with > 8 cores ([#7407](https://github.com/mapbox/mapbox-gl-js/issues/7407), fixed by [#7430](https://github.com/mapbox/mapbox-gl-js/pull/7430)) +* Add `MercatorCoordinate` type ([#7488](https://github.com/mapbox/mapbox-gl-js/pull/7488)) +* Allow browser-native `contextmenu` to be enabled ([#2301](https://github.com/mapbox/mapbox-gl-js/issues/2301), fixed by [#7369](https://github.com/mapbox/mapbox-gl-js/pull/7369)) +* Add an unminified production build to the NPM package ([#7403](https://github.com/mapbox/mapbox-gl-js/pull/7403)) +* Add support for `LngLat` conversion from `{lat, lon}` ([#7507](https://github.com/mapbox/mapbox-gl-js/pull/7507)) (h/t [bfrengley](https://github.com/bfrengley)) +* Add tooltips for navigation controls ([#7373](https://github.com/mapbox/mapbox-gl-js/pull/7373)) +* Show attribution only for used sources ([#7384](https://github.com/mapbox/mapbox-gl-js/pull/7384)) +* Add telemetry event to log map loads ([#7431](https://github.com/mapbox/mapbox-gl-js/pull/7431)) +* **Tighten style validation** + * Disallow expressions as stop values ([#7396](https://github.com/mapbox/mapbox-gl-js/pull/7396)) + * Disallow `feature-state` expressions in filters ([#7366](https://github.com/mapbox/mapbox-gl-js/pull/7366)) + +### 🐛 Bug fixes +* Fix for GeoJSON geometries not working when coincident with tile boundaries([#7436](https://github.com/mapbox/mapbox-gl-js/issues/7436), fixed by [#7448](https://github.com/mapbox/mapbox-gl-js/pull/7448)) +* Fix depth buffer-related rendering issues on some Android devices. ([#7471](https://github.com/mapbox/mapbox-gl-js/pull/7471)) +* Fix positioning of compact attribution strings ([#7444](https://github.com/mapbox/mapbox-gl-js/pull/7444), [#7445](https://github.com/mapbox/mapbox-gl-js/pull/7445), and [#7391](https://github.com/mapbox/mapbox-gl-js/pull/7391)) +* Fix an issue with removing markers in mouse event callbacks ([#7442](https://github.com/mapbox/mapbox-gl-js/pull/7442)) (h/t [vbud](https://github.com/vbud)) +* Remove controls before destroying a map ([#7479](https://github.com/mapbox/mapbox-gl-js/pull/7479)) +* Fix display of Scale control values < 1 ([#7469](https://github.com/mapbox/mapbox-gl-js/pull/7469)) (h/t [MichaelHedman](https://github.com/MichaelHedman)) +* Fix an error when using location `hash` within iframes in IE11 ([#7411](https://github.com/mapbox/mapbox-gl-js/pull/7411)) +* Fix depth mode usage in custom layers ([#7432](https://github.com/mapbox/mapbox-gl-js/pull/7432)) (h/t [markusjohnsson](https://github.com/markusjohnsson)) + + ## 0.50.0 October 10, 2018 diff --git a/package.json b/package.json index 35c97b8d6bb..1a19c82a5ba 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.50.0", + "version": "0.51.0-beta.1", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From e50fa344f36cc4ea25e3f52b61742839d8abac5c Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Wed, 31 Oct 2018 15:21:36 -0700 Subject: [PATCH 044/115] Update yarn.lock (#7519) --- yarn.lock | 169 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 117 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index 322514e71a8..fcddf5fbd3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -344,6 +344,11 @@ abab@^1.0.4: resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -413,16 +418,16 @@ acorn@^5.1.2, acorn@^5.2.1, acorn@^5.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" integrity sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ== -acorn@^5.3.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" - integrity sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ== - acorn@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" integrity sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g== +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -458,7 +463,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0, ajv@^5.2.3: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= @@ -841,6 +846,11 @@ aws4@^1.2.1, aws4@^1.6.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2614,6 +2624,13 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.4.tgz#72083e58d4a462f01866f6617f4d98a3cd3b8a46" @@ -3039,10 +3056,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" integrity sha1-uANhcMefB6kP8vFuIihAJ6JDhIs= -"cssstyle@>= 0.3.1 < 0.4.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.3.1.tgz#6da9b4cff1bc5d716e6e5fe8e04fcb1b50a49adf" - integrity sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA== +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== dependencies: cssom "0.3.x" @@ -3730,7 +3747,7 @@ domelementtype@~1.1.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= -domexception@^1.0.0: +domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== @@ -4071,7 +4088,7 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.5.6" -escodegen@^1.9.0: +escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== @@ -4403,6 +4420,11 @@ extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" @@ -4721,6 +4743,15 @@ form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -5279,6 +5310,14 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -6438,36 +6477,36 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@11.11.0: - version "11.11.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.11.0.tgz#df486efad41aee96c59ad7a190e2449c7eb1110e" - integrity sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A== +jsdom@^11.11.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: - abab "^1.0.4" - acorn "^5.3.0" + abab "^2.0.0" + acorn "^5.5.3" acorn-globals "^4.1.0" array-equal "^1.0.0" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.3.1 < 0.4.0" + cssstyle "^1.0.0" data-urls "^1.0.0" - domexception "^1.0.0" - escodegen "^1.9.0" + domexception "^1.0.1" + escodegen "^1.9.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwsapi "^2.0.0" + left-pad "^1.3.0" + nwsapi "^2.0.7" parse5 "4.0.0" pn "^1.1.0" - request "^2.83.0" + request "^2.87.0" request-promise-native "^1.0.5" sax "^1.2.4" symbol-tree "^3.2.2" - tough-cookie "^2.3.3" + tough-cookie "^2.3.4" w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" whatwg-mimetype "^2.1.0" whatwg-url "^6.4.1" - ws "^4.0.0" + ws "^5.2.0" xml-name-validator "^3.0.0" jsesc@^1.3.0: @@ -6710,7 +6749,7 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -left-pad@^1.2.0: +left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== @@ -7473,6 +7512,11 @@ mime-db@~1.33.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== + mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" @@ -7480,6 +7524,13 @@ mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: dependencies: mime-db "~1.33.0" +mime-types@~2.1.19: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== + dependencies: + mime-db "~1.37.0" + mime@1.4.1, mime@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -8031,10 +8082,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" - integrity sha512-7RZ+qbFGiVc6v14Y8DSZjPN1wZPOaMbiiP4tzf5eNuyOITAeOIA3cMhjuKUypVIqBgCSg1KaSyAv8Ocq/0ZJ1A== +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== nyc@^10.1.2: version "10.3.2" @@ -8107,6 +8158,11 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1, object-assign@latest: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -9182,6 +9238,11 @@ qs@~6.4.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + query-string@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.0.tgz#9583b15fd1307f899e973ed418886426a9976469" @@ -9885,31 +9946,31 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.83.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -11420,7 +11481,7 @@ tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: dependencies: punycode "^1.4.1" -tough-cookie@^2.3.3: +tough-cookie@^2.3.4, tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== @@ -11956,6 +12017,11 @@ uuid@^3.0.0, uuid@^3.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== +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== + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -12358,13 +12424,12 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" - integrity sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA== +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== dependencies: async-limiter "~1.0.0" - safe-buffer "~5.1.0" x-is-array@^0.1.0: version "0.1.0" From ea9fbeee5725ffbb9aafd52ebfa81c10dc5ac205 Mon Sep 17 00:00:00 2001 From: Mike Marcacci Date: Wed, 31 Oct 2018 15:22:57 -0700 Subject: [PATCH 045/115] Fix #7517 - asymmetrical cameraForBounds (#7518) * Fix #7517 - asymmetrical cameraForBounds * Add tests for asymmetrical cameraForBounds * Added debug file for #7517 * Fix lint errors in debug file * Make sure offset can be an object --- debug/7517.html | 137 ++++++++++++++++++++++++++++++++++++ src/ui/camera.js | 40 ++++++----- test/unit/ui/camera.test.js | 38 +++++++++- 3 files changed, 196 insertions(+), 19 deletions(-) create mode 100644 debug/7517.html diff --git a/debug/7517.html b/debug/7517.html new file mode 100644 index 00000000000..0fb7f135714 --- /dev/null +++ b/debug/7517.html @@ -0,0 +1,137 @@ + + + + + Mapbox GL JS debug page + + + + + + + +
+ + + + + + + \ No newline at end of file diff --git a/src/ui/camera.js b/src/ui/camera.js index 3cde087716c..06135aea72d 100644 --- a/src/ui/camera.js +++ b/src/ui/camera.js @@ -434,17 +434,9 @@ class Camera extends Evented { return; } - // we separate the passed padding option into two parts, the part that does not affect the map's center - // (lateral and vertical padding), and the part that does (paddingOffset). We add the padding offset - // to the options `offset` object where it can alter the map's center in the subsequent calls to - // `easeTo` and `flyTo`. - const paddingOffset = [(options.padding.left - options.padding.right) / 2, (options.padding.top - options.padding.bottom) / 2], - lateralPadding = Math.min(options.padding.right, options.padding.left), - verticalPadding = Math.min(options.padding.top, options.padding.bottom); - options.offset = [options.offset[0] + paddingOffset[0], options.offset[1] + paddingOffset[1]]; - const tr = this.transform; - // we want to calculate the upper right and lower left of the box defined by p0 and p1 + + // We want to calculate the upper right and lower left of the box defined by p0 and p1 // in a coordinate system rotate to match the destination bearing. const p0world = tr.project(LngLat.convert(p0)); const p1world = tr.project(LngLat.convert(p1)); @@ -454,10 +446,10 @@ class Camera extends Evented { const upperRight = new Point(Math.max(p0rotated.x, p1rotated.x), Math.max(p0rotated.y, p1rotated.y)); const lowerLeft = new Point(Math.min(p0rotated.x, p1rotated.x), Math.min(p0rotated.y, p1rotated.y)); - const offset = Point.convert(options.offset), - size = upperRight.sub(lowerLeft), - scaleX = (tr.width - lateralPadding * 2 - Math.abs(offset.x) * 2) / size.x, - scaleY = (tr.height - verticalPadding * 2 - Math.abs(offset.y) * 2) / size.y; + // Calculate zoom: consider the original bbox and padding. + const size = upperRight.sub(lowerLeft); + const scaleX = (tr.width - options.padding.left - options.padding.right) / size.x; + const scaleY = (tr.height - options.padding.top - options.padding.bottom) / size.y; if (scaleY < 0 || scaleX < 0) { warnOnce( @@ -465,11 +457,23 @@ class Camera extends Evented { ); return; } - options.center = tr.unproject(p0world.add(p1world).div(2)); - options.zoom = Math.min(tr.scaleZoom(tr.scale * Math.min(scaleX, scaleY)), options.maxZoom); - options.bearing = bearing; - return options; + const zoom = Math.min(tr.scaleZoom(tr.scale * Math.min(scaleX, scaleY)), options.maxZoom); + + // Calculate center: apply the zoom, the configured offset, as well as offset that exists as a result of padding. + const offset = Point.convert(options.offset); + const paddingOffsetX = (options.padding.left - options.padding.right) / 2; + const paddingOffsetY = (options.padding.top - options.padding.bottom) / 2; + const offsetAtInitialZoom = new Point(offset.x + paddingOffsetX, offset.y + paddingOffsetY); + const offsetAtFinalZoom = offsetAtInitialZoom.mult(tr.scale / tr.zoomScale(zoom)); + + const center = tr.unproject(p0world.add(p1world).div(2).sub(offsetAtFinalZoom)); + + return { + center, + zoom, + bearing + }; } /** diff --git a/test/unit/ui/camera.test.js b/test/unit/ui/camera.test.js index 3c6f60a8f07..9aa8db43679 100644 --- a/test/unit/ui/camera.test.js +++ b/test/unit/ui/camera.test.js @@ -1714,11 +1714,47 @@ test('camera', (t) => { const camera = createCamera(); const bb = [[-133, 16], [-68, 50]]; - const transform = camera.cameraForBounds(bb, { padding: {top: 10, right: 75, bottom: 50, left: 25}, duration: 0 }); + const transform = camera.cameraForBounds(bb, { padding: {top: 15, right: 15, bottom: 15, left: 15}, duration: 0 }); t.deepEqual(fixedLngLat(transform.center, 4), { lng: -100.5, lat: 34.7171 }, 'correctly calculates coordinates for bounds with padding option as object applied'); t.end(); }); + t.test('asymetrical padding', (t) => { + const camera = createCamera(); + const bb = [[-133, 16], [-68, 50]]; + + const transform = camera.cameraForBounds(bb, { padding: {top: 10, right: 75, bottom: 50, left: 25}, duration: 0 }); + t.deepEqual(fixedLngLat(transform.center, 4), { lng: -96.5558, lat: 32.0833 }, 'correctly calculates coordinates for bounds with padding option as object applied'); + t.end(); + }); + + t.test('offset', (t) => { + const camera = createCamera(); + const bb = [[-133, 16], [-68, 50]]; + + const transform = camera.cameraForBounds(bb, { offset: [0, 100] }); + t.deepEqual(fixedLngLat(transform.center, 4), { lng: -100.5, lat: 44.4717 }, 'correctly calculates coordinates for bounds with padding option as object applied'); + t.end(); + }); + + t.test('offset as object', (t) => { + const camera = createCamera(); + const bb = [[-133, 16], [-68, 50]]; + + const transform = camera.cameraForBounds(bb, { offset: { x: 0, y: 100 } }); + t.deepEqual(fixedLngLat(transform.center, 4), { lng: -100.5, lat: 44.4717 }, 'correctly calculates coordinates for bounds with padding option as object applied'); + t.end(); + }); + + t.test('offset and padding', (t) => { + const camera = createCamera(); + const bb = [[-133, 16], [-68, 50]]; + + const transform = camera.cameraForBounds(bb, { padding: {top: 10, right: 75, bottom: 50, left: 25}, offset: [0, 100] }); + t.deepEqual(fixedLngLat(transform.center, 4), { lng: -96.5558, lat: 44.4189 }, 'correctly calculates coordinates for bounds with padding option as object applied'); + t.end(); + }); + t.end(); }); From cf7d2f8d7649d5aa7d43f55734c10c8842a47d96 Mon Sep 17 00:00:00 2001 From: Nicholas Latham Date: Thu, 1 Nov 2018 11:35:36 +1300 Subject: [PATCH 046/115] Update repo url to correct one (#7486) The url points to the old outdated repo --- src/style-spec/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style-spec/package.json b/src/style-spec/package.json index 6fb6a545b63..d61aba9bab0 100644 --- a/src/style-spec/package.json +++ b/src/style-spec/package.json @@ -18,7 +18,7 @@ }, "repository": { "type": "git", - "url": "git@github.com:mapbox/mapbox-gl-style-spec.git" + "url": "git@github.com:mapbox/mapbox-gl-js.git" }, "bin": { "gl-style-migrate": "bin/gl-style-migrate", From 531ad5a85e2aceef23a1b0c18c84688aab496630 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 31 Oct 2018 23:37:21 +0100 Subject: [PATCH 047/115] replace uglify with terser for faster minification (#7450) --- build/rollup_plugins.js | 6 ++-- package.json | 2 +- yarn.lock | 75 ++++++++++++++++++++++++++++++++++++++--- 3 files changed, 74 insertions(+), 9 deletions(-) diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index 933650e05dc..d4218feb5db 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -5,7 +5,7 @@ import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; import unassert from 'rollup-plugin-unassert'; import json from 'rollup-plugin-json'; -import uglify from 'rollup-plugin-uglify'; +import { terser } from 'rollup-plugin-terser'; import minifyStyleSpec from './rollup_plugin_minify_style_spec'; import { createFilter } from 'rollup-pluginutils'; @@ -21,7 +21,6 @@ export const plugins = () => [ minifyStyleSpec(), json(), glsl('./src/shaders/*.glsl', production), - buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}), production ? unassert() : false, resolve({ browser: true, @@ -32,7 +31,8 @@ export const plugins = () => [ // https://github.com/mapbox/mapbox-gl-js/pull/6956 ignoreGlobal: true }), - minified ? uglify() : false + minified ? terser() : false, + buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}) ].filter(Boolean); // Using this instead of rollup-plugin-flow due to diff --git a/package.json b/package.json index 35c97b8d6bb..00e5c483dfc 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "rollup-plugin-node-resolve": "3.4.0", "rollup-plugin-replace": "^2.0.0", "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-plugin-uglify": "^3.0.0", + "rollup-plugin-terser": "^3.0.0", "rollup-plugin-unassert": "^0.2.0", "sinon": "^5.0.0", "slugg": "^1.2.1", diff --git a/yarn.lock b/yarn.lock index fcddf5fbd3f..2a764c96a55 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,13 @@ # yarn lockfile v1 +"@babel/code-frame@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0.tgz#06e2ab19bdb535385559aabb5ba59729482800f8" + integrity sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA== + dependencies: + "@babel/highlight" "^7.0.0" + "@babel/code-frame@^7.0.0-beta.42": version "7.0.0-beta.56" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.0.0-beta.56.tgz#09f76300673ac085d3b90e02aafa0ffc2c96846a" @@ -18,6 +25,15 @@ esutils "^2.0.2" js-tokens "^3.0.0" +"@babel/highlight@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" + integrity sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw== + dependencies: + chalk "^2.0.0" + esutils "^2.0.2" + js-tokens "^4.0.0" + "@mapbox/babel-plugin-transform-jsxtreme-markdown@^0.5.0": version "0.5.3" resolved "https://registry.yarnpkg.com/@mapbox/babel-plugin-transform-jsxtreme-markdown/-/babel-plugin-transform-jsxtreme-markdown-0.5.3.tgz#fdd4a519dbd897d7e8c67d833f0e7b6fd16d7c2f" @@ -2648,6 +2664,11 @@ commander@~2.16.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.16.0.tgz#f16390593996ceb4f3eeb020b31d78528f7f8a50" integrity sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew== +commander@~2.17.1: + version "2.17.1" + resolved "https://registry.yarnpkg.com/commander/-/commander-2.17.1.tgz#bd77ab7de6de94205ceacc72f1716d29f20a77bf" + integrity sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg== + commondir@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" @@ -6438,6 +6459,13 @@ isurl@^1.0.0-alpha5: has-to-string-tag-x "^1.2.0" is-object "^1.0.1" +jest-worker@^23.2.0: + version "23.2.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-23.2.0.tgz#faf706a8da36fae60eb26957257fa7b5d8ea02b9" + integrity sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk= + dependencies: + merge-stream "^1.0.1" + js-base64@^2.1.9: version "2.4.3" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.3.tgz#2e545ec2b0f2957f41356510205214e98fad6582" @@ -6448,6 +6476,11 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + js-yaml@3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" @@ -7437,6 +7470,13 @@ merge-source-map@^1.0.2: dependencies: source-map "^0.6.1" +merge-stream@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-1.0.1.tgz#4041202d508a342ba00174008df0c251b8c135e1" + integrity sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE= + dependencies: + readable-stream "^2.0.1" + merge2@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.2.1.tgz#271d2516ff52d4af7f7b710b8bf3e16e183fef66" @@ -10144,12 +10184,15 @@ rollup-plugin-sourcemaps@^0.4.2: rollup-pluginutils "^2.0.1" source-map-resolve "^0.5.0" -rollup-plugin-uglify@^3.0.0: +rollup-plugin-terser@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-uglify/-/rollup-plugin-uglify-3.0.0.tgz#a34eca24617709c6bf1778e9653baafa06099b86" - integrity sha512-dehLu9eRRoV4l09aC+ySntRw1OAfoyKdbk8Nelblj03tHoynkSybqyEpgavemi1LBOH6S1vzI58/mpxkZIe1iQ== + resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-3.0.0.tgz#045bd7cf625ee1affcfe6971dab6fffe6fb48c65" + integrity sha512-Ed9zRD7OoCBnh0XGlEAJle5TCUsFXMLClwKzZWnS1zbNO4MelHjfCSdFZxCAdH70M40nhZ1nRrY2GZQJhSMcjA== dependencies: - uglify-es "^3.3.7" + "@babel/code-frame" "^7.0.0" + jest-worker "^23.2.0" + serialize-javascript "^1.5.0" + terser "^3.8.2" rollup-plugin-unassert@^0.2.0: version "0.2.0" @@ -10306,6 +10349,11 @@ serialize-javascript@^1.4.0: resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.4.0.tgz#7c958514db6ac2443a8abc062dc9f7886a7f6005" integrity sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU= +serialize-javascript@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-1.5.0.tgz#1aa336162c88a890ddad5384baebc93a655161fe" + integrity sha512-Ga8c8NjAAp46Br4+0oZ2WxJCwIzwP60Gq1YPgU+39PiTVxyed/iKE/zyZI6+UlVYH5Q4PaQdHhcegIFPZTUfoQ== + serve-index@^1.7.2: version "1.9.1" resolved "https://registry.yarnpkg.com/serve-index/-/serve-index-1.9.1.tgz#d3768d69b1e7d82e5ce050fff5b453bea12a9239" @@ -10575,6 +10623,14 @@ source-map-support@^0.5.4: buffer-from "^1.0.0" source-map "^0.6.0" +source-map-support@~0.5.6: + version "0.5.9" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" + integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" @@ -11297,6 +11353,15 @@ terminal-table@0.0.12: colors "^1.0.3" eastasianwidth "^0.1.0" +terser@^3.8.2: + version "3.10.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-3.10.1.tgz#59c8cf87262d59e018ded4df30f834b602b1e232" + integrity sha512-GE0ShECt1/dZUZt9Kyr/IC6xXG46pTbm1C1WfzQbbnRB5LhdJlF8p5NBZ38RjspD7hEM9O5ud8aIcOFY6evl4A== + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + source-map-support "~0.5.6" + test-exclude@^4.1.0, test-exclude@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" @@ -11595,7 +11660,7 @@ ua-parser-js@^0.7.9: resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.17.tgz#e9ec5f9498b9ec910e7ae3ac626a805c4d09ecac" integrity sha512-uRdSdu1oA1rncCQL7sCj8vSyZkgtL7faaw9Tc9rZ3mGgraQ7+Pdx7w5mnOSF3gw9ZNG6oc+KXfkon3bKuROm0g== -uglify-es@^3.3.4, uglify-es@^3.3.7: +uglify-es@^3.3.4: version "3.3.10" resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.10.tgz#8b0b7992cebe20edc26de1bf325cef797b8f3fa5" integrity sha512-rPzPisCzW68Okj1zNrfa2dR9uEm43SevDmpR6FChoZABFk9dANGnzzBMgHYUXI3609//63fnVkyQ1SQmAMyjww== From 922d7b38c0466181fa6f0cebbec1e013ae59d475 Mon Sep 17 00:00:00 2001 From: Philipp Borgers Date: Thu, 1 Nov 2018 14:08:08 +0100 Subject: [PATCH 048/115] update upath in yarn.lock to achieve compatibility with node v10.11.0 (#7532) The current yarn.lock breaks the `yarn install` step on systems with node v10.11.0 because upath version 1.0.4 requires the version of node to be <= 9. Updating upath to 1.1.0 fixes the problem. Addresses issue #7524. --- yarn.lock | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/yarn.lock b/yarn.lock index 2a764c96a55..394bdc1ce7d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11949,12 +11949,7 @@ unzip-response@^2.0.1: resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= -upath@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.0.4.tgz#ee2321ba0a786c50973db043a50b7bcba822361d" - integrity sha512-d4SJySNBXDaQp+DPrziv3xGS6w3d2Xt69FijJr86zMPBy23JEloMCEOUBBzuN7xCtjLCnmB9tI/z7SBCahHBOw== - -upath@^1.0.5: +upath@^1.0.0, upath@^1.0.5: version "1.1.0" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.0.tgz#35256597e46a581db4793d0ce47fa9aebfc9fabd" integrity sha512-bzpH/oBhoS/QI/YtbkqCg6VEiPYjSZtrHQM6/QnJS6OL9pKUFLqb3aFh4Scvwm45+7iAgiMkLhSbaZxUqmrprw== From ddc8eaa70de8550886f9b83bdfd677e4c9b71a06 Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Wed, 31 Oct 2018 15:21:36 -0700 Subject: [PATCH 049/115] Update yarn.lock (#7519) --- yarn.lock | 169 +++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 117 insertions(+), 52 deletions(-) diff --git a/yarn.lock b/yarn.lock index 322514e71a8..fcddf5fbd3f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -344,6 +344,11 @@ abab@^1.0.4: resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= +abab@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" + integrity sha512-sY5AXXVZv4Y1VACTtR11UJCPHHudgY5i26Qj5TypE6DKlIApbwb5uqhXcJ5UUGbvZNRh7EeIoW+LrJumBsKp7w== + abbrev@1: version "1.1.1" resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" @@ -413,16 +418,16 @@ acorn@^5.1.2, acorn@^5.2.1, acorn@^5.4.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" integrity sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ== -acorn@^5.3.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.1.tgz#f095829297706a7c9776958c0afc8930a9b9d9d8" - integrity sha512-d+nbxBUGKg7Arpsvbnlq61mc12ek3EY8EQldM3GPAhWJ1UVxC6TDGbIvUMNU6obBX3i1+ptCIzV4vq0gFPEGVQ== - acorn@^5.4.1: version "5.5.0" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" integrity sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g== +acorn@^5.5.3: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -458,7 +463,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0, ajv@^5.2.3: +ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= @@ -841,6 +846,11 @@ aws4@^1.2.1, aws4@^1.6.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" integrity sha1-g+9cqGCysy5KDe7e6MdxudtXRx4= +aws4@^1.8.0: + version "1.8.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" + integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== + babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" @@ -2614,6 +2624,13 @@ combined-stream@1.0.6, combined-stream@^1.0.5, combined-stream@~1.0.5: dependencies: delayed-stream "~1.0.0" +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.7.tgz#2d1d24317afb8abe95d6d2c0b07b57813539d828" + integrity sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w== + dependencies: + delayed-stream "~1.0.0" + comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.4.tgz#72083e58d4a462f01866f6617f4d98a3cd3b8a46" @@ -3039,10 +3056,10 @@ cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" integrity sha1-uANhcMefB6kP8vFuIihAJ6JDhIs= -"cssstyle@>= 0.3.1 < 0.4.0": - version "0.3.1" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-0.3.1.tgz#6da9b4cff1bc5d716e6e5fe8e04fcb1b50a49adf" - integrity sha512-tNvaxM5blOnxanyxI6panOsnfiyLRj3HV4qjqqS45WPNS1usdYWRUQjqTEEELK73lpeP/1KoIGYUwrBn/VcECA== +cssstyle@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" + integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== dependencies: cssom "0.3.x" @@ -3730,7 +3747,7 @@ domelementtype@~1.1.1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" integrity sha1-vSh3PiZCiBrsUVRJJCmcXNgiGFs= -domexception@^1.0.0: +domexception@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== @@ -4071,7 +4088,7 @@ escodegen@^1.8.1: optionalDependencies: source-map "~0.5.6" -escodegen@^1.9.0: +escodegen@^1.9.1: version "1.11.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== @@ -4403,6 +4420,11 @@ extend@^3.0.0, extend@~3.0.0, extend@~3.0.1: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" integrity sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ= +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + external-editor@^2.0.4: version "2.1.0" resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" @@ -4721,6 +4743,15 @@ form-data@~2.3.1: combined-stream "1.0.6" mime-types "^2.1.12" +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -5279,6 +5310,14 @@ har-validator@~5.0.3: ajv "^5.1.0" har-schema "^2.0.0" +har-validator@~5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.0.tgz#44657f5688a22cfd4b72486e81b3a3fb11742c29" + integrity sha512-+qnmNjI4OfH2ipQ9VQOw23bBd/ibtfbVdK2fYbY4acTDqKTW/YDp9McimZdDbG8iV9fZizUqQMD5xvriB146TA== + dependencies: + ajv "^5.3.0" + har-schema "^2.0.0" + has-ansi@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91" @@ -6438,36 +6477,36 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@11.11.0: - version "11.11.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.11.0.tgz#df486efad41aee96c59ad7a190e2449c7eb1110e" - integrity sha512-ou1VyfjwsSuWkudGxb03FotDajxAto6USAlmMZjE2lc0jCznt7sBWkhfRBRaWwbnmDqdMSTKTLT5d9sBFkkM7A== +jsdom@^11.11.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" + integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== dependencies: - abab "^1.0.4" - acorn "^5.3.0" + abab "^2.0.0" + acorn "^5.5.3" acorn-globals "^4.1.0" array-equal "^1.0.0" cssom ">= 0.3.2 < 0.4.0" - cssstyle ">= 0.3.1 < 0.4.0" + cssstyle "^1.0.0" data-urls "^1.0.0" - domexception "^1.0.0" - escodegen "^1.9.0" + domexception "^1.0.1" + escodegen "^1.9.1" html-encoding-sniffer "^1.0.2" - left-pad "^1.2.0" - nwsapi "^2.0.0" + left-pad "^1.3.0" + nwsapi "^2.0.7" parse5 "4.0.0" pn "^1.1.0" - request "^2.83.0" + request "^2.87.0" request-promise-native "^1.0.5" sax "^1.2.4" symbol-tree "^3.2.2" - tough-cookie "^2.3.3" + tough-cookie "^2.3.4" w3c-hr-time "^1.0.1" webidl-conversions "^4.0.2" whatwg-encoding "^1.0.3" whatwg-mimetype "^2.1.0" whatwg-url "^6.4.1" - ws "^4.0.0" + ws "^5.2.0" xml-name-validator "^3.0.0" jsesc@^1.3.0: @@ -6710,7 +6749,7 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -left-pad@^1.2.0: +left-pad@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== @@ -7473,6 +7512,11 @@ mime-db@~1.33.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.33.0.tgz#a3492050a5cb9b63450541e39d9788d2272783db" integrity sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ== +mime-db@~1.37.0: + version "1.37.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.37.0.tgz#0b6a0ce6fdbe9576e25f1f2d2fde8830dc0ad0d8" + integrity sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg== + mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: version "2.1.18" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.18.tgz#6f323f60a83d11146f831ff11fd66e2fe5503bb8" @@ -7480,6 +7524,13 @@ mime-types@^2.1.12, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: dependencies: mime-db "~1.33.0" +mime-types@~2.1.19: + version "2.1.21" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.21.tgz#28995aa1ecb770742fe6ae7e58f9181c744b3f96" + integrity sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg== + dependencies: + mime-db "~1.37.0" + mime@1.4.1, mime@~1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" @@ -8031,10 +8082,10 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.0: - version "2.0.8" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.8.tgz#e3603579b7e162b3dbedae4fb24e46f771d8fa24" - integrity sha512-7RZ+qbFGiVc6v14Y8DSZjPN1wZPOaMbiiP4tzf5eNuyOITAeOIA3cMhjuKUypVIqBgCSg1KaSyAv8Ocq/0ZJ1A== +nwsapi@^2.0.7: + version "2.0.9" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" + integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== nyc@^10.1.2: version "10.3.2" @@ -8107,6 +8158,11 @@ oauth-sign@~0.8.1, oauth-sign@~0.8.2: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" integrity sha1-Rqarfwrq2N6unsBWV4C31O/rnUM= +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1, object-assign@latest: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" @@ -9182,6 +9238,11 @@ qs@~6.4.0: resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" integrity sha1-E+JtKK1rD/qpExLNO/cI7TUecjM= +qs@~6.5.2: + version "6.5.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" + integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== + query-string@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/query-string/-/query-string-5.1.0.tgz#9583b15fd1307f899e973ed418886426a9976469" @@ -9885,31 +9946,31 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.83.0: - version "2.87.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.87.0.tgz#32f00235cd08d482b4d0d68db93a829c0ed5756e" - integrity sha512-fcogkm7Az5bsS6Sl0sibkbhcKsnyon/jV1kF3ajGmF0c8HrttdKTPRT9hieOaQHA5HEq6r8OyWOo/o781C1tNw== +request@^2.87.0: + version "2.88.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" + integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== dependencies: aws-sign2 "~0.7.0" - aws4 "^1.6.0" + aws4 "^1.8.0" caseless "~0.12.0" - combined-stream "~1.0.5" - extend "~3.0.1" + combined-stream "~1.0.6" + extend "~3.0.2" forever-agent "~0.6.1" - form-data "~2.3.1" - har-validator "~5.0.3" + form-data "~2.3.2" + har-validator "~5.1.0" http-signature "~1.2.0" is-typedarray "~1.0.0" isstream "~0.1.2" json-stringify-safe "~5.0.1" - mime-types "~2.1.17" - oauth-sign "~0.8.2" + mime-types "~2.1.19" + oauth-sign "~0.9.0" performance-now "^2.1.0" - qs "~6.5.1" - safe-buffer "^5.1.1" - tough-cookie "~2.3.3" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.4.3" tunnel-agent "^0.6.0" - uuid "^3.1.0" + uuid "^3.3.2" require-directory@^2.1.1: version "2.1.1" @@ -11420,7 +11481,7 @@ tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: dependencies: punycode "^1.4.1" -tough-cookie@^2.3.3: +tough-cookie@^2.3.4, tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== @@ -11956,6 +12017,11 @@ uuid@^3.0.0, uuid@^3.1.0: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.2.1.tgz#12c528bb9d58d0b9265d9a2f6f0fe8be17ff1f14" integrity sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA== +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== + validate-npm-package-license@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz#2804babe712ad3379459acfbe24746ab2c303fbc" @@ -12358,13 +12424,12 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ws/-/ws-4.1.0.tgz#a979b5d7d4da68bf54efe0408967c324869a7289" - integrity sha512-ZGh/8kF9rrRNffkLFV4AzhvooEclrOH0xaugmqGsIfFgOE/pIz4fMc4Ef+5HSQqTEug2S9JZIWDR47duDSLfaA== +ws@^5.2.0: + version "5.2.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" + integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== dependencies: async-limiter "~1.0.0" - safe-buffer "~5.1.0" x-is-array@^0.1.0: version "0.1.0" From 98474d4162bba2c64060c702c1e2eaac70075f88 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 1 Nov 2018 09:39:48 -0700 Subject: [PATCH 050/115] Bump version to 0.51.0-beta.2 to accommodate yarn.lock update. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1a19c82a5ba..46e878b27a2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.51.0-beta.1", + "version": "0.51.0-beta.2", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From a64f31683789ba4d94fee2d5880bbfffbf30e01f Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Thu, 1 Nov 2018 12:54:03 -0700 Subject: [PATCH 051/115] update ci image (#7538) * update ci image * new config * new cache key? --- circle.yml => .circleci/config.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) rename circle.yml => .circleci/config.yml (97%) diff --git a/circle.yml b/.circleci/config.yml similarity index 97% rename from circle.yml rename to .circleci/config.yml index 4a433a9a5a5..ab5f96bf396 100644 --- a/circle.yml +++ b/.circleci/config.yml @@ -89,7 +89,7 @@ workflows: defaults: &defaults docker: - - image: mbgl/ci:r4-linux-gl-js + - image: mbgl/80dbb7f452:linux working_directory: ~/mapbox-gl-js jobs: @@ -99,11 +99,11 @@ jobs: - checkout - restore_cache: keys: - - v1-yarn-{{ checksum "yarn.lock" }} - - v1-yarn + - v2-yarn-{{ checksum "yarn.lock" }} + - v2-yarn - run: yarn - save_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} + key: v2-yarn-{{ checksum "yarn.lock" }} paths: - '~/.yarn' - 'node_modules' From 29f33711c06632a34be4902a74c668c09b309fd6 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Thu, 1 Nov 2018 22:53:05 +0100 Subject: [PATCH 052/115] fix benchmarks build (#7540) --- build/rollup_plugins.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index d4218feb5db..610232162fc 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -22,6 +22,8 @@ export const plugins = () => [ json(), glsl('./src/shaders/*.glsl', production), production ? unassert() : false, + minified ? terser() : false, + buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}), resolve({ browser: true, preferBuiltins: false @@ -30,9 +32,7 @@ export const plugins = () => [ // global keyword handling causes Webpack compatibility issues, so we disabled it: // https://github.com/mapbox/mapbox-gl-js/pull/6956 ignoreGlobal: true - }), - minified ? terser() : false, - buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}) + }) ].filter(Boolean); // Using this instead of rollup-plugin-flow due to From e0c4d4679d06be7c0f51970b26a184f8d9ed6d5b Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Thu, 1 Nov 2018 22:54:38 +0100 Subject: [PATCH 053/115] Upgrade lint-related dependencies (#7463) * upgrade lint-related deps * reenable some eslint rules, pass 1 * reenable some eslint rules pass 2 * more consistent arrow spacing * use object shorthand where possible * fix flow errors --- .eslintrc | 19 +- bench/benchmarks/layers.js | 4 +- bench/benchmarks/paint_states.js | 4 +- bench/lib/axis.js | 4 +- bench/lib/statistics.js | 11 +- bench/lib/tile_parser.js | 2 +- debug/7517.html | 2 +- debug/cluster.html | 2 +- debug/multiple.html | 4 +- debug/setstyle.html | 2 +- debug/textsize.html | 8 +- docs/components/expression-metadata.js | 2 +- docs/components/quickstart.js | 16 +- docs/pages/example/.eslintrc | 3 +- docs/pages/example/custom-style-layer.html | 2 +- docs/pages/example/flyto-options.html | 4 +- docs/pages/example/timeline-animation.html | 2 +- docs/pages/style-spec.js | 74 +- package.json | 18 +- src/data/bucket/fill_bucket.js | 6 +- src/data/bucket/fill_extrusion_bucket.js | 6 +- src/data/bucket/line_bucket.js | 6 +- src/data/bucket/pattern_bucket_features.js | 2 +- src/data/bucket/symbol_bucket.js | 2 +- src/data/feature_index.js | 2 +- src/data/program_configuration.js | 12 +- src/data/segment.js | 8 +- src/geo/lng_lat_bounds.js | 2 +- src/index.js | 2 +- src/render/draw_debug.js | 2 +- src/render/image_atlas.js | 10 +- src/render/image_manager.js | 8 +- src/shaders/encode_attribute.js | 5 +- src/source/image_source.js | 4 +- src/source/raster_dem_tile_source.js | 2 +- src/source/rtl_text_plugin.js | 6 +- src/source/source_cache.js | 10 +- src/source/tile.js | 10 +- src/source/vector_tile_worker_source.js | 4 +- src/source/worker_tile.js | 6 +- src/style-spec/diff.js | 4 +- .../expression/compound_expression.js | 2 +- src/style-spec/function/convert.js | 2 +- src/style-spec/function/index.js | 2 +- src/style-spec/util/color_spaces.js | 4 +- src/style-spec/validate/validate.js | 2 +- src/style-spec/validate/validate_array.js | 6 +- src/style-spec/validate/validate_function.js | 2 +- src/style-spec/validate/validate_layer.js | 18 +- src/style-spec/validate/validate_light.js | 12 +- src/style-spec/validate/validate_object.js | 8 +- src/style-spec/validate/validate_property.js | 18 +- src/style-spec/validate/validate_source.js | 34 +- src/style-spec/validate_style.min.js | 14 +- src/style-spec/visit.js | 4 +- src/style/light.js | 4 +- src/style/style.js | 12 +- src/style/style_layer.js | 6 +- src/style/style_layer/custom_style_layer.js | 12 +- src/symbol/check_max_angle.js | 2 +- src/symbol/collision_index.js | 4 +- src/symbol/grid_index.js | 2 +- src/symbol/quads.js | 2 +- src/symbol/shaping.js | 3 + src/symbol/symbol_layout.js | 2 +- src/ui/camera.js | 12 +- src/ui/handler/scroll_zoom.js | 4 +- src/ui/handler/touch_zoom_rotate.js | 2 +- src/ui/marker.js | 6 +- src/util/actor.js | 4 +- src/util/dom.js | 2 +- src/util/evented.js | 4 +- src/util/mapbox.js | 2 +- src/util/struct_array.js | 2 +- src/util/util.js | 2 +- src/util/web_worker.js | 2 +- src/util/web_worker_transfer.js | 4 +- test/ajax_stubs.js | 4 +- test/integration/lib/server.js | 6 +- test/suite_implementation.js | 10 +- test/unit/data/dem_data.test.js | 14 +- test/unit/data/symbol_bucket.test.js | 2 +- test/unit/source/canvas_source.test.js | 2 +- test/unit/source/geojson_source.test.js | 18 +- .../unit/source/geojson_worker_source.test.js | 2 +- test/unit/source/image_source.test.js | 2 +- test/unit/source/query_features.test.js | 4 +- .../source/raster_dem_tile_source.test.js | 14 +- .../raster_dem_tile_worker_source.test.js | 2 +- test/unit/source/raster_tile_source.test.js | 16 +- test/unit/source/source_cache.test.js | 146 +-- test/unit/source/tile.test.js | 6 +- test/unit/source/tile_mask.test.js | 18 +- test/unit/source/vector_tile_source.test.js | 28 +- .../source/vector_tile_worker_source.test.js | 2 +- test/unit/source/worker.test.js | 2 +- test/unit/style-spec/feature_filter.test.js | 6 +- test/unit/style-spec/function.test.js | 2 +- test/unit/style/style.test.js | 6 +- test/unit/symbol/cross_tile_symbol_index.js | 6 +- test/unit/ui/camera.test.js | 10 +- test/unit/ui/control/logo.test.js | 8 +- test/unit/ui/control/scale.test.js | 2 +- test/unit/ui/hash.test.js | 2 +- test/unit/ui/map.test.js | 38 +- test/unit/ui/marker.test.js | 2 +- test/unit/ui/popup.test.js | 4 +- test/unit/util/actor.test.js | 8 +- test/unit/util/dispatcher.test.js | 4 +- test/unit/util/mapbox.test.js | 14 +- test/util.js | 2 +- yarn.lock | 881 +++++++++++++----- 112 files changed, 1106 insertions(+), 712 deletions(-) diff --git a/.eslintrc b/.eslintrc index 4be3a92223f..5aafce59691 100644 --- a/.eslintrc +++ b/.eslintrc @@ -13,8 +13,24 @@ "import" ], "rules": { + // temporarily disabled due to https://github.com/babel/babel-eslint/issues/485 + "no-use-before-define": "off", + + // no-duplicate-imports doesn't play well with Flow + // https://github.com/babel/eslint-plugin-babel/issues/59 + "no-duplicate-imports": "off", + "import/no-duplicates": "error", + + // temporarily disabled for easier upgrading of dependencies + "implicit-arrow-linebreak": "off", + "arrow-parens": "off", + "arrow-body-style": "off", + "no-confusing-arrow": "off", + "no-control-regex": "off", + "no-invalid-this": "off", + "no-buffer-constructor": "off", + "array-bracket-spacing": "off", - "block-scoped-var": "error", "consistent-return": "off", "flowtype/define-flow-type": 1, "flowtype/require-valid-file-annotation": [ @@ -34,7 +50,6 @@ "property": "assign" }], "no-unused-vars": ["error", {"argsIgnorePattern": "^_$"}], - "no-var": "error", "no-warning-comments": "error", "object-curly-spacing": "off", "prefer-arrow-callback": "error", diff --git a/bench/benchmarks/layers.js b/bench/benchmarks/layers.js index c383c5eadb7..4cd5bb67e27 100644 --- a/bench/benchmarks/layers.js +++ b/bench/benchmarks/layers.js @@ -10,7 +10,7 @@ function generateLayers(layer) { const generated = []; for (let i = 0; i < 50; i++) { const id = layer.id + i; - generated.push(Object.assign({}, layer, {id: id})); + generated.push(Object.assign({}, layer, {id})); } return generated; } @@ -111,7 +111,7 @@ class LayerHeatmap extends LayerBenchmark { sources: { 'heatmap': { 'type': 'geojson', - 'data': data, + data, 'maxzoom': 23 } }, diff --git a/bench/benchmarks/paint_states.js b/bench/benchmarks/paint_states.js index 692d082161b..c377412812a 100644 --- a/bench/benchmarks/paint_states.js +++ b/bench/benchmarks/paint_states.js @@ -7,7 +7,7 @@ function generateLayers(layer) { const generated = []; for (let i = 0; i < 50; i++) { const id = layer.id + i; - generated.push(Object.assign({}, layer, {id: id})); + generated.push(Object.assign({}, layer, {id})); } return generated; } @@ -28,7 +28,7 @@ export default class PaintStates extends Benchmark { .then(data => { this.numFeatures = data.features.length; return Object.assign({}, style, { - sources: {'land': {'type': 'geojson', 'data': data, 'maxzoom': 23}}, + sources: {'land': {'type': 'geojson', data, 'maxzoom': 23}}, layers: generateLayers({ 'id': 'layer', 'type': 'fill', diff --git a/bench/lib/axis.js b/bench/lib/axis.js index 567d59330b3..a1872a5bac1 100644 --- a/bench/lib/axis.js +++ b/bench/lib/axis.js @@ -41,8 +41,8 @@ class Axis extends React.Component { const x = orient === 'left' || orient === 'right' ? 'x' : 'y'; const transform = orient === 'top' || orient === 'bottom' ? translateX : translateY; - const values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues; - const format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : identity) : tickFormat; + const values = tickValues == null ? (scale.ticks ? scale.ticks(...tickArguments) : scale.domain()) : tickValues; + const format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat(...tickArguments) : identity) : tickFormat; const spacing = Math.max(tickSizeInner, 0) + tickPadding; const range = scale.range(); const range0 = +range[0] + 0.5; diff --git a/bench/lib/statistics.js b/bench/lib/statistics.js index ef919d325e7..f2efdb29ffb 100644 --- a/bench/lib/statistics.js +++ b/bench/lib/statistics.js @@ -38,12 +38,11 @@ export function summaryStatistics(data) { // 20% trimmed mean const [lowerQuintile, upperQuintile] = [.2, .8].map(d => d3.quantile(sorted, d)); const trimmedMean = d3.mean(data.filter(d => d >= lowerQuintile && d <= upperQuintile)); - const windsorizedDeviation = d3.deviation( - data.map(d => d < lowerQuintile ? lowerQuintile : - d > upperQuintile ? upperQuintile : - d - ) - ); + const windsorizedDeviation = d3.deviation(data.map(d => + d < lowerQuintile ? lowerQuintile : + d > upperQuintile ? upperQuintile : + d + )); return { mean, diff --git a/bench/lib/tile_parser.js b/bench/lib/tile_parser.js index 20aad654918..1b0d72dabf3 100644 --- a/bench/lib/tile_parser.js +++ b/bench/lib/tile_parser.js @@ -124,7 +124,7 @@ export default class TileParser { pitch: 0, cameraToCenterDistance: 0, cameraToTileDistance: 0, - returnDependencies: returnDependencies + returnDependencies }); const vectorTile = new VT.VectorTile(new Protobuf(tile.buffer)); diff --git a/debug/7517.html b/debug/7517.html index 0fb7f135714..e9e04cc6993 100644 --- a/debug/7517.html +++ b/debug/7517.html @@ -92,7 +92,7 @@ 'type': 'fill', 'source': { 'type': 'geojson', - 'data': data + data }, 'layout': {}, 'paint': { diff --git a/debug/cluster.html b/debug/cluster.html index c9223d972b0..019160c9409 100644 --- a/debug/cluster.html +++ b/debug/cluster.html @@ -99,7 +99,7 @@ updateHover([]); map.easeTo({ center: feature.geometry.coordinates, - zoom: zoom + zoom }); }); }); diff --git a/debug/multiple.html b/debug/multiple.html index bf3a5469fba..bb34e4fbf63 100644 --- a/debug/multiple.html +++ b/debug/multiple.html @@ -55,12 +55,12 @@ function addMap (container) { var map = new mapboxgl.Map({ - container: container, + container, minZoom: 14, zoom: 15.5, center: [-122.514426, 37.562984], bearing: -96, - style: style, + style, hash: false }); } diff --git a/debug/setstyle.html b/debug/setstyle.html index afd55455fb0..a2bcf03ece8 100644 --- a/debug/setstyle.html +++ b/debug/setstyle.html @@ -28,7 +28,7 @@ container: 'map', zoom: 2, center: [-77.01866, 38.888], - style: style, + style, hash: style }); diff --git a/debug/textsize.html b/debug/textsize.html index 14dba3dfede..aa873e28537 100644 --- a/debug/textsize.html +++ b/debug/textsize.html @@ -30,7 +30,7 @@ ]; var layer = (id, x, textSize, color) => ({ - "id": id, + id, "type": "symbol", "source": "geojson", "filter": ["==", "x", x], @@ -94,9 +94,7 @@ "sprite": "mapbox://sprites/mapbox/streets-v10", "glyphs": "mapbox://fonts/mapbox/{fontstack}/{range}.pbf", "layers": [ - layer('symbol-camera', 0, { - "stops": stops - }, 'red'), + layer('symbol-camera', 0, {stops}, 'red'), layer('symbol-composite', 0, { "property": "x", @@ -115,7 +113,7 @@ container: 'map', zoom: 12.5, center: [-77.01866, 38.888], - style: style, + style, hash: true }); diff --git a/docs/components/expression-metadata.js b/docs/components/expression-metadata.js index b4fc300d788..02669df9bff 100644 --- a/docs/components/expression-metadata.js +++ b/docs/components/expression-metadata.js @@ -200,7 +200,7 @@ for (const name in types) { expressionGroups[spec.group] = expressionGroups[spec.group] || []; expressionGroups[spec.group].push(name); expressions[name] = { - name: name, + name, doc: spec.doc, type: types[name], sdkSupport: spec['sdk-support'] diff --git a/docs/components/quickstart.js b/docs/components/quickstart.js index 09abbb7f2ac..30c41965bd0 100644 --- a/docs/components/quickstart.js +++ b/docs/components/quickstart.js @@ -79,12 +79,16 @@ export default class extends React.Component { mapbox-gl.js v{version}
-

Mapbox GL JS is a JavaScript library that uses WebGL to render interactive maps - from vector tiles and Mapbox styles. - It is part of the Mapbox GL ecosystem, which includes Mapbox Mobile, a compatible renderer written in C++ with bindings - for desktop and mobile platforms. To see what new features our team is working on, take a look at our roadmap.

+

+ Mapbox GL JS is a JavaScript library that uses WebGL to render interactive maps from + vector tiles and + Mapbox styles. + It is part of the Mapbox GL ecosystem, which includes + Mapbox Mobile, + a compatible renderer written in C++ with bindings + for desktop and mobile platforms. To see what new features our team is working on, + take a look at our roadmap. +

diff --git a/docs/pages/example/.eslintrc b/docs/pages/example/.eslintrc index 06f7379d50e..913132c9ef3 100644 --- a/docs/pages/example/.eslintrc +++ b/docs/pages/example/.eslintrc @@ -23,7 +23,8 @@ "no-loop-func": "off", "no-var": "off", "prefer-arrow-callback": "off", - "prefer-template": "off" + "prefer-template": "off", + "object-shorthand": "off" }, "env": { "es6": false, diff --git a/docs/pages/example/custom-style-layer.html b/docs/pages/example/custom-style-layer.html index 8f2172ebca6..f8182d4d055 100644 --- a/docs/pages/example/custom-style-layer.html +++ b/docs/pages/example/custom-style-layer.html @@ -52,7 +52,7 @@ ]), gl.STATIC_DRAW); }, - render: function(gl, matrix) { + render: function (gl, matrix) { gl.useProgram(this.program); gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix); gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer); diff --git a/docs/pages/example/flyto-options.html b/docs/pages/example/flyto-options.html index fea7f1b8a2c..31a089a6977 100644 --- a/docs/pages/example/flyto-options.html +++ b/docs/pages/example/flyto-options.html @@ -52,9 +52,7 @@ // This can be any easing function: it takes a number between // 0 and 1 and returns another number between 0 and 1. - easing: function (t) { - return t; - } + easing: function (t) { return t; } }); }); diff --git a/docs/pages/example/timeline-animation.html b/docs/pages/example/timeline-animation.html index e42283a0e8f..e874cea7e91 100644 --- a/docs/pages/example/timeline-animation.html +++ b/docs/pages/example/timeline-animation.html @@ -112,7 +112,7 @@

Significant earthquakes in 2015

map.addSource('earthquakes', { 'type': 'geojson', - 'data': data + data: data }); map.addLayer({ diff --git a/docs/pages/style-spec.js b/docs/pages/style-spec.js index 680c73af292..bb82ef56708 100644 --- a/docs/pages/style-spec.js +++ b/docs/pages/style-spec.js @@ -1043,7 +1043,8 @@ export default class extends React.Component {

Data expressions

-

A data expression is any expression that access feature data -- that is, any +

+ A data expression is any expression that access feature data -- that is, any expression that uses one of the data operators: get, has, @@ -1052,7 +1053,8 @@ export default class extends React.Component { properties, or feature-state. Data expressions allow a feature's properties or state to determine its appearance. They can be used to differentiate - features within the same layer and to create data visualizations.

+ features within the same layer and to create data visualizations. +

{highlightJSON(` @@ -1146,10 +1148,12 @@ export default class extends React.Component { ]`)}
-

That is, in layout or paint properties, ["zoom"] may appear only as the - input to an outer interpolate or step expression, or such an expression within - a let expression.

+

+ That is, in layout or paint properties, ["zoom"] may appear only as the + input to an outer interpolate or + step expression, or such an expression within + a let expression. +

There is an important difference between layout and paint properties in the timing of camera expression evaluation. Paint property camera expressions are @@ -1195,18 +1199,20 @@ export default class extends React.Component { href="#types-number">numbers.

-

When working with feature data, the type of a feature property value is typically not known +

+ When working with feature data, the type of a feature property value is typically not known ahead of time by the SDK. In order to preserve type safety, when evaluating a data expression, the SDK will check that the property value is appropriate for the context. - For example, if you use the expression ["get", "feature-color"] for the circle-color property, the SDK + For example, if you use the expression ["get", "feature-color"] for the + circle-color property, the SDK will verify that the feature-color value of each feature is a string identifying a valid color. If this check fails, an error will be indicated in an SDK-specific way (typically a log message), and the default value for the property will be used instead.

-

In most cases, this verification will occur automatically wherever it is needed. However, +

+ In most cases, this verification will occur automatically wherever it is needed. However, in certain situations, the SDK may be unable to automatically determine the expected result type of a data expression from surrounding context. For example, it is not clear whether the expression ["<", ["get", "a"], ["get", "b"]] is attempting @@ -1216,21 +1222,22 @@ export default class extends React.Component { A type assertion checks that the feature data actually matches the expected type of the data expression. If this check fails, it produces an error and causes the whole expression to fall back to the default value for the property being defined. The - assertion operators are array, boolean, number, and string. + assertion operators are + array, + boolean, + number, and + string.

-

Expressions perform only one kind of implicit type conversion: a data expression used in +

+ Expressions perform only one kind of implicit type conversion: a data expression used in a context where a color is expected will convert a string representation of a color to a color value. In all other cases, if you want to convert - between types, you must use one of the type conversion expression operators: to-boolean, to-number, to-string, or to-color. For example, if you + between types, you must use one of the type conversion expression operators: + to-boolean, + to-number, + to-string, or + to-color. For example, if you have a feature property that stores numeric values in string format, and you want to use those values as numbers rather than strings, you can use an expression such as ["to-number", ["get", "property-name"]]. @@ -1338,33 +1345,34 @@ export default class extends React.Component {

-
Optional string. One - of "identity", "exponential", "interval" - , or "categorical". +
+ Optional string. One + of "identity", "exponential", + "interval", or "categorical".
"identity"
A function that returns its input as the output.
"exponential"
-
A function that generates an output by interpolating between stops just +
+ A function that generates an output by interpolating between stops just less than and just greater than the function input. The domain (input value) must be numeric, and the style property must support interpolation. Style properties that support interpolation are - marked marked with , the - "exponential" symbol, and exponential is the default + marked marked with + , + the "exponential" symbol, and exponential is the default function type for these properties.
"interval"
-
A function that returns the output value of the stop just less than the +
+ A function that returns the output value of the stop just less than the function input. The domain (input value) must be numeric. Any style property may use interval functions. For properties marked with - , the "interval" - symbol, this is the default function type. + , + the "interval" symbol, this is the default function type.
"categorical"
A function that returns the output value of the stop equal to the function diff --git a/package.json b/package.json index 00e5c483dfc..80fff392236 100644 --- a/package.json +++ b/package.json @@ -44,18 +44,18 @@ "@mapbox/mapbox-gl-rtl-text": "^0.2.0", "@mapbox/mapbox-gl-test-suite": "file:test/integration", "@octokit/rest": "^15.9.5", - "babel-eslint": "^7.0.0", + "babel-eslint": "^10.0.1", "benchmark": "~2.1.0", "browserify": "^16.1.0", "d3": "^4.12.0", "documentation": "~8.1.1", "ejs": "^2.5.7", - "eslint": "4.1.1", - "eslint-config-mourner": "^2.0.0", - "eslint-plugin-flowtype": "^2.34.0", - "eslint-plugin-html": "^3.0.0", - "eslint-plugin-import": "^2.9.0", - "eslint-plugin-react": "^7.3.0", + "eslint": "^5.7.0", + "eslint-config-mourner": "^3.0.0", + "eslint-plugin-flowtype": "^3.0.0", + "eslint-plugin-html": "^4.0.6", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-react": "^7.11.1", "execcommand-copy": "^1.1.0", "flow-bin": "^0.77.0", "flow-coverage-report": "^0.3.0", @@ -97,8 +97,8 @@ "sinon": "^5.0.0", "slugg": "^1.2.1", "st": "^1.2.0", - "stylelint": "^8.4.0", - "stylelint-config-standard": "^18.0.0", + "stylelint": "^9.6.0", + "stylelint-config-standard": "^18.2.0", "tap": "^11.1.2" }, "browser": { diff --git a/src/data/bucket/fill_bucket.js b/src/data/bucket/fill_bucket.js index 0f64bd1b55b..fa194648863 100644 --- a/src/data/bucket/fill_bucket.js +++ b/src/data/bucket/fill_bucket.js @@ -80,9 +80,9 @@ class FillBucket implements Bucket { const geometry = loadGeometry(feature); const patternFeature: BucketFeature = { - sourceLayerIndex: sourceLayerIndex, - index: index, - geometry: geometry, + sourceLayerIndex, + index, + geometry, properties: feature.properties, type: feature.type, patterns: {} diff --git a/src/data/bucket/fill_extrusion_bucket.js b/src/data/bucket/fill_extrusion_bucket.js index 2d1f47042f7..d4867838876 100644 --- a/src/data/bucket/fill_extrusion_bucket.js +++ b/src/data/bucket/fill_extrusion_bucket.js @@ -94,9 +94,9 @@ class FillExtrusionBucket implements Bucket { const geometry = loadGeometry(feature); const patternFeature: BucketFeature = { - sourceLayerIndex: sourceLayerIndex, - index: index, - geometry: geometry, + sourceLayerIndex, + index, + geometry, properties: feature.properties, type: feature.type, patterns: {} diff --git a/src/data/bucket/line_bucket.js b/src/data/bucket/line_bucket.js index 0ca506a920a..6b4e93b7947 100644 --- a/src/data/bucket/line_bucket.js +++ b/src/data/bucket/line_bucket.js @@ -137,9 +137,9 @@ class LineBucket implements Bucket { const geometry = loadGeometry(feature); const patternFeature: BucketFeature = { - sourceLayerIndex: sourceLayerIndex, - index: index, - geometry: geometry, + sourceLayerIndex, + index, + geometry, properties: feature.properties, type: feature.type, patterns: {} diff --git a/src/data/bucket/pattern_bucket_features.js b/src/data/bucket/pattern_bucket_features.js index 1a0834846b4..900cffaf88c 100644 --- a/src/data/bucket/pattern_bucket_features.js +++ b/src/data/bucket/pattern_bucket_features.js @@ -42,7 +42,7 @@ export function addPatternDependencies(type: string, layers: PatternStyleLayers, const patternPropertyValue = patternProperty.value; if (patternPropertyValue.kind !== "constant") { const min = patternPropertyValue.evaluate({zoom: zoom - 1}, patternFeature, {}); - const mid = patternPropertyValue.evaluate({zoom: zoom}, patternFeature, {}); + const mid = patternPropertyValue.evaluate({zoom}, patternFeature, {}); const max = patternPropertyValue.evaluate({zoom: zoom + 1}, patternFeature, {}); // add to patternDependencies patterns[min] = true; diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index 5417861e644..d03e8302fb2 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -462,7 +462,7 @@ class SymbolBucket implements Bucket { } } return { - lineStartIndex: lineStartIndex, + lineStartIndex, lineLength: this.lineVertexArray.length - lineStartIndex }; } diff --git a/src/data/feature_index.js b/src/data/feature_index.js index 3a57eb0b7ed..0cf3f33895d 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.js @@ -200,7 +200,7 @@ class FeatureIndex { if (layerResult === undefined) { layerResult = result[layerID] = []; } - layerResult.push({ featureIndex: featureIndex, feature: geojsonFeature }); + layerResult.push({ featureIndex, feature: geojsonFeature }); } } diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index c9e2ee7e181..62323770265 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -97,7 +97,7 @@ class ConstantBinder implements Binder { constructor(value: T, names: Array, type: string) { this.value = value; this.names = names; - this.uniformNames = this.names.map(name =>`u_${name}`); + this.uniformNames = this.names.map(name => `u_${name}`); this.type = type; this.maxValue = -Infinity; } @@ -144,7 +144,7 @@ class CrossFadedConstantBinder implements Binder { constructor(value: T, names: Array, type: string) { this.value = value; this.names = names; - this.uniformNames = this.names.map(name =>`u_${name}`); + this.uniformNames = this.names.map(name => `u_${name}`); this.type = type; this.maxValue = -Infinity; this.patternPositions = {patternTo: null, patternFrom: null}; @@ -191,7 +191,7 @@ class SourceExpressionBinder implements Binder { this.expression = expression; this.names = names; this.type = type; - this.uniformNames = this.names.map(name =>`a_${name}`); + this.uniformNames = this.names.map(name => `a_${name}`); this.maxValue = -Infinity; this.paintVertexAttributes = names.map((name) => ({ @@ -291,7 +291,7 @@ class CompositeExpressionBinder implements Binder { constructor(expression: CompositeExpression, names: Array, type: string, useIntegerZoom: boolean, zoom: number, layout: Class) { this.expression = expression; this.names = names; - this.uniformNames = this.names.map(name =>`a_${name}_t`); + this.uniformNames = this.names.map(name => `a_${name}_t`); this.type = type; this.useIntegerZoom = useIntegerZoom; this.zoom = zoom; @@ -412,7 +412,7 @@ class CrossFadedCompositeBinder implements Binder { this.expression = expression; this.names = names; this.type = type; - this.uniformNames = this.names.map(name =>`a_${name}_t`); + this.uniformNames = this.names.map(name => `a_${name}_t`); this.useIntegerZoom = useIntegerZoom; this.zoom = zoom; this.maxValue = -Infinity; @@ -650,7 +650,7 @@ export default class ProgramConfiguration { defines(): Array { const result = []; for (const property in this.binders) { - result.push.apply(result, this.binders[property].defines()); + result.push(...this.binders[property].defines()); } return result; } diff --git a/src/data/segment.js b/src/data/segment.js index 2aab0df686a..ff20b529ef3 100644 --- a/src/data/segment.js +++ b/src/data/segment.js @@ -52,10 +52,10 @@ class SegmentVector { static simpleSegment(vertexOffset: number, primitiveOffset: number, vertexLength: number, primitiveLength: number): SegmentVector { return new SegmentVector([{ - vertexOffset: vertexOffset, - primitiveOffset: primitiveOffset, - vertexLength: vertexLength, - primitiveLength: primitiveLength, + vertexOffset, + primitiveOffset, + vertexLength, + primitiveLength, vaos: {} }]); } diff --git a/src/geo/lng_lat_bounds.js b/src/geo/lng_lat_bounds.js index 645a0d3af39..f2a87055b34 100644 --- a/src/geo/lng_lat_bounds.js +++ b/src/geo/lng_lat_bounds.js @@ -28,7 +28,7 @@ class LngLatBounds { // This constructor is too flexible to type. It should not be so flexible. constructor(sw: any, ne: any) { if (!sw) { - return; + // noop } else if (ne) { this.setSouthWest(sw).setNorthEast(ne); } else if (sw.length === 4) { diff --git a/src/index.js b/src/index.js index 8cfc4f3c665..ab573999084 100644 --- a/src/index.js +++ b/src/index.js @@ -25,7 +25,7 @@ import WorkerPool from './util/worker_pool'; const exported = { version, supported, - setRTLTextPlugin: setRTLTextPlugin, + setRTLTextPlugin, Map, NavigationControl, GeolocateControl, diff --git a/src/render/draw_debug.js b/src/render/draw_debug.js index a818263710f..f3921b7ec40 100644 --- a/src/render/draw_debug.js +++ b/src/render/draw_debug.js @@ -194,7 +194,7 @@ function createTextVertices(text, left, baseline, scale) { if (prev) { strokes.push(prev.x, prev.y, x, y); } - prev = {x: x, y: y}; + prev = {x, y}; } } left += glyph[0] * scale; diff --git a/src/render/image_atlas.js b/src/render/image_atlas.js index 2af705e76ba..8bb25e12d8a 100644 --- a/src/render/image_atlas.js +++ b/src/render/image_atlas.js @@ -102,12 +102,12 @@ export default class ImageAtlas { w = src.data.width, h = src.data.height; - RGBAImage.copy(src.data, image, {x: 0, y: 0}, {x: x, y: y}, src.data); + RGBAImage.copy(src.data, image, {x: 0, y: 0}, {x, y}, src.data); // Add 1 pixel wrapped padding on each side of the image. - RGBAImage.copy(src.data, image, { x: 0, y: h - 1 }, { x: x, y: y - 1 }, { width: w, height: 1 }); // T - RGBAImage.copy(src.data, image, { x: 0, y: 0 }, { x: x, y: y + h }, { width: w, height: 1 }); // B - RGBAImage.copy(src.data, image, { x: w - 1, y: 0 }, { x: x - 1, y: y }, { width: 1, height: h }); // L - RGBAImage.copy(src.data, image, { x: 0, y: 0 }, { x: x + w, y: y }, { width: 1, height: h }); // R + RGBAImage.copy(src.data, image, { x: 0, y: h - 1 }, { x, y: y - 1 }, { width: w, height: 1 }); // T + RGBAImage.copy(src.data, image, { x: 0, y: 0 }, { x, y: y + h }, { width: w, height: 1 }); // B + RGBAImage.copy(src.data, image, { x: w - 1, y: 0 }, { x: x - 1, y }, { width: 1, height: h }); // L + RGBAImage.copy(src.data, image, { x: 0, y: 0 }, { x: x + w, y }, { width: 1, height: h }); // R } this.image = image; diff --git a/src/render/image_manager.js b/src/render/image_manager.js index a209a4176df..fee826e4155 100644 --- a/src/render/image_manager.js +++ b/src/render/image_manager.js @@ -191,10 +191,10 @@ class ImageManager { RGBAImage.copy(src, dst, { x: 0, y: 0 }, { x, y }, { width: w, height: h }); // Add 1 pixel wrapped padding on each side of the image. - RGBAImage.copy(src, dst, { x: 0, y: h - 1 }, { x: x, y: y - 1 }, { width: w, height: 1 }); // T - RGBAImage.copy(src, dst, { x: 0, y: 0 }, { x: x, y: y + h }, { width: w, height: 1 }); // B - RGBAImage.copy(src, dst, { x: w - 1, y: 0 }, { x: x - 1, y: y }, { width: 1, height: h }); // L - RGBAImage.copy(src, dst, { x: 0, y: 0 }, { x: x + w, y: y }, { width: 1, height: h }); // R + RGBAImage.copy(src, dst, { x: 0, y: h - 1 }, { x, y: y - 1 }, { width: w, height: 1 }); // T + RGBAImage.copy(src, dst, { x: 0, y: 0 }, { x, y: y + h }, { width: w, height: 1 }); // B + RGBAImage.copy(src, dst, { x: w - 1, y: 0 }, { x: x - 1, y }, { width: 1, height: h }); // L + RGBAImage.copy(src, dst, { x: 0, y: 0 }, { x: x + w, y }, { width: 1, height: h }); // R } this.dirty = true; diff --git a/src/shaders/encode_attribute.js b/src/shaders/encode_attribute.js index 3ae48c50d35..ff13c6672c7 100644 --- a/src/shaders/encode_attribute.js +++ b/src/shaders/encode_attribute.js @@ -9,10 +9,9 @@ import { clamp } from '../util/util'; * * @private */ -export const packUint8ToFloat = function pack(a: number, b: number) { +export function packUint8ToFloat(a: number, b: number) { // coerce a and b to 8-bit ints a = clamp(Math.floor(a), 0, 255); b = clamp(Math.floor(b), 0, 255); return 256 * a + b; -}; - +} diff --git a/src/source/image_source.js b/src/source/image_source.js index ce3013f454f..221fdb9ef81 100644 --- a/src/source/image_source.js +++ b/src/source/image_source.js @@ -50,7 +50,7 @@ type Coordinates = [[number, number], [number, number], [number, number], [numbe * [-76.5295386314392, 39.17683392507606], * [-76.54520273208618, 39.17876344106642] * ]); - * + * * // update url and coordinates simultaneously * mySource.updateImage({ * url: 'https://www.mapbox.com/images/bar.png', @@ -61,7 +61,7 @@ type Coordinates = [[number, number], [number, number], [number, number], [numbe * [-76.54520273208618, 39.17876344106642] * ] * }) - * + * * map.removeSource('some id'); // remove * @see [Add an image](https://www.mapbox.com/mapbox-gl-js/example/image-on-a-map/) */ diff --git a/src/source/raster_dem_tile_source.js b/src/source/raster_dem_tile_source.js index 1183bda4d96..86a1a86fd87 100644 --- a/src/source/raster_dem_tile_source.js +++ b/src/source/raster_dem_tile_source.js @@ -62,7 +62,7 @@ class RasterDEMTileSource extends RasterTileSource implements Source { uid: tile.uid, coord: tile.tileID, source: this.id, - rawImageData: rawImageData, + rawImageData, encoding: this.encoding }; diff --git a/src/source/rtl_text_plugin.js b/src/source/rtl_text_plugin.js index db2c711ca4f..66b53b31a0b 100644 --- a/src/source/rtl_text_plugin.js +++ b/src/source/rtl_text_plugin.js @@ -18,7 +18,7 @@ export const registerForPluginAvailability = function( callback: (args: {pluginURL: string, completionCallback: CompletionCallback}) => void ) { if (pluginURL) { - callback({ pluginURL: pluginURL, completionCallback: _completionCallback}); + callback({ pluginURL, completionCallback: _completionCallback}); } else { evented.once('pluginAvailable', callback); } @@ -48,7 +48,7 @@ export const setRTLTextPlugin = function(url: string, callback: ErrorCallback) { foregroundLoadComplete = true; } }; - evented.fire(new Event('pluginAvailable', { pluginURL: pluginURL, completionCallback: _completionCallback })); + evented.fire(new Event('pluginAvailable', { pluginURL, completionCallback: _completionCallback })); }; export const plugin: { @@ -60,7 +60,7 @@ export const plugin: { applyArabicShaping: null, processBidirectionalText: null, processStyledBidirectionalText: null, - isLoaded: function() { + isLoaded() { return foregroundLoadComplete || // Foreground: loaded if the completion callback returned successfully plugin.applyArabicShaping != null; // Background: loaded if the plugin functions have been compiled } diff --git a/src/source/source_cache.js b/src/source/source_cache.js index f80a059d8b0..63c0ac9c2b7 100644 --- a/src/source/source_cache.js +++ b/src/source/source_cache.js @@ -257,7 +257,7 @@ class SourceCache extends Evented { if (this.getSource().type === 'raster-dem' && tile.dem) this._backfillDEM(tile); this._state.initializeTileState(tile, this.map ? this.map.painter : null); - this._source.fire(new Event('data', {dataType: 'source', tile: tile, coord: tile.tileID})); + this._source.fire(new Event('data', {dataType: 'source', tile, coord: tile.tileID})); } /** @@ -667,7 +667,7 @@ class SourceCache extends Evented { tile.uses++; this._tiles[tileID.key] = tile; - if (!cached) this._source.fire(new Event('dataloading', {tile: tile, coord: tile.tileID, dataType: 'source'})); + if (!cached) this._source.fire(new Event('dataloading', {tile, coord: tile.tileID, dataType: 'source'})); return tile; } @@ -776,10 +776,10 @@ class SourceCache extends Evented { } tileResults.push({ - tile: tile, - tileID: tileID, + tile, + tileID, queryGeometry: [tileSpaceQueryGeometry], - scale: scale + scale }); } } diff --git a/src/source/tile.js b/src/source/tile.js index 0661fa9d6c3..b2eda7cf9f0 100644 --- a/src/source/tile.js +++ b/src/source/tile.js @@ -268,12 +268,12 @@ class Tile { return {}; return this.latestFeatureIndex.query({ - queryGeometry: queryGeometry, - scale: scale, + queryGeometry, + scale, tileSize: this.tileSize, - posMatrix: posMatrix, - transform: transform, - params: params, + posMatrix, + transform, + params, queryPadding: this.queryPadding * maxPitchScaleFactor }, layers, sourceFeatureState); } diff --git a/src/source/vector_tile_worker_source.js b/src/source/vector_tile_worker_source.js index e64909724a0..845055061d3 100644 --- a/src/source/vector_tile_worker_source.js +++ b/src/source/vector_tile_worker_source.js @@ -50,8 +50,8 @@ function loadVectorTile(params: WorkerTileParameters, callback: LoadVectorDataCa callback(null, { vectorTile: new vt.VectorTile(new Protobuf(data)), rawData: data, - cacheControl: cacheControl, - expires: expires + cacheControl, + expires }); } }); diff --git a/src/source/worker_tile.js b/src/source/worker_tile.js index 07db81e4004..e70e0a2b9f2 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.js @@ -73,7 +73,7 @@ class WorkerTile { const buckets: {[string]: Bucket} = {}; const options = { - featureIndex: featureIndex, + featureIndex, iconDependencies: {}, patternDependencies: {}, glyphDependencies: {} @@ -115,7 +115,7 @@ class WorkerTile { pixelRatio: this.pixelRatio, overscaling: this.overscaling, collisionBoxArray: this.collisionBoxArray, - sourceLayerIndex: sourceLayerIndex, + sourceLayerIndex, sourceID: this.source }); @@ -198,7 +198,7 @@ class WorkerTile { featureIndex, collisionBoxArray: this.collisionBoxArray, glyphAtlasImage: glyphAtlas.image, - imageAtlas: imageAtlas, + imageAtlas, // Only used for benchmarking: glyphMap: this.returnDependencies ? glyphMap : null, iconMap: this.returnDependencies ? iconMap : null, diff --git a/src/style-spec/diff.js b/src/style-spec/diff.js index 3bf499e3acc..ee036be6e0e 100644 --- a/src/style-spec/diff.js +++ b/src/style-spec/diff.js @@ -170,13 +170,13 @@ function diffLayerPropertyChanges(before, after, commands, layerId, klass, comma for (prop in before) { if (!before.hasOwnProperty(prop)) continue; if (!isEqual(before[prop], after[prop])) { - commands.push({ command: command, args: [layerId, prop, after[prop], klass] }); + commands.push({ command, args: [layerId, prop, after[prop], klass] }); } } for (prop in after) { if (!after.hasOwnProperty(prop) || before.hasOwnProperty(prop)) continue; if (!isEqual(before[prop], after[prop])) { - commands.push({ command: command, args: [layerId, prop, after[prop], klass] }); + commands.push({ command, args: [layerId, prop, after[prop], klass] }); } } } diff --git a/src/style-spec/expression/compound_expression.js b/src/style-spec/expression/compound_expression.js index a54617757c0..111efc82f32 100644 --- a/src/style-spec/expression/compound_expression.js +++ b/src/style-spec/expression/compound_expression.js @@ -118,7 +118,7 @@ class CompoundExpression implements Expression { assert(!signatureContext || signatureContext.errors.length > 0); if (overloads.length === 1) { - context.errors.push.apply(context.errors, signatureContext.errors); + context.errors.push(...signatureContext.errors); } else { const expected = overloads.length ? overloads : availableOverloads; const signatures = expected diff --git a/src/style-spec/function/convert.js b/src/style-spec/function/convert.js index b6cd1723cb0..e248b9f0e5a 100644 --- a/src/style-spec/function/convert.js +++ b/src/style-spec/function/convert.js @@ -77,7 +77,7 @@ function convertZoomAndPropertyFunction(parameters, propertySpec, stops) { const zoom = stop[0].zoom; if (featureFunctionParameters[zoom] === undefined) { featureFunctionParameters[zoom] = { - zoom: zoom, + zoom, type: parameters.type, property: parameters.property, default: parameters.default, diff --git a/src/style-spec/function/index.js b/src/style-spec/function/index.js index a5ea54ca9ee..2779f780872 100644 --- a/src/style-spec/function/index.js +++ b/src/style-spec/function/index.js @@ -76,7 +76,7 @@ export function createFunction(parameters, propertySpec) { const zoom = stop[0].zoom; if (featureFunctions[zoom] === undefined) { featureFunctions[zoom] = { - zoom: zoom, + zoom, type: parameters.type, property: parameters.property, default: parameters.default, diff --git a/src/style-spec/util/color_spaces.js b/src/style-spec/util/color_spaces.js index c4d1a2d39c9..954de5c93a5 100644 --- a/src/style-spec/util/color_spaces.js +++ b/src/style-spec/util/color_spaces.js @@ -95,7 +95,7 @@ function rgbToHcl(rgbColor: Color): HCLColor { return { h: h < 0 ? h + 360 : h, c: Math.sqrt(a * a + b * b), - l: l, + l, alpha: rgbColor.a }; } @@ -105,7 +105,7 @@ function hclToRgb(hclColor: HCLColor): Color { c = hclColor.c, l = hclColor.l; return labToRgb({ - l: l, + l, a: Math.cos(h) * c, b: Math.sin(h) * c, alpha: hclColor.alpha diff --git a/src/style-spec/validate/validate.js b/src/style-spec/validate/validate.js index 09543fd4580..6ac7760300a 100644 --- a/src/style-spec/validate/validate.js +++ b/src/style-spec/validate/validate.js @@ -21,7 +21,7 @@ import validateString from './validate_string'; import validateFormatted from './validate_formatted'; const VALIDATORS = { - '*': function() { + '*'() { return []; }, 'array': validateArray, diff --git a/src/style-spec/validate/validate_array.js b/src/style-spec/validate/validate_array.js index 7ae1e646af0..10829d6f2bf 100644 --- a/src/style-spec/validate/validate_array.js +++ b/src/style-spec/validate/validate_array.js @@ -38,12 +38,12 @@ export default function validateArray(options) { let errors = []; for (let i = 0; i < array.length; i++) { errors = errors.concat(validateArrayElement({ - array: array, + array, arrayIndex: i, value: array[i], valueSpec: arrayElementSpec, - style: style, - styleSpec: styleSpec, + style, + styleSpec, key: `${key}[${i}]` })); } diff --git a/src/style-spec/validate/validate_function.js b/src/style-spec/validate/validate_function.js index e38ccce1f29..1930c496820 100644 --- a/src/style-spec/validate/validate_function.js +++ b/src/style-spec/validate/validate_function.js @@ -76,7 +76,7 @@ export default function validateFunction(options) { errors = errors.concat(validateArray({ key: options.key, - value: value, + value, valueSpec: options.valueSpec, style: options.style, styleSpec: options.styleSpec, diff --git a/src/style-spec/validate/validate_layer.js b/src/style-spec/validate/validate_layer.js index fa308426150..e2225c7dbe8 100644 --- a/src/style-spec/validate/validate_layer.js +++ b/src/style-spec/validate/validate_layer.js @@ -76,18 +76,18 @@ export default function validateLayer(options) { } errors = errors.concat(validateObject({ - key: key, + key, value: layer, valueSpec: styleSpec.layer, style: options.style, styleSpec: options.styleSpec, objectElementValidators: { - '*': function() { + '*'() { return []; }, // We don't want to enforce the spec's `"requires": true` for backward compatibility with refs; // the actual requirement is validated above. See https://github.com/mapbox/mapbox-gl-js/issues/5772. - type: function() { + type() { return validateSpec({ key: `${key}.type`, value: layer.type, @@ -99,29 +99,29 @@ export default function validateLayer(options) { }); }, filter: validateFilter, - layout: function(options) { + layout(options) { return validateObject({ - layer: layer, + layer, key: options.key, value: options.value, style: options.style, styleSpec: options.styleSpec, objectElementValidators: { - '*': function(options) { + '*'(options) { return validateLayoutProperty(extend({layerType: type}, options)); } } }); }, - paint: function(options) { + paint(options) { return validateObject({ - layer: layer, + layer, key: options.key, value: options.value, style: options.style, styleSpec: options.styleSpec, objectElementValidators: { - '*': function(options) { + '*'(options) { return validatePaintProperty(extend({layerType: type}, options)); } } diff --git a/src/style-spec/validate/validate_light.js b/src/style-spec/validate/validate_light.js index c8f21b2a506..4b3c364c32c 100644 --- a/src/style-spec/validate/validate_light.js +++ b/src/style-spec/validate/validate_light.js @@ -24,19 +24,19 @@ export default function validateLight(options) { if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) { errors = errors.concat(validate({ - key: key, + key, value: light[key], valueSpec: styleSpec.transition, - style: style, - styleSpec: styleSpec + style, + styleSpec })); } else if (lightSpec[key]) { errors = errors.concat(validate({ - key: key, + key, value: light[key], valueSpec: lightSpec[key], - style: style, - styleSpec: styleSpec + style, + styleSpec })); } else { errors = errors.concat([new ValidationError(key, light[key], `unknown property "${key}"`)]); diff --git a/src/style-spec/validate/validate_object.js b/src/style-spec/validate/validate_object.js index 436b597edff..3f36e459e13 100644 --- a/src/style-spec/validate/validate_object.js +++ b/src/style-spec/validate/validate_object.js @@ -39,10 +39,10 @@ export default function validateObject(options) { key: (key ? `${key}.` : key) + objectKey, value: object[objectKey], valueSpec: elementSpec, - style: style, - styleSpec: styleSpec, - object: object, - objectKey: objectKey + style, + styleSpec, + object, + objectKey }, object)); } diff --git a/src/style-spec/validate/validate_property.js b/src/style-spec/validate/validate_property.js index 05a6904c7f4..1c3d5c2e414 100644 --- a/src/style-spec/validate/validate_property.js +++ b/src/style-spec/validate/validate_property.js @@ -19,11 +19,11 @@ export default function validateProperty(options, propertyType) { const transitionMatch = propertyKey.match(/^(.*)-transition$/); if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) { return validate({ - key: key, - value: value, + key, + value, valueSpec: styleSpec.transition, - style: style, - styleSpec: styleSpec + style, + styleSpec }); } @@ -53,12 +53,12 @@ export default function validateProperty(options, propertyType) { return errors.concat(validate({ key: options.key, - value: value, - valueSpec: valueSpec, - style: style, - styleSpec: styleSpec, + value, + valueSpec, + style, + styleSpec, expressionContext: 'property', - propertyType: propertyType, + propertyType, propertyKey })); } diff --git a/src/style-spec/validate/validate_source.js b/src/style-spec/validate/validate_source.js index 97449594134..f1f13a174d1 100644 --- a/src/style-spec/validate/validate_source.js +++ b/src/style-spec/validate/validate_source.js @@ -22,11 +22,11 @@ export default function validateSource(options) { case 'raster': case 'raster-dem': errors = errors.concat(validateObject({ - key: key, - value: value, + key, + value, valueSpec: styleSpec[`source_${type.replace('-', '_')}`], style: options.style, - styleSpec: styleSpec + styleSpec })); if ('url' in value) { for (const prop in value) { @@ -39,29 +39,29 @@ export default function validateSource(options) { case 'geojson': return validateObject({ - key: key, - value: value, + key, + value, valueSpec: styleSpec.source_geojson, - style: style, - styleSpec: styleSpec + style, + styleSpec }); case 'video': return validateObject({ - key: key, - value: value, + key, + value, valueSpec: styleSpec.source_video, - style: style, - styleSpec: styleSpec + style, + styleSpec }); case 'image': return validateObject({ - key: key, - value: value, + key, + value, valueSpec: styleSpec.source_image, - style: style, - styleSpec: styleSpec + style, + styleSpec }); case 'canvas': @@ -73,8 +73,8 @@ export default function validateSource(options) { key: `${key}.type`, value: value.type, valueSpec: {values: ['vector', 'raster', 'raster-dem', 'geojson', 'video', 'image']}, - style: style, - styleSpec: styleSpec + style, + styleSpec }); } } diff --git a/src/style-spec/validate_style.min.js b/src/style-spec/validate_style.min.js index 0c7d05902d3..1ccdb3593b8 100644 --- a/src/style-spec/validate_style.min.js +++ b/src/style-spec/validate_style.min.js @@ -35,11 +35,11 @@ function validateStyleMin(style, styleSpec) { key: '', value: style, valueSpec: styleSpec.$root, - styleSpec: styleSpec, - style: style, + styleSpec, + style, objectElementValidators: { glyphs: validateGlyphsURL, - '*': function() { + '*'() { return []; } } @@ -49,8 +49,8 @@ function validateStyleMin(style, styleSpec) { errors = errors.concat(validateConstants({ key: 'constants', value: style.constants, - style: style, - styleSpec: styleSpec + style, + styleSpec })); } @@ -71,8 +71,8 @@ function sortErrors(errors) { } function wrapCleanErrors(inner) { - return function() { - return sortErrors(inner.apply(this, arguments)); + return function(...args) { + return sortErrors(inner.apply(this, args)); }; } diff --git a/src/style-spec/visit.js b/src/style-spec/visit.js index f687e4ec0a6..42fdb07552f 100644 --- a/src/style-spec/visit.js +++ b/src/style-spec/visit.js @@ -56,10 +56,10 @@ export function eachProperty( Object.keys(properties).forEach((key) => { callback({ path: [layer.id, propertyType, key], - key: key, + key, value: properties[key], reference: getPropertyReference(key), - set: function(x) { + set(x) { properties[key] = x; } }); diff --git a/src/style/light.js b/src/style/light.js index a59e28761dc..2ed7f92e00b 100644 --- a/src/style/light.js +++ b/src/style/light.js @@ -115,10 +115,10 @@ class Light extends Evented { _validate(validate: Function, value: mixed) { return emitValidationErrors(this, validate.call(validateStyle, extend({ - value: value, + value, // Workaround for https://github.com/mapbox/mapbox-gl-js/issues/2407 style: {glyphs: true, sprite: true}, - styleSpec: styleSpec + styleSpec }))); } } diff --git a/src/style/style.js b/src/style/style.js index e9d20e764e1..3f21a686309 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -397,7 +397,7 @@ class Style extends Evented { _updateWorkerLayers(updatedIds: Array, removedIds: Array) { this.dispatcher.broadcast('updateLayers', { layers: this._serializeLayers(updatedIds), - removedIds: removedIds + removedIds }); } @@ -598,7 +598,7 @@ class Style extends Evented { layer = createStyleLayer(layerObject); this._validateLayer(layer); - layer.setEventedParent(this, {layer: {id: id}}); + layer.setEventedParent(this, {layer: {id}}); } const index = before ? this._order.indexOf(before) : this._order.length; @@ -986,7 +986,7 @@ class Style extends Evented { } this.dispatcher.broadcast('loadWorkerSource', { - name: name, + name, url: SourceType.workerSourceURL }, callback); } @@ -1025,10 +1025,10 @@ class Style extends Evented { return false; } return emitValidationErrors(this, validate.call(validateStyle, extend({ - key: key, + key, style: this.serialize(), - value: value, - styleSpec: styleSpec + value, + styleSpec }, props))); } diff --git a/src/style/style_layer.js b/src/style/style_layer.js index b4c1a70a9be..88d6acf4b39 100644 --- a/src/style/style_layer.js +++ b/src/style/style_layer.js @@ -226,11 +226,11 @@ class StyleLayer extends Evented { return false; } return emitValidationErrors(this, validate.call(validateStyle, { - key: key, + key, layerType: this.type, objectKey: name, - value: value, - styleSpec: styleSpec, + value, + styleSpec, // Workaround for https://github.com/mapbox/mapbox-gl-js/issues/2407 style: {glyphs: true, sprite: true} })); diff --git a/src/style/style_layer/custom_style_layer.js b/src/style/style_layer/custom_style_layer.js index 402402181c9..ebb88deedb5 100644 --- a/src/style/style_layer/custom_style_layer.js +++ b/src/style/style_layer/custom_style_layer.js @@ -33,7 +33,7 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * this.type = 'custom'; * this.renderingMode = '2d'; * } - * + * * onAdd(map, gl) { * const vertexSource = ` * uniform mat4 u_matrix; @@ -41,25 +41,25 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * gl_Position = u_matrix * vec4(0.5, 0.5, 0.0, 1.0); * gl_PointSize = 20.0; * }`; - * + * * const fragmentSource = ` * void main() { * gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); * }`; - * + * * const vertexShader = gl.createShader(gl.VERTEX_SHADER); * gl.shaderSource(vertexShader, vertexSource); * gl.compileShader(vertexShader); * const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); * gl.shaderSource(fragmentShader, fragmentSource); * gl.compileShader(fragmentShader); - * + * * this.program = gl.createProgram(); * gl.attachShader(this.program, vertexShader); * gl.attachShader(this.program, fragmentShader); * gl.linkProgram(this.program); * } - * + * * render(gl, matrix) { * gl.useProgram(this.program); * gl.uniformMatrix4fv(gl.getUniformLocation(this.program, "u_matrix"), false, matrix); @@ -97,7 +97,7 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => /** * Optional method called during a render frame to allow a layer to prepare resources or render into a texture. - * + * * The layer cannot make any assumptions about the current GL state and must bind a framebuffer before rendering. * * @function diff --git a/src/symbol/check_max_angle.js b/src/symbol/check_max_angle.js index cc124c5fc85..f6eddf09496 100644 --- a/src/symbol/check_max_angle.js +++ b/src/symbol/check_max_angle.js @@ -60,7 +60,7 @@ function checkMaxAngle(line: Array, anchor: Anchor, labelLength: number, recentCorners.push({ distance: anchorDistance, - angleDelta: angleDelta + angleDelta }); recentAngleDelta += angleDelta; diff --git a/src/symbol/collision_index.js b/src/symbol/collision_index.js index 0c6920943ec..e419e8b32c5 100644 --- a/src/symbol/collision_index.js +++ b/src/symbol/collision_index.js @@ -309,14 +309,14 @@ class CollisionIndex { insertCollisionBox(collisionBox: Array, ignorePlacement: boolean, bucketInstanceId: number, featureIndex: number, collisionGroupID: number) { const grid = ignorePlacement ? this.ignoredGrid : this.grid; - const key = { bucketInstanceId: bucketInstanceId, featureIndex: featureIndex, collisionGroupID: collisionGroupID }; + const key = { bucketInstanceId, featureIndex, collisionGroupID }; grid.insert(key, collisionBox[0], collisionBox[1], collisionBox[2], collisionBox[3]); } insertCollisionCircles(collisionCircles: Array, ignorePlacement: boolean, bucketInstanceId: number, featureIndex: number, collisionGroupID: number) { const grid = ignorePlacement ? this.ignoredGrid : this.grid; - const key = { bucketInstanceId: bucketInstanceId, featureIndex: featureIndex, collisionGroupID: collisionGroupID }; + const key = { bucketInstanceId, featureIndex, collisionGroupID }; for (let k = 0; k < collisionCircles.length; k += 4) { grid.insertCircle(key, collisionCircles[k], collisionCircles[k + 1], collisionCircles[k + 2]); } diff --git a/src/symbol/grid_index.js b/src/symbol/grid_index.js index 174d71fa0dd..48623a47118 100644 --- a/src/symbol/grid_index.js +++ b/src/symbol/grid_index.js @@ -145,7 +145,7 @@ class GridIndex { const result = []; const queryArgs = { hitTest, - circle: { x: x, y: y, radius: radius }, + circle: { x, y, radius }, seenUids: { box: {}, circle: {} } }; this._forEachCell(x1, y1, x2, y2, this._queryCellCircle, result, queryArgs, predicate); diff --git a/src/symbol/quads.js b/src/symbol/quads.js index a5ae86fd15a..45465bf6eb4 100644 --- a/src/symbol/quads.js +++ b/src/symbol/quads.js @@ -123,7 +123,7 @@ export function getGlyphQuads(anchor: Anchor, const oneEm = 24; const textRotate = layer.layout.get('text-rotate').evaluate(feature, {}) * Math.PI / 180; - const textOffset = layer.layout.get('text-offset').evaluate(feature, {}).map((t)=> t * oneEm); + const textOffset = layer.layout.get('text-offset').evaluate(feature, {}).map((t) => t * oneEm); const positionedGlyphs = shaping.positionedGlyphs; const quads = []; diff --git a/src/symbol/shaping.js b/src/symbol/shaping.js index 7aa6d787eec..b4390a7aadf 100644 --- a/src/symbol/shaping.js +++ b/src/symbol/shaping.js @@ -208,6 +208,9 @@ function shapeText(text: Formatted, return shaping; } +// using computed properties due to https://github.com/facebook/flow/issues/380 +/* eslint no-useless-computed-key: 0 */ + const whitespace: {[number]: boolean} = { [0x09]: true, // tab [0x0a]: true, // newline diff --git a/src/symbol/symbol_layout.js b/src/symbol/symbol_layout.js index c88cbb5561b..01c49ea416e 100644 --- a/src/symbol/symbol_layout.js +++ b/src/symbol/symbol_layout.js @@ -106,7 +106,7 @@ export function performSymbolLayout(bucket: SymbolBucket, const text = feature.text; if (text) { const unformattedText = text.toString(); - const textOffset: [number, number] = (layout.get('text-offset').evaluate(feature, {}).map((t)=> t * oneEm): any); + const textOffset: [number, number] = (layout.get('text-offset').evaluate(feature, {}).map((t) => t * oneEm): any); const spacing = layout.get('text-letter-spacing').evaluate(feature, {}) * oneEm; const spacingIfAllowed = allowsLetterSpacing(unformattedText) ? spacing : 0; const textAnchor = layout.get('text-anchor').evaluate(feature, {}); diff --git a/src/ui/camera.js b/src/ui/camera.js index 06135aea72d..73402dced12 100644 --- a/src/ui/camera.js +++ b/src/ui/camera.js @@ -123,7 +123,7 @@ class Camera extends Evented { * map.setCenter([-74, 38]); */ setCenter(center: LngLatLike, eventData?: Object) { - return this.jumpTo({center: center}, eventData); + return this.jumpTo({center}, eventData); } /** @@ -186,7 +186,7 @@ class Camera extends Evented { * map.setZoom(5); */ setZoom(zoom: number, eventData?: Object) { - this.jumpTo({zoom: zoom}, eventData); + this.jumpTo({zoom}, eventData); return this; } @@ -207,7 +207,7 @@ class Camera extends Evented { */ zoomTo(zoom: number, options: ? AnimationOptions, eventData?: Object) { return this.easeTo(extend({ - zoom: zoom + zoom }, options), eventData); } @@ -276,7 +276,7 @@ class Camera extends Evented { * map.setBearing(90); */ setBearing(bearing: number, eventData?: Object) { - this.jumpTo({bearing: bearing}, eventData); + this.jumpTo({bearing}, eventData); return this; } @@ -294,7 +294,7 @@ class Camera extends Evented { */ rotateTo(bearing: number, options?: AnimationOptions, eventData?: Object) { return this.easeTo(extend({ - bearing: bearing + bearing }, options), eventData); } @@ -351,7 +351,7 @@ class Camera extends Evented { * @returns {Map} `this` */ setPitch(pitch: number, eventData?: Object) { - this.jumpTo({pitch: pitch}, eventData); + this.jumpTo({pitch}, eventData); return this; } diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index fb06392245c..dc829616215 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -285,8 +285,8 @@ class ScrollZoomHandler { this._prevEase = { start: browser.now(), - duration: duration, - easing: easing + duration, + easing }; return easing; diff --git a/src/ui/handler/touch_zoom_rotate.js b/src/ui/handler/touch_zoom_rotate.js index 4c09431aa52..0b50d20ecf5 100644 --- a/src/ui/handler/touch_zoom_rotate.js +++ b/src/ui/handler/touch_zoom_rotate.js @@ -269,7 +269,7 @@ class TouchZoomRotateHandler { map.easeTo({ zoom: targetScale, - duration: duration, + duration, easing: inertiaEasing, around: this._aroundCenter ? map.getCenter() : map.unproject(p), noMoveStart: true diff --git a/src/ui/marker.js b/src/ui/marker.js index d21aba075bf..2d65e484d6f 100644 --- a/src/ui/marker.js +++ b/src/ui/marker.js @@ -52,12 +52,12 @@ export default class Marker extends Evented { _state: 'inactive' | 'pending' | 'active'; // used for handling drag events _positionDelta: ?number; - constructor(options?: Options) { + constructor(options?: Options, legacyOptions?: Options) { super(); // For backward compatibility -- the constructor used to accept the element as a // required first argument, before it was made optional. - if (arguments[0] instanceof window.HTMLElement || arguments.length === 2) { - options = extend({element: options}, arguments[1]); + if (options instanceof window.HTMLElement || legacyOptions) { + options = extend({element: options}, legacyOptions); } bindAll([ diff --git a/src/util/actor.js b/src/util/actor.js index 8fc9d4aefd3..357a4e8aa28 100644 --- a/src/util/actor.js +++ b/src/util/actor.js @@ -47,9 +47,9 @@ class Actor { if (callback) this.callbacks[id] = callback; const buffers: Array = []; this.target.postMessage({ - targetMapId: targetMapId, + targetMapId, sourceMapId: this.mapId, - type: type, + type, id: String(id), data: serialize(data, buffers) }, buffers); diff --git a/src/util/dom.js b/src/util/dom.js index fa75bca9649..7281996184d 100644 --- a/src/util/dom.js +++ b/src/util/dom.js @@ -61,7 +61,7 @@ let passiveSupported = false; try { const options = (Object.defineProperty: any)({}, "passive", { - get: function() { + get() { passiveSupported = true; } }); diff --git a/src/util/evented.js b/src/util/evented.js index b596b57b66d..c522488a252 100644 --- a/src/util/evented.js +++ b/src/util/evented.js @@ -96,12 +96,12 @@ export class Evented { return this; } - fire(event: Event) { + fire(event: Event, properties?: Object) { // Compatibility with (type: string, properties: Object) signature from previous versions. // See https://github.com/mapbox/mapbox-gl-js/issues/6522, // https://github.com/mapbox/mapbox-gl-draw/issues/766 if (typeof event === 'string') { - event = new Event(event, arguments[1] || {}); + event = new Event(event, properties || {}); } const type = event.type; diff --git a/src/util/mapbox.js b/src/util/mapbox.js index eadb803b42a..875455ec701 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -322,7 +322,7 @@ export class TurnstileEvent extends TelemetryEvent { return this.processRequests(); } - this.postEvent(nextUpdate, {"enabled.telemetry": false}, (err)=> { + this.postEvent(nextUpdate, {"enabled.telemetry": false}, (err) => { if (!err) { this.eventData.lastSuccess = nextUpdate; this.eventData.accessToken = config.ACCESS_TOKEN; diff --git a/src/util/struct_array.js b/src/util/struct_array.js index 21f01770768..9bed2979a7d 100644 --- a/src/util/struct_array.js +++ b/src/util/struct_array.js @@ -217,7 +217,7 @@ function createLayout( return { name: member.name, type: member.type, - components: components, + components, offset: memberOffset, }; }); diff --git a/src/util/util.js b/src/util/util.js index ee2f99276d6..b4274a30eed 100644 --- a/src/util/util.js +++ b/src/util/util.js @@ -204,7 +204,7 @@ export function uuid(): string { function b(a) { return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : //$FlowFixMe: Flow doesn't like the implied array literal conversion here - ([1e7] + -[1e3] + -4e3 + -8e3 + -1e11).replace(/[018]/g, b); + ([1e7] + -[1e3] + -4e3 + -8e3 + -1e11).replace(/[018]/g, b); } return b(); } diff --git a/src/util/web_worker.js b/src/util/web_worker.js index 33b9d3489e1..3b70934c628 100644 --- a/src/util/web_worker.js +++ b/src/util/web_worker.js @@ -57,7 +57,7 @@ class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface { setImmediate(() => { try { for (const listener of this.postListeners) { - listener({data: data, target: this.target}); + listener({data, target: this.target}); } } catch (e) { console.error(e); diff --git a/src/util/web_worker_transfer.js b/src/util/web_worker_transfer.js index 44888e0d2a4..91fbbda80d1 100644 --- a/src/util/web_worker_transfer.js +++ b/src/util/web_worker_transfer.js @@ -71,7 +71,7 @@ register('Object', Object); type SerializedGrid = { buffer: ArrayBuffer }; -Grid.serialize = function serializeGrid(grid: Grid, transferables?: Array): SerializedGrid { +Grid.serialize = function serialize(grid: Grid, transferables?: Array): SerializedGrid { const buffer = grid.toArrayBuffer(); if (transferables) { transferables.push(buffer); @@ -79,7 +79,7 @@ Grid.serialize = function serializeGrid(grid: Grid, transferables?: Array { diff --git a/test/suite_implementation.js b/test/suite_implementation.js index 9e6a7a0a31e..c11d28faaf7 100644 --- a/test/suite_implementation.js +++ b/test/suite_implementation.js @@ -20,11 +20,11 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im callback(new Error('Test timed out')); }, options.timeout || 20000); - function callback() { + function callback(...args) { if (!wasCallbackCalled) { clearTimeout(timeout); wasCallbackCalled = true; - _callback.apply(this, arguments); + _callback(...args); } } @@ -43,8 +43,8 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im config.REQUIRE_ACCESS_TOKEN = false; const map = new Map({ - container: container, - style: style, + container, + style, classes: options.classes, interactive: false, attributionControl: false, @@ -158,7 +158,7 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im applyOperations(map, operations.slice(1), callback); } else { - map[operation[0]].apply(map, operation.slice(1)); + map[operation[0]](...operation.slice(1)); applyOperations(map, operations.slice(1), callback); } } diff --git a/test/unit/data/dem_data.test.js b/test/unit/data/dem_data.test.js index 72f3d211cf9..484691307f3 100644 --- a/test/unit/data/dem_data.test.js +++ b/test/unit/data/dem_data.test.js @@ -8,7 +8,7 @@ function createMockImage(height, width) { for (let i = 0; i < pixels.length; i++) { pixels[i] = (i + 1) % 4 === 0 ? 1 : Math.floor(Math.random() * 256); } - return new RGBAImage({height: height, width: width}, pixels); + return new RGBAImage({height, width}, pixels); } @@ -26,8 +26,8 @@ test('DEMData', (t) => { t.test('setters and getters throw for invalid data coordinates', (t) => { const dem = new DEMData(0, {width: 4, height: 4, data: new Uint8ClampedArray(4 * 4 * 4)}); - t.throws(()=>dem.set(20, 0, 255), 'out of range source coordinates for DEM data', 'detects and throws on invalid input'); - t.throws(()=>dem.set(10, 20, 255), 'out of range source coordinates for DEM data', 'detects and throws on invalid input'); + t.throws(() => dem.set(20, 0, 255), 'out of range source coordinates for DEM data', 'detects and throws on invalid input'); + t.throws(() => dem.set(10, 20, 255), 'out of range source coordinates for DEM data', 'detects and throws on invalid input'); t.end(); }); @@ -50,7 +50,7 @@ test('DEMData#backfillBorder', (t) => { const dem0 = new DEMData(0, createMockImage(4, 4)); const dem1 = new DEMData(1, createMockImage(4, 4)); - t.test('border region is initially populated with neighboring data', (t)=>{ + t.test('border region is initially populated with neighboring data', (t) => { let nonempty = true; for (let x = -1; x < 5; x++) { for (let y = -1; y < 5; y++) { @@ -93,7 +93,7 @@ test('DEMData#backfillBorder', (t) => { t.end(); }); - t.test('backfillBorder correctly populates borders with neighboring data', (t)=>{ + t.test('backfillBorder correctly populates borders with neighboring data', (t) => { dem0.backfillBorder(dem1, -1, 0); for (let y = 0; y < 4; y++) { // dx = -1, dy = 0, so the left edge of dem1 should equal the right edge of dem0 @@ -132,7 +132,7 @@ test('DEMData#backfillBorder', (t) => { t.end(); }); - t.test('DEMData is correctly serialized', (t)=>{ + t.test('DEMData is correctly serialized', (t) => { const imageData0 = createMockImage(4, 4); const dem0 = new DEMData(0, imageData0); const serialized = serialize(dem0); @@ -153,7 +153,7 @@ test('DEMData#backfillBorder', (t) => { t.end(); }); - t.test('DEMData is correctly deserialized', (t)=>{ + t.test('DEMData is correctly deserialized', (t) => { const imageData0 = createMockImage(4, 4); const dem0 = new DEMData(0, imageData0); const serialized = serialize(dem0); diff --git a/test/unit/data/symbol_bucket.test.js b/test/unit/data/symbol_bucket.test.js index 6ba28cb31e5..3f957fbba0e 100644 --- a/test/unit/data/symbol_bucket.test.js +++ b/test/unit/data/symbol_bucket.test.js @@ -41,7 +41,7 @@ function bucketSetup() { return new SymbolBucket({ overscaling: 1, zoom: 0, - collisionBoxArray: collisionBoxArray, + collisionBoxArray, layers: [layer] }); } diff --git a/test/unit/source/canvas_source.test.js b/test/unit/source/canvas_source.test.js index 3082119a459..7bd42b20481 100644 --- a/test/unit/source/canvas_source.test.js +++ b/test/unit/source/canvas_source.test.js @@ -17,7 +17,7 @@ function createSource(options) { coordinates: [[0, 0], [1, 0], [1, 1], [0, 1]], }, options); - const source = new CanvasSource('id', options, { send: function() {} }, options.eventedParent); + const source = new CanvasSource('id', options, { send() {} }, options.eventedParent); source.canvas = c; diff --git a/test/unit/source/geojson_source.test.js b/test/unit/source/geojson_source.test.js index 49018016a46..a42989da336 100644 --- a/test/unit/source/geojson_source.test.js +++ b/test/unit/source/geojson_source.test.js @@ -7,7 +7,7 @@ import LngLat from '../../../src/geo/lng_lat'; import { extend } from '../../../src/util/util'; const mockDispatcher = { - send: function () {} + send () {} }; const hawkHill = { @@ -49,7 +49,7 @@ test('GeoJSONSource#setData', (t) => { opts = opts || {}; opts = extend(opts, { data: {} }); return new GeoJSONSource('id', opts, { - send: function (type, data, callback) { + send (type, data, callback) { if (callback) { return setTimeout(callback, 0); } @@ -100,13 +100,13 @@ test('GeoJSONSource#setData', (t) => { test('GeoJSONSource#onRemove', (t) => { t.test('broadcasts "removeSource" event', (t) => { const source = new GeoJSONSource('id', {data: {}}, { - send: function (type, data, callback) { + send (type, data, callback) { t.false(callback); t.equal(type, 'removeSource'); t.deepEqual(data, { type: 'geojson', source: 'id' }); t.end(); }, - broadcast: function() { + broadcast() { // Ignore } }); @@ -126,7 +126,7 @@ test('GeoJSONSource#update', (t) => { t.test('sends initial loadData request to dispatcher', (t) => { const mockDispatcher = { - send: function(message) { + send(message) { t.equal(message, 'geojson.loadData'); t.end(); } @@ -138,7 +138,7 @@ test('GeoJSONSource#update', (t) => { t.test('forwards geojson-vt options with worker request', (t) => { const mockDispatcher = { - send: function(message, params) { + send(message, params) { t.equal(message, 'geojson.loadData'); t.deepEqual(params.geojsonVtOptions, { extent: 8192, @@ -174,7 +174,7 @@ test('GeoJSONSource#update', (t) => { }); t.test('fires event when metadata loads', (t) => { const mockDispatcher = { - send: function(message, args, callback) { + send(message, args, callback) { if (callback) { setTimeout(callback, 0); } @@ -192,7 +192,7 @@ test('GeoJSONSource#update', (t) => { t.test('fires "error"', (t) => { const mockDispatcher = { - send: function(message, args, callback) { + send(message, args, callback) { if (callback) { setTimeout(callback.bind(null, 'error'), 0); } @@ -212,7 +212,7 @@ test('GeoJSONSource#update', (t) => { t.test('sends loadData request to dispatcher after data update', (t) => { let expectedLoadDataCalls = 2; const mockDispatcher = { - send: function(message, args, callback) { + send(message, args, callback) { if (message === 'geojson.loadData' && --expectedLoadDataCalls <= 0) { t.end(); } diff --git a/test/unit/source/geojson_worker_source.test.js b/test/unit/source/geojson_worker_source.test.js index eda04e2d39f..b3ad73b247e 100644 --- a/test/unit/source/geojson_worker_source.test.js +++ b/test/unit/source/geojson_worker_source.test.js @@ -149,7 +149,7 @@ test('resourceTiming', (t) => { measures[name].push({ duration: marks[end] - marks[start], entryType: 'measure', - name: name, + name, startTime: marks[start] }); return null; diff --git a/test/unit/source/image_source.test.js b/test/unit/source/image_source.test.js index 27cbaf780d4..5031473553e 100644 --- a/test/unit/source/image_source.test.js +++ b/test/unit/source/image_source.test.js @@ -12,7 +12,7 @@ function createSource(options) { coordinates: [[0, 0], [1, 0], [1, 1], [0, 1]] }, options); - const source = new ImageSource('id', options, { send: function() {} }, options.eventedParent); + const source = new ImageSource('id', options, { send() {} }, options.eventedParent); return source; } diff --git a/test/unit/source/query_features.test.js b/test/unit/source/query_features.test.js index 93c32a09198..7d3e4abecfc 100644 --- a/test/unit/source/query_features.test.js +++ b/test/unit/source/query_features.test.js @@ -8,7 +8,7 @@ import Transform from '../../../src/geo/transform.js'; test('QueryFeatures#rendered', (t) => { t.test('returns empty object if source returns no tiles', (t) => { - const mockSourceCache = { tilesIn: function () { return []; } }; + const mockSourceCache = { tilesIn () { return []; } }; const transform = new Transform(); const result = queryRenderedFeatures(mockSourceCache, undefined, {}, undefined, transform); t.deepEqual(result, []); @@ -24,7 +24,7 @@ test('QueryFeatures#source', (t) => { type: 'geojson', data: { type: 'FeatureCollection', features: [] } }, { - send: function (type, params, callback) { return callback(); } + send (type, params, callback) { return callback(); } }); const result = querySourceFeatures(sourceCache, {}); t.deepEqual(result, []); diff --git a/test/unit/source/raster_dem_tile_source.test.js b/test/unit/source/raster_dem_tile_source.test.js index 13038efb3e8..1cc5ecef6fd 100644 --- a/test/unit/source/raster_dem_tile_source.test.js +++ b/test/unit/source/raster_dem_tile_source.test.js @@ -4,7 +4,7 @@ import window from '../../../src/util/window'; import { OverscaledTileID } from '../../../src/source/tile_id'; function createSource(options, transformCallback) { - const source = new RasterDEMTileSource('id', options, { send: function() {} }, options.eventedParent); + const source = new RasterDEMTileSource('id', options, { send() {} }, options.eventedParent); source.onAdd({ transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, _getMapId: () => 1, @@ -65,8 +65,8 @@ test('RasterTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); @@ -92,8 +92,8 @@ test('RasterTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); @@ -128,8 +128,8 @@ test('RasterTileSource', (t) => { const tile = { tileID: new OverscaledTileID(5, 0, 5, 31, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); diff --git a/test/unit/source/raster_dem_tile_worker_source.test.js b/test/unit/source/raster_dem_tile_worker_source.test.js index f4892fe645e..02be47f4ccd 100644 --- a/test/unit/source/raster_dem_tile_worker_source.test.js +++ b/test/unit/source/raster_dem_tile_worker_source.test.js @@ -12,7 +12,7 @@ test('loadTile', (t) => { uid: 0, rawImageData: {data: new Uint8ClampedArray(256), height: 8, width: 8}, dim: 256 - }, (err, data)=>{ + }, (err, data) => { if (err) t.fail(); t.deepEqual(Object.keys(source.loaded), [0]); t.ok(data instanceof DEMData, 'returns DEM data'); diff --git a/test/unit/source/raster_tile_source.test.js b/test/unit/source/raster_tile_source.test.js index a6839395f38..f801c659f6d 100644 --- a/test/unit/source/raster_tile_source.test.js +++ b/test/unit/source/raster_tile_source.test.js @@ -4,7 +4,7 @@ import window from '../../../src/util/window'; import { OverscaledTileID } from '../../../src/source/tile_id'; function createSource(options, transformCallback) { - const source = new RasterTileSource('id', options, { send: function() {} }, options.eventedParent); + const source = new RasterTileSource('id', options, { send() {} }, options.eventedParent); source.onAdd({ transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, _getMapId: () => 1, @@ -49,7 +49,7 @@ test('RasterTileSource', (t) => { t.end(); }); - t.test('respects TileJSON.bounds', (t)=>{ + t.test('respects TileJSON.bounds', (t) => { const source = createSource({ minzoom: 0, maxzoom: 22, @@ -57,7 +57,7 @@ test('RasterTileSource', (t) => { tiles: ["http://example.com/{z}/{x}/{y}.png"], bounds: [-47, -7, -45, -5] }); - source.on('data', (e)=>{ + source.on('data', (e) => { if (e.sourceDataType === 'metadata') { t.false(source.hasTile(new OverscaledTileID(8, 0, 8, 96, 132)), 'returns false for tiles outside bounds'); t.true(source.hasTile(new OverscaledTileID(8, 0, 8, 95, 132)), 'returns true for tiles inside bounds'); @@ -66,7 +66,7 @@ test('RasterTileSource', (t) => { }); }); - t.test('does not error on invalid bounds', (t)=>{ + t.test('does not error on invalid bounds', (t) => { const source = createSource({ minzoom: 0, maxzoom: 22, @@ -75,7 +75,7 @@ test('RasterTileSource', (t) => { bounds: [-47, -7, -45, 91] }); - source.on('data', (e)=>{ + source.on('data', (e) => { if (e.sourceDataType === 'metadata') { t.deepEqual(source.tileBounds.bounds, {_sw:{lng: -47, lat: -7}, _ne:{lng: -45, lat: 90}}, 'converts invalid bounds to closest valid bounds'); t.end(); @@ -83,7 +83,7 @@ test('RasterTileSource', (t) => { }); }); - t.test('respects TileJSON.bounds when loaded from TileJSON', (t)=>{ + t.test('respects TileJSON.bounds when loaded from TileJSON', (t) => { window.server.respondWith('/source.json', JSON.stringify({ minzoom: 0, maxzoom: 22, @@ -118,8 +118,8 @@ test('RasterTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); t.ok(transformSpy.calledOnce); diff --git a/test/unit/source/source_cache.test.js b/test/unit/source/source_cache.test.js index ff0f43e87b6..d49b050642f 100644 --- a/test/unit/source/source_cache.test.js +++ b/test/unit/source/source_cache.test.js @@ -68,7 +68,7 @@ test('SourceCache#addTile', (t) => { t.test('loads tile when uncached', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const sourceCache = createSourceCache({ - loadTile: function(tile) { + loadTile(tile) { t.deepEqual(tile.tileID, tileID); t.equal(tile.uses, 0); t.end(); @@ -93,7 +93,7 @@ test('SourceCache#addTile', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); let updateFeaturesSpy; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { sourceCache.on('data', () => { t.equal(updateFeaturesSpy.getCalls().length, 1); t.end(); @@ -113,7 +113,7 @@ test('SourceCache#addTile', (t) => { add = 0; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; load++; callback(); @@ -138,7 +138,7 @@ test('SourceCache#addTile', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; callback(); } @@ -209,7 +209,7 @@ test('SourceCache#addTile', (t) => { add = 0; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; load++; callback(); @@ -234,7 +234,7 @@ test('SourceCache#removeTile', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const sourceCache = createSourceCache({}); sourceCache._addTile(tileID); - sourceCache.on('data', ()=> { + sourceCache.on('data', () => { sourceCache._removeTile(tileID.key); t.notOk(sourceCache._tiles[tileID.key]); t.end(); @@ -244,10 +244,10 @@ test('SourceCache#removeTile', (t) => { t.test('caches (does not unload) loaded tile', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const sourceCache = createSourceCache({ - loadTile: function(tile) { + loadTile(tile) { tile.state = 'loaded'; }, - unloadTile: function() { + unloadTile() { t.fail(); } }); @@ -269,11 +269,11 @@ test('SourceCache#removeTile', (t) => { unload = 0; const sourceCache = createSourceCache({ - abortTile: function(tile) { + abortTile(tile) { t.deepEqual(tile.tileID, tileID); abort++; }, - unloadTile: function(tile) { + unloadTile(tile) { t.deepEqual(tile.tileID, tileID); unload++; } @@ -292,7 +292,7 @@ test('SourceCache#removeTile', (t) => { const tileID = new OverscaledTileID(0, 0, 0, 0, 0); const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.added = t.notOk(); sourceCache._removeTile(tileID.key); callback(); @@ -317,14 +317,14 @@ test('SourceCache / Source lifecycle', (t) => { }); t.test('forward load event', (t) => { - const sourceCache = createSourceCache({}).on('data', (e)=>{ + const sourceCache = createSourceCache({}).on('data', (e) => { if (e.sourceDataType === 'metadata') t.end(); }); sourceCache.onAdd(); }); t.test('forward change event', (t) => { - const sourceCache = createSourceCache().on('data', (e)=>{ + const sourceCache = createSourceCache().on('data', (e) => { if (e.sourceDataType === 'metadata') t.end(); }); sourceCache.onAdd(); @@ -354,19 +354,19 @@ test('SourceCache / Source lifecycle', (t) => { sourceCache.onAdd(); }); - t.test('loaded() true after tile error', (t)=>{ + t.test('loaded() true after tile error', (t) => { const transform = new Transform(); transform.resize(511, 511); transform.zoom = 0; const sourceCache = createSourceCache({ - loadTile: function (tile, callback) { + loadTile (tile, callback) { callback("error"); } - }).on('data', (e)=>{ + }).on('data', (e) => { if (e.dataType === 'source' && e.sourceDataType === 'metadata') { sourceCache.update(transform); } - }).on('error', ()=>{ + }).on('error', () => { t.true(sourceCache.loaded()); t.end(); }); @@ -384,7 +384,7 @@ test('SourceCache / Source lifecycle', (t) => { t.plan(expected.length); const sourceCache = createSourceCache({ - loadTile: function (tile, callback) { + loadTile (tile, callback) { t.equal(tile.tileID.key, expected.shift()); tile.loaded = true; callback(); @@ -407,7 +407,7 @@ test('SourceCache / Source lifecycle', (t) => { transform.zoom = 1; const sourceCache = createSourceCache({ - loadTile: function (tile, callback) { + loadTile (tile, callback) { // this transform will try to load the four tiles at z1 and a single z0 tile // we only expect _reloadTile to be called with the 'loaded' z0 tile tile.state = tile.tileID.canonical.z === 1 ? 'errored' : 'loaded'; @@ -493,7 +493,7 @@ test('SourceCache#update', (t) => { transform.zoom = 0; const sourceCache = createSourceCache({ - loadTile: (tile, callback)=>{ + loadTile: (tile, callback) => { tile.state = 'loaded'; callback(null); } @@ -528,7 +528,7 @@ test('SourceCache#update', (t) => { transform.zoom = 0; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = (tile.tileID.key === new OverscaledTileID(0, 0, 0, 0, 0).key) ? 'loaded' : 'loading'; callback(); } @@ -562,7 +562,7 @@ test('SourceCache#update', (t) => { transform.center = new LngLat(360, 0); const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = (tile.tileID.key === new OverscaledTileID(0, 1, 0, 0, 0).key) ? 'loaded' : 'loading'; callback(); } @@ -595,7 +595,7 @@ test('SourceCache#update', (t) => { transform.zoom = 2; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.timeAdded = Infinity; tile.state = 'loaded'; tile.registerFadeDuration(100); @@ -631,7 +631,7 @@ test('SourceCache#update', (t) => { transform.zoom = 0; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.timeAdded = Infinity; tile.state = 'loaded'; tile.registerFadeDuration(100); @@ -666,7 +666,7 @@ test('SourceCache#update', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.timeAdded = Date.now(); tile.state = 'loaded'; callback(); @@ -702,7 +702,7 @@ test('SourceCache#update', (t) => { t.stub(browser, 'now').callsFake(() => time); const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.timeAdded = browser.now(); tile.state = 'loaded'; tile.fadeEndTime = browser.now() + fadeTime; @@ -748,7 +748,7 @@ test('SourceCache#update', (t) => { const sourceCache = createSourceCache({ reparseOverscaled: true, - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = tile.tileID.overscaledZ === 16 ? 'loaded' : 'loading'; callback(); } @@ -808,12 +808,12 @@ test('SourceCache#update', (t) => { t.end(); }); -test('SourceCache#_updateRetainedTiles', (t)=> { +test('SourceCache#_updateRetainedTiles', (t) => { - t.test('loads ideal tiles if they exist', (t)=>{ + t.test('loads ideal tiles if they exist', (t) => { const stateCache = {}; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = stateCache[tile.tileID.key] || 'errored'; callback(); } @@ -830,7 +830,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.test('retains all loaded children ', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'errored'; callback(); } @@ -863,15 +863,15 @@ test('SourceCache#_updateRetainedTiles', (t)=> { new OverscaledTileID(1, 0, 1, 0, 0), new OverscaledTileID(2, 0, 2, 0, 1), idealTile - ].concat(loadedChildren).map(t=> String(t.key))); + ].concat(loadedChildren).map(t => String(t.key))); t.end(); }); - t.test('adds parent tile if ideal tile errors and no child tiles are loaded', (t)=>{ + t.test('adds parent tile if ideal tile errors and no child tiles are loaded', (t) => { const stateCache = {}; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = stateCache[tile.tileID.key] || 'errored'; callback(); } @@ -883,7 +883,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const idealTiles = [new OverscaledTileID(1, 0, 1, 1, 1), new OverscaledTileID(1, 0, 1, 0, 1)]; stateCache[idealTiles[0].key] = 'loaded'; const retained = sourceCache._updateRetainedTiles(idealTiles, 1); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // when child tiles aren't found, check and request parent tile new OverscaledTileID(0, 0, 0, 0, 0) ]); @@ -903,9 +903,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('don\'t use wrong parent tile', (t)=> { + t.test('don\'t use wrong parent tile', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'errored'; callback(); } @@ -922,13 +922,13 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const getTileSpy = t.spy(sourceCache, 'getTile'); sourceCache._updateRetainedTiles([idealTile], 2); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // parents new OverscaledTileID(1, 0, 1, 0, 0), // not found new OverscaledTileID(0, 0, 0, 0, 0) // not found ]); - t.deepEqual(addTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(addTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // ideal tile new OverscaledTileID(2, 0, 2, 0, 0), // parents @@ -942,9 +942,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { }); - t.test('use parent tile when ideal tile is not loaded', (t)=>{ + t.test('use parent tile when ideal tile is not loaded', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); } @@ -960,7 +960,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const retained = sourceCache._updateRetainedTiles([idealTile], 1); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // parents new OverscaledTileID(0, 0, 0, 0, 0), // found ]); @@ -992,9 +992,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('don\'t load parent if all immediate children are loaded', (t)=>{ + t.test('don\'t load parent if all immediate children are loaded', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); } @@ -1002,7 +1002,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const idealTile = new OverscaledTileID(2, 0, 2, 1, 1); const loadedTiles = [new OverscaledTileID(3, 0, 3, 2, 2), new OverscaledTileID(3, 0, 3, 3, 2), new OverscaledTileID(3, 0, 3, 2, 3), new OverscaledTileID(3, 0, 3, 3, 3)]; - loadedTiles.forEach((t)=>{ + loadedTiles.forEach((t) => { sourceCache._tiles[t.key] = new Tile(t); sourceCache._tiles[t.key].state = 'loaded'; }); @@ -1011,28 +1011,28 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const retained = sourceCache._updateRetainedTiles([idealTile], 2); // parent tile isn't requested because all covering children are loaded t.deepEqual(getTileSpy.getCalls(), []); - t.deepEqual(Object.keys(retained), [idealTile.key].concat(loadedTiles.map(t=>t.key))); + t.deepEqual(Object.keys(retained), [idealTile.key].concat(loadedTiles.map(t => t.key))); t.end(); }); - t.test('prefer loaded child tiles to parent tiles', (t)=>{ + t.test('prefer loaded child tiles to parent tiles', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); } }); const idealTile = new OverscaledTileID(1, 0, 1, 0, 0); const loadedTiles = [new OverscaledTileID(0, 0, 0, 0, 0), new OverscaledTileID(2, 0, 2, 0, 0)]; - loadedTiles.forEach((t)=>{ + loadedTiles.forEach((t) => { sourceCache._tiles[t.key] = new Tile(t); sourceCache._tiles[t.key].state = 'loaded'; }); const getTileSpy = t.spy(sourceCache, 'getTile'); let retained = sourceCache._updateRetainedTiles([idealTile], 1); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // parent new OverscaledTileID(0, 0, 0, 0, 0) ]); @@ -1063,9 +1063,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('don\'t use tiles below minzoom', (t)=>{ + t.test('don\'t use tiles below minzoom', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); }, @@ -1073,7 +1073,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { }); const idealTile = new OverscaledTileID(2, 0, 2, 0, 0); const loadedTiles = [new OverscaledTileID(1, 0, 1, 0, 0)]; - loadedTiles.forEach((t)=>{ + loadedTiles.forEach((t) => { sourceCache._tiles[t.key] = new Tile(t); sourceCache._tiles[t.key].state = 'loaded'; }); @@ -1081,7 +1081,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const getTileSpy = t.spy(sourceCache, 'getTile'); const retained = sourceCache._updateRetainedTiles([idealTile], 2); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [], 'doesn\'t request parent tiles bc they are lower than minzoom'); + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [], 'doesn\'t request parent tiles bc they are lower than minzoom'); t.deepEqual(retained, { // ideal tile id (2, 0, 0) @@ -1092,9 +1092,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('use overzoomed tile above maxzoom', (t)=>{ + t.test('use overzoomed tile above maxzoom', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); }, @@ -1105,7 +1105,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const getTileSpy = t.spy(sourceCache, 'getTile'); const retained = sourceCache._updateRetainedTiles([idealTile], 2); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // overzoomed child new OverscaledTileID(3, 0, 2, 0, 0), // parents @@ -1122,9 +1122,9 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('dont\'t ascend multiple times if a tile is not found', (t)=>{ + t.test('dont\'t ascend multiple times if a tile is not found', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); } @@ -1133,7 +1133,7 @@ test('SourceCache#_updateRetainedTiles', (t)=> { const getTileSpy = t.spy(sourceCache, 'getTile'); sourceCache._updateRetainedTiles(idealTiles, 8); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // parent tile ascent new OverscaledTileID(7, 0, 7, 0, 0), new OverscaledTileID(6, 0, 6, 0, 0), @@ -1148,13 +1148,13 @@ test('SourceCache#_updateRetainedTiles', (t)=> { getTileSpy.resetHistory(); const loadedTiles = [new OverscaledTileID(4, 0, 4, 0, 0)]; - loadedTiles.forEach((t)=>{ + loadedTiles.forEach((t) => { sourceCache._tiles[t.key] = new Tile(t); sourceCache._tiles[t.key].state = 'loaded'; }); sourceCache._updateRetainedTiles(idealTiles, 8); - t.deepEqual(getTileSpy.getCalls().map((c)=>{ return c.args[0]; }), [ + t.deepEqual(getTileSpy.getCalls().map((c) => { return c.args[0]; }), [ // parent tile ascent new OverscaledTileID(7, 0, 7, 0, 0), new OverscaledTileID(6, 0, 6, 0, 0), @@ -1166,16 +1166,16 @@ test('SourceCache#_updateRetainedTiles', (t)=> { t.end(); }); - t.test('adds correct leaded parent tiles for overzoomed tiles', (t)=>{ + t.test('adds correct leaded parent tiles for overzoomed tiles', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loading'; callback(); }, maxzoom: 7 }); const loadedTiles = [new OverscaledTileID(7, 0, 7, 0, 0), new OverscaledTileID(7, 0, 7, 1, 0)]; - loadedTiles.forEach((t)=>{ + loadedTiles.forEach((t) => { sourceCache._tiles[t.key] = new Tile(t); sourceCache._tiles[t.key].state = 'loaded'; }); @@ -1203,11 +1203,11 @@ test('SourceCache#clearTiles', (t) => { unload = 0; const sourceCache = createSourceCache({ - abortTile: function(tile) { + abortTile(tile) { t.deepEqual(tile.tileID, coord); abort++; }, - unloadTile: function(tile) { + unloadTile(tile) { t.deepEqual(tile.tileID, coord); unload++; } @@ -1244,7 +1244,7 @@ test('SourceCache#tilesIn', (t) => { transform.zoom = 1; const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; tile.additionalRadius = 0; callback(); @@ -1288,7 +1288,7 @@ test('SourceCache#tilesIn', (t) => { t.test('reparsed overscaled tiles', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; tile.additionalRadius = 0; callback(); @@ -1339,7 +1339,7 @@ test('SourceCache#tilesIn', (t) => { t.test('overscaled tiles', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { tile.state = 'loaded'; callback(); }, + loadTile(tile, callback) { tile.state = 'loaded'; callback(); }, reparseOverscaled: false, minzoom: 1, maxzoom: 1, @@ -1365,7 +1365,7 @@ test('SourceCache#tilesIn', (t) => { test('SourceCache#loaded (no errors)', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile, callback) { + loadTile(tile, callback) { tile.state = 'loaded'; callback(); } @@ -1385,7 +1385,7 @@ test('SourceCache#loaded (no errors)', (t) => { test('SourceCache#loaded (with errors)', (t) => { const sourceCache = createSourceCache({ - loadTile: function(tile) { + loadTile(tile) { tile.state = 'errored'; } }); @@ -1438,7 +1438,7 @@ test('SourceCache#findLoadedParent', (t) => { const tile = { tileID: new OverscaledTileID(1, 0, 1, 0, 0), - hasData: function() { return true; } + hasData() { return true; } }; sourceCache._tiles[tile.tileID.key] = tile; diff --git a/test/unit/source/tile.test.js b/test/unit/source/tile.test.js index 4834455cbfa..28b9bfe62d4 100644 --- a/test/unit/source/tile.test.js +++ b/test/unit/source/tile.test.js @@ -136,7 +136,7 @@ test('querySourceFeatures', (t) => { test('Tile#setMask', (t) => { - t.test('simple mask', (t)=>{ + t.test('simple mask', (t) => { const tile = new Tile(0, 0, 0); const context = new Context(require('gl')(10, 10)); const a = new OverscaledTileID(1, 0, 1, 0, 0); @@ -174,8 +174,8 @@ test('Tile#setMask', (t) => { }); -test('Tile#isLessThan', (t)=>{ - t.test('correctly sorts tiles', (t)=>{ +test('Tile#isLessThan', (t) => { + t.test('correctly sorts tiles', (t) => { const tiles = [ new OverscaledTileID(9, 0, 9, 146, 195), new OverscaledTileID(9, 0, 9, 147, 195), diff --git a/test/unit/source/tile_mask.test.js b/test/unit/source/tile_mask.test.js index a2b91100a18..8d58dc26366 100644 --- a/test/unit/source/tile_mask.test.js +++ b/test/unit/source/tile_mask.test.js @@ -34,18 +34,18 @@ test('computeTileMasks', (t) => { const renderables3 = [new Tile(1, 0, 0), new Tile(1, 1, 1)]; updateTileMasks(renderables3); - t.deepEqual(renderables3.map((r)=>{ return Object.keys(r.mask); }), [[new OverscaledTileID(0, 0, 0, 0, 0).key], [new OverscaledTileID(0, 0, 0, 0, 0).key]]); + t.deepEqual(renderables3.map((r) => { return Object.keys(r.mask); }), [[new OverscaledTileID(0, 0, 0, 0, 0).key], [new OverscaledTileID(0, 0, 0, 0, 0).key]]); const renderables4 = [new Tile(1, 0, 0), new Tile(2, 2, 3)]; updateTileMasks(renderables4); - t.deepEqual(renderables4.map((r)=>{ return Object.keys(r.mask); }), [[new OverscaledTileID(0, 0, 0, 0, 0).key], [new OverscaledTileID(0, 0, 0, 0, 0).key]]); + t.deepEqual(renderables4.map((r) => { return Object.keys(r.mask); }), [[new OverscaledTileID(0, 0, 0, 0, 0).key], [new OverscaledTileID(0, 0, 0, 0, 0).key]]); t.end(); }); t.test('parents with all four children', (t) => { const renderables = [new Tile(0, 0, 0), new Tile(1, 0, 0), new Tile(1, 0, 1), new Tile(1, 1, 0), new Tile(1, 1, 1)]; updateTileMasks(renderables); - t.deepEqual(renderables.map((r)=>{ return Object.keys(r.mask); }), [ + t.deepEqual(renderables.map((r) => { return Object.keys(r.mask); }), [ // empty mask -- i.e. don't draw anything because child tiles cover the whole parent tile [], [new OverscaledTileID(0, 0, 0, 0, 0).key], @@ -58,7 +58,7 @@ test('computeTileMasks', (t) => { t.test('parent and one child', (t) => { const renderables = [new Tile(0, 0, 0), new Tile(1, 0, 0)]; updateTileMasks(renderables); - t.deepEqual(renderables.map((r)=>{ return Object.keys(r.mask); }), [ + t.deepEqual(renderables.map((r) => { return Object.keys(r.mask); }), [ [ new OverscaledTileID(1, 0, 1, 1, 0).key, new OverscaledTileID(1, 0, 1, 0, 1).key, @@ -78,7 +78,7 @@ test('computeTileMasks', (t) => { new Tile(14, 4114, 5824), new Tile(14, 4114, 5825)]; updateTileMasks(renderables); - t.deepEqual(renderables.map((r)=>{ return Object.keys(r.mask); }), [ + t.deepEqual(renderables.map((r) => { return Object.keys(r.mask); }), [ [ new OverscaledTileID(1, 0, 1, 1, 1).key.toString(), new OverscaledTileID(2, 0, 2, 3, 0).key.toString(), @@ -102,10 +102,10 @@ test('computeTileMasks', (t) => { t.end(); }); - t.test('deep descendent masks', (t)=>{ + t.test('deep descendent masks', (t) => { const renderables = [ new Tile(0, 0, 0), new Tile(4, 4, 4)]; updateTileMasks(renderables); - t.deepEqual(renderables.map((r)=>{ return Object.keys(r.mask); }), [ + t.deepEqual(renderables.map((r) => { return Object.keys(r.mask); }), [ [ new OverscaledTileID(2, 0, 2, 0, 0).key.toString(), new OverscaledTileID(1, 0, 1, 1, 0).key.toString(), @@ -127,10 +127,10 @@ test('computeTileMasks', (t) => { t.end(); }); - t.test('wrapped tile masks', (t) =>{ + t.test('wrapped tile masks', (t) => { const renderables = [new Tile(0, 0, 0, 1), new Tile(1, 0, 0, 1), new Tile(2, 2, 2, 1), new Tile(3, 7, 7, 1), new Tile(3, 6, 6, 1)]; updateTileMasks(renderables); - t.deepEqual(renderables.map((r)=>{ return Object.keys(r.mask); }), [ + t.deepEqual(renderables.map((r) => { return Object.keys(r.mask); }), [ [ new OverscaledTileID(1, 0, 1, 1, 0).key.toString(), new OverscaledTileID(1, 0, 1, 0, 1).key.toString(), diff --git a/test/unit/source/vector_tile_source.test.js b/test/unit/source/vector_tile_source.test.js index 790c53cfea5..42a5bd920df 100644 --- a/test/unit/source/vector_tile_source.test.js +++ b/test/unit/source/vector_tile_source.test.js @@ -5,7 +5,7 @@ import window from '../../../src/util/window'; import { Evented } from '../../../src/util/evented'; function createSource(options, transformCallback) { - const source = new VectorTileSource('id', options, { send: function() {} }, options.eventedParent); + const source = new VectorTileSource('id', options, { send() {} }, options.eventedParent); source.onAdd({ transform: { showCollisionBoxes: false }, _getMapId: () => 1, @@ -84,7 +84,7 @@ test('VectorTileSource', (t) => { t.test('fires event with metadata property', (t) => { window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); const source = createSource({ url: "/source.json" }); - source.on('data', (e)=>{ + source.on('data', (e) => { if (e.sourceDataType === 'content') t.end(); }); window.server.respond(); @@ -142,7 +142,7 @@ test('VectorTileSource', (t) => { maxzoom: 10, attribution: "Mapbox", tiles: ["http://example.com/{z}/{x}/{y}.png"], - scheme: scheme + scheme }); source.dispatcher.send = function(type, params) { @@ -172,8 +172,8 @@ test('VectorTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); t.ok(transformSpy.calledOnce); @@ -202,11 +202,11 @@ test('VectorTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () { + loadVectorData () { this.state = 'loaded'; events.push('tileLoaded'); }, - setExpiryData: function() {} + setExpiryData() {} }; source.loadTile(tile, () => {}); t.equal(tile.state, 'loading'); @@ -218,7 +218,7 @@ test('VectorTileSource', (t) => { }); }); - t.test('respects TileJSON.bounds', (t)=>{ + t.test('respects TileJSON.bounds', (t) => { const source = createSource({ minzoom: 0, maxzoom: 22, @@ -226,7 +226,7 @@ test('VectorTileSource', (t) => { tiles: ["http://example.com/{z}/{x}/{y}.png"], bounds: [-47, -7, -45, -5] }); - source.on('data', (e)=>{ + source.on('data', (e) => { if (e.sourceDataType === 'metadata') { t.false(source.hasTile(new OverscaledTileID(8, 0, 8, 96, 132)), 'returns false for tiles outside bounds'); t.true(source.hasTile(new OverscaledTileID(8, 0, 8, 95, 132)), 'returns true for tiles inside bounds'); @@ -235,7 +235,7 @@ test('VectorTileSource', (t) => { }); }); - t.test('does not error on invalid bounds', (t)=>{ + t.test('does not error on invalid bounds', (t) => { const source = createSource({ minzoom: 0, maxzoom: 22, @@ -244,7 +244,7 @@ test('VectorTileSource', (t) => { bounds: [-47, -7, -45, 91] }); - source.on('data', (e)=>{ + source.on('data', (e) => { if (e.sourceDataType === 'metadata') { t.deepEqual(source.tileBounds.bounds, {_sw:{lng: -47, lat: -7}, _ne:{lng: -45, lat: 90}}, 'converts invalid bounds to closest valid bounds'); t.end(); @@ -252,7 +252,7 @@ test('VectorTileSource', (t) => { }); }); - t.test('respects TileJSON.bounds when loaded from TileJSON', (t)=>{ + t.test('respects TileJSON.bounds when loaded from TileJSON', (t) => { window.server.respondWith('/source.json', JSON.stringify({ minzoom: 0, maxzoom: 22, @@ -289,8 +289,8 @@ test('VectorTileSource', (t) => { const tile = { tileID: new OverscaledTileID(10, 0, 10, 5, 5), state: 'loading', - loadVectorData: function () {}, - setExpiryData: function() {} + loadVectorData () {}, + setExpiryData() {} }; source.loadTile(tile, () => {}); } diff --git a/test/unit/source/vector_tile_worker_source.test.js b/test/unit/source/vector_tile_worker_source.test.js index 3eae05e1292..3e3e87074e3 100644 --- a/test/unit/source/vector_tile_worker_source.test.js +++ b/test/unit/source/vector_tile_worker_source.test.js @@ -266,7 +266,7 @@ test('VectorTileWorkerSource provides resource timing information (fallback meth measures[name].push({ duration: marks[end] - marks[start], entryType: 'measure', - name: name, + name, startTime: marks[start] }); return null; diff --git a/test/unit/source/worker.test.js b/test/unit/source/worker.test.js index 1f1d3107c82..19196884e14 100644 --- a/test/unit/source/worker.test.js +++ b/test/unit/source/worker.test.js @@ -3,7 +3,7 @@ import Worker from '../../../src/source/worker'; import window from '../../../src/util/window'; const _self = { - addEventListener: function() {} + addEventListener() {} }; test('load tile', (t) => { diff --git a/test/unit/style-spec/feature_filter.test.js b/test/unit/style-spec/feature_filter.test.js index 918ed991d3e..d1624ca4487 100644 --- a/test/unit/style-spec/feature_filter.test.js +++ b/test/unit/style-spec/feature_filter.test.js @@ -374,7 +374,7 @@ function legacyFilterTests(t, filter) { }); t.test('in, large_multiple', (t) => { - const values = Array.apply(null, {length: 2000}).map(Number.call, Number); + const values = Array.from({length: 2000}).map(Number.call, Number); values.reverse(); const f = filter(['in', 'foo'].concat(values)); t.equal(f({zoom: 0}, {properties: {foo: 0}}), true); @@ -385,7 +385,7 @@ function legacyFilterTests(t, filter) { }); t.test('in, large_multiple, heterogeneous', (t) => { - const values = Array.apply(null, {length: 2000}).map(Number.call, Number); + const values = Array.from({length: 2000}).map(Number.call, Number); values.push('a'); values.unshift('b'); const f = filter(['in', 'foo'].concat(values)); @@ -455,7 +455,7 @@ function legacyFilterTests(t, filter) { }); t.test('!in, large_multiple', (t) => { - const f = filter(['!in', 'foo'].concat(Array.apply(null, {length: 2000}).map(Number.call, Number))); + const f = filter(['!in', 'foo'].concat(Array.from({length: 2000}).map(Number.call, Number))); t.equal(f({zoom: 0}, {properties: {foo: 0}}), false); t.equal(f({zoom: 0}, {properties: {foo: 1}}), false); t.equal(f({zoom: 0}, {properties: {foo: 1999}}), false); diff --git a/test/unit/style-spec/function.test.js b/test/unit/style-spec/function.test.js index b5d6799a482..fb7a9729ecb 100644 --- a/test/unit/style-spec/function.test.js +++ b/test/unit/style-spec/function.test.js @@ -158,7 +158,7 @@ test('exponential function', (t) => { ]; const f = createFunction({ type: 'exponential', - stops: stops + stops }, { type: 'number' }).evaluate; diff --git a/test/unit/style/style.test.js b/test/unit/style/style.test.js index 7d19a5d50a5..91e14ed76f1 100644 --- a/test/unit/style/style.test.js +++ b/test/unit/style/style.test.js @@ -903,7 +903,7 @@ test('Style#addLayer', (t) => { "coordinates": [ 0, 0] } }; - const layer = {id: 'inline-source-layer', type: 'circle', source: source }; + const layer = {id: 'inline-source-layer', type: 'circle', source }; style.addLayer(layer); t.deepEqual(layer.source, source); t.end(); @@ -1093,7 +1093,7 @@ test('Style#addLayer', (t) => { const layer = {id: 'c', type: 'background'}; style.on('style.load', () => { - style.on('error', (error)=>{ + style.on('error', (error) => { t.match(error.error, /does not exist on this map/); t.end(); }); @@ -1948,7 +1948,7 @@ test('Style#query*Features', (t) => { }); test('Style#addSourceType', (t) => { - const _types = { 'existing': function () {} }; + const _types = { 'existing' () {} }; t.stub(Style, 'getSourceType').callsFake(name => _types[name]); t.stub(Style, 'setSourceType').callsFake((name, create) => { diff --git a/test/unit/symbol/cross_tile_symbol_index.js b/test/unit/symbol/cross_tile_symbol_index.js index 659a02a6db9..bfe4685befd 100644 --- a/test/unit/symbol/cross_tile_symbol_index.js +++ b/test/unit/symbol/cross_tile_symbol_index.js @@ -10,20 +10,20 @@ function makeSymbolInstance(x, y, key) { return { anchorX: x, anchorY: y, - key: key + key }; } function makeTile(tileID, symbolInstances) { const bucket = { symbolInstances: { - get: function(i) { return symbolInstances[i]; }, + get(i) { return symbolInstances[i]; }, length: symbolInstances.length }, layerIds: ['test'] }; return { - tileID: tileID, + tileID, getBucket: () => bucket, latestFeatureIndex: {} }; diff --git a/test/unit/ui/camera.test.js b/test/unit/ui/camera.test.js index 9aa8db43679..816bc559942 100644 --- a/test/unit/ui/camera.test.js +++ b/test/unit/ui/camera.test.js @@ -151,7 +151,7 @@ test('camera', (t) => { t.end(); }); - t.test('emits pitch events, preserving eventData', (t)=>{ + t.test('emits pitch events, preserving eventData', (t) => { let started, pitched, ended; const eventData = { data: 'ok'}; @@ -889,19 +889,19 @@ test('camera', (t) => { t.end(); }); - t.test('does not throw when cameras current zoom is sufficiently greater than passed zoom option', (t)=>{ + t.test('does not throw when cameras current zoom is sufficiently greater than passed zoom option', (t) => { const camera = createCamera({zoom: 22, center:[0, 0]}); - t.doesNotThrow(()=>camera.flyTo({zoom:10, center:[0, 0]})); + t.doesNotThrow(() => camera.flyTo({zoom:10, center:[0, 0]})); t.end(); }); - t.test('does not throw when cameras current zoom is above maxzoom and an offset creates infinite zoom out factor', (t)=>{ + t.test('does not throw when cameras current zoom is above maxzoom and an offset creates infinite zoom out factor', (t) => { const transform = new Transform(0, 20.9999, true); transform.resize(512, 512); const camera = attachSimulateFrame(new Camera(transform, {})) .jumpTo({zoom: 21, center:[0, 0]}); camera._update = () => {}; - t.doesNotThrow(()=>camera.flyTo({zoom:7.5, center:[0, 0], offset:[0, 70]})); + t.doesNotThrow(() => camera.flyTo({zoom:7.5, center:[0, 0], offset:[0, 70]})); t.end(); }); diff --git a/test/unit/ui/control/logo.test.js b/test/unit/ui/control/logo.test.js index 1cee1a9e887..dc493588896 100644 --- a/test/unit/ui/control/logo.test.js +++ b/test/unit/ui/control/logo.test.js @@ -23,7 +23,7 @@ function createMap(t, logoPosition, logoRequired) { } function createSource(options, logoRequired) { - const source = new VectorTileSource('id', options, { send: function () {} }); + const source = new VectorTileSource('id', options, { send () {} }); source.onAdd({ transform: { angle: 0, pitch: 0, showCollisionBoxes: false }, _getMapId: () => 1 @@ -62,7 +62,7 @@ test('LogoControl is not displayed when the mapbox_logo property is false', (t) t.end(); }); }); -test('LogoControl is not added more than once', (t)=>{ +test('LogoControl is not added more than once', (t) => { const map = createMap(t); const source = createSource({ minzoom: 1, @@ -72,10 +72,10 @@ test('LogoControl is not added more than once', (t)=>{ "http://example.com/{z}/{x}/{y}.png" ] }); - map.on('load', ()=>{ + map.on('load', () => { t.equal(map.getContainer().querySelectorAll('.mapboxgl-ctrl-logo').length, 1, 'first LogoControl'); map.addSource('source2', source); - map.on('sourcedata', (e)=>{ + map.on('sourcedata', (e) => { if (e.isSourceLoaded && e.sourceId === 'source2' && e.sourceDataType === 'metadata') { t.equal(map.getContainer().querySelectorAll('.mapboxgl-ctrl-logo').length, 1, 'only one LogoControl is added with multiple sources'); t.end(); diff --git a/test/unit/ui/control/scale.test.js b/test/unit/ui/control/scale.test.js index b96a7295d3b..3fb503ff381 100644 --- a/test/unit/ui/control/scale.test.js +++ b/test/unit/ui/control/scale.test.js @@ -37,7 +37,7 @@ test('ScaleControl should change unit of distance after calling setUnit', (t) => test('ScaleControl should respect the maxWidth regardless of the unit and actual scale', (t) => { const map = createMap(t); const maxWidth = 100; - const scale = new ScaleControl({ maxWidth: maxWidth, unit: 'nautical' }); + const scale = new ScaleControl({ maxWidth, unit: 'nautical' }); const selector = '.mapboxgl-ctrl-bottom-left .mapboxgl-ctrl-scale'; map.addControl(scale); map.setZoom(12.5); diff --git a/test/unit/ui/hash.test.js b/test/unit/ui/hash.test.js index ddedf55a0e3..60c6253f9d5 100644 --- a/test/unit/ui/hash.test.js +++ b/test/unit/ui/hash.test.js @@ -14,7 +14,7 @@ test('hash', (t) => { const container = window.document.createElement('div'); Object.defineProperty(container, 'clientWidth', {value: 512}); Object.defineProperty(container, 'clientHeight', {value: 512}); - return globalCreateMap(t, {container: container}); + return globalCreateMap(t, {container}); } diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index f8edc784e28..5dedb4d5337 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -264,11 +264,11 @@ test('Map', (t) => { t.end(); }); - t.test('#is_Loaded', (t)=>{ + t.test('#is_Loaded', (t) => { t.test('Map#isSourceLoaded', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); map.on('load', () => { map.on('data', (e) => { @@ -284,7 +284,7 @@ test('Map', (t) => { t.test('Map#isStyleLoaded', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); t.equal(map.isStyleLoaded(), false, 'false before style has loaded'); map.on('load', () => { @@ -295,9 +295,9 @@ test('Map', (t) => { t.test('Map#areTilesLoaded', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); t.equal(map.areTilesLoaded(), true, 'returns true if there are no sources on the map'); - map.on('load', ()=>{ + map.on('load', () => { map.addSource('geojson', createStyleSource()); map.style.sourceCaches.geojson._tiles.fakeTile = new Tile(new OverscaledTileID(0, 0, 0, 0, 0)); @@ -313,7 +313,7 @@ test('Map', (t) => { t.test('#getStyle', (t) => { t.test('returns the style', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); map.on('load', () => { t.deepEqual(map.getStyle(), style); @@ -323,7 +323,7 @@ test('Map', (t) => { t.test('returns the style with added sources', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); map.on('load', () => { map.addSource('geojson', createStyleSource()); @@ -336,7 +336,7 @@ test('Map', (t) => { t.test('fires an error on checking if non-existant source is loaded', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); map.on('load', () => { map.on('error', ({ error }) => { @@ -349,7 +349,7 @@ test('Map', (t) => { t.test('returns the style with added layers', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); const layer = { id: 'background', type: 'background' @@ -366,7 +366,7 @@ test('Map', (t) => { t.test('returns the style with added source and layer', (t) => { const style = createStyle(); - const map = createMap(t, {style: style}); + const map = createMap(t, {style}); const source = createStyleSource(); const layer = { id: 'fill', @@ -387,7 +387,7 @@ test('Map', (t) => { t.test('creates a new Style if diff fails', (t) => { const style = createStyle(); - const map = createMap(t, { style: style }); + const map = createMap(t, { style }); t.stub(map.style, 'setState').callsFake(() => { throw new Error('Dummy error'); }); @@ -401,7 +401,7 @@ test('Map', (t) => { t.test('creates a new Style if diff option is false', (t) => { const style = createStyle(); - const map = createMap(t, { style: style }); + const map = createMap(t, { style }); t.stub(map.style, 'setState').callsFake(() => { t.fail(); }); @@ -807,7 +807,7 @@ test('Map', (t) => { const map = createMap(t); const control = { onRemove: t.spy(), - onAdd: function (_) { + onAdd (_) { return window.document.createElement('div'); } }; @@ -822,11 +822,11 @@ test('Map', (t) => { let onRemoveCalled = 0; let style; const control = { - onRemove: function(map) { + onRemove(map) { onRemoveCalled++; t.deepEqual(map.getStyle(), style); }, - onAdd: function (_) { + onAdd (_) { return window.document.createElement('div'); } }; @@ -844,7 +844,7 @@ test('Map', (t) => { t.test('#addControl', (t) => { const map = createMap(t); const control = { - onAdd: function(_) { + onAdd(_) { t.equal(map, _, 'addTo() called with map'); return window.document.createElement('div'); } @@ -870,10 +870,10 @@ test('Map', (t) => { t.test('#removeControl', (t) => { const map = createMap(t); const control = { - onAdd: function() { + onAdd() { return window.document.createElement('div'); }, - onRemove: function(_) { + onRemove(_) { t.equal(map, _, 'onRemove() called with map'); } }; @@ -1484,7 +1484,7 @@ test('Map', (t) => { }); let timer; - const map = createMap(t, { style: style }); + const map = createMap(t, { style }); map.on('render', () => { if (timer) clearTimeout(timer); timer = setTimeout(() => { diff --git a/test/unit/ui/marker.test.js b/test/unit/ui/marker.test.js index 97c11be7cd0..35fcc3e9791 100644 --- a/test/unit/ui/marker.test.js +++ b/test/unit/ui/marker.test.js @@ -11,7 +11,7 @@ function createMap(t) { const container = window.document.createElement('div'); Object.defineProperty(container, 'clientWidth', {value: 512}); Object.defineProperty(container, 'clientHeight', {value: 512}); - return globalCreateMap(t, {container: container}); + return globalCreateMap(t, {container}); } test('Marker uses a default marker element with an appropriate offset', (t) => { diff --git a/test/unit/ui/popup.test.js b/test/unit/ui/popup.test.js index b15e6fe3b61..d498d8f2e0a 100644 --- a/test/unit/ui/popup.test.js +++ b/test/unit/ui/popup.test.js @@ -14,7 +14,7 @@ function createMap(t, options) { const container = window.document.createElement('div'); Object.defineProperty(container, 'clientWidth', {value: options.width || containerWidth}); Object.defineProperty(container, 'clientHeight', {value: options.height || containerHeight}); - return globalCreateMap(t, { container: container }); + return globalCreateMap(t, { container }); } test('Popup#addTo adds a .mapboxgl-popup element', (t) => { @@ -335,7 +335,7 @@ test('Popup anchors as specified by the anchor option', (t) => { const map = createMap(t); t.stub(map, 'project').returns(new Point(0, 0)); - const popup = new Popup({anchor: anchor, offset: 10}) + const popup = new Popup({anchor, offset: 10}) .setLngLat([0, 0]) .setText('Test') .addTo(map); diff --git a/test/unit/util/actor.test.js b/test/unit/util/actor.test.js index 53e9b9900fb..ca0fc100864 100644 --- a/test/unit/util/actor.test.js +++ b/test/unit/util/actor.test.js @@ -39,10 +39,10 @@ test('Actor', (t) => { const worker = new WebWorker(); new Actor(worker, { - test: function () { t.end(); } + test () { t.end(); } }, 'map-1'); new Actor(worker, { - test: function () { + test () { t.fail(); t.end(); } @@ -53,10 +53,10 @@ test('Actor', (t) => { t.test('#remove unbinds event listener', (t) => { const actor = new Actor({ - addEventListener: function (type, callback, useCapture) { + addEventListener (type, callback, useCapture) { this._addEventListenerArgs = [type, callback, useCapture]; }, - removeEventListener: function (type, callback, useCapture) { + removeEventListener (type, callback, useCapture) { t.same([type, callback, useCapture], this._addEventListenerArgs, 'listener removed'); t.end(); } diff --git a/test/unit/util/dispatcher.test.js b/test/unit/util/dispatcher.test.js index eac16137f11..c0647877f48 100644 --- a/test/unit/util/dispatcher.test.js +++ b/test/unit/util/dispatcher.test.js @@ -9,10 +9,10 @@ test('Dispatcher', (t) => { const releaseCalled = []; const workerPool = { - acquire: function () { + acquire () { return workers; }, - release: function (id) { + release (id) { releaseCalled.push(id); } }; diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index 9a6679386cc..727dbf50426 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -361,13 +361,13 @@ test("mapbox", (t) => { prevLocalStorage = window.localStorage; window.localStorage = { data: {}, - setItem: function (id, val) { + setItem (id, val) { this.data[id] = String(val); }, - getItem: function (id) { + getItem (id) { return this.data.hasOwnProperty(id) ? this.data[id] : undefined; }, - removeItem: function (id) { + removeItem (id) { if (this.hasOwnProperty(id)) delete this[id]; } }; @@ -668,13 +668,13 @@ test("mapbox", (t) => { prevLocalStorage = window.localStorage; window.localStorage = { data: {}, - setItem: function (id, val) { + setItem (id, val) { this.data[id] = String(val); }, - getItem: function (id) { + getItem (id) { return this.data.hasOwnProperty(id) ? this.data[id] : undefined; }, - removeItem: function (id) { + removeItem (id) { if (this.hasOwnProperty(id)) delete this[id]; } }; @@ -831,7 +831,7 @@ test("mapbox", (t) => { t.test('POSTs distinct map.load for multiple maps', (t) => { event.postMapLoadEvent(mapboxTileURLs, 1); const now = +Date.now(); - withFixedDate(t, now, ()=> event.postMapLoadEvent(mapboxTileURLs, 2)); + withFixedDate(t, now, () => event.postMapLoadEvent(mapboxTileURLs, 2)); let req = window.server.requests[0]; req.respond(200); diff --git a/test/util.js b/test/util.js index a91729babaa..a57031da303 100644 --- a/test/util.js +++ b/test/util.js @@ -11,7 +11,7 @@ export function createMap(t, options, callback) { if (!options || !options.skipCSSStub) t.stub(Map.prototype, '_detectMissingCSS'); const map = new Map(extend({ - container: container, + container, interactive: false, attributionControl: false, trackResize: true, diff --git a/yarn.lock b/yarn.lock index 394bdc1ce7d..17aabd983c8 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,6 +16,69 @@ dependencies: "@babel/highlight" "7.0.0-beta.56" +"@babel/core@^7.0.0": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" + integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.2" + "@babel/helpers" "^7.1.2" + "@babel/parser" "^7.1.2" + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + convert-source-map "^1.1.0" + debug "^3.1.0" + json5 "^0.5.0" + lodash "^4.17.10" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + +"@babel/generator@^7.1.2", "@babel/generator@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673" + integrity sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ== + dependencies: + "@babel/types" "^7.1.3" + jsesc "^2.5.1" + lodash "^4.17.10" + source-map "^0.5.0" + trim-right "^1.0.1" + +"@babel/helper-function-name@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz#a0ceb01685f73355d4360c1247f582bfafc8ff53" + integrity sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw== + dependencies: + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/template" "^7.1.0" + "@babel/types" "^7.0.0" + +"@babel/helper-get-function-arity@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz#83572d4320e2a4657263734113c42868b64e49c3" + integrity sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helper-split-export-declaration@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz#3aae285c0311c2ab095d997b8c9a94cad547d813" + integrity sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag== + dependencies: + "@babel/types" "^7.0.0" + +"@babel/helpers@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.1.2.tgz#ab752e8c35ef7d39987df4e8586c63b8846234b5" + integrity sha512-Myc3pUE8eswD73aWcartxB16K6CGmHDv9KxOmD2CeOs/FaEAQodr3VYGmlvOmog60vNQ2w8QbatuahepZwrHiA== + dependencies: + "@babel/template" "^7.1.2" + "@babel/traverse" "^7.1.0" + "@babel/types" "^7.1.2" + "@babel/highlight@7.0.0-beta.56": version "7.0.0-beta.56" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0-beta.56.tgz#f8b0fc8c5c2de53bb2c12f9001ad3d99e573696d" @@ -34,6 +97,44 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@^7.0.0", "@babel/parser@^7.1.2", "@babel/parser@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" + integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== + +"@babel/template@^7.1.0", "@babel/template@^7.1.2": + version "7.1.2" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" + integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.1.2" + "@babel/types" "^7.1.2" + +"@babel/traverse@^7.0.0", "@babel/traverse@^7.1.0": + version "7.1.4" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.1.4.tgz#f4f83b93d649b4b2c91121a9087fa2fa949ec2b4" + integrity sha512-my9mdrAIGdDiSVBuMjpn/oXYpva0/EZwWL3sm3Wcy/AVWO2eXnsoZruOT9jOGNRXU8KbCIu5zsKnXcAJ6PcV6Q== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.1.3" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.0.0" + "@babel/parser" "^7.1.3" + "@babel/types" "^7.1.3" + debug "^3.1.0" + globals "^11.1.0" + lodash "^4.17.10" + +"@babel/types@^7.0.0", "@babel/types@^7.1.2", "@babel/types@^7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.1.3.tgz#3a767004567060c2f40fca49a304712c525ee37d" + integrity sha512-RpPOVfK+yatXyn8n4PB1NW6k9qjinrXrRR8ugBN8fD6hCy5RXI6PSbVqpOJBO9oSaY7Nom4ohj35feb0UR9hSA== + dependencies: + esutils "^2.0.2" + lodash "^4.17.10" + to-fast-properties "^2.0.0" + "@mapbox/babel-plugin-transform-jsxtreme-markdown@^0.5.0": version "0.5.3" resolved "https://registry.yarnpkg.com/@mapbox/babel-plugin-transform-jsxtreme-markdown/-/babel-plugin-transform-jsxtreme-markdown-0.5.3.tgz#fdd4a519dbd897d7e8c67d833f0e7b6fd16d7c2f" @@ -392,13 +493,20 @@ acorn-globals@^4.1.0: dependencies: acorn "^5.0.0" -acorn-jsx@^3.0.0, acorn-jsx@^3.0.1: +acorn-jsx@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" integrity sha1-r9+UiPsezvyDSPb7IvRk4ypYs2s= dependencies: acorn "^3.0.4" +acorn-jsx@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-4.1.1.tgz#e8e41e48ea2fe0c896740610ab6a4ffd8add225e" + integrity sha512-JY+iV6r+cO21KtntVvFkD+iqjtdpRUpGqKWgfkCdZq1R+kbreEl8EcdcJR4SmiIgsIQT33s6QzheQ9a275Q8xw== + dependencies: + acorn "^5.0.3" + acorn-node@^1.2.0, acorn-node@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.3.0.tgz#5f86d73346743810ef1269b901dbcbded020861b" @@ -429,7 +537,12 @@ acorn@^5.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" integrity sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ== -acorn@^5.1.2, acorn@^5.2.1, acorn@^5.4.0: +acorn@^5.0.3, acorn@^5.5.3, acorn@^5.6.0: + version "5.7.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" + integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== + +acorn@^5.1.2, acorn@^5.2.1: version "5.4.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.4.1.tgz#fdc58d9d17f4a4e98d102ded826a9b9759125102" integrity sha512-XLmq3H/BVvW6/GbxKryGxWORz1ebilSsUDlyC27bXhWGWAZWkGwS6FLHjOlwFXNFoWFQEO/Df4u0YYd0K3BQgQ== @@ -439,11 +552,6 @@ acorn@^5.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" integrity sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g== -acorn@^5.5.3: - version "5.7.3" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" - integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== - add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -461,11 +569,6 @@ agent-base@4, agent-base@^4.1.0: dependencies: es6-promisify "^5.0.0" -ajv-keywords@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz#617997fc5f60576894c435f940d819e135b80762" - integrity sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I= - ajv-keywords@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.1.0.tgz#ac2b27939c543e95d2c06e7f7f5c27be4aa543be" @@ -479,7 +582,7 @@ ajv@^4.9.1: co "^4.6.0" json-stable-stringify "^1.0.1" -ajv@^5.1.0, ajv@^5.2.3, ajv@^5.3.0: +ajv@^5.1.0, ajv@^5.3.0: version "5.5.2" resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.5.2.tgz#73b5eeca3fab653e3d3f9422b341ad42205dc965" integrity sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU= @@ -498,6 +601,16 @@ ajv@^6.1.0: fast-json-stable-stringify "^2.0.0" json-schema-traverse "^0.3.0" +ajv@^6.5.3: + version "6.5.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.5.4.tgz#247d5274110db653706b550fcc2b797ca28cfc59" + integrity sha512-4Wyjt8+t6YszqaXnLDfMmG/8AlO5Zbcsy3ATHncCzjW/NoPzAId8AK6749Ybjmdt+kUY1gP60fCu46oDxPv/mg== + dependencies: + fast-deep-equal "^2.0.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + align-text@^0.1.1, align-text@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" @@ -823,18 +936,6 @@ atob@^2.0.0: resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10= -autoprefixer@^7.1.2: - version "7.2.6" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc" - integrity sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ== - dependencies: - browserslist "^2.11.3" - caniuse-lite "^1.0.30000805" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^6.0.17" - postcss-value-parser "^3.2.3" - autoprefixer@^8.2.0: version "8.6.5" resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-8.6.5.tgz#343f3d193ed568b3208e00117a1b96eb691d4ee9" @@ -847,6 +948,18 @@ autoprefixer@^8.2.0: postcss "^6.0.23" postcss-value-parser "^3.2.3" +autoprefixer@^9.0.0: + version "9.2.1" + resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.2.1.tgz#1f2f1179ceed4711b7ab064dbd5c3f9e83d9dc62" + integrity sha512-qlK4GnZk8OXLK+8kBn9ttfzu2PkhRe8kVYoWcc9HsrZEMWiBkQuRYdXyJg9cIIKxfMzhh6UbvlJ1CsstMIzxwA== + dependencies: + browserslist "^4.2.1" + caniuse-lite "^1.0.30000892" + normalize-range "^0.1.2" + num2fraction "^1.2.2" + postcss "^7.0.5" + postcss-value-parser "^3.3.1" + aws-sign2@~0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" @@ -867,7 +980,7 @@ aws4@^1.8.0: resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.8.0.tgz#f0e003d9ca9e7f59c7a508945d7b2ef9a04a542f" integrity sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ== -babel-code-frame@^6.22.0, babel-code-frame@^6.26.0: +babel-code-frame@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= @@ -901,15 +1014,17 @@ babel-core@^6.26.0: slash "^1.0.0" source-map "^0.5.6" -babel-eslint@^7.0.0: - version "7.2.3" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-7.2.3.tgz#b2fe2d80126470f5c19442dc757253a897710827" - integrity sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc= +babel-eslint@^10.0.1: + version "10.0.1" + resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.0.1.tgz#919681dc099614cd7d31d45c8908695092a1faed" + integrity sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ== dependencies: - babel-code-frame "^6.22.0" - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.17.0" + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + eslint-scope "3.7.1" + eslint-visitor-keys "^1.0.0" babel-generator@^6.18.0, babel-generator@^6.26.0: version "6.26.1" @@ -1648,7 +1763,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0, babel-te babylon "^6.18.0" lodash "^4.17.4" -babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= @@ -1663,7 +1778,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= @@ -1678,7 +1793,7 @@ babelify@^8.0.0: resolved "https://registry.yarnpkg.com/babelify/-/babelify-8.0.0.tgz#6f60f5f062bfe7695754ef2403b842014a580ed3" integrity sha512-xVr63fKEvMWUrrIbqlHYsMcc5Zdw4FSVesAHgkgajyCE1W8gbm9rbMakqavhxKvikGYMhEcqxTwB/gQmQ6lBtw== -babylon@^6.17.0, babylon@^6.18.0: +babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== @@ -2032,7 +2147,7 @@ browserify@^16.1.0: vm-browserify "~0.0.1" xtend "^4.0.0" -browserslist@^2.1.2, browserslist@^2.11.3: +browserslist@^2.1.2: version "2.11.3" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2" integrity sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA== @@ -2048,6 +2163,15 @@ browserslist@^3.2.8: caniuse-lite "^1.0.30000844" electron-to-chromium "^1.3.47" +browserslist@^4.2.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.3.1.tgz#453e46e74b0663ec5d764cdac3e5ac52bd776038" + integrity sha512-rlvbN4EERDFJcwI8qzmRz48a1zqvwE4L0G4d05EjH2nlswJqBxCXByafWhhCpVrHOsnOrDMtVjibPHdBElb8sg== + dependencies: + caniuse-lite "^1.0.30000893" + electron-to-chromium "^1.3.80" + node-releases "^1.0.0-alpha.14" + btoa-lite@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" @@ -2109,7 +2233,7 @@ buffer@^5.0.2: base64-js "^1.0.2" ieee754 "^1.1.4" -builtin-modules@^1.0.0, builtin-modules@^1.1.1: +builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" integrity sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8= @@ -2267,7 +2391,7 @@ camelcase@^4.0.0, camelcase@^4.1.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= -caniuse-lite@^1.0.30000792, caniuse-lite@^1.0.30000805: +caniuse-lite@^1.0.30000792: version "1.0.30000810" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000810.tgz#47585fffce0e9f3593a6feea4673b945424351d9" integrity sha512-/0Q00Oie9C72P8zQHtFvzmkrMC3oOFUnMWjCy5F2+BE8lzICm91hQPhh0+XIsAFPKOe2Dh3pKgbRmU3EKxfldA== @@ -2277,6 +2401,11 @@ caniuse-lite@^1.0.30000844, caniuse-lite@^1.0.30000864: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000874.tgz#a641b1f1c420d58d9b132920ef6ba87bbdcd2223" integrity sha512-29nr1EPiHwrJTAHHsEmTt2h+55L8j2GNFdAcYPlRy2NX6iFz7ZZiepVI7kP/QqlnHLq3KvfWpbmGa0d063U09w== +caniuse-lite@^1.0.30000892, caniuse-lite@^1.0.30000893: + version "1.0.30000893" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000893.tgz#284b20932bd41b93e21626975f2050cb01561986" + integrity sha512-kOddHcTEef+NgN/fs0zmX2brHTNATVOWMEIhlZHCuwQRtXobjSw9pAECc44Op4bTBcavRjkLaPrGomknH7+Jvg== + capture-stack-trace@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" @@ -2354,10 +2483,10 @@ character-reference-invalid@^1.0.0: resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.1.tgz#942835f750e4ec61a308e60c2ef8cc1011202efc" integrity sha1-lCg191Dk7GGjCOYMLvjMEBEgLvw= -chardet@^0.4.0: - version "0.4.2" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" - integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== cheerio@^1.0.0-rc.2: version "1.0.0-rc.2" @@ -2842,6 +2971,13 @@ conventional-commits-parser@^0.1.2: through2 "^2.0.0" trim-off-newlines "^1.0.0" +convert-source-map@^1.1.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" + integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== + dependencies: + safe-buffer "~5.1.1" + convert-source-map@^1.3.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" @@ -2905,15 +3041,14 @@ cosmiconfig@^2.1.0, cosmiconfig@^2.1.1: parse-json "^2.2.0" require-from-string "^1.1.0" -cosmiconfig@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-3.1.0.tgz#640a94bf9847f321800403cd273af60665c73397" - integrity sha512-zedsBhLSbPBms+kE7AH4vHg6JsKDz6epSv2/+5XHs8ILHlgDciSJfSWf8sX9aQ52Jb7KI7VswUTsLpR/G0cr2Q== +cosmiconfig@^5.0.0: + version "5.0.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.0.6.tgz#dca6cf680a0bd03589aff684700858c81abeeb39" + integrity sha512-6DWfizHriCrFWURP1/qyhsiFvYdlJzbCzmtFWh744+KyWsJo5+kPzUZZaMRSSItoYc0pxFX7gEO7ZC1/gN/7AQ== dependencies: is-directory "^0.3.1" js-yaml "^3.9.0" - parse-json "^3.0.0" - require-from-string "^2.0.1" + parse-json "^4.0.0" coveralls@^2.13.3: version "2.13.3" @@ -3001,6 +3136,17 @@ cross-spawn@^5.0.1, cross-spawn@^5.1.0: shebang-command "^1.2.0" which "^1.2.9" +cross-spawn@^6.0.5: + version "6.0.5" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" + integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + cryptiles@2.x.x: version "2.0.5" resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" @@ -3407,13 +3553,20 @@ debug@2.6.9, debug@^2.1.2, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6. dependencies: ms "2.0.0" -debug@3.1.0, debug@^3.0.0, debug@^3.1.0: +debug@3.1.0, debug@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== dependencies: ms "2.0.0" +debug@^4.0.0, debug@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.0.tgz#373687bffa678b38b1cd91f861b63850035ddc87" + integrity sha512-heNPJUJIqC+xB6ayLAMHaIrmN9HKa7aQO8MGqKpvCA+uJYVcvR6l5kgdrhRuwPFHU7P5/A1w0BjByPHwpfTDKg== + dependencies: + ms "^2.1.1" + debug@~2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da" @@ -3676,7 +3829,7 @@ doctrine@1.5.0: esutils "^2.0.2" isarray "^1.0.0" -doctrine@^2.0.0, doctrine@^2.0.2: +doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== @@ -3907,6 +4060,11 @@ electron-to-chromium@^1.3.47: resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.55.tgz#f150e10b20b77d9d41afcca312efe0c3b1a7fdce" integrity sha1-8VDhCyC3fZ1Br8yjEu/gw7Gn/c4= +electron-to-chromium@^1.3.80: + version "1.3.80" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.80.tgz#e99ec7efe64c2c6a269d3885ff411ea88852fa53" + integrity sha512-WClidEWEUNx7OfwXehB0qaxCuetjbKjev2SmXWgybWPLKAThBiMTF/2Pd8GSUDtoGOavxVzdkKwfFAPRSWlkLw== + elliptic@^6.0.0: version "6.4.0" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.4.0.tgz#cac9af8762c85836187003c8dfe193e5e2eae5df" @@ -4131,10 +4289,10 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-config-mourner@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/eslint-config-mourner/-/eslint-config-mourner-2.0.3.tgz#c858a7bdd03ceb5c124bc307af1270bb054f6c0c" - integrity sha512-ydFFzE/WkqvmozI3CM0lAtDZoYfmN03ycjlHzdPZW5x+o3Me1pI0lyfpsWoz9kOqykZk8qlvOVC5BN5UMwtXrg== +eslint-config-mourner@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-mourner/-/eslint-config-mourner-3.0.0.tgz#2cb7df3a14889e70409bbc3250ef0373285e7430" + integrity sha512-QWMt3Cbqkhg/73fZ2UrTNa/p27nF3JhI1Ej2Jg7qSBri88Y0bg4LFzz0/6I5IrvFR10c6UPwDS+DsV9Ec42aVQ== eslint-import-resolver-node@^0.3.1: version "0.3.2" @@ -4144,56 +4302,56 @@ eslint-import-resolver-node@^0.3.1: debug "^2.6.9" resolve "^1.5.0" -eslint-module-utils@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.1.1.tgz#abaec824177613b8a95b299639e1b6facf473449" - integrity sha512-jDI/X5l/6D1rRD/3T43q8Qgbls2nq5km5KSqiwlyUbGo5+04fXhMKdCPhjwbqAa6HXWaMxj8Q4hQDIh7IadJQw== +eslint-module-utils@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.2.0.tgz#b270362cd88b1a48ad308976ce7fa54e98411746" + integrity sha1-snA2LNiLGkitMIl2zn+lTphBF0Y= dependencies: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-flowtype@^2.34.0: - version "2.45.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.45.0.tgz#20d8b15d1e1e71ea4e9498e8be3fc62c0752fcbf" - integrity sha512-oUZgzkZOrqxvQvYZnkhojo/XfMhJ4rFy+TVwHTkgh6pNCom9hEzTS9QCeDaya+XP9vUqGopyQq983ExNtg96EA== +eslint-plugin-flowtype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.0.0.tgz#4b72588d8a5a5c836439752fe52e8e0f4b9954df" + integrity sha512-84utjHfQeykSyNuhO885pp18yGKYuK2S03EFbhl/BpXR9jk0TABnDP/KhUAqDjjkB43mxK2WZjJesrhnncvR9Q== dependencies: - lodash "^4.15.0" + lodash "^4.17.10" -eslint-plugin-html@^3.0.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-3.2.2.tgz#ef7093621d3a93de3206fd1f92f347ea9a1a4dfa" - integrity sha512-sSuafathF6ImPrzF2vUKEJY6Llq06d/riMTMzlsruDRDhNsQMYp2viUKo+jx+JRr1QevskeUpQcuptp2gN1XVQ== +eslint-plugin-html@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-4.0.6.tgz#724bb9272efb4df007dfee8dfb269ed83577e5b4" + integrity sha512-nj6A9oK+7BKnMm0E7dMRH3r75BfpkXtcVIb3pFC4AcDdBTNyg2NGxHXyFNT1emW4VsR7P2SZvRXXQtUR+kY08w== dependencies: htmlparser2 "^3.8.2" - semver "^5.4.1" -eslint-plugin-import@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.9.0.tgz#26002efbfca5989b7288ac047508bd24f217b169" - integrity sha1-JgAu+/ylmJtyiKwEdQi9JPIXsWk= +eslint-plugin-import@^2.14.0: + version "2.14.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.14.0.tgz#6b17626d2e3e6ad52cfce8807a845d15e22111a8" + integrity sha512-FpuRtniD/AY6sXByma2Wr0TXvXJ4nA/2/04VPlfpmUDPOpOY264x+ILiwnrk/k4RINgDAyFZByxqPUbSQ5YE7g== dependencies: - builtin-modules "^1.1.1" contains-path "^0.1.0" debug "^2.6.8" doctrine "1.5.0" eslint-import-resolver-node "^0.3.1" - eslint-module-utils "^2.1.1" + eslint-module-utils "^2.2.0" has "^1.0.1" lodash "^4.17.4" minimatch "^3.0.3" read-pkg-up "^2.0.0" + resolve "^1.6.0" -eslint-plugin-react@^7.3.0: - version "7.7.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.7.0.tgz#f606c719dbd8a1a2b3d25c16299813878cca0160" - integrity sha512-KC7Snr4YsWZD5flu6A5c0AcIZidzW3Exbqp7OT67OaD2AppJtlBr/GuPrW/vaQM/yfZotEvKAdrxrO+v8vwYJA== +eslint-plugin-react@^7.11.1: + version "7.11.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.11.1.tgz#c01a7af6f17519457d6116aa94fc6d2ccad5443c" + integrity sha512-cVVyMadRyW7qsIUh3FHp3u6QHNhOgVrLQYdQEB1bPWBsgbNCHdFAeNMquBMCcZJu59eNthX053L70l7gRt4SCw== dependencies: - doctrine "^2.0.2" - has "^1.0.1" + array-includes "^3.0.3" + doctrine "^2.1.0" + has "^1.0.3" jsx-ast-utils "^2.0.1" - prop-types "^15.6.0" + prop-types "^15.6.2" -eslint-scope@^3.7.1: +eslint-scope@3.7.1: version "3.7.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-3.7.1.tgz#3d63c3edfda02e06e01a452ad88caacc7cdcb6e8" integrity sha1-PWPD7f2gLgbgGkUq2IyqzHzctug= @@ -4201,57 +4359,80 @@ eslint-scope@^3.7.1: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint@4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-4.1.1.tgz#facbdfcfe3e0facd3a8b80dc98c4e6c13ae582df" - integrity sha1-+svfz+Pg+s06i4DcmMTmwTrlgt8= +eslint-scope@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.0.tgz#50bf3071e9338bcdc43331794a0cb533f0136172" + integrity sha512-1G6UTDi7Jc1ELFwnR58HV4fK9OQK4S6N985f166xqXxpjU6plxFISJa2Ba9KCQuFa8RCnj/lSFJbHo7UFDBnUA== dependencies: - babel-code-frame "^6.22.0" - chalk "^1.1.3" - concat-stream "^1.6.0" - debug "^2.6.8" - doctrine "^2.0.0" - eslint-scope "^3.7.1" - espree "^3.4.3" - esquery "^1.0.0" - estraverse "^4.2.0" + esrecurse "^4.1.0" + estraverse "^4.1.1" + +eslint-utils@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.3.1.tgz#9a851ba89ee7c460346f97cf8939c7298827e512" + integrity sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q== + +eslint-visitor-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" + integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== + +eslint@^5.7.0: + version "5.7.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.7.0.tgz#55c326d6fb2ad45fcbd0ce17c3846f025d1d819c" + integrity sha512-zYCeFQahsxffGl87U2aJ7DPyH8CbWgxBC213Y8+TCanhUTf2gEvfq3EKpHmEcozTLyPmGe9LZdMAwC/CpJBM5A== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.5.3" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^2.1.0" + eslint-scope "^4.0.0" + eslint-utils "^1.3.1" + eslint-visitor-keys "^1.0.0" + espree "^4.0.0" + esquery "^1.0.1" esutils "^2.0.2" file-entry-cache "^2.0.0" + functional-red-black-tree "^1.0.1" glob "^7.1.2" - globals "^9.17.0" - ignore "^3.3.3" + globals "^11.7.0" + ignore "^4.0.6" imurmurhash "^0.1.4" - inquirer "^3.0.6" - is-my-json-valid "^2.16.0" - is-resolvable "^1.0.0" - js-yaml "^3.8.4" - json-stable-stringify "^1.0.1" + inquirer "^6.1.0" + is-resolvable "^1.1.0" + js-yaml "^3.12.0" + json-stable-stringify-without-jsonify "^1.0.1" levn "^0.3.0" - lodash "^4.17.4" - minimatch "^3.0.2" + lodash "^4.17.5" + minimatch "^3.0.4" mkdirp "^0.5.1" natural-compare "^1.4.0" optionator "^0.8.2" path-is-inside "^1.0.2" - pluralize "^4.0.0" + pluralize "^7.0.0" progress "^2.0.0" + regexpp "^2.0.1" require-uncached "^1.0.3" - strip-json-comments "~2.0.1" - table "^4.0.1" - text-table "~0.2.0" + semver "^5.5.1" + strip-ansi "^4.0.0" + strip-json-comments "^2.0.1" + table "^5.0.2" + text-table "^0.2.0" esm@^3.0.84: version "3.0.84" resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== -espree@^3.4.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.5.3.tgz#931e0af64e7fbbed26b050a29daad1fc64799fa6" - integrity sha512-Zy3tAJDORxQZLl2baguiRU1syPERAIg0L+JB2MWorORgTu/CplzvxS9WWA7Xh4+Q+eOQihNs/1o1Xep8cvCxWQ== +espree@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-4.0.0.tgz#253998f20a0f82db5d866385799d912a83a36634" + integrity sha512-kapdTCt1bjmspxStVKX6huolXVV5ZfyZguY1lcfhVVZstce3bqxH9mcLzNn3/mlgW6wQ732+0fuG9v7h0ZQoKg== dependencies: - acorn "^5.4.0" - acorn-jsx "^3.0.0" + acorn "^5.6.0" + acorn-jsx "^4.1.1" esprima@^2.6.0: version "2.7.3" @@ -4275,10 +4456,10 @@ espurify@^1.3.0, espurify@^1.6.0: dependencies: core-js "^2.0.0" -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - integrity sha1-z7qLV9f7qT8XKYqKAGoEzaE9gPo= +esquery@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" + integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== dependencies: estraverse "^4.0.0" @@ -4446,13 +4627,13 @@ extend@~3.0.2: resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== -external-editor@^2.0.4: - version "2.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-2.1.0.tgz#3d026a21b7f95b5726387d4200ac160d372c3b48" - integrity sha512-E44iT5QVOUJBKij4IIV3uvxuNlbKS38Tw1HiupxEIHPv9qtC2PrDYohbXV5U+1jnfIXttny8gUhj+oZvflFlzA== +external-editor@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.0.3.tgz#5866db29a97826dbe4bf3afd24070ead9ea43a27" + integrity sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA== dependencies: - chardet "^0.4.0" - iconv-lite "^0.4.17" + chardet "^0.7.0" + iconv-lite "^0.4.24" tmp "^0.0.33" extglob@^0.3.1: @@ -4491,6 +4672,11 @@ fast-deep-equal@^1.0.0: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" integrity sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8= +fast-deep-equal@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz#7b05218ddf9667bf7f370bf7fdb2cb15fdd0aa49" + integrity sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk= + fast-glob@^2.0.2: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.1.0.tgz#50ee95e6a112f09e886cfff5215de69ca4a6a861" @@ -4894,6 +5080,11 @@ function-loop@^1.0.1: resolved "https://registry.yarnpkg.com/function-loop/-/function-loop-1.0.1.tgz#8076bb305e8e6a3cceee2920765f330d190f340c" integrity sha1-gHa7MF6OajzO7ikgdl8zDRkPNAw= +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4974,6 +5165,11 @@ get-stdin@^5.0.1: resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398" integrity sha1-Ei4WFZHiH/TFJTAwVpPyDmOTo5g= +get-stdin@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" + integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== + get-stream@3.0.0, get-stream@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" @@ -5145,7 +5341,12 @@ globals-docs@^2.4.0: resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.0.tgz#f2c647544eb6161c7c38452808e16e693c2dafbb" integrity sha512-B69mWcqCmT3jNYmSxRxxOXWfzu3Go8NQXPfl2o0qPd1EEFhwW0dFUg9ztTu915zPQzqwIhWAlw6hmfIcCK4kkQ== -globals@^9.17.0, globals@^9.18.0: +globals@^11.1.0, globals@^11.7.0: + version "11.8.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.8.0.tgz#c1ef45ee9bed6badf0663c5cb90e8d1adec1321d" + integrity sha512-io6LkyPVuzCHBSQV9fmOwxZkUk6nIaGmxheLDgmuFv89j0fm2aqDbIXKAGfzCMHqz3HLF2Zf8WSG6VqMh2qFmA== + +globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== @@ -5173,7 +5374,7 @@ globby@^6.0.0, globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globby@^7.0.0, globby@^7.1.1: +globby@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/globby/-/globby-7.1.1.tgz#fb2ccff9401f8600945dfada97440cca972b8680" integrity sha1-+yzP+UAfhgCUXfral0QMypcrhoA= @@ -5185,7 +5386,7 @@ globby@^7.0.0, globby@^7.1.1: pify "^3.0.0" slash "^1.0.0" -globby@^8.0.1: +globby@^8.0.0, globby@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/globby/-/globby-8.0.1.tgz#b5ad48b8aa80b35b814fc1281ecc851f1d2b5b50" integrity sha512-oMrYrJERnKBLXNLVTqhm3vPEdJ/b2ZE28xN4YARiix1NOIOBPEpOUnm844K1iu/BkphCaf2WNFwMszv8Soi1pw== @@ -5210,7 +5411,7 @@ glsl-tokenizer@^2.0.2: dependencies: through2 "^0.6.3" -gonzales-pe@^4.0.3: +gonzales-pe@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.3.tgz#41091703625433285e0aee3aa47829fc1fbeb6f2" integrity sha512-Kjhohco0esHQnOiqqdJeNz/5fyPkOMD/d6XVjwTAoPGUFh0mCollPUTUTa2OZy4dYNAqlPIQdTiNzJTWdd9Htw== @@ -5421,6 +5622,13 @@ has@^1.0.0, has@^1.0.1: dependencies: function-bind "^1.0.2" +has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -5750,11 +5958,18 @@ https-proxy-agent@^2.2.0: agent-base "^4.1.0" debug "^3.1.0" -iconv-lite@0.4, iconv-lite@0.4.19, iconv-lite@^0.4.17, iconv-lite@~0.4.13: +iconv-lite@0.4, iconv-lite@0.4.19, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" @@ -5784,16 +5999,26 @@ ignore-walk@^3.0.1: dependencies: minimatch "^3.0.4" -ignore@^3.3.3, ignore@^3.3.5: +ignore@^3.3.5: version "3.3.7" resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.7.tgz#612289bfb3c220e186a58118618d5be8c1bab021" integrity sha512-YGG3ejvBNHRqu0559EOxxNFihD0AjpvHlC/pdGKd3X3ofe+CoJkYazwNJYTNebqpPKN+VVQbh4ZFn1DivMNuHA== +ignore@^4.0.0, ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + import-lazy@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= +import-lazy@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" + integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== + imurmurhash@^0.1.4: version "0.1.4" resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" @@ -5856,22 +6081,21 @@ inline-source-map@~0.6.0: dependencies: source-map "~0.5.3" -inquirer@^3.0.6: - version "3.3.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" - integrity sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ== +inquirer@^6.1.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.2.0.tgz#51adcd776f661369dc1e894859c2560a224abdd8" + integrity sha512-QIEQG4YyQ2UYZGDC4srMZ7BjHOmNk1lR2JQj5UknBapklm6WHA+VVH7N+sUdX3A7NeCfGF8o4X1S3Ao7nAcIeg== dependencies: ansi-escapes "^3.0.0" chalk "^2.0.0" cli-cursor "^2.1.0" cli-width "^2.0.0" - external-editor "^2.0.4" + external-editor "^3.0.0" figures "^2.0.0" - lodash "^4.3.0" + lodash "^4.17.10" mute-stream "0.0.7" run-async "^2.2.0" - rx-lite "^4.0.8" - rx-lite-aggregates "^4.0.8" + rxjs "^6.1.0" string-width "^2.1.0" strip-ansi "^4.0.0" through "^2.3.6" @@ -6133,7 +6357,7 @@ is-my-ip-valid@^1.0.0: resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== -is-my-json-valid@^2.12.4, is-my-json-valid@^2.16.0: +is-my-json-valid@^2.12.4: version "2.17.2" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" integrity sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg== @@ -6272,7 +6496,7 @@ is-relative@^1.0.0: dependencies: is-unc-path "^1.0.0" -is-resolvable@^1.0.0: +is-resolvable@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== @@ -6489,7 +6713,7 @@ js-yaml@3.6.1: argparse "^1.0.7" esprima "^2.6.0" -js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.8.4, js-yaml@^3.9.0: +js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.9.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" integrity sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA== @@ -6497,6 +6721,14 @@ js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.8.4, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^3.12.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + js-yaml@^3.4.3: version "3.11.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.11.0.tgz#597c1a8bd57152f26d622ce4117851a51f5ebaef" @@ -6547,6 +6779,11 @@ jsesc@^1.3.0: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= +jsesc@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.1.tgz#e421a2a8e20d6b0819df28908f782526b96dd1fe" + integrity sha1-5CGiqOINawgZ3yiQj3glJrlt0f4= + jsesc@~0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" @@ -6572,11 +6809,21 @@ json-schema-traverse@^0.3.0: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" integrity sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A= +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= + json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" @@ -6723,10 +6970,10 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -known-css-properties@^0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.5.0.tgz#6ff66943ed4a5b55657ee095779a91f4536f8084" - integrity sha512-LOS0CoS8zcZnB1EjLw4LLqDXw8nvt3AGH5dXLQP3D9O1nLLA+9GC5GnPl5mmF+JiQAtSX4VyZC7KvEtcA4kUtA== +known-css-properties@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.8.0.tgz#2f62aaab90ece0c788d0c49e08c1e5d9b689238d" + integrity sha512-pku5zscbIr9YsA6lFU1nhFGSAXsdJtEQ2WilCL40d0YCoDofBlNohMUq32wyt7tpiiaZ09GKyLZFrB1ijx6+WA== labeled-stream-splicer@^2.0.0: version "2.0.0" @@ -6787,6 +7034,11 @@ left-pad@^1.3.0: resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== +leven@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" + integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= + levn@^0.3.0, levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -7172,7 +7424,7 @@ lodash@^3.3.1: resolved "https://registry.yarnpkg.com/lodash/-/lodash-3.10.1.tgz#5bf45e8e49ba4189e17d482789dfd15bd140b7b6" integrity sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y= -lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.1.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.3, lodash@^4.17.4, lodash@^4.17.5: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== @@ -7463,6 +7715,21 @@ meow@^4.0.0: redent "^2.0.0" trim-newlines "^2.0.0" +meow@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" + integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== + dependencies: + camelcase-keys "^4.0.0" + decamelize-keys "^1.0.0" + loud-rejection "^1.0.0" + minimist-options "^3.0.1" + normalize-package-data "^2.3.4" + read-pkg-up "^3.0.0" + redent "^2.0.0" + trim-newlines "^2.0.0" + yargs-parser "^10.0.0" + merge-source-map@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" @@ -7868,6 +8135,11 @@ nested-error-stacks@^2.0.0: dependencies: inherits "~2.0.1" +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + nise@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/nise/-/nise-1.3.3.tgz#c17a850066a8a1dfeb37f921da02441afc4a82ba" @@ -7997,6 +8269,13 @@ node-pre-gyp@^0.6.39: tar "^2.2.1" tar-pack "^3.4.0" +node-releases@^1.0.0-alpha.14: + version "1.0.0-alpha.14" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.0.0-alpha.14.tgz#da9e2780add4bbb59ad890af9e2018a1d9c0034b" + integrity sha512-G8nnF9cP9QPP/jUmYWw/uUUhumHmkm+X/EarCugYFjYm2uXRMFeOD6CVT3RLdoyCvDUNy51nirGfUItKWs/S1g== + dependencies: + semver "^5.3.0" + noop-logger@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" @@ -8564,13 +8843,6 @@ parse-json@2.2.0, parse-json@^2.2.0: dependencies: error-ex "^1.2.0" -parse-json@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-3.0.0.tgz#fa6f47b18e23826ead32f263e744d0e1e847fb13" - integrity sha1-+m9HsY4jgm6tMvJj50TQ4ehH+xM= - dependencies: - error-ex "^1.3.1" - parse-json@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" @@ -8654,7 +8926,7 @@ path-is-inside@^1.0.1, path-is-inside@^1.0.2: resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= -path-key@^2.0.0: +path-key@^2.0.0, path-key@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= @@ -8757,6 +9029,11 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= +pify@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + pinkie-promise@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" @@ -8802,10 +9079,10 @@ platform@^1.3.3: resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== -pluralize@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762" - integrity sha1-WbcIwcAZCi9pLxx2GMRGsFL9F2I= +pluralize@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-7.0.0.tgz#298b89df8b93b0221dbf421ad2b1b1ea23fc6777" + integrity sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow== pn@^1.1.0: version "1.1.0" @@ -8863,14 +9140,12 @@ postcss-discard-unused@^2.2.3: postcss "^5.0.14" uniqs "^2.0.0" -postcss-html@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.12.0.tgz#39b6adb4005dfc5464df7999c0f81c95bced7e50" - integrity sha512-KxKUpj7AY7nlCbLcTOYxdfJnGE7QFAfU2n95ADj1Q90RM/pOLdz8k3n4avOyRFs7MDQHcRzJQWM1dehCwJxisQ== +postcss-html@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.34.0.tgz#9bfd637ad8c3d3a43625b5ef844dc804b3370868" + integrity sha512-BIW982Kbf9/RikInNhNS3/GA6x/qY/+jhVS9KumqXZtU9ss8Yq15HhPJ6mnaXcU5bFq2ULxpOv96mHPAErpGMQ== dependencies: htmlparser2 "^3.9.2" - remark "^8.0.0" - unist-util-find-all-after "^1.0.1" postcss-inline-svg@^3.1.1: version "3.1.1" @@ -8891,10 +9166,19 @@ postcss-js@^1.0.1: camelcase-css "^1.0.1" postcss "^6.0.11" -postcss-less@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-1.1.3.tgz#6930525271bfe38d5793d33ac09c1a546b87bb51" - integrity sha512-WS0wsQxRm+kmN8wEYAGZ3t4lnoNfoyx9EJZrhiPR1K0lMHR0UNWnz52Ya5QRXChHtY75Ef+kDc05FpnBujebgw== +postcss-jsx@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.34.0.tgz#5a122af914f911fab4a9b8fcf3adc73c2dfe1bdd" + integrity sha512-UJISlEGWH/LeMYudAwq9GeqfyPW9AeRq87GHOlbquxOIakKr0Aqu6l9Cx0Fg20f3A9bKJcX1NGX4/xzIs7PlZQ== + dependencies: + "@babel/core" "^7.0.0" + optionalDependencies: + postcss-styled ">=0.34.0" + +postcss-less@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-2.0.0.tgz#5d190b8e057ca446d60fe2e2587ad791c9029fb8" + integrity sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ== dependencies: postcss "^5.2.16" @@ -8924,6 +9208,14 @@ postcss-load-plugins@^2.3.0: cosmiconfig "^2.1.1" object-assign "^4.1.0" +postcss-markdown@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.34.0.tgz#7a043e6eee3ab846a4cefe3ab43d141038e2da79" + integrity sha512-cKPggF9OMOKPoqDm5YpYszCqMsImFh78FK6P8p6IsEKZB6IkUJYKz0/QgadYy4jLb60jcFIHJ6v6jsMH7/ZQrA== + dependencies: + remark "^9.0.0" + unist-util-find-all-after "^1.0.2" + postcss-media-query-parser@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" @@ -8939,32 +9231,42 @@ postcss-reporter@^5.0.0: log-symbols "^2.0.0" postcss "^6.0.8" +postcss-reporter@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.0.tgz#44c873129d8c029a430b6d2186210d79c8de88b8" + integrity sha512-5xQXm1UPWuFObjbtyQzWvQaupru8yFcFi4HUlm6OPo1o2bUszYASuqRJ7bVArb3svGCdbYtqdMBKrqR1Aoy+tw== + dependencies: + chalk "^2.0.1" + lodash "^4.17.4" + log-symbols "^2.0.0" + postcss "^7.0.2" + postcss-resolve-nested-selector@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= -postcss-safe-parser@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-3.0.1.tgz#b753eff6c7c0aea5e8375fbe4cde8bf9063ff142" - integrity sha1-t1Pv9sfArqXoN1++TN6L+QY/8UI= +postcss-safe-parser@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.1.tgz#8756d9e4c36fdce2c72b091bbc8ca176ab1fcdea" + integrity sha512-xZsFA3uX8MO3yAda03QrG3/Eg1LN3EPfjjf07vke/46HERLZyHrTsQ9E1r1w1W//fWEhtYNndo2hQplN2cVpCQ== dependencies: - postcss "^6.0.6" + postcss "^7.0.0" -postcss-sass@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.2.0.tgz#e55516441e9526ba4b380a730d3a02e9eaa78c7a" - integrity sha512-cUmYzkP747fPCQE6d+CH2l1L4VSyIlAzZsok3HPjb5Gzsq3jE+VjpAdGlPsnQ310WKWI42sw+ar0UNN59/f3hg== +postcss-sass@^0.3.0: + version "0.3.3" + resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.3.tgz#bec188ac285d21ac8feba194c2f327fdda31e671" + integrity sha512-uoRhfwZJHDRI8p2KQniTx4UwzYwKgQUhmFNJ7aysL3+tgFUfmv5TPX8UPnlE5gfrq6KHUUwPJ/nISFtzwxr7iQ== dependencies: - gonzales-pe "^4.0.3" - postcss "^6.0.6" + gonzales-pe "^4.2.3" + postcss "^7.0.1" -postcss-scss@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-1.0.3.tgz#4c00ab440fc1c994134e3d4e600c23341af6cd27" - integrity sha512-N2ZPDOV5PGEGVwdiB7b1QppxKkmkHodNWkemja7PV+/mHqbUlA6ZcYRreden5Ag5nwBBX8/aRE7lfg1xjdszyg== +postcss-scss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" + integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug== dependencies: - postcss "^6.0.15" + postcss "^7.0.0" postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1: version "3.1.1" @@ -8975,6 +9277,16 @@ postcss-selector-parser@^3.1.0, postcss-selector-parser@^3.1.1: indexes-of "^1.0.1" uniq "^1.0.1" +postcss-styled@>=0.34.0, postcss-styled@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-styled/-/postcss-styled-0.34.0.tgz#07d47bcb13707289782aa058605fd9feaf84391d" + integrity sha512-Uaeetr/xOiQWGJgzPFOr32/Bwykpfh9TVE26OpmwDb8eEN205TS/gqkt9ri+C6otQzQKXqbMfeZNbKYi7QpeNA== + +postcss-syntax@^0.34.0: + version "0.34.0" + resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.34.0.tgz#4a85c022f1cdecea72102775c91af1e7f506d83a" + integrity sha512-L36NZwq2UK743US+vl1CRMdBRZCBmFYfThP9n9jCFhX1Wfk6BqnRSgt0Fy8q44IwxPee/GCzlo7T1c1JIeUDlQ== + postcss-url@^7.3.1: version "7.3.2" resolved "https://registry.yarnpkg.com/postcss-url/-/postcss-url-7.3.2.tgz#5fea273807fb84b38c461c3c9a9e8abd235f7120" @@ -8991,6 +9303,11 @@ postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" integrity sha1-h/OPnxj3dKSrTIojL1xc6IcqnRU= +postcss-value-parser@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" + integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== + postcss@^5.0.14, postcss@^5.2.16: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -9001,7 +9318,7 @@ postcss@^5.0.14, postcss@^5.2.16: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.14, postcss@^6.0.15, postcss@^6.0.17, postcss@^6.0.6, postcss@^6.0.8: +postcss@^6.0.0, postcss@^6.0.1, postcss@^6.0.8: version "6.0.19" resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.19.tgz#76a78386f670b9d9494a655bf23ac012effd1555" integrity sha512-f13HRz0HtVwVaEuW6J6cOUCBLFtymhgyLPV7t4QEk2UD3twRI9IluDcQNdzQdBpiixkXj2OmzejhhTbSbDxNTg== @@ -9019,6 +9336,15 @@ postcss@^6.0.11, postcss@^6.0.21, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5: + version "7.0.5" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55" + integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ== + dependencies: + chalk "^2.4.1" + source-map "^0.6.1" + supports-color "^5.5.0" + potpack@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" @@ -9143,7 +9469,7 @@ prop-types@^15.5.4, prop-types@^15.6.0: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.6.1: +prop-types@^15.6.1, prop-types@^15.6.2: version "15.6.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102" integrity sha512-3pboPvLiWD7dkI3qf3KbUe6hKFKa52w+AE0VCqECtf+QHAKgOL37tTaNCnuX1nAAQ4ZhyP+kYVKf8rLmJ/feDQ== @@ -9616,6 +9942,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + regexpu-core@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" @@ -10022,11 +10353,6 @@ require-from-string@^1.1.0: resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= -require-from-string@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.1.tgz#c545233e9d7da6616e9d59adfb39fc9f588676ff" - integrity sha1-xUUjPp19pmFunVmt+zn8n1iGdv8= - require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" @@ -10086,6 +10412,13 @@ resolve@^1.1.3, resolve@^1.1.4, resolve@^1.1.6, resolve@^1.4.0, resolve@^1.5.0: dependencies: path-parse "^1.0.5" +resolve@^1.3.2, resolve@^1.6.0: + version "1.8.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" + integrity sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA== + dependencies: + path-parse "^1.0.5" + responselike@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" @@ -10241,17 +10574,12 @@ rw@1, rw@^1.3.3: resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= -rx-lite-aggregates@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz#753b87a89a11c95467c4ac1626c4efc4e05c67be" - integrity sha1-dTuHqJoRyVRnxKwWJsTvxOBcZ74= +rxjs@^6.1.0: + version "6.3.3" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.3.3.tgz#3c6a7fa420e844a81390fb1158a9ec614f4bad55" + integrity sha512-JTWmoY9tWCs7zvIk/CvRjhjGaOd+OVBM987mxFo+OW66cGpdKjZcpmc74ES1sB//7Kl/PAe8+wEakuhG4pcgOw== dependencies: - rx-lite "*" - -rx-lite@*, rx-lite@^4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-4.0.8.tgz#0b1e11af8bc44836f04a6407e92da42467b79444" - integrity sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ= + tslib "^1.9.0" safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.1" @@ -10320,6 +10648,11 @@ semver-diff@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.5.0.tgz#dc4bbc7a6ca9d916dee5d43516f0092b58f7b8ab" integrity sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA== +semver@^5.5.0, semver@^5.5.1: + version "5.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004" + integrity sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -10636,7 +10969,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@0.5.x, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6: +source-map@0.5.x, source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.1, source-map@~0.5.3, source-map@~0.5.6: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -10708,10 +11041,10 @@ spdx-license-ids@^1.0.2: resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz#c9df7a3424594ade6bd11900d596696dc06bac57" integrity sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc= -specificity@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.3.2.tgz#99e6511eceef0f8d9b57924937aac2cb13d13c42" - integrity sha512-Nc/QN/A425Qog7j9aHmwOrlwX2e7pNI47ciwxwy4jOlvbbMHkNNJchit+FX+UjF3IAdiaaV5BKeWuDUnws6G1A== +specificity@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" + integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" @@ -11033,62 +11366,69 @@ style-search@^0.1.0: resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= -stylelint-config-recommended@^2.0.0: +stylelint-config-recommended@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.1.0.tgz#f526d5c771c6811186d9eaedbed02195fee30858" integrity sha512-ajMbivOD7JxdsnlS5945KYhvt7L/HwN6YeYF2BH6kE4UCLJR0YvXMf+2j7nQpJyYLZx9uZzU5G1ZOSBiWAc6yA== -stylelint-config-standard@^18.0.0: - version "18.1.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.1.0.tgz#e4d977063f5bca77970033d2f76941c3cc19fd9c" - integrity sha512-kjpxnt1fu56ZJk+8wETz0Hr/3vvpj5KfQoBRLVeAJcFtCZBxF5kUDXGqsn4h2ZVyvNTf+2lOfX1dfok5ZOltqg== +stylelint-config-standard@^18.2.0: + version "18.2.0" + resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.2.0.tgz#6283149aba7f64f18731aef8f0abfb35cf619e06" + integrity sha512-07x0TaSIzvXlbOioUU4ORkCIM07kyIuojkbSVCyFWNVgXMXYHfhnQSCkqu+oHWJf3YADAnPGWzdJ53NxkoJ7RA== dependencies: - stylelint-config-recommended "^2.0.0" + stylelint-config-recommended "^2.1.0" -stylelint@^8.4.0: - version "8.4.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-8.4.0.tgz#c2dbaeb17236917819f9206e1c0df5fddf6f83c3" - integrity sha512-56hPH5mTFnk8LzlEuTWq0epa34fHuS54UFYQidBOFt563RJBNi1nz1F2HK2MoT1X1waq47milvRsRahFCCJs/Q== +stylelint@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.6.0.tgz#f0b366f33b6ccf3e5096d60722ed27b6470b41d8" + integrity sha512-Q0UcbFPRiC+3FejNyIBAWbMuKwZNAC0kvZtGQbjwA9LMKDod6xMlBsiIigQxmE3ywpmTeFj3mkG5Jj36EfC7XA== dependencies: - autoprefixer "^7.1.2" + autoprefixer "^9.0.0" balanced-match "^1.0.0" - chalk "^2.0.1" - cosmiconfig "^3.1.0" - debug "^3.0.0" + chalk "^2.4.1" + cosmiconfig "^5.0.0" + debug "^4.0.0" execall "^1.0.0" file-entry-cache "^2.0.0" - get-stdin "^5.0.1" - globby "^7.0.0" + get-stdin "^6.0.0" + globby "^8.0.0" globjoin "^0.1.4" html-tags "^2.0.0" - ignore "^3.3.3" + ignore "^4.0.0" + import-lazy "^3.1.0" imurmurhash "^0.1.4" - known-css-properties "^0.5.0" + known-css-properties "^0.8.0" + leven "^2.1.0" lodash "^4.17.4" log-symbols "^2.0.0" mathml-tag-names "^2.0.1" - meow "^4.0.0" + meow "^5.0.0" micromatch "^2.3.11" normalize-selector "^0.2.0" - pify "^3.0.0" - postcss "^6.0.6" - postcss-html "^0.12.0" - postcss-less "^1.1.0" + pify "^4.0.0" + postcss "^7.0.0" + postcss-html "^0.34.0" + postcss-jsx "^0.34.0" + postcss-less "^2.0.0" + postcss-markdown "^0.34.0" postcss-media-query-parser "^0.2.3" - postcss-reporter "^5.0.0" + postcss-reporter "^6.0.0" postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^3.0.1" - postcss-sass "^0.2.0" - postcss-scss "^1.0.2" + postcss-safe-parser "^4.0.0" + postcss-sass "^0.3.0" + postcss-scss "^2.0.0" postcss-selector-parser "^3.1.0" + postcss-styled "^0.34.0" + postcss-syntax "^0.34.0" postcss-value-parser "^3.3.0" resolve-from "^4.0.0" - specificity "^0.3.1" + signal-exit "^3.0.2" + specificity "^0.4.1" string-width "^2.1.0" style-search "^0.1.0" - sugarss "^1.0.0" + sugarss "^2.0.0" svg-tags "^1.0.0" - table "^4.0.1" + table "^5.0.0" subarg@^1.0.0: version "1.0.0" @@ -11097,12 +11437,12 @@ subarg@^1.0.0: dependencies: minimist "^1.1.0" -sugarss@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-1.0.1.tgz#be826d9003e0f247735f92365dc3fd7f1bae9e44" - integrity sha512-3qgLZytikQQEVn1/FrhY7B68gPUUGY3R1Q1vTiD5xT+Ti1DP/8iZuwFet9ONs5+bmL8pZoDQ6JrQHVgrNlK6mA== +sugarss@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" + integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== dependencies: - postcss "^6.0.14" + postcss "^7.0.2" supercluster@^4.1.1: version "4.1.1" @@ -11144,6 +11484,13 @@ supports-color@^5.2.0: dependencies: has-flag "^3.0.0" +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + svg-tags@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" @@ -11161,15 +11508,13 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" -table@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/table/-/table-4.0.2.tgz#a33447375391e766ad34d3486e6e2aedc84d2e36" - integrity sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA== +table@^5.0.0, table@^5.0.2: + version "5.1.0" + resolved "https://registry.yarnpkg.com/table/-/table-5.1.0.tgz#69a54644f6f01ad1628f8178715b408dc6bf11f7" + integrity sha512-e542in22ZLhD/fOIuXs/8yDZ9W61ltF8daM88rkRNtgTIct+vI2fTnAyu/Db2TCfEcI8i7mjZz6meLq0nW7TYg== dependencies: - ajv "^5.2.3" - ajv-keywords "^2.1.0" - chalk "^2.1.0" - lodash "^4.17.4" + ajv "^6.5.3" + lodash "^4.17.10" slice-ansi "1.0.0" string-width "^2.1.1" @@ -11383,7 +11728,7 @@ text-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.7.0.tgz#faaaba2625ed746d568a23e4d0aacd9bf08a8b39" integrity sha512-AKXZeDq230UaSzaO5s3qQUZOaC7iKbzq0jOFL614R7d9R593HLqAOL0cYoqLdkNrjBSOdmoQI06yigq1TSBXAg== -text-table@~0.2.0: +text-table@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= @@ -11493,6 +11838,11 @@ to-fast-properties@^1.0.3: resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= +to-fast-properties@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" + integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= + to-object-path@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" @@ -11611,6 +11961,11 @@ tsame@^1.1.2: resolved "https://registry.yarnpkg.com/tsame/-/tsame-1.1.2.tgz#5ce0002acf685942789c63018797a2aa5e6b03c5" integrity sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw== +tslib@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.9.3.tgz#d7e4dd79245d85428c4d7e4822a79917954ca286" + integrity sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ== + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -11854,10 +12209,10 @@ unist-builder@^1.0.2: dependencies: object-assign "^4.1.0" -unist-util-find-all-after@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz#4e5512abfef7e0616781aecf7b1ed751c00af908" - integrity sha1-TlUSq/734GFnga7Pex7XUcAK+Qg= +unist-util-find-all-after@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.2.tgz#9be49cfbae5ca1566b27536670a92836bf2f8d6d" + integrity sha512-nDl79mKpffXojLpCimVXnxhlH/jjaTnDuScznU9J4jjsaUtBdDbxmlc109XtcqxY4SDO0SwzngsxxW8DIISt1w== dependencies: unist-util-is "^2.0.0" @@ -11981,6 +12336,13 @@ upper-case@^1.1.1: resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= +uri-js@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" + integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== + dependencies: + punycode "^2.1.0" + urix@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" @@ -12563,6 +12925,13 @@ yapool@^1.0.0: resolved "https://registry.yarnpkg.com/yapool/-/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" integrity sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o= +yargs-parser@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" + integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== + dependencies: + camelcase "^4.1.0" + yargs-parser@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f" From 750e6011dfeff7eaaa26223a215ea0f18d8b64ae Mon Sep 17 00:00:00 2001 From: Philipp Borgers Date: Thu, 1 Nov 2018 22:55:55 +0100 Subject: [PATCH 054/115] make yarn test-unit command more cross-platform (#7528) --- build/run-tap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/run-tap b/build/run-tap index 0cf4214cd35..e5b300cfed2 100755 --- a/build/run-tap +++ b/build/run-tap @@ -1,6 +1,6 @@ #!/usr/bin/env bash if [ "$#" == 5 ]; then - arg="${@:0:4} ${BASH_ARGV[1]}/${BASH_ARGV[0]}" + arg="${@:1:3} ${4}/${5}" else arg="${@}" fi From c8bb20d191ea25a68a6b8af546a3a415419256eb Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Thu, 1 Nov 2018 17:23:31 -0700 Subject: [PATCH 055/115] Prevent calls to getLayoutProperty from causing fatal error when layer doesn't exist (#7539) --- src/style/style.js | 12 +++++++++--- test/unit/ui/map.test.js | 22 ++++++++++++++++++++++ 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/style/style.js b/src/style/style.js index 3f21a686309..ec55b10b8a5 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -786,12 +786,18 @@ class Style extends Evented { /** * Get a layout property's value from a given layer - * @param {string} layer the layer to inspect + * @param {string} layerId the layer to inspect * @param {string} name the name of the layout property * @returns {*} the property value */ - getLayoutProperty(layer: string, name: string) { - return this.getLayer(layer).getLayoutProperty(name); + getLayoutProperty(layerId: string, name: string) { + const layer = this.getLayer(layerId); + if (!layer) { + this.fire(new ErrorEvent(new Error(`The layer '${layerId}' does not exist in the map's style.`))); + return; + } + + return layer.getLayoutProperty(name); } setPaintProperty(layerId: string, name: string, value: any) { diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index 5dedb4d5337..2e91fb202b9 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -1231,6 +1231,28 @@ test('Map', (t) => { t.end(); }); + t.test('#getLayoutProperty', (t) => { + t.test('fires an error if layer not found', (t) => { + const map = createMap(t, { + style: { + version: 8, + sources: {}, + layers: [] + } + }); + + map.on('style.load', () => { + map.on('error', ({ error }) => { + t.match(error.message, /does not exist in the map\'s style/); + t.end(); + }); + map.getLayoutProperty('non-existant', 'text-transform', 'lowercase'); + }); + }); + + t.end(); + }); + t.test('#setPaintProperty', (t) => { t.test('sets property', (t) => { const map = createMap(t, { From fc7703e149a2978a18fcfc1f2cd592d8212f435c Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Fri, 2 Nov 2018 11:03:14 -0700 Subject: [PATCH 056/115] Fix build target script in package file --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 80fff392236..33e22224cda 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "start-debug": "run-p build-token watch-css watch-dev start-server", "start-bench": "run-p build-token watch-benchmarks watch-style-benchmarks start-server", "build-docs": "documentation build --github --format json --config ./docs/documentation.yml --output docs/components/api.json src/index.js", - "build": "run-s build-docs && . build/set-deploy-env.sh && batfish build # invoked by publisher when publishing docs on the mb-pages branch", + "build": "run-s build-docs && batfish build # invoked by publisher when publishing docs on the mb-pages branch", "start-docs": "run-s build-prod-min build-css build-docs && DEPLOY_ENV=local batfish start", "lint": "eslint --cache --ignore-path .gitignore src test bench docs docs/pages/example/*.html debug/*.html", "lint-docs": "documentation lint src/index.js", From d16d1722800742b5f68ab06e52eace4f05586a2f Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Fri, 2 Nov 2018 16:38:42 -0700 Subject: [PATCH 057/115] update octokit (#7549) to fix breaking change in createInstallationToken endpoint --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33e22224cda..bce5254be36 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,7 @@ "@mapbox/flow-remove-types": "^1.3.0-await.upstream.1", "@mapbox/mapbox-gl-rtl-text": "^0.2.0", "@mapbox/mapbox-gl-test-suite": "file:test/integration", - "@octokit/rest": "^15.9.5", + "@octokit/rest": "^15.15.1", "babel-eslint": "^10.0.1", "benchmark": "~2.1.0", "browserify": "^16.1.0", From 81cf5ad97fff5b5b960398c454baefb91e4e6df3 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 7 Nov 2018 14:07:09 +0100 Subject: [PATCH 058/115] upgrade test-related dependencies (#7560) --- package.json | 20 +- yarn.lock | 1120 ++++++++++++++++++++++++++++++-------------------- 2 files changed, 675 insertions(+), 465 deletions(-) diff --git a/package.json b/package.json index bce5254be36..0a4e327e288 100644 --- a/package.json +++ b/package.json @@ -50,9 +50,9 @@ "d3": "^4.12.0", "documentation": "~8.1.1", "ejs": "^2.5.7", - "eslint": "^5.7.0", + "eslint": "^5.8.0", "eslint-config-mourner": "^3.0.0", - "eslint-plugin-flowtype": "^3.0.0", + "eslint-plugin-flowtype": "^3.2.0", "eslint-plugin-html": "^4.0.6", "eslint-plugin-import": "^2.14.0", "eslint-plugin-react": "^7.11.1", @@ -60,18 +60,18 @@ "flow-bin": "^0.77.0", "flow-coverage-report": "^0.3.0", "github-slugger": "^1.1.1", - "gl": "^4.0.1", + "gl": "^4.1.1", "glob": "^7.0.3", - "is-builtin-module": "^1.0.0", - "jsdom": "^11.11.0", + "is-builtin-module": "^3.0.0", + "jsdom": "^13.0.0", "json-stringify-pretty-compact": "^1.0.4", "jsonwebtoken": "^8.3.0", "mock-geolocation": "^1.0.11", "npm-run-all": "^4.0.1", - "nyc": "^10.1.2", + "nyc": "^13.1.0", "object.entries": "^1.0.4", "pirates": "^3.0.2", - "pngjs": "^3.0.0", + "pngjs": "^3.3.3", "postcss-cli": "^5.0.0", "postcss-inline-svg": "^3.1.1", "pretty-bytes": "^5.1.0", @@ -94,12 +94,12 @@ "rollup-plugin-sourcemaps": "^0.4.2", "rollup-plugin-terser": "^3.0.0", "rollup-plugin-unassert": "^0.2.0", - "sinon": "^5.0.0", + "sinon": "^7.1.1", "slugg": "^1.2.1", "st": "^1.2.0", - "stylelint": "^9.6.0", + "stylelint": "^9.7.1", "stylelint-config-standard": "^18.2.0", - "tap": "^11.1.2" + "tap": "^12.0.1" }, "browser": { "./src/shaders/index.js": "./src/shaders/shaders.js", diff --git a/yarn.lock b/yarn.lock index 17aabd983c8..8fb124bc137 100644 --- a/yarn.lock +++ b/yarn.lock @@ -16,7 +16,7 @@ dependencies: "@babel/highlight" "7.0.0-beta.56" -"@babel/core@^7.0.0": +"@babel/core@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.1.2.tgz#f8d2a9ceb6832887329a7b60f9d035791400ba4e" integrity sha512-IFeSSnjXdhDaoysIlev//UzHZbdEmm7D0EIH2qtse9xK7mXEZQpYjs2P00XlP1qYsYvid79p+Zgg6tz1mp6iVw== @@ -36,7 +36,7 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/generator@^7.1.2", "@babel/generator@^7.1.3": +"@babel/generator@^7.0.0", "@babel/generator@^7.1.2", "@babel/generator@^7.1.3": version "7.1.3" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.1.3.tgz#2103ec9c42d9bdad9190a6ad5ff2d456fd7b8673" integrity sha512-ZoCZGcfIJFJuZBqxcY9OjC1KW2lWK64qrX1o4UYL3yshVhwKFYgzpWZ0vvtGMNJdTlvkw0W+HR1VnYN8q3QPFQ== @@ -102,7 +102,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== -"@babel/template@^7.1.0", "@babel/template@^7.1.2": +"@babel/template@^7.0.0", "@babel/template@^7.1.0", "@babel/template@^7.1.2": version "7.1.2" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.1.2.tgz#090484a574fef5a2d2d7726a674eceda5c5b5644" integrity sha512-SY1MmplssORfFiLDcOETrW7fCLl+PavlwMh92rrGcikQaRq4iWPVH0MpwPpY3etVMx6RnDjXtr6VZYr/IbP/Ag== @@ -412,10 +412,10 @@ call-me-maybe "^1.0.1" glob-to-regexp "^0.3.0" -"@octokit/rest@^15.9.5": - version "15.9.5" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.9.5.tgz#e356d202bd0b517e381f705ad77d98ccb84e0c65" - integrity sha512-vJEHSTnI4UAbCDTjVSQljPeX81zsQVNj2ruM5Oj5gxOttHD0TcfWeElcJYoITCMxQTgN6Y+bJFo6/+/0CqoacA== +"@octokit/rest@^15.15.1": + version "15.16.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-15.16.1.tgz#399b06660fe16852cf432059c845d4cdcaf77f5a" + integrity sha512-86RGoibm8AJ3ZBlM0NdMI932wEZ/bdo2eEppHtliEYwJT9hsy5qt+i9HA+T8CC90r4atoFQDrY7mDLBcAjp9ow== dependencies: before-after-hook "^1.1.0" btoa-lite "^1.0.0" @@ -424,6 +424,7 @@ https-proxy-agent "^2.2.0" lodash "^4.17.4" node-fetch "^2.1.1" + universal-user-agent "^2.0.0" url-template "^2.0.8" "@sindresorhus/is@^0.7.0": @@ -431,12 +432,31 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" integrity sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow== -"@sinonjs/formatio@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-2.0.0.tgz#84db7e9eb5531df18a8c5e0bfb6e449e55e654b2" - integrity sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg== +"@sinonjs/commons@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.3.0.tgz#50a2754016b6f30a994ceda6d9a0a8c36adda849" + integrity sha512-j4ZwhaHmwsCb4DlDOIWnI5YyKDNMoNThsmwEpfHx6a1EpsGZ9qYLxP++LMlmBRjtGptGHFsGItJ768snllFWpA== dependencies: - samsam "1.3.0" + type-detect "4.0.8" + +"@sinonjs/formatio@3.0.0", "@sinonjs/formatio@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.0.0.tgz#9d282d81030a03a03fa0c5ce31fd8786a4da311a" + integrity sha512-vdjoYLDptCgvtJs57ULshak3iJe4NW3sJ3g36xVDGff5AE8P30S6A093EIEPjdi2noGhfuNOEkbxt3J3awFW1w== + dependencies: + "@sinonjs/samsam" "2.1.0" + +"@sinonjs/samsam@2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.0.tgz#b8b8f5b819605bd63601a6ede459156880f38ea3" + integrity sha512-5x2kFgJYupaF1ns/RmharQ90lQkd2ELS8A9X0ymkAAdemYHGtI2KiUHG8nX2WU0T1qgnOU5YMqnBM2V7NUanNw== + dependencies: + array-from "^2.1.1" + +"@sinonjs/samsam@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-2.1.2.tgz#16947fce5f57258d01f1688fdc32723093c55d3f" + integrity sha512-ZwTHAlC9akprWDinwEPD4kOuwaYZlyMwVJIANsKNC3QVp0AHB04m7RnB4eqeWfgmxw8MGTzS9uMaw93Z3QcZbw== "@types/estree@0.0.39": version "0.0.39" @@ -456,11 +476,6 @@ JSONStream@^1.0.3, JSONStream@^1.0.4: jsonparse "^1.2.0" through ">=2.2.7 <3" -abab@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/abab/-/abab-1.0.4.tgz#5faad9c2c07f60dd76770f71cf025b62a63cfd4e" - integrity sha1-X6rZwsB/YN12dw9xzwJbYqY8/U4= - abab@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.0.tgz#aba0ab4c5eee2d4c79d3487d85450fb2376ebb0f" @@ -486,12 +501,13 @@ acorn-dynamic-import@^2.0.0: dependencies: acorn "^4.0.3" -acorn-globals@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.1.0.tgz#ab716025dbe17c54d3ef81d32ece2b2d99fe2538" - integrity sha512-KjZwU26uG3u6eZcfGbTULzFcsoz6pegNKtHPksZPOUsiKo5bUmiBPa38FuHZ/Eun+XYh/JCCkS9AS3Lu4McQOQ== +acorn-globals@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.0.tgz#e3b6f8da3c1552a95ae627571f7dd6923bb54103" + integrity sha512-hMtHj3s5RnuhvHPowpBYvJVj3rAar82JiDQHvGs1zO0l10ocX/xEdBShNHTJaboucJUsScghp74pH3s7EnHHQw== dependencies: - acorn "^5.0.0" + acorn "^6.0.1" + acorn-walk "^6.0.1" acorn-jsx@^3.0.1: version "3.0.1" @@ -515,6 +531,11 @@ acorn-node@^1.2.0, acorn-node@^1.3.0: acorn "^5.4.1" xtend "^4.0.1" +acorn-walk@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.0.tgz#c957f4a1460da46af4a0388ce28b4c99355b0cbc" + integrity sha512-ugTb7Lq7u4GfWSqqpwE0bGyoBZNMTok/zDBXxfEG0QM50jNlGhIWjRC1pPN7bvV1anhF+bs+/gNcRw+o55Evbg== + acorn5-object-spread@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/acorn5-object-spread/-/acorn5-object-spread-4.0.0.tgz#d5758081eed97121ab0be47e31caaef2aa399697" @@ -537,7 +558,7 @@ acorn@^5.0.0: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.3.tgz#f473dd47e0277a08e28e9bec5aeeb04751f0b8c9" integrity sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ== -acorn@^5.0.3, acorn@^5.5.3, acorn@^5.6.0: +acorn@^5.0.3, acorn@^5.6.0: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -552,6 +573,11 @@ acorn@^5.4.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.5.0.tgz#1abb587fbf051f94e3de20e6b26ef910b1828298" integrity sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g== +acorn@^6.0.1, acorn@^6.0.2: + version "6.0.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.0.4.tgz#77377e7353b72ec5104550aa2d2097a2fd40b754" + integrity sha512-VY4i5EKSKkofY2I+6QLTbTTN/UvEQPCo6eiwzzSaSWfpaDhOmStMCMod6wmuPciNq+XS0faCglFu2lHZpdHUtg== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -713,6 +739,13 @@ append-transform@^0.4.0: dependencies: default-require-extensions "^1.0.0" +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== + dependencies: + default-require-extensions "^2.0.0" + aproba@^1.0.3, aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" @@ -775,6 +808,11 @@ array-find-index@^1.0.1: resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= +array-from@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" + integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -926,6 +964,13 @@ async@^2.1.2: dependencies: lodash "^4.14.0" +async@^2.5.0: + version "2.6.1" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.1.tgz#b245a23ca71930044ec53fa46aa00a3e87c6a610" + integrity sha512-fNEiL2+AZt6AlAw/29Cr0UDe4sRAHCpEHh54WMz+Bb7QfNcFw4h3loofyJpLeQs4Yx7yuqu/2dLgM5hKOs6HlQ== + dependencies: + lodash "^4.17.10" + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -1878,10 +1923,10 @@ binary-extensions@^1.0.0: resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" integrity sha1-RqoXUftqL5PuXmibsQh9SxTGwgU= -bind-obj-methods@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-1.0.0.tgz#4f5979cac15793adf70e488161e463e209ca509c" - integrity sha1-T1l5ysFXk633DkiBYeRj4gnKUJw= +bind-obj-methods@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz#0178140dbe7b7bb67dc74892ace59bc0247f06f0" + integrity sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw== bindings@^1.2.1: version "1.3.0" @@ -2243,6 +2288,11 @@ builtin-modules@^2.0.0: resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-2.0.0.tgz#60b7ef5ae6546bd7deefa74b08b62a43a232648e" integrity sha512-3U5kUA5VPsRUA3nofm/BXX7GVHKfxz0hOBAPxXrIvHzlDRkQVqEn6yi8QJegxl4LzOHLdvb7XF5dVawa/VVYBg== +builtin-modules@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.0.0.tgz#1e587d44b006620d90286cc7a9238bbc6129cab1" + integrity sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg== + builtin-status-codes@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" @@ -2314,6 +2364,16 @@ caching-transform@^1.0.0: mkdirp "^0.5.1" write-file-atomic "^1.1.4" +caching-transform@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-2.0.0.tgz#e1292bd92d35b6e8b1ed7075726724b3bd64eea0" + integrity sha512-tTfemGmFWe7KZ3KN6VsSgQZbd9Bgo7A40wlp4PTsJJvFu4YAnEC5YnfdiKq6Vh2i9XJLnA9n8OXD46orVpnPMw== + dependencies: + make-dir "^1.0.0" + md5-hex "^2.0.0" + package-hash "^2.0.0" + write-file-atomic "^2.0.0" + call-matcher@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-1.0.1.tgz#5134d077984f712a54dad3cbf62de28dce416ca8" @@ -2411,11 +2471,6 @@ capture-stack-trace@^1.0.0: resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" integrity sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0= -caseless@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.11.0.tgz#715b96ea9841593cc33067923f5ec60ebda4f7d7" - integrity sha1-cVuW6phBWTzDMGeSP17GDr2k99c= - caseless@~0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" @@ -2434,7 +2489,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -2783,7 +2838,7 @@ comma-separated-tokens@^1.0.0, comma-separated-tokens@^1.0.1: dependencies: trim "0.0.1" -commander@2, commander@2.14.x, commander@^2.9.0, commander@~2.14.1: +commander@2, commander@2.14.x, commander@~2.14.1: version "2.14.1" resolved "https://registry.yarnpkg.com/commander/-/commander-2.14.1.tgz#2235123e37af8ca3c65df45b026dbd357b01b9aa" integrity sha512-+YR16o3rK53SmWHU3rEM3tPAh2rwb1yPcQX5irVn7mb0gXbwuCCrnkbV5+PBfETdfg1vui07nM6PCG1zndcjQw== @@ -2971,14 +3026,14 @@ conventional-commits-parser@^0.1.2: through2 "^2.0.0" trim-off-newlines "^1.0.0" -convert-source-map@^1.1.0: +convert-source-map@^1.1.0, convert-source-map@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" integrity sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A== dependencies: safe-buffer "~5.1.1" -convert-source-map@^1.3.0, convert-source-map@^1.5.0, convert-source-map@^1.5.1: +convert-source-map@^1.5.0, convert-source-map@^1.5.1: version "1.5.1" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.5.1.tgz#b8278097b9bc229365de5c62cf5fcaed8b5599e5" integrity sha1-uCeAl7m8IpNl3lxiz1/K7YtVmeU= @@ -3050,16 +3105,17 @@ cosmiconfig@^5.0.0: js-yaml "^3.9.0" parse-json "^4.0.0" -coveralls@^2.13.3: - version "2.13.3" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-2.13.3.tgz#9ad7c2ae527417f361e8b626483f48ee92dd2bc7" - integrity sha512-iiAmn+l1XqRwNLXhW8Rs5qHZRFMYp9ZIPjEOVRpC/c4so6Y/f4/lFi0FfR5B9cCqgyhkJ5cZmbvcVRfP8MHchw== +coveralls@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.2.tgz#f5a0bcd90ca4e64e088b710fa8dda640aea4884f" + integrity sha512-Tv0LKe/MkBOilH2v7WBiTBdudg2ChfGbdXafc/s330djpF3zKOmuehTeRwjXWc7pzfj9FrDUTA7tEx6Div8NFw== dependencies: - js-yaml "3.6.1" - lcov-parse "0.0.10" - log-driver "1.2.5" - minimist "1.2.0" - request "2.79.0" + growl "~> 1.10.0" + js-yaml "^3.11.0" + lcov-parse "^0.0.10" + log-driver "^1.2.7" + minimist "^1.2.0" + request "^2.85.0" cp-file@^5.0.0: version "5.0.0" @@ -3218,12 +3274,17 @@ csso@~3.3.0: dependencies: css-tree "1.0.0-alpha25" -cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0": +cssom@0.3.x: version "0.3.2" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.2.tgz#b8036170c79f07a90ff2f16e22284027a243848b" integrity sha1-uANhcMefB6kP8vFuIihAJ6JDhIs= -cssstyle@^1.0.0: +cssom@^0.3.4: + version "0.3.4" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.4.tgz#8cd52e8a3acfd68d3aed38ee0a640177d2f9d797" + integrity sha512-+7prCSORpXNeR4/fUP3rL+TzqtiFfhMvTd7uEqMdgPvLPt4+uzFUeufx5RHjGTACCargg/DiEt/moMQmvnfkog== + +cssstyle@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.1.1.tgz#18b038a9c44d65f7a8e428a653b9f6fe42faf5fb" integrity sha512-364AI1l/M5TYcFH83JnOH/pSqgaNnKmYgKrm0didZMGKWjQB60dymwWy1rKUgL3J1ffdq9xVi2yGLHdSjjSNog== @@ -3509,14 +3570,14 @@ dashdash@^1.12.0: dependencies: assert-plus "^1.0.0" -data-urls@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.0.0.tgz#24802de4e81c298ea8a9388bb0d8e461c774684f" - integrity sha512-ai40PPQR0Fn1lD2PPie79CibnlMN2AYiDhwFX/rZHVsxbs5kNJSjegqXIprhouGXlRdEnfybva7kqRGnB6mypA== +data-urls@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" + integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== dependencies: - abab "^1.0.4" - whatwg-mimetype "^2.0.0" - whatwg-url "^6.4.0" + abab "^2.0.0" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" date-now@^0.1.4: version "0.1.4" @@ -3626,6 +3687,13 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= + dependencies: + strip-bom "^3.0.0" + define-properties@^1.1.1, define-properties@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" @@ -3784,10 +3852,10 @@ diff@^1.3.2, diff@^1.4.0: resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= -diff@^3.1.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.4.0.tgz#b1d85507daf3964828de54b37d0d73ba67dda56c" - integrity sha512-QpVuMTEoJMF7cKzi6bvWhRulU1fZqZnvyVQgNhPaxxuTYwyjn/j1v9falseQ/uXWwPnO56RBfwtg4h/EQXmucA== +diff@^3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== diffie-hellman@^5.0.0: version "5.0.2" @@ -4183,6 +4251,11 @@ es5-ext@^0.10.14, es5-ext@^0.10.35, es5-ext@^0.10.9, es5-ext@~0.10.14: es6-iterator "~2.0.3" es6-symbol "~3.1.1" +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + es6-iterator@^2.0.1, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" @@ -4255,29 +4328,29 @@ escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.3, escape-string-regexp@^ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= -escodegen@^1.8.1: - version "1.9.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" - integrity sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw== +escodegen@^1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" + integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.5.6" + source-map "~0.6.1" -escodegen@^1.9.1: - version "1.11.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.11.0.tgz#b27a9389481d5bfd5bec76f7bb1eb3f8f4556589" - integrity sha512-IeMV45ReixHS53K/OmfKAIztN/igDHzTJUhZM3k1jMhIZWjk45SMwAtBsEXiJp3vSPmTcu6CXn7mDvFHRN66fw== +escodegen@^1.8.1: + version "1.9.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.9.0.tgz#9811a2f265dc1cd3894420ee3717064b632b8852" + integrity sha512-v0MYvNQ32bzwoG2OSFzWAkuahDQHK92JBN0pTAALJ4RIxEZe766QJPDR8Hqy7XNUy5K3fnVL76OqYAdc4TZEIw== dependencies: esprima "^3.1.3" estraverse "^4.2.0" esutils "^2.0.2" optionator "^0.8.1" optionalDependencies: - source-map "~0.6.1" + source-map "~0.5.6" escope@^3.6.0: version "3.6.0" @@ -4310,10 +4383,10 @@ eslint-module-utils@^2.2.0: debug "^2.6.8" pkg-dir "^1.0.0" -eslint-plugin-flowtype@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.0.0.tgz#4b72588d8a5a5c836439752fe52e8e0f4b9954df" - integrity sha512-84utjHfQeykSyNuhO885pp18yGKYuK2S03EFbhl/BpXR9jk0TABnDP/KhUAqDjjkB43mxK2WZjJesrhnncvR9Q== +eslint-plugin-flowtype@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.2.0.tgz#824364ed5940a404b91326fdb5a313a2a74760df" + integrity sha512-baJmzngM6UKbEkJ5OY3aGw2zjXBt5L2QKZvTsOlXX7yHKIjNRrlJx2ods8Rng6EdqPR9rVNIQNYHpTs0qfn2qA== dependencies: lodash "^4.17.10" @@ -4377,10 +4450,10 @@ eslint-visitor-keys@^1.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz#3f3180fb2e291017716acb4c9d6d5b5c34a6a81d" integrity sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ== -eslint@^5.7.0: - version "5.7.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.7.0.tgz#55c326d6fb2ad45fcbd0ce17c3846f025d1d819c" - integrity sha512-zYCeFQahsxffGl87U2aJ7DPyH8CbWgxBC213Y8+TCanhUTf2gEvfq3EKpHmEcozTLyPmGe9LZdMAwC/CpJBM5A== +eslint@^5.8.0: + version "5.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.8.0.tgz#91fbf24f6e0471e8fdf681a4d9dd1b2c9f28309b" + integrity sha512-Zok6Bru3y2JprqTNm14mgQ15YQu/SMDkWdnmHfFg770DIUlmMFd/gqqzCHekxzjHZJxXv3tmTpH0C1icaYJsRQ== dependencies: "@babel/code-frame" "^7.0.0" ajv "^6.5.3" @@ -4434,11 +4507,6 @@ espree@^4.0.0: acorn "^5.6.0" acorn-jsx "^4.1.1" -esprima@^2.6.0: - version "2.7.3" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" - integrity sha1-luO3DVd59q1JzQMmc9HDEnZ7pYE= - esprima@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" @@ -4602,6 +4670,13 @@ expand-template@^1.0.2: resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-1.1.0.tgz#e09efba977bf98f9ee0ed25abd0c692e02aec3fc" integrity sha512-kkjwkMqj0h4w/sb32ERCDxCQkREMCAgS39DscDnSwDsbxnwwM1BTZySdC3Bn1lhY7vL08n9GoO/fVTynjDgRyQ== +expand-tilde@^2.0.0, expand-tilde@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/expand-tilde/-/expand-tilde-2.0.2.tgz#97e801aa052df02454de46b02bf621642cdc8502" + integrity sha1-l+gBqgUt8CRU3kawK/YhZCzchQI= + dependencies: + homedir-polyfill "^1.0.1" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -4826,7 +4901,16 @@ find-cache-dir@^1.0.0: make-dir "^1.0.0" pkg-dir "^2.0.0" -find-up@^1.0.0, find-up@^1.1.2: +find-cache-dir@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.0.0.tgz#4c1faed59f45184530fb9d7fa123a4d04a98472d" + integrity sha512-LDUY6V1Xs5eFskUVYtIwatojt6+9xC9Chnlk/jYOOvn3FAFfSaWddxahDGyNHh0b2dMXa6YW2m0tk8TdVaXHlA== + dependencies: + commondir "^1.0.1" + make-dir "^1.0.0" + pkg-dir "^3.0.0" + +find-up@^1.0.0: version "1.1.2" resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= @@ -5099,18 +5183,6 @@ gauge@~2.7.3: strip-ansi "^3.0.1" wide-align "^1.1.0" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - integrity sha1-aFj+fAlpt9TpCTM3ZHrHn2DfvnQ= - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - integrity sha1-nA4cQDCM6AT0eDYYuTf6iPmdUNA= - dependencies: - is-property "^1.0.0" - geojson-rewind@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/geojson-rewind/-/geojson-rewind-0.3.0.tgz#d5c35025fa708910e2da1a97fc23a2e2478a876a" @@ -5238,17 +5310,17 @@ gl-matrix@^2.6.1: resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-2.6.1.tgz#1bc7f7b396f4ae80abdb4db9a98cd07d170b9004" integrity sha512-fK37p7vkpw5H4WSypfa6TUV8nlB8+Fd1pZj15sMtvRPnfzArvTI4U4E25x2Hmp+UxZX11ve0aGaHarRieP+gSw== -gl@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/gl/-/gl-4.0.4.tgz#46745f365a230672b2f988d85018f737e64c3343" - integrity sha512-J/l/QSjbW9UHQjWqmCtXe2H1Gt8ednfC1tofmwABg9z+36DMNBs8W3i/2NgLg4Mdg+bED/DKnU1B3HIpSSidFQ== +gl@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/gl/-/gl-4.1.1.tgz#999383a9ec2863c6d9db9c61866ddb96b4be1998" + integrity sha512-2SeT0193YonCMR0wjKuZm3GNq52qcRD7S1LsRvs3U9c5lnDceQjEw0sUgpEukIe4tS0F/6wL5q+/CWH4Zf58OA== dependencies: bindings "^1.2.1" bit-twiddle "^1.0.2" glsl-tokenizer "^2.0.2" nan "^2.6.2" node-gyp "^3.6.2" - prebuild-install "^2.1.1" + prebuild-install "^5.1.0" glob-base@^0.3.0: version "0.3.0" @@ -5329,6 +5401,18 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.0.6, glob@^7.1.0, glob@^7.1.1, gl once "^1.3.0" path-is-absolute "^1.0.0" +glob@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-dirs@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" @@ -5336,6 +5420,26 @@ global-dirs@^0.1.0: dependencies: ini "^1.3.4" +global-modules@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-1.0.0.tgz#6d770f0eb523ac78164d72b5e71a8877265cc3ea" + integrity sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg== + dependencies: + global-prefix "^1.0.1" + is-windows "^1.0.1" + resolve-dir "^1.0.0" + +global-prefix@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-1.0.2.tgz#dbf743c6c14992593c655568cb66ed32c0122ebe" + integrity sha1-2/dDxsFJklk8ZVVoy2btMsASLr4= + dependencies: + expand-tilde "^2.0.2" + homedir-polyfill "^1.0.1" + ini "^1.3.4" + is-windows "^1.0.1" + which "^1.2.14" + globals-docs@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.0.tgz#f2c647544eb6161c7c38452808e16e693c2dafbb" @@ -5485,6 +5589,22 @@ grid-index@^1.0.0: resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.0.0.tgz#ad2c5d54ce5b35437faff1d70a9aeb3d1d261110" integrity sha1-rSxdVM5bNUN/r/HXCprrPR0mERA= +"growl@~> 1.10.0": + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +handlebars@^4.0.11: + version "4.0.12" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.12.tgz#2c15c8a96d46da5e266700518ba8cb8d919d5bc5" + integrity sha512-RhmTekP+FZL+XNhwS1Wf+bTTZpdLougwt5pcgA1tuz6Jcx0fpH/7z0qd71RKnZHBCxIRBHfBOnio4gViPemNzA== + dependencies: + async "^2.5.0" + optimist "^0.6.1" + source-map "^0.6.1" + optionalDependencies: + uglify-js "^3.1.4" + handlebars@^4.0.2, handlebars@^4.0.3: version "4.0.11" resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" @@ -5506,16 +5626,6 @@ har-schema@^2.0.0: resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= -har-validator@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-2.0.6.tgz#cdcbc08188265ad119b6a5a7c8ab70eecfb5d27d" - integrity sha1-zcvAgYgmWtEZtqWnyKtw7s+10n0= - dependencies: - chalk "^1.1.1" - commander "^2.9.0" - is-my-json-valid "^2.12.4" - pinkie-promise "^2.0.0" - har-validator@~4.2.1: version "4.2.1" resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" @@ -5813,6 +5923,13 @@ home-or-tmp@^2.0.0: os-homedir "^1.0.0" os-tmpdir "^1.0.1" +homedir-polyfill@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.1.tgz#4c2bbc8a758998feebf5ed68580f76d46768b4bc" + integrity sha1-TCu8inWJmP7r9e1oWA921GdotLw= + dependencies: + parse-passwd "^1.0.0" + hosted-git-info@^2.1.4: version "2.5.0" resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.5.0.tgz#6d60e34b3abbc8313062c3b798ef8d901a07af3c" @@ -5963,7 +6080,7 @@ iconv-lite@0.4, iconv-lite@0.4.19, iconv-lite@~0.4.13: resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" integrity sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ== -iconv-lite@^0.4.24: +iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -6208,6 +6325,13 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" +is-builtin-module@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466" + integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw== + dependencies: + builtin-modules "^3.0.0" + is-callable@^1.1.1, is-callable@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" @@ -6352,22 +6476,6 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= -is-my-ip-valid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-my-ip-valid/-/is-my-ip-valid-1.0.0.tgz#7b351b8e8edd4d3995d4d066680e664d94696824" - integrity sha512-gmh/eWXROncUzRnIa1Ubrt5b8ep/MGSnfAUI3aRp+sqTCs1tv1Isl8d8F6JmkN3dXKc3ehZMrtiPN9eL03NuaQ== - -is-my-json-valid@^2.12.4: - version "2.17.2" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.17.2.tgz#6b2103a288e94ef3de5cf15d29dd85fc4b78d65c" - integrity sha512-IBhBslgngMQN8DDSppmgDv7RNrlFotuuDsKcrCP3+HbFaVivIBU7u9oiiErw8sH4ynx3+gOGQ3q2otkgiSi6kg== - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - is-my-ip-valid "^1.0.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-nan@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/is-nan/-/is-nan-1.2.1.tgz#9faf65b6fb6db24b7f5c0628475ea71f988401e2" @@ -6467,11 +6575,6 @@ is-promise@^2.1.0: resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - integrity sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ= - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" @@ -6622,32 +6725,62 @@ isstream@~0.1.2: resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= -istanbul-lib-coverage@^1.1.0, istanbul-lib-coverage@^1.1.2: +istanbul-lib-coverage@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.2.tgz#4113c8ff6b7a40a1ef7350b01016331f63afde14" integrity sha512-tZYA0v5A7qBSsOzcebJJ/z3lk3oSzH62puG78DbBA1+zupipX2CakDyiPV3pOb8He+jBwVimuwB0dTnh38hX0w== -istanbul-lib-hook@^1.0.6, istanbul-lib-hook@^1.1.0: +istanbul-lib-coverage@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-1.2.1.tgz#ccf7edcd0a0bb9b8f729feeb0930470f9af664f0" + integrity sha512-PzITeunAgyGbtY1ibVIUiV679EFChHjoMNRibEIobvmrCRaIgwLxNucOSimtNWUhEib/oO7QY2imD75JVgCJWQ== + +istanbul-lib-coverage@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#2aee0e073ad8c5f6a0b00e0dfbf52b4667472eda" + integrity sha512-nPvSZsVlbG9aLhZYaC3Oi1gT/tpyo3Yt5fNyf6NmcKIayz4VV/txxJFFKAK/gU4dcNn8ehsanBbVHVl0+amOLA== + +istanbul-lib-hook@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-1.1.0.tgz#8538d970372cb3716d53e55523dd54b557a8d89b" integrity sha512-U3qEgwVDUerZ0bt8cfl3dSP3S6opBoOtk3ROO5f2EfBr/SRiD9FQqzwaZBqFORu8W7O0EXpai+k7kxHK13beRg== dependencies: append-transform "^0.4.0" -istanbul-lib-instrument@^1.7.1, istanbul-lib-instrument@^1.9.2: - version "1.9.2" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.9.2.tgz#84905bf47f7e0b401d6b840da7bad67086b4aab6" - integrity sha512-nz8t4HQ2206a/3AXi+NHFWEa844DMpPsgbcUteJbt1j8LX1xg56H9rOMnhvcvVvPbW60qAIyrSk44H8ZDqaSSA== +istanbul-lib-hook@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.1.tgz#918a57b75a0f951d552a08487ca1fa5336433d72" + integrity sha512-ufiZoiJ8CxY577JJWEeFuxXZoMqiKpq/RqZtOAYuQLvlkbJWscq9n3gc4xrCGH9n4pW0qnTxOz1oyMmVtk8E1w== + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^1.10.0: + version "1.10.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-1.10.2.tgz#1f55ed10ac3c47f2bdddd5307935126754d0a9ca" + integrity sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A== dependencies: babel-generator "^6.18.0" babel-template "^6.16.0" babel-traverse "^6.18.0" babel-types "^6.18.0" babylon "^6.18.0" - istanbul-lib-coverage "^1.1.2" + istanbul-lib-coverage "^1.2.1" semver "^5.3.0" -istanbul-lib-report@^1.1.0, istanbul-lib-report@^1.1.3: +istanbul-lib-instrument@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.0.0.tgz#b5f066b2a161f75788be17a9d556f40a0cf2afc9" + integrity sha512-eQY9vN9elYjdgN9Iv6NS/00bptm02EBBk70lRMaVjeA6QYocQgenVrSgC28TJurdnZa80AGO3ASdFN+w/njGiQ== + dependencies: + "@babel/generator" "^7.0.0" + "@babel/parser" "^7.0.0" + "@babel/template" "^7.0.0" + "@babel/traverse" "^7.0.0" + "@babel/types" "^7.0.0" + istanbul-lib-coverage "^2.0.1" + semver "^5.5.0" + +istanbul-lib-report@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-1.1.3.tgz#2df12188c0fa77990c0d2176d2d0ba3394188259" integrity sha512-D4jVbMDtT2dPmloPJS/rmeP626N5Pr3Rp+SovrPn1+zPChGHcggd/0sL29jnbm4oK9W0wHjCRsdch9oLd7cm6g== @@ -6657,7 +6790,16 @@ istanbul-lib-report@^1.1.0, istanbul-lib-report@^1.1.3: path-parse "^1.0.5" supports-color "^3.1.2" -istanbul-lib-source-maps@^1.2.0, istanbul-lib-source-maps@^1.2.3: +istanbul-lib-report@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.2.tgz#430a2598519113e1da7af274ba861bd42dd97535" + integrity sha512-rJ8uR3peeIrwAxoDEbK4dJ7cqqtxBisZKCuwkMtMv0xYzaAnsAi3AHrHPAAtNXzG/bcCgZZ3OJVqm1DTi9ap2Q== + dependencies: + istanbul-lib-coverage "^2.0.1" + make-dir "^1.3.0" + supports-color "^5.4.0" + +istanbul-lib-source-maps@^1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-1.2.3.tgz#20fb54b14e14b3fb6edb6aca3571fd2143db44e6" integrity sha512-fDa0hwU/5sDXwAklXgAoCJCOsFsBplVQ6WBldz5UwaqOzmDhUK4nfuR7/G//G2lERlblUNJB8P6e8cXq3a7MlA== @@ -6668,13 +6810,31 @@ istanbul-lib-source-maps@^1.2.0, istanbul-lib-source-maps@^1.2.3: rimraf "^2.6.1" source-map "^0.5.3" -istanbul-reports@^1.1.0, istanbul-reports@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.1.4.tgz#5ccba5e22b7b5a5d91d5e0a830f89be334bf97bd" - integrity sha512-DfSTVOTkuO+kRmbO8Gk650Wqm1WRGr6lrdi2EwDK1vxpS71vdlLd613EpzOKdIFioB5f/scJTjeWBnvd1FWejg== +istanbul-lib-source-maps@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-2.0.1.tgz#ce8b45131d8293fdeaa732f4faf1852d13d0a97e" + integrity sha512-30l40ySg+gvBLcxTrLzR4Z2XTRj3HgRCA/p2rnbs/3OiTaoj054gAbuP5DcLOtwqmy4XW8qXBHzrmP2/bQ9i3A== + dependencies: + debug "^3.1.0" + istanbul-lib-coverage "^2.0.1" + make-dir "^1.3.0" + rimraf "^2.6.2" + source-map "^0.6.1" + +istanbul-reports@^1.4.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-1.5.1.tgz#97e4dbf3b515e8c484caea15d6524eebd3ff4e1a" + integrity sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw== dependencies: handlebars "^4.0.3" +istanbul-reports@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.0.1.tgz#fb8d6ea850701a3984350b977a969e9a556116a7" + integrity sha512-CT0QgMBJqs6NJLF678ZHcquUAZIoBIUNzdJrRJfpkI9OnzG6MkUfHxbJC3ln981dMswC7/B1mfX3LNkhgJxsuw== + dependencies: + handlebars "^4.0.11" + isurl@^1.0.0-alpha5: version "1.0.0" resolved "https://registry.yarnpkg.com/isurl/-/isurl-1.0.0.tgz#b27f4f49f3cdaa3ea44a0a5b7f3462e6edc39d67" @@ -6705,14 +6865,6 @@ js-tokens@^4.0.0: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.6.1.tgz#6e5fe67d8b205ce4d22fad05b7781e8dadcc4b30" - integrity sha1-bl/mfYsgXOTSL60Ft3geja3MSzA= - dependencies: - argparse "^1.0.7" - esprima "^2.6.0" - js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.9.0: version "3.10.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.10.0.tgz#2e78441646bd4682e963f22b6e92823c309c62dc" @@ -6721,7 +6873,7 @@ js-yaml@^3.10.0, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.9.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.12.0: +js-yaml@^3.11.0, js-yaml@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== @@ -6742,36 +6894,36 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= -jsdom@^11.11.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-11.12.0.tgz#1a80d40ddd378a1de59656e9e6dc5a3ba8657bc8" - integrity sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw== +jsdom@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.0.0.tgz#f1df2411b714a4e08d1bdc343c0a0889c688210f" + integrity sha512-Kmq4ASMNkgpY+YufE322EnIKoiz0UWY2DRkKlU7d5YrIW4xiVRhWFrZV1fr6w/ZNxQ50wGAH5gGRzydgnmkkvw== dependencies: abab "^2.0.0" - acorn "^5.5.3" - acorn-globals "^4.1.0" + acorn "^6.0.2" + acorn-globals "^4.3.0" array-equal "^1.0.0" - cssom ">= 0.3.2 < 0.4.0" - cssstyle "^1.0.0" - data-urls "^1.0.0" + cssom "^0.3.4" + cssstyle "^1.1.1" + data-urls "^1.0.1" domexception "^1.0.1" - escodegen "^1.9.1" + escodegen "^1.11.0" html-encoding-sniffer "^1.0.2" - left-pad "^1.3.0" - nwsapi "^2.0.7" - parse5 "4.0.0" + nwsapi "^2.0.9" + parse5 "5.1.0" pn "^1.1.0" - request "^2.87.0" + request "^2.88.0" request-promise-native "^1.0.5" - sax "^1.2.4" + saxes "^3.1.3" symbol-tree "^3.2.2" - tough-cookie "^2.3.4" + tough-cookie "^2.4.3" w3c-hr-time "^1.0.1" + w3c-xmlserializer "^1.0.0" webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.3" - whatwg-mimetype "^2.1.0" - whatwg-url "^6.4.1" - ws "^5.2.0" + whatwg-encoding "^1.0.5" + whatwg-mimetype "^2.2.0" + whatwg-url "^7.0.0" + ws "^6.1.0" xml-name-validator "^3.0.0" jsesc@^1.3.0: @@ -6870,11 +7022,6 @@ jsonparse@^1.2.0: resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - integrity sha1-T9kss04OnbPInIYi7PUfm5eMbLk= - jsonwebtoken@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.3.0.tgz#056c90eee9a65ed6e6c72ddb0a1d325109aaf643" @@ -6907,10 +7054,10 @@ jsx-ast-utils@^2.0.1: dependencies: array-includes "^3.0.3" -just-extend@^1.1.27: - version "1.1.27" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-1.1.27.tgz#ec6e79410ff914e472652abfa0e603c03d60e905" - integrity sha512-mJVp13Ix6gFo3SBAy9U/kL+oeZqzlYYYLQBwXVBlVzIsZwBqGREnOro24oC/8s8aox+rJhtZ2DiQof++IrkA+g== +just-extend@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-3.0.0.tgz#cee004031eaabf6406da03a7b84e4fe9d78ef288" + integrity sha512-Fu3T6pKBuxjWT/p4DkqGHFRsysc8OauWr4ZRTY9dIx07Y9O0RkoR5jcv28aeD1vuAwhm3nLkDurwLXoALp4DpQ== jwa@^1.1.5: version "1.1.6" @@ -6970,10 +7117,10 @@ kind-of@^6.0.0, kind-of@^6.0.2: resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.2.tgz#01146b36a6218e64e58f3a8d66de5d7fc6f6d051" integrity sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA== -known-css-properties@^0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.8.0.tgz#2f62aaab90ece0c788d0c49e08c1e5d9b689238d" - integrity sha512-pku5zscbIr9YsA6lFU1nhFGSAXsdJtEQ2WilCL40d0YCoDofBlNohMUq32wyt7tpiiaZ09GKyLZFrB1ijx6+WA== +known-css-properties@^0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.9.0.tgz#28f8a7134cfa3b0aa08b1e5edf64a57f64fc23af" + integrity sha512-2G/A/8XPhH6MmuVgl079wYsgdqfXE3cfm62txk/ajS4wvRWo6tEHcgQCJCHOOy12Fse1Sxlbf7/IJBpR9hnVew== labeled-stream-splicer@^2.0.0: version "2.0.0" @@ -7017,7 +7164,7 @@ lcid@^1.0.0: dependencies: invert-kv "^1.0.0" -lcov-parse@0.0.10: +lcov-parse@^0.0.10: version "0.0.10" resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-0.0.10.tgz#1b0b8ff9ac9c7889250582b70b71315d9da6d9a3" integrity sha1-GwuP+ayceIklBYK3C3ExXZ2m2aM= @@ -7029,11 +7176,6 @@ lead@^1.0.0: dependencies: flush-write-stream "^1.0.2" -left-pad@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/left-pad/-/left-pad-1.3.0.tgz#5b8a3a7765dfe001261dde915589e782f8c94d1e" - integrity sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA== - leven@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" @@ -7260,6 +7402,11 @@ lodash.escape@^3.0.0: dependencies: lodash._root "^3.0.0" +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.get@^4.4.2: version "4.4.2" resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" @@ -7434,10 +7581,10 @@ lodash@^4.17.10: resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.10.tgz#1b7793cf7259ea38fb3661d4d38b3260af8ae4e7" integrity sha512-UejweD1pDoXu+AD825lWwp4ZGtSwgnpZxb3JDViD7StjQz+Nb/6l093lx4OQ0foGWNRoc19mWy7BzL+UAK2iVg== -log-driver@1.2.5: - version "1.2.5" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.5.tgz#7ae4ec257302fd790d557cb10c97100d857b0056" - integrity sha1-euTsJXMC/XkNVXyxDJcQDYV7AFY= +log-driver@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" + integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== log-symbols@^2.0.0: version "2.2.0" @@ -7446,11 +7593,16 @@ log-symbols@^2.0.0: dependencies: chalk "^2.0.1" -lolex@^2.2.0, lolex@^2.3.2: +lolex@^2.3.2: version "2.6.0" resolved "https://registry.yarnpkg.com/lolex/-/lolex-2.6.0.tgz#cf9166f3c9dece3cdeb5d6b01fce50f14a1203e3" integrity sha512-e1UtIo1pbrIqEXib/yMjHciyqkng5lc0rrIbytgjmRgDR9+2ceNIAcwOWSgylRjoEP9VdVguCSRwnNmlbnOUwA== +lolex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/lolex/-/lolex-3.0.0.tgz#f04ee1a8aa13f60f1abd7b0e8f4213ec72ec193e" + integrity sha512-hcnW80h3j2lbUfFdMArd5UPA/vxZJ+G8vobd+wg3nVEQA0EigStbYcrG030FJxL6xiDDPEkoMatV9xIh5OecQQ== + longest-streak@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.2.tgz#2421b6ba939a443bb9ffebf596585a50b4c38e2e" @@ -7494,6 +7646,11 @@ lru-cache@^4.0.0, lru-cache@^4.0.1, lru-cache@^4.1.1: pseudomap "^1.0.2" yallist "^2.1.2" +macos-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-1.1.0.tgz#831945e29365b470aa8724b0ab36c8f8959d10fb" + integrity sha512-mmLbumEYMi5nXReB9js3WGsB8UE6cDBWyIO62Z4DNx6GbRhDxHNjA1MlzSpJ2S2KM1wyiPRA0d19uHWYYvMHjA== + magic-string@^0.22.4: version "0.22.4" resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.22.4.tgz#31039b4e40366395618c1d6cf8193c53917475ff" @@ -7508,6 +7665,13 @@ make-dir@^1.0.0: dependencies: pify "^3.0.0" +make-dir@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + map-cache@^0.2.0, map-cache@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" @@ -7571,6 +7735,13 @@ md5-hex@^1.2.0: dependencies: md5-o-matic "^0.1.1" +md5-hex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/md5-hex/-/md5-hex-2.0.0.tgz#d0588e9f1c74954492ecd24ac0ac6ce997d92e33" + integrity sha1-0FiOnxx0lUSS7NJKwKxs6ZfZLjM= + dependencies: + md5-o-matic "^0.1.1" + md5-o-matic@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/md5-o-matic/-/md5-o-matic-0.1.1.tgz#822bccd65e117c514fab176b25945d54100a03c3" @@ -7730,7 +7901,7 @@ meow@^5.0.0: trim-newlines "^2.0.0" yargs-parser "^10.0.0" -merge-source-map@^1.0.2: +merge-source-map@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== @@ -7922,6 +8093,14 @@ minipass@^2.2.0, minipass@^2.2.1: dependencies: yallist "^3.0.0" +minipass@^2.3.0: + version "2.3.5" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.5.tgz#cacebe492022497f656b0f0f51e2682a9ed2d848" + integrity sha512-Gi1W4k059gyRbyVUZQ4mEqLm0YIUiGYfvxhF6SIlk3ui1WVxMTGfGdQ2SInh3PDrRTVvPKgULkpJtT4RH10+VA== + dependencies: + safe-buffer "^5.1.2" + yallist "^3.0.0" + minipass@^2.3.3: version "2.3.3" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.3.3.tgz#a7dcc8b7b833f5d368759cce544dccb55f50f233" @@ -8102,6 +8281,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-build-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.1.tgz#1381a0f92c39d66bf19852e7873432fc2123e508" + integrity sha512-boQj1WFgQH3v4clhu3mTNfP+vOBxorDlE8EKiMjUlLG3C4qAESnn9AxIOkFgTR2c9LtzNjPrjS60cT27ZKBhaA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -8140,13 +8324,13 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== -nise@^1.2.0: - version "1.3.3" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.3.3.tgz#c17a850066a8a1dfeb37f921da02441afc4a82ba" - integrity sha512-v1J/FLUB9PfGqZLGDBhQqODkbLotP0WtLo9R4EJY2PPu5f5Xg4o0rA8FDlmrjFSv9vBBKcfnOSpfYYuu5RTHqg== +nise@^1.4.6: + version "1.4.6" + resolved "https://registry.yarnpkg.com/nise/-/nise-1.4.6.tgz#76cc3915925056ae6c405dd8ad5d12bde570c19f" + integrity sha512-1GedetLKzmqmgwabuMSqPsT7oumdR77SBpDfNNJhADRIeA3LN/2RVqR4fFqwvzhAqcTef6PPCzQwITE/YQ8S8A== dependencies: - "@sinonjs/formatio" "^2.0.0" - just-extend "^1.1.27" + "@sinonjs/formatio" "3.0.0" + just-extend "^3.0.0" lolex "^2.3.2" path-to-regexp "^1.7.0" text-encoding "^0.6.4" @@ -8401,48 +8585,15 @@ number-is-nan@^1.0.0: resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= -nwsapi@^2.0.7: +nwsapi@^2.0.9: version "2.0.9" resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.0.9.tgz#77ac0cdfdcad52b6a1151a84e73254edc33ed016" integrity sha512-nlWFSCTYQcHk/6A9FFnfhKc14c3aFhfdNBXgo8Qgi9QTBu/qg3Ww+Uiz9wMzXd1T8GFxPc2QIHB6Qtf2XFryFQ== -nyc@^10.1.2: - version "10.3.2" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-10.3.2.tgz#f27f4d91f2a9db36c24f574ff5c6efff0233de46" - integrity sha1-8n9NkfKp2zbCT1dP9cbv/wIz3kY= - dependencies: - archy "^1.0.0" - arrify "^1.0.1" - caching-transform "^1.0.0" - convert-source-map "^1.3.0" - debug-log "^1.0.1" - default-require-extensions "^1.0.0" - find-cache-dir "^0.1.1" - find-up "^1.1.2" - foreground-child "^1.5.3" - glob "^7.0.6" - istanbul-lib-coverage "^1.1.0" - istanbul-lib-hook "^1.0.6" - istanbul-lib-instrument "^1.7.1" - istanbul-lib-report "^1.1.0" - istanbul-lib-source-maps "^1.2.0" - istanbul-reports "^1.1.0" - md5-hex "^1.2.0" - merge-source-map "^1.0.2" - micromatch "^2.3.11" - mkdirp "^0.5.0" - resolve-from "^2.0.0" - rimraf "^2.5.4" - signal-exit "^3.0.1" - spawn-wrap "1.2.4" - test-exclude "^4.1.0" - yargs "^7.1.0" - yargs-parser "^5.0.0" - -nyc@^11.3.0: - version "11.5.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.5.0.tgz#29795d8217885e8b384d849fbe74956d58be2252" - integrity sha512-xIYK189By0YiM5/T4TviHu3J7bV7lCj5WYJfyZK3z03QgAaQ60WcLaJuXf0zhKoI6PBnUR92ZpSwBICCrgSBGg== +nyc@^11.8.0: + version "11.9.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-11.9.0.tgz#4106e89e8fbe73623a1fc8b6ecb7abaa271ae1e4" + integrity sha512-w8OdJAhXL5izerzZMdqzYKMj/pgHJyY3qEPYBjLLxrhcVoHEY9pU5ENIiZyCgG9OR7x3VcUMoD40o6PtVpfR4g== dependencies: archy "^1.0.0" arrify "^1.0.1" @@ -8456,22 +8607,53 @@ nyc@^11.3.0: glob "^7.0.6" istanbul-lib-coverage "^1.1.2" istanbul-lib-hook "^1.1.0" - istanbul-lib-instrument "^1.9.2" + istanbul-lib-instrument "^1.10.0" istanbul-lib-report "^1.1.3" istanbul-lib-source-maps "^1.2.3" - istanbul-reports "^1.1.4" + istanbul-reports "^1.4.0" md5-hex "^1.2.0" - merge-source-map "^1.0.2" - micromatch "^2.3.11" + merge-source-map "^1.1.0" + micromatch "^3.1.10" mkdirp "^0.5.0" resolve-from "^2.0.0" - rimraf "^2.5.4" + rimraf "^2.6.2" signal-exit "^3.0.1" spawn-wrap "^1.4.2" test-exclude "^4.2.0" - yargs "^10.0.3" + yargs "11.1.0" yargs-parser "^8.0.0" +nyc@^13.1.0: + version "13.1.0" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-13.1.0.tgz#463665c7ff6b5798e322624a5eb449a678db90e3" + integrity sha512-3GyY6TpQ58z9Frpv4GMExE1SV2tAgYqC7HSy2omEhNiCT3mhT9NyiOvIE8zkbuJVFzmvvNTnE4h/7/wQae7xLg== + dependencies: + archy "^1.0.0" + arrify "^1.0.1" + caching-transform "^2.0.0" + convert-source-map "^1.6.0" + debug-log "^1.0.1" + find-cache-dir "^2.0.0" + find-up "^3.0.0" + foreground-child "^1.5.6" + glob "^7.1.3" + istanbul-lib-coverage "^2.0.1" + istanbul-lib-hook "^2.0.1" + istanbul-lib-instrument "^3.0.0" + istanbul-lib-report "^2.0.2" + istanbul-lib-source-maps "^2.0.1" + istanbul-reports "^2.0.1" + make-dir "^1.3.0" + merge-source-map "^1.1.0" + resolve-from "^4.0.0" + rimraf "^2.6.2" + signal-exit "^3.0.2" + spawn-wrap "^1.4.2" + test-exclude "^5.0.0" + uuid "^3.3.2" + yargs "11.1.0" + yargs-parser "^9.0.2" + oauth-sign@~0.8.1, oauth-sign@~0.8.2: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" @@ -8647,6 +8829,14 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" +os-name@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-2.0.1.tgz#b9a386361c17ae3a21736ef0599405c9a8c5dc5e" + integrity sha1-uaOGNhwXrjohc27wWZQFyajF3F4= + dependencies: + macos-release "^1.0.0" + win-release "^1.0.0" + os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -8660,7 +8850,7 @@ osenv@0, osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" -own-or-env@^1.0.0: +own-or-env@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-or-env/-/own-or-env-1.0.1.tgz#54ce601d3bf78236c5c65633aa1c8ec03f8007e4" integrity sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw== @@ -8737,6 +8927,16 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.0.0.tgz#85080bb87c64688fa47996fe8f7dfbe8211760b1" integrity sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ== +package-hash@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-2.0.0.tgz#78ae326c89e05a4d813b68601977af05c00d2a0d" + integrity sha1-eK4ybIngWk2BO2hgGXevBcANKg0= + dependencies: + graceful-fs "^4.1.11" + lodash.flattendeep "^4.4.0" + md5-hex "^2.0.0" + release-zalgo "^1.0.0" + package-json@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" @@ -8856,6 +9056,11 @@ parse-ms@^1.0.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-1.0.1.tgz#56346d4749d78f23430ca0c713850aef91aa361d" integrity sha1-VjRtR0nXjyNDDKDHE4UK75GqNh0= +parse-passwd@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" + integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= + parse-url@^1.3.0: version "1.3.11" resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-1.3.11.tgz#57c15428ab8a892b1f43869645c711d0e144b554" @@ -8864,10 +9069,10 @@ parse-url@^1.3.0: is-ssh "^1.3.0" protocols "^1.4.0" -parse5@4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" - integrity sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA== +parse5@5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" + integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== parse5@^3.0.1, parse5@^3.0.3: version "3.0.3" @@ -9074,6 +9279,13 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + platform@^1.3.3: version "1.3.5" resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" @@ -9094,6 +9306,11 @@ pngjs@^3.0.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.2.tgz#097c3c2a75feb223eadddea6bc9f0050cf830bc3" integrity sha512-bVNd3LMXRzdo6s4ehr4XW2wFMu9cb40nPgHEjSSppm8/++Xc+g0b2QQb+SeDesgfANXbjydOr1or9YQ+pcCZPQ== +pngjs@^3.3.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.3.3.tgz#85173703bde3edac8998757b96e5821d0966a21b" + integrity sha512-1n3Z4p3IOxArEs1VRXnZ/RXdfEniAUS9jb68g58FIXMNkPJeZd+Qh4Uq7/e0LVxAQGos1eIUrqrt4FpjdnEd+Q== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" @@ -9166,21 +9383,21 @@ postcss-js@^1.0.1: camelcase-css "^1.0.1" postcss "^6.0.11" -postcss-jsx@^0.34.0: - version "0.34.0" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.34.0.tgz#5a122af914f911fab4a9b8fcf3adc73c2dfe1bdd" - integrity sha512-UJISlEGWH/LeMYudAwq9GeqfyPW9AeRq87GHOlbquxOIakKr0Aqu6l9Cx0Fg20f3A9bKJcX1NGX4/xzIs7PlZQ== +postcss-jsx@^0.35.0: + version "0.35.0" + resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.35.0.tgz#1d6cb82393994cdc7e9aa421648e3f0f3f98209b" + integrity sha512-AU2/9QDmHYJRxTiniMt2bJ9fwCzVF6n00VnR4gdnFGHeXRW2mGwoptpuPgYjfivkdI8LlNIuo+w8TyS6a4JhJw== dependencies: - "@babel/core" "^7.0.0" + "@babel/core" "^7.1.2" optionalDependencies: postcss-styled ">=0.34.0" -postcss-less@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-2.0.0.tgz#5d190b8e057ca446d60fe2e2587ad791c9029fb8" - integrity sha512-pPNsVnpCB13nBMOcl5GVh8JGmB0JGFjqkLUDzKdVpptFFKEe9wFdEzvh2j4lD2AD+7qcrUfw9Ta+oi5+Fw7jjQ== +postcss-less@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.0.2.tgz#9cf94e2cc90f8566858939e278fb9f0b713908df" + integrity sha512-+JBOampmDnuaf4w8OIEqkCiF+sOm/nWukDsC+1FTrYcIstptOISzGpYZk24Qh+Ewlmzmi53sRyiTbiGvMCDRwA== dependencies: - postcss "^5.2.16" + postcss "^7.0.3" postcss-load-config@^1.1.0: version "1.2.0" @@ -9308,7 +9525,7 @@ postcss-value-parser@^3.3.1: resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss@^5.0.14, postcss@^5.2.16: +postcss@^5.0.14: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" integrity sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg== @@ -9336,7 +9553,7 @@ postcss@^6.0.11, postcss@^6.0.21, postcss@^6.0.23: source-map "^0.6.1" supports-color "^5.4.0" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.5: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.2, postcss@^7.0.3, postcss@^7.0.5: version "7.0.5" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.5.tgz#70e6443e36a6d520b0fd4e7593fcca3635ee9f55" integrity sha512-HBNpviAUFCKvEh7NZhw1e8MBPivRszIiUnhrJ+sBFVSYSqubrzwX3KG51mYgcRHX8j/cAgZJedONZcm5jTBdgQ== @@ -9350,22 +9567,23 @@ potpack@^1.0.1: resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== -prebuild-install@^2.1.1: - version "2.5.1" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-2.5.1.tgz#0f234140a73760813657c413cdccdda58296b1da" - integrity sha512-3DX9L6pzwc1m1ksMkW3Ky2WLgPQUBiySOfXVl3WZyAeJSyJb4wtoH9OmeRGcubAWsMlLiL8BTHbwfm/jPQE9Ag== +prebuild-install@^5.1.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.2.1.tgz#87ba8cf17c65360a75eefeb3519e87973bf9791d" + integrity sha512-9DAccsInWHB48TBQi2eJkLPE049JuAI6FjIH0oIrij4bpDVEbX6JvlWRAcAAlUqBHhjgq0jNqA3m3bBXWm9v6w== dependencies: detect-libc "^1.0.3" expand-template "^1.0.2" github-from-package "0.0.0" minimist "^1.2.0" mkdirp "^0.5.1" + napi-build-utils "^1.0.1" node-abi "^2.2.0" noop-logger "^0.1.1" npmlog "^4.0.1" os-homedir "^1.0.1" pump "^2.0.1" - rc "^1.1.6" + rc "^1.2.7" simple-get "^2.7.0" tar-fs "^1.13.0" tunnel-agent "^0.6.0" @@ -9594,11 +9812,6 @@ qs@^6.4.0, qs@~6.5.1: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" integrity sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A== -qs@~6.3.0: - version "6.3.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.3.2.tgz#e75bd5f6e268122a2a0e0bda630b2550c166502c" - integrity sha1-51vV9uJoEioqDgvaYwslUMFmUCw= - qs@~6.4.0: version "6.4.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" @@ -9995,6 +10208,13 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= + dependencies: + es6-error "^4.0.1" + remark-html@7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-7.0.0.tgz#d13dc1ba9352e257fce8800c42c7690d9e3690c8" @@ -10263,32 +10483,6 @@ request@2, request@^2.79.0: tunnel-agent "^0.6.0" uuid "^3.1.0" -request@2.79.0: - version "2.79.0" - resolved "https://registry.yarnpkg.com/request/-/request-2.79.0.tgz#4dfe5bf6be8b8cdc37fcf93e04b65577722710de" - integrity sha1-Tf5b9r6LjNw3/Pk+BLZVd3InEN4= - dependencies: - aws-sign2 "~0.6.0" - aws4 "^1.2.1" - caseless "~0.11.0" - combined-stream "~1.0.5" - extend "~3.0.0" - forever-agent "~0.6.1" - form-data "~2.1.1" - har-validator "~2.0.6" - hawk "~3.1.3" - http-signature "~1.1.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.7" - oauth-sign "~0.8.1" - qs "~6.3.0" - stringstream "~0.0.4" - tough-cookie "~2.3.0" - tunnel-agent "~0.4.1" - uuid "^3.0.0" - request@2.81.0: version "2.81.0" resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" @@ -10317,7 +10511,7 @@ request@2.81.0: tunnel-agent "^0.6.0" uuid "^3.0.0" -request@^2.87.0: +request@^2.85.0, request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -10366,6 +10560,14 @@ require-uncached@^1.0.3: caller-path "^0.1.0" resolve-from "^1.0.0" +resolve-dir@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/resolve-dir/-/resolve-dir-1.0.1.tgz#79a40644c362be82f26effe739c9bb5382046f43" + integrity sha1-eaQGRMNivoLybv/nOcm7U4IEb0M= + dependencies: + expand-tilde "^2.0.0" + global-modules "^1.0.0" + resolve-from@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" @@ -10446,7 +10648,7 @@ right-align@^0.1.1: dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.3.3, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: +rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== @@ -10608,16 +10810,18 @@ safe-regex@^1.1.0: resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== -samsam@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/samsam/-/samsam-1.3.0.tgz#8d1d9350e25622da30de3e44ba692b5221ab7c50" - integrity sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg== - sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== +saxes@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.3.tgz#334ab3b802a465ccda96fff9bdefbd505546ffa8" + integrity sha512-Nc5DXc5A+m3rUDtkS+vHlBWKT7mCKjJPyia7f8YMW773hsXVv2wEHQZGE0zs4+5PLwz9U5Sbl/94Cnd9vHV7Bg== + dependencies: + xmlchars "^1.3.1" + schema-utils@^0.4.5: version "0.4.5" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.4.5.tgz#21836f0608aac17b78f9e3e24daff14a5ca13a3e" @@ -10807,11 +11011,6 @@ shuffle-seed@^1.1.6: dependencies: seedrandom "^2.4.2" -signal-exit@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-2.1.2.tgz#375879b1f92ebc3b334480d038dc546a6d558564" - integrity sha1-N1h5sfkuvDszRIDQONxUam1VhWQ= - signal-exit@^3.0.0, signal-exit@^3.0.1, signal-exit@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" @@ -10831,18 +11030,20 @@ simple-get@^2.7.0: once "^1.3.1" simple-concat "^1.0.0" -sinon@^5.0.0: - version "5.0.7" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-5.0.7.tgz#3bded6a73613ccc9e512e20246ced69a27c27dab" - integrity sha512-GvNLrwpvLZ8jIMZBUhHGUZDq5wlUdceJWyHvZDmqBxnjazpxY1L0FNbGBX6VpcOEoQ8Q4XMWFzm2myJMvx+VjA== +sinon@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.1.1.tgz#1202f317aa14d93cb9b69ff50b6bd49c0e05ffc9" + integrity sha512-iYagtjLVt1vN3zZY7D8oH7dkjNJEjLjyuzy8daX5+3bbQl8gaohrheB9VfH1O3L6LKuue5WTJvFluHiuZ9y3nQ== dependencies: - "@sinonjs/formatio" "^2.0.0" - diff "^3.1.0" + "@sinonjs/commons" "^1.2.0" + "@sinonjs/formatio" "^3.0.0" + "@sinonjs/samsam" "^2.1.2" + diff "^3.5.0" lodash.get "^4.4.2" - lolex "^2.2.0" - nise "^1.2.0" - supports-color "^5.1.0" - type-detect "^4.0.5" + lolex "^3.0.0" + nise "^1.4.6" + supports-color "^5.5.0" + type-detect "^4.0.8" sitemap-static@^0.4.2: version "0.4.2" @@ -10941,7 +11142,7 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" -source-map-support@^0.4.15, source-map-support@^0.4.18: +source-map-support@^0.4.15: version "0.4.18" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== @@ -10956,7 +11157,7 @@ source-map-support@^0.5.4: buffer-from "^1.0.0" source-map "^0.6.0" -source-map-support@~0.5.6: +source-map-support@^0.5.6, source-map-support@~0.5.6: version "0.5.9" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.9.tgz#41bc953b2534267ea2d605bccfa7bfa3111ced5f" integrity sha512-gR6Rw4MvUlYy83vP0vxoVNzM6t8MUXqNuRsuBmBHQDu1Fh6X015FrLdgoDKcNdkwGubozq0P4N0Q37UyFVr1EA== @@ -11000,18 +11201,6 @@ space-separated-tokens@^1.0.0: dependencies: trim "0.0.1" -spawn-wrap@1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.2.4.tgz#920eb211a769c093eebfbd5b0e7a5d2e68ab2e40" - integrity sha1-kg6yEadpwJPuv71bDnpdLmirLkA= - dependencies: - foreground-child "^1.3.3" - mkdirp "^0.5.0" - os-homedir "^1.0.1" - rimraf "^2.3.3" - signal-exit "^2.0.0" - which "^1.2.4" - spawn-wrap@^1.4.2: version "1.4.2" resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.2.tgz#cff58e73a8224617b6561abdc32586ea0c82248c" @@ -11378,10 +11567,10 @@ stylelint-config-standard@^18.2.0: dependencies: stylelint-config-recommended "^2.1.0" -stylelint@^9.6.0: - version "9.6.0" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.6.0.tgz#f0b366f33b6ccf3e5096d60722ed27b6470b41d8" - integrity sha512-Q0UcbFPRiC+3FejNyIBAWbMuKwZNAC0kvZtGQbjwA9LMKDod6xMlBsiIigQxmE3ywpmTeFj3mkG5Jj36EfC7XA== +stylelint@^9.7.1: + version "9.7.1" + resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.7.1.tgz#522f8795832a9f7e062e5e4105c0e05fb53f827f" + integrity sha512-w3Xxnm2YElBmNAhmTjkTEyklAU2P+R8QMqDVM3S98zRLNPNLcCRXWzqtYsItbZYHQzSNOa6K20KxPVPfD8SFAw== dependencies: autoprefixer "^9.0.0" balanced-match "^1.0.0" @@ -11391,13 +11580,14 @@ stylelint@^9.6.0: execall "^1.0.0" file-entry-cache "^2.0.0" get-stdin "^6.0.0" + global-modules "^1.0.0" globby "^8.0.0" globjoin "^0.1.4" html-tags "^2.0.0" ignore "^4.0.0" import-lazy "^3.1.0" imurmurhash "^0.1.4" - known-css-properties "^0.8.0" + known-css-properties "^0.9.0" leven "^2.1.0" lodash "^4.17.4" log-symbols "^2.0.0" @@ -11408,8 +11598,8 @@ stylelint@^9.6.0: pify "^4.0.0" postcss "^7.0.0" postcss-html "^0.34.0" - postcss-jsx "^0.34.0" - postcss-less "^2.0.0" + postcss-jsx "^0.35.0" + postcss-less "^3.0.1" postcss-markdown "^0.34.0" postcss-media-query-parser "^0.2.3" postcss-reporter "^6.0.0" @@ -11470,13 +11660,6 @@ supports-color@^4.1.0, supports-color@^4.2.1: dependencies: has-flag "^2.0.0" -supports-color@^5.1.0, supports-color@^5.3.0, supports-color@^5.4.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" - integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== - dependencies: - has-flag "^3.0.0" - supports-color@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.2.0.tgz#b0d5333b1184dd3666cbe5aa0b45c5ac7ac17a4a" @@ -11484,6 +11667,13 @@ supports-color@^5.2.0: dependencies: has-flag "^3.0.0" +supports-color@^5.3.0, supports-color@^5.4.0: + version "5.4.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.4.0.tgz#1c6b337402c2137605efe19f10fec390f6faab54" + integrity sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w== + dependencies: + has-flag "^3.0.0" + supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -11518,10 +11708,10 @@ table@^5.0.0, table@^5.0.2: slice-ansi "1.0.0" string-width "^2.1.1" -tap-mocha-reporter@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.6.tgz#12abe97ff409a5a6ecc3d70b6dba34d82184a770" - integrity sha512-UImgw3etckDQCoqZIAIKcQDt0w1JLVs3v0yxLlmwvGLZl6MGFxF7JME5PElXjAoDklVDU42P3vVu5jgr37P4Yg== +tap-mocha-reporter@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.7.tgz#235e57893b500861ea5d0924965dadfb2f05eaa7" + integrity sha512-GHVXJ38C3oPRpM3YUc43JlGdpVZYiKeT1fmAd3HH2+J+ZWwsNAUFvRRdoGsXLw9+gU9o+zXpBqhS/oXyRQYwlA== dependencies: color-support "^1.1.0" debug "^2.1.3" @@ -11553,38 +11743,38 @@ tap-parser@^7.0.0: js-yaml "^3.2.7" minipass "^2.2.0" -tap@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/tap/-/tap-11.1.2.tgz#93d3c89b78b67ac659b58dd3f5db2df0445bfe2a" - integrity sha512-uQ4OJ+/2+KJU2Jotozsb35wQVhOweqKb14lz3Md6AZcsOhZ9kYkvxn6h+f1WusBnG/Uk5vBLWvQRb7lgr4Z7Wg== +tap@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/tap/-/tap-12.0.1.tgz#748f103d3ae84dce21e555b7112ec5a19adeb6d0" + integrity sha512-iEJytWaZy8risvfRjuV4+ST+Lrrui/MW2ZCWn01ZaMn0NKFej4+PpBy6bXGOg9+cEGNmI7d3Sdka/zTUZUGidA== dependencies: - bind-obj-methods "^1.0.0" + bind-obj-methods "^2.0.0" bluebird "^3.5.1" clean-yaml-object "^0.1.0" color-support "^1.1.0" - coveralls "^2.13.3" + coveralls "^3.0.1" foreground-child "^1.3.3" fs-exists-cached "^1.0.0" function-loop "^1.0.1" glob "^7.0.0" isexe "^2.0.0" - js-yaml "^3.10.0" - minipass "^2.2.1" + js-yaml "^3.11.0" + minipass "^2.3.0" mkdirp "^0.5.1" - nyc "^11.3.0" + nyc "^11.8.0" opener "^1.4.1" os-homedir "^1.0.2" own-or "^1.0.0" - own-or-env "^1.0.0" + own-or-env "^1.0.1" rimraf "^2.6.2" signal-exit "^3.0.0" - source-map-support "^0.4.18" + source-map-support "^0.5.6" stack-utils "^1.0.0" - tap-mocha-reporter "^3.0.6" + tap-mocha-reporter "^3.0.7" tap-parser "^7.0.0" - tmatch "^3.1.0" + tmatch "^4.0.0" trivial-deferred "^1.0.1" - tsame "^1.1.2" + tsame "^2.0.0" write-file-atomic "^2.3.0" yapool "^1.0.0" @@ -11707,7 +11897,7 @@ terser@^3.8.2: source-map "~0.6.1" source-map-support "~0.5.6" -test-exclude@^4.1.0, test-exclude@^4.2.0: +test-exclude@^4.2.0: version "4.2.0" resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-4.2.0.tgz#07e3613609a362c74516a717515e13322ab45b3c" integrity sha512-8hMFzjxbPv6xSlwGhXSvOMJ/vTy3bkng+2pxmf6E1z6VF7I9nIyNfvHtaw+NBPgvz647gADBbMSbwLfZYppT/w== @@ -11718,6 +11908,16 @@ test-exclude@^4.1.0, test-exclude@^4.2.0: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +test-exclude@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.0.0.tgz#cdce7cece785e0e829cd5c2b27baf18bc583cfb7" + integrity sha512-bO3Lj5+qFa9YLfYW2ZcXMOV1pmQvw+KS/DpjqhyX6Y6UZ8zstpZJ+mA2ERkXfpOqhxsJlQiLeVXD3Smsrs6oLw== + dependencies: + arrify "^1.0.1" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^1.0.1" + text-encoding@^0.6.4: version "0.6.4" resolved "https://registry.yarnpkg.com/text-encoding/-/text-encoding-0.6.4.tgz#e399a982257a276dae428bb92845cb71bdc26d19" @@ -11808,10 +12008,10 @@ tinyqueue@^1.1.0: resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-1.2.3.tgz#b6a61de23060584da29f82362e45df1ec7353f3d" integrity sha512-Qz9RgWuO9l8lT+Y9xvbzhPT2efIUIFd69N7eF7tJ9lnQl0iLj1M7peK7IoUGZL9DJHw9XftqLreccfxcQgYLxA== -tmatch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-3.1.0.tgz#701264fd7582d0144a80c85af3358cca269c71e3" - integrity sha512-W3MSATOCN4pVu2qFxmJLIArSifeSOFqnfx9hiUaVgOmeRoI2NbU7RNga+6G+L8ojlFeQge+ZPCclWyUpQ8UeNQ== +tmatch@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-4.0.0.tgz#ba178007f30bf6a70f37c643fca5045fb2f8c448" + integrity sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg== tmp@^0.0.33: version "0.0.33" @@ -11896,7 +12096,7 @@ tough-cookie@>=2.3.3, tough-cookie@~2.3.0, tough-cookie@~2.3.3: dependencies: punycode "^1.4.1" -tough-cookie@^2.3.4, tough-cookie@~2.4.3: +tough-cookie@^2.4.3, tough-cookie@~2.4.3: version "2.4.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.4.3.tgz#53f36da3f47783b0925afa06ff9f3b165280f781" integrity sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ== @@ -11904,7 +12104,7 @@ tough-cookie@^2.3.4, tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" -tr46@^1.0.0, tr46@^1.0.1: +tr46@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= @@ -11956,10 +12156,10 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.1.tgz#a9fd8b0394b0ae8fff82e0633a0a36ccad5b5f86" integrity sha1-qf2LA5Swro//guBjOgo2zK1bX4Y= -tsame@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/tsame/-/tsame-1.1.2.tgz#5ce0002acf685942789c63018797a2aa5e6b03c5" - integrity sha512-ovCs24PGjmByVPr9tSIOs/yjUX9sJl0grEmOsj9dZA/UknQkgPOKcUqM84aSCvt9awHuhc/boMzTg3BHFalxWw== +tsame@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/tsame/-/tsame-2.0.0.tgz#4923c805cbd789775eca33b9d0c67b358a7d86a8" + integrity sha512-dAuzcnOPdqZYojylFQzEes95UDjve3HqKrlTCeLZKSDPMTsn3smzHZqsJj/sWD8wOUkg0RD++B11evyLn2+bIw== tslib@^1.9.0: version "1.9.3" @@ -11983,11 +12183,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel-agent@~0.4.1: - version "0.4.3" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.4.3.tgz#6373db76909fe570e08d73583365ed828a74eeeb" - integrity sha1-Y3PbdpCf5XDgjXNYM2Xtgop07us= - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -12000,7 +12195,7 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" -type-detect@^4.0.5: +type-detect@4.0.8, type-detect@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== @@ -12041,6 +12236,14 @@ uglify-js@^2.6, uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" +uglify-js@^3.1.4: + version "3.4.9" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.9.tgz#af02f180c1207d76432e473ed24a28f4a782bae3" + integrity sha512-8CJsbKOtEbnJsTyv6LE6m6ZKniqMiFWmm9sRbopbkGs3gMPPfd3Fh8iIA4Ykv5MgaTbqHr4BaoGLJLZNhsrW1Q== + dependencies: + commander "~2.17.1" + source-map "~0.6.1" + uglify-js@^3.3.16: version "3.4.6" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.4.6.tgz#bc546d53f3e02b05d97d0ca5a7abfe0fb0384ddb" @@ -12276,6 +12479,13 @@ unist-util-visit@^1.3.0: dependencies: unist-util-visit-parents "^2.0.0" +universal-user-agent@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-2.0.1.tgz#18e591ca52b1cb804f6b9cbc4c336cf8191f80e1" + integrity sha512-vz+heWVydO0iyYAa65VHD7WZkYzhl7BeNVy4i54p4TF8OMiLSXdbuQe4hm+fmWAsL+rVibaQHXfhvkw3c1Ws2w== + dependencies: + os-name "^2.0.1" + universalify@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.1.tgz#fa71badd4437af4c148841e3b3b165f9e9e590b7" @@ -12610,6 +12820,15 @@ w3c-hr-time@^1.0.1: dependencies: browser-process-hrtime "^0.1.2" +w3c-xmlserializer@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.0.0.tgz#d23e20de595b892056f20a359fc2622908d48695" + integrity sha512-0et1+9uXYiIRAecx1D5Z1nk60+vimniGdIKl4XjeqkWi6acoHNlXMv1VR5jV+jF4ooeO08oWbYxeAJOcon1oMA== + dependencies: + domexception "^1.0.1" + webidl-conversions "^4.0.2" + xml-name-validator "^3.0.0" + watchpack@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.4.0.tgz#4a1472bcbb952bd0a9bb4036801f954dfb39faac" @@ -12624,7 +12843,7 @@ web-namespaces@^1.0.0: resolved "https://registry.yarnpkg.com/web-namespaces/-/web-namespaces-1.1.1.tgz#742d9fff61ff84f4164f677244f42d29c10c451d" integrity sha1-dC2f/2H/hPQWT2dyRPQtKcEMRR0= -webidl-conversions@^4.0.1, webidl-conversions@^4.0.2: +webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== @@ -12697,36 +12916,34 @@ wgs84@0.0.0: resolved "https://registry.yarnpkg.com/wgs84/-/wgs84-0.0.0.tgz#34fdc555917b6e57cf2a282ed043710c049cdc76" integrity sha1-NP3FVZF7blfPKigu0ENxDASc3HY= -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3: +whatwg-encoding@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.3.tgz#57c235bc8657e914d24e1a397d3c82daee0a6ba3" integrity sha512-jLBwwKUhi8WtBfsMQlL4bUUcT8sMkAtQinscJAe/M4KHCkHuUJAF6vuB0tueNIw4c8ziO6AkRmgY+jL3a0iiPw== dependencies: iconv-lite "0.4.19" +whatwg-encoding@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" + integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== + dependencies: + iconv-lite "0.4.24" + whatwg-fetch@>=0.10.0: version "2.0.3" resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz#9c84ec2dcf68187ff00bc64e1274b442176e1c84" integrity sha1-nITsLc9oGH/wC8ZOEnS0QhduHIQ= -whatwg-mimetype@^2.0.0, whatwg-mimetype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.1.0.tgz#f0f21d76cbba72362eb609dbed2a30cd17fcc7d4" - integrity sha512-FKxhYLytBQiUKjkYteN71fAUA3g6KpNXoho1isLiLSB3N1G4F35Q5vUxWfKFhBwi5IWF27VE6WxhrnnC+m0Mew== - -whatwg-url@^6.4.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.4.0.tgz#08fdf2b9e872783a7a1f6216260a1d66cc722e08" - integrity sha512-Z0CVh/YE217Foyb488eo+iBv+r7eAQ0wSTyApi9n06jhcA3z6Nidg/EGvl0UFkg7kMdKxfBzzr+o9JF+cevgMg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.0" - webidl-conversions "^4.0.1" +whatwg-mimetype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.2.0.tgz#a3d58ef10b76009b042d03e25591ece89b88d171" + integrity sha512-5YSO1nMd5D1hY3WzAQV3PzZL83W3YeyR1yW9PcH26Weh1t+Vzh9B6XkDh7aXm83HBZ4nSMvkjvN2H2ySWIvBgw== -whatwg-url@^6.4.1: - version "6.5.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-6.5.0.tgz#f2df02bff176fd65070df74ad5ccbb5a199965a8" - integrity sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ== +whatwg-url@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.0.0.tgz#fde926fa54a599f3adf82dff25a9f7be02dc6edd" + integrity sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ== dependencies: lodash.sortby "^4.7.0" tr46 "^1.0.1" @@ -12747,13 +12964,20 @@ which-pm-runs@^1.0.0: resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= -which@1, which@^1.2.4, which@^1.2.9, which@^1.3.0: +which@1, which@^1.2.9, which@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" integrity sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg== dependencies: isexe "^2.0.0" +which@^1.2.14: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + wide-align@^1.1.0: version "1.1.2" resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" @@ -12768,6 +12992,13 @@ widest-line@^2.0.0: dependencies: string-width "^2.1.1" +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha1-X6VeAr58qTTt/BJmVjLoSbcuUgk= + dependencies: + semver "^5.0.1" + window-size@0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" @@ -12846,10 +13077,10 @@ write@^0.2.1: dependencies: mkdirp "^0.5.1" -ws@^5.2.0: - version "5.2.2" - resolved "https://registry.yarnpkg.com/ws/-/ws-5.2.2.tgz#dffef14866b8e8dc9133582514d1befaf96e980f" - integrity sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA== +ws@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.0.tgz#119a9dbf92c54e190ec18d10e871d55c95cf9373" + integrity sha512-H3dGVdGvW2H8bnYpIDc3u3LH8Wue3Qh+Zto6aXXFzvESkTVT6rAfKR6tR/+coaUvxs8yHtmNV0uioBF62ZGSTg== dependencies: async-limiter "~1.0.0" @@ -12883,6 +13114,11 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== +xmlchars@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-1.3.1.tgz#1dda035f833dbb4f86a0c28eaa6ca769214793cf" + integrity sha512-tGkGJkN8XqCod7OT+EvGYK5Z4SfDQGD30zAa58OcnAa0RRWgzUEK72tkXhsX1FZd+rgnhRxFtmO+ihkp8LHSkw== + xmlhttprequest@1: version "1.8.0" resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" @@ -12940,13 +13176,6 @@ yargs-parser@^3.2.0: camelcase "^3.0.0" lodash.assign "^4.1.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -12954,7 +13183,7 @@ yargs-parser@^7.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^8.0.0, yargs-parser@^8.1.0: +yargs-parser@^8.0.0: version "8.1.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-8.1.0.tgz#f1376a33b6629a5d063782944da732631e966950" integrity sha512-yP+6QqN8BmrgW2ggLtTbdrOyBNSI7zBa4IykmiV5R1wl1JWNxQvWhMfMdmzIYtKU7oP3OOInY/tl2ov3BDjnJQ== @@ -12968,6 +13197,24 @@ yargs-parser@^9.0.2: dependencies: camelcase "^4.1.0" +yargs@11.1.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== + 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" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^9.0.2" + yargs@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" @@ -12988,24 +13235,6 @@ yargs@5.0.0: y18n "^3.2.1" yargs-parser "^3.2.0" -yargs@^10.0.3: - version "10.1.2" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-10.1.2.tgz#454d074c2b16a51a43e2fb7807e4f9de69ccb5c5" - integrity sha512-ivSoxqBGYOqQVruxD35+EyCFDYNEFL/Uo6FcOnz+9xZdZzK0Zzw4r4KhbrME1Oo2gOggwJod2MnsdamSG7H9ig== - 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" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^2.0.0" - which-module "^2.0.0" - y18n "^3.2.1" - yargs-parser "^8.1.0" - yargs@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" @@ -13024,25 +13253,6 @@ yargs@^11.0.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yargs@^8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" From 081863d3b5fe2ec13dd7e7c03ebda125cd14daaa Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Wed, 7 Nov 2018 10:09:38 -0800 Subject: [PATCH 059/115] fix shaky sprites on scrollZoom (#7558) --- src/ui/handler/scroll_zoom.js | 12 ++++++++++++ src/ui/map.js | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index dc829616215..0082c270cba 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -33,6 +33,7 @@ class ScrollZoomHandler { _el: HTMLElement; _enabled: boolean; _active: boolean; + _zooming: boolean; _aroundCenter: boolean; _around: Point; _aroundPoint: Point; @@ -78,10 +79,19 @@ class ScrollZoomHandler { return !!this._enabled; } + /* + * Active state is turned on and off with every scroll wheel event and is set back to false before the map + * render is called, so _active is not a good candidate for determining if a scroll zoom animation is in + * progress. + */ isActive() { return !!this._active; } + + isZooming() { + return !!this._zooming; + } /** * Enables the "scroll to zoom" interaction. * @@ -182,6 +192,7 @@ class ScrollZoomHandler { } this._active = true; + this._zooming = true; this._map.fire(new Event('movestart', {originalEvent: e})); this._map.fire(new Event('zoomstart', {originalEvent: e})); if (this._finishTimeout) { @@ -261,6 +272,7 @@ class ScrollZoomHandler { if (finished) { this._active = false; this._finishTimeout = setTimeout(() => { + this._zooming = false; this._map.fire(new Event('zoomend', {originalEvent: this._lastWheelEvent})); this._map.fire(new Event('moveend', {originalEvent: this._lastWheelEvent})); delete this._targetZoom; diff --git a/src/ui/map.js b/src/ui/map.js index ce2fe9e8984..5d7be0168db 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -644,7 +644,7 @@ class Map extends Camera { */ isZooming(): boolean { return this._zooming || - this.scrollZoom.isActive(); + this.scrollZoom.isZooming(); } /** From c666e297b32da2c677e3b8203fc20dae678e2407 Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Wed, 7 Nov 2018 10:54:11 -0800 Subject: [PATCH 060/115] fix shaky sprites on scrollZoom (#7558) (#7564) --- src/ui/handler/scroll_zoom.js | 12 ++++++++++++ src/ui/map.js | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.js index fb06392245c..143eab2592d 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.js @@ -33,6 +33,7 @@ class ScrollZoomHandler { _el: HTMLElement; _enabled: boolean; _active: boolean; + _zooming: boolean; _aroundCenter: boolean; _around: Point; _aroundPoint: Point; @@ -78,10 +79,19 @@ class ScrollZoomHandler { return !!this._enabled; } + /* + * Active state is turned on and off with every scroll wheel event and is set back to false before the map + * render is called, so _active is not a good candidate for determining if a scroll zoom animation is in + * progress. + */ isActive() { return !!this._active; } + + isZooming() { + return !!this._zooming; + } /** * Enables the "scroll to zoom" interaction. * @@ -182,6 +192,7 @@ class ScrollZoomHandler { } this._active = true; + this._zooming = true; this._map.fire(new Event('movestart', {originalEvent: e})); this._map.fire(new Event('zoomstart', {originalEvent: e})); if (this._finishTimeout) { @@ -261,6 +272,7 @@ class ScrollZoomHandler { if (finished) { this._active = false; this._finishTimeout = setTimeout(() => { + this._zooming = false; this._map.fire(new Event('zoomend', {originalEvent: this._lastWheelEvent})); this._map.fire(new Event('moveend', {originalEvent: this._lastWheelEvent})); delete this._targetZoom; diff --git a/src/ui/map.js b/src/ui/map.js index ce2fe9e8984..5d7be0168db 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -644,7 +644,7 @@ class Map extends Camera { */ isZooming(): boolean { return this._zooming || - this.scrollZoom.isActive(); + this.scrollZoom.isZooming(); } /** From 7b4be8d247c7351df83316eed0f8d20d3a184722 Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Wed, 7 Nov 2018 20:16:06 +0100 Subject: [PATCH 061/115] Upgrade Flow to v0.85 and remove flow-coverage-report (#7565) * upgrade flow to v0.85 * fix lint * remove flow-coverage-report It was broken anyway, upgrading doesn't help, and we haven't really used it. --- .flowconfig | 2 +- bench/benchmarks/worker_transfer.js | 2 +- package.json | 4 +- src/geo/transform.js | 6 +- src/style-spec/expression/index.js | 12 +- src/style-spec/expression/types.js | 2 + .../validate/validate_expression.js | 2 +- src/symbol/placement.js | 4 +- yarn.lock | 173 +----------------- 9 files changed, 28 insertions(+), 179 deletions(-) diff --git a/.flowconfig b/.flowconfig index d34b00fedc3..87637bf3a89 100644 --- a/.flowconfig +++ b/.flowconfig @@ -17,4 +17,4 @@ .*/_site/.* [version] -0.77.0 +0.85.0 diff --git a/bench/benchmarks/worker_transfer.js b/bench/benchmarks/worker_transfer.js index c1c74e2f3cc..b1ca7c2bf56 100644 --- a/bench/benchmarks/worker_transfer.js +++ b/bench/benchmarks/worker_transfer.js @@ -54,7 +54,7 @@ export default class WorkerTransfer extends Benchmark { }); } - sendPayload(obj: any) { + sendPayload(obj: any): Promise { return new Promise((resolve) => { this.worker.onmessage = () => resolve(); this.worker.postMessage(obj); diff --git a/package.json b/package.json index 0a4e327e288..d4ce945445a 100644 --- a/package.json +++ b/package.json @@ -57,8 +57,7 @@ "eslint-plugin-import": "^2.14.0", "eslint-plugin-react": "^7.11.1", "execcommand-copy": "^1.1.0", - "flow-bin": "^0.77.0", - "flow-coverage-report": "^0.3.0", + "flow-bin": "^0.85.0", "github-slugger": "^1.1.1", "gl": "^4.1.1", "glob": "^7.0.3", @@ -140,7 +139,6 @@ "test-query": "node test/query.test.js", "test-expressions": "build/run-node test/expression.test.js", "test-flow": "build/run-node build/generate-flow-typed-style-spec && flow .", - "test-flow-cov": "flow-coverage-report -i 'src/**/*.js' -t html", "test-cov": "nyc --require=@mapbox/flow-remove-types/register --reporter=text-summary --reporter=lcov --cache run-s test-unit test-expressions test-query test-render", "prepublishOnly": "run-s build-flow-types build-dev build-prod-min build-prod build-css build-style-spec test-build", "codegen": "build/run-node build/generate-style-code.js && build/run-node build/generate-struct-arrays.js" diff --git a/src/geo/transform.js b/src/geo/transform.js index 3445e4e93c6..27098256336 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.js @@ -7,10 +7,12 @@ import Point from '@mapbox/point-geometry'; import { wrap, clamp } from '../util/util'; import {number as interpolate} from '../style-spec/util/interpolate'; import tileCover from '../util/tile_cover'; -import { CanonicalTileID, UnwrappedTileID } from '../source/tile_id'; +import { UnwrappedTileID } from '../source/tile_id'; import EXTENT from '../data/extent'; import { vec4, mat4, mat2 } from 'gl-matrix'; +import type { OverscaledTileID, CanonicalTileID } from '../source/tile_id'; + /** * A single transform, generally used for a single tile to be * scaled, rotated, and zoomed. @@ -244,7 +246,7 @@ class Transform { reparseOverscaled?: boolean, renderWorldCopies?: boolean } - ) { + ): Array { let z = this.coveringZoomLevel(options); const actualZ = z; diff --git a/src/style-spec/expression/index.js b/src/style-spec/expression/index.js index 11bb9bd262a..7a92e3d2423 100644 --- a/src/style-spec/expression/index.js +++ b/src/style-spec/expression/index.js @@ -17,7 +17,7 @@ import RuntimeError from './runtime_error'; import { success, error } from '../util/result'; import { supportsPropertyExpression, supportsZoomExpression, supportsInterpolation } from '../util/properties'; -import type {Type} from './types'; +import type {Type, EvaluationKind} from './types'; import type {Value} from './values'; import type {Expression} from './expression'; import type {StylePropertySpecification} from '../style-spec'; @@ -120,7 +120,7 @@ export function createExpression(expression: mixed, propertySpec: StylePropertyS return success(new StyleExpression(parsed, propertySpec)); } -export class ZoomConstantExpression { +export class ZoomConstantExpression { kind: Kind; isStateDependent: boolean; _styleExpression: StyleExpression; @@ -128,7 +128,7 @@ export class ZoomConstantExpression { constructor(kind: Kind, expression: StyleExpression) { this.kind = kind; this._styleExpression = expression; - this.isStateDependent = kind !== 'constant' && !isConstant.isStateConstant(expression.expression); + this.isStateDependent = kind !== ('constant': EvaluationKind) && !isConstant.isStateConstant(expression.expression); } evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState): any { @@ -140,7 +140,7 @@ export class ZoomConstantExpression { } } -export class ZoomDependentExpression { +export class ZoomDependentExpression { kind: Kind; zoomStops: Array; isStateDependent: boolean; @@ -152,7 +152,7 @@ export class ZoomDependentExpression { this.kind = kind; this.zoomStops = zoomCurve.labels; this._styleExpression = expression; - this.isStateDependent = kind !== 'camera' && !isConstant.isStateConstant(expression.expression); + this.isStateDependent = kind !== ('camera': EvaluationKind) && !isConstant.isStateConstant(expression.expression); if (zoomCurve instanceof Interpolate) { this._interpolationType = zoomCurve.interpolation; } @@ -254,7 +254,7 @@ export class StylePropertyFunction { _parameters: PropertyValueSpecification; _specification: StylePropertySpecification; - kind: 'constant' | 'source' | 'camera' | 'composite'; + kind: EvaluationKind; evaluate: (globals: GlobalProperties, feature?: Feature) => any; interpolationFactor: ?(input: number, lower: number, upper: number) => number; zoomStops: ?Array; diff --git a/src/style-spec/expression/types.js b/src/style-spec/expression/types.js index f86eda0b5aa..1956102590a 100644 --- a/src/style-spec/expression/types.js +++ b/src/style-spec/expression/types.js @@ -11,6 +11,8 @@ export type ErrorTypeT = { kind: 'error' }; export type CollatorTypeT = { kind: 'collator' }; export type FormattedTypeT = { kind: 'formatted' }; +export type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite'; + export type Type = NullTypeT | NumberTypeT | diff --git a/src/style-spec/validate/validate_expression.js b/src/style-spec/validate/validate_expression.js index 453d16495d4..eea82f9e7a9 100644 --- a/src/style-spec/validate/validate_expression.js +++ b/src/style-spec/validate/validate_expression.js @@ -6,7 +6,7 @@ import { createExpression, createPropertyExpression } from '../expression'; import { deepUnbundle } from '../util/unbundle_jsonlint'; import { isStateConstant } from '../expression/is_constant'; -export default function validateExpression(options: any) { +export default function validateExpression(options: any): Array { const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec); if (expression.result === 'error') { return expression.value.map((error) => { diff --git a/src/symbol/placement.js b/src/symbol/placement.js index 29df64e6f21..eb877898113 100644 --- a/src/symbol/placement.js +++ b/src/symbol/placement.js @@ -132,6 +132,7 @@ export class Placement { this.placements = {}; this.opacities = {}; this.stale = false; + this.commitTime = 0; this.fadeDuration = fadeDuration; this.retainedQueryData = {}; this.collisionGroups = new CollisionGroups(crossSourceCollisions); @@ -501,8 +502,7 @@ export class Placement { } stillRecent(now: number) { - return this.commitTime !== 'undefined' && - this.commitTime + this.fadeDuration > now; + return this.commitTime + this.fadeDuration > now; } setStale() { diff --git a/yarn.lock b/yarn.lock index 8fb124bc137..aa3ddd08059 100644 --- a/yarn.lock +++ b/yarn.lock @@ -863,14 +863,6 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= -array.prototype.find@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.0.tgz#56a9ab1edde2a7701ed6d9166acec338919d8430" - integrity sha1-VqmrHt3ip3Ae1tkWas7DOJGdhDA= - dependencies: - define-properties "^1.1.2" - es-abstract "^1.5.0" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -1781,14 +1773,6 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@6.11.6: - version "6.11.6" - resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.11.6.tgz#6db707fef2d49c49bfa3cb64efdb436b518b8222" - integrity sha1-bbcH/vLUnEm/o8tk79tDa1GLgiI= - dependencies: - core-js "^2.4.0" - regenerator-runtime "^0.9.5" - babel-runtime@^6.18.0, babel-runtime@^6.2.0, babel-runtime@^6.22.0, babel-runtime@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" @@ -2016,7 +2000,7 @@ boxen@^1.2.1: term-size "^1.2.0" widest-line "^2.0.0" -brace-expansion@^1.0.0, brace-expansion@^1.1.7: +brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== @@ -2787,11 +2771,6 @@ color-support@^1.1.0: resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== -colors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63" - integrity sha1-FopHAXVran9RoSzgyXv6KMCE7WM= - colors@latest: version "1.3.1" resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.1.tgz#4accdb89cf2cabc7f982771925e9468784f32f3d" @@ -4089,11 +4068,6 @@ earcut@^2.1.3: resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.1.3.tgz#ca579545f351941af7c3d0df49c9f7d34af99b0c" integrity sha512-AxdCdWUk1zzK/NuZ7e1ljj6IGC+VAdC3Qb7QQDsXpfNrc5IM8tL9nNXUmEGE6jRHTfZ10zhzRhtDmWVsR5pd3A== -eastasianwidth@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.1.1.tgz#44d656de9da415694467335365fb3147b8572b7c" - integrity sha1-RNZW3p2kFWlEZzNTZfsxR7hXK3w= - ecc-jsbn@~0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" @@ -4212,7 +4186,7 @@ error@^7.0.0: string-template "~0.2.1" xtend "~4.0.0" -es-abstract@^1.4.3, es-abstract@^1.5.0, es-abstract@^1.6.1, es-abstract@^1.7.0: +es-abstract@^1.4.3, es-abstract@^1.6.1, es-abstract@^1.7.0: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" integrity sha512-/uh/DhdqIOSkAWifU+8nG78vlQxdLckUdI/sPgy0VhuXi2qJ7T8czBmqIYtLQVpCIFYafChnsRsB5pyb1JdmCQ== @@ -4792,7 +4766,7 @@ faye-websocket@~0.10.0: dependencies: websocket-driver ">=0.5.1" -fbjs@^0.8.16, fbjs@^0.8.4: +fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" integrity sha1-XmdDL1UNxBtXK/VYR7ispk5TN9s= @@ -4947,28 +4921,10 @@ flat-cache@^1.2.1: graceful-fs "^4.1.2" write "^0.2.1" -flow-bin@^0.77.0: - version "0.77.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.77.0.tgz#4e5c93929f289a0c28e08fb361a9734944a11297" - integrity sha1-TlyTkp8omgwo4I+zYalzSUShEpc= - -flow-coverage-report@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/flow-coverage-report/-/flow-coverage-report-0.3.0.tgz#a22d52fc9fa9c24ae0be02712a6fe1ac156f0d93" - integrity sha1-oi1S/J+pwkrgvgJxKm/hrBVvDZM= - dependencies: - array.prototype.find "2.0.0" - babel-runtime "6.11.6" - glob "7.0.5" - minimatch "3.0.3" - mkdirp "0.5.1" - parse-json "2.2.0" - react "15.3.1" - react-dom "15.3.1" - strip-json-comments "2.0.1" - temp "0.8.3" - terminal-table "0.0.12" - yargs "5.0.0" +flow-bin@^0.85.0: + version "0.85.0" + resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.85.0.tgz#a3ca80748a35a071d5bbb2fcd61d64d977fc53a6" + integrity sha512-ougBA2q6Rn9sZrjZQ9r5pTFxCotlGouySpD2yRIuq5AYwwfIT8HHhVMeSwrN5qJayjHINLJyrnsSkkPCZyfMrQ== flush-write-stream@^1.0.0: version "1.0.2" @@ -5366,18 +5322,6 @@ glob-to-regexp@^0.3.0: resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= -glob@7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.0.5.tgz#b4202a69099bbb4d292a7c1b95b6682b67ebdc95" - integrity sha1-tCAqaQmbu00pKnwblbZoK2fr3JU= - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.2" - once "^1.3.0" - path-is-absolute "^1.0.0" - glob@^5.0.14: version "5.0.15" resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" @@ -7380,11 +7324,6 @@ lodash.assign@^3.2.0: lodash._createassigner "^3.0.0" lodash.keys "^3.0.0" -lodash.assign@^4.1.0, lodash.assign@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" - integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= - lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -8051,13 +7990,6 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimatch@3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.3.tgz#2a4e4090b96b2db06a9d7df01055a62a77c9b774" - integrity sha1-Kk5AkLlrLbBqnX3wEFWmKnfJt3Q= - dependencies: - brace-expansion "^1.0.0" - minimist-options@^3.0.1: version "3.0.2" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" @@ -8140,7 +8072,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: +"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -8813,13 +8745,6 @@ os-homedir@^1.0.0, os-homedir@^1.0.1, os-homedir@^1.0.2: resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - 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" @@ -9036,7 +8961,7 @@ parse-glob@^3.0.4: is-extglob "^1.0.0" is-glob "^2.0.0" -parse-json@2.2.0, parse-json@^2.2.0: +parse-json@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= @@ -9917,11 +9842,6 @@ react-attr-converter@^0.3.1: resolved "https://registry.yarnpkg.com/react-attr-converter/-/react-attr-converter-0.3.1.tgz#4a2abf6d907b7ddae4d862dfec80e489ce41ad6e" integrity sha512-dSxo2Mn6Zx4HajeCeQNLefwEO4kNtV/0E682R1+ZTyFRPqxDa5zYb5qM/ocqw9Bxr/kFQO0IUiqdV7wdHw+Cdg== -react-dom@15.3.1: - version "15.3.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.1.tgz#6d42cd2b64c8c5e0b693f3ffaec301e6e627e24e" - integrity sha1-bULNK2TIxeC2k/P/rsMB5uYn4k4= - react-dom@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.2.0.tgz#69003178601c0ca19b709b33a83369fe6124c044" @@ -9950,15 +9870,6 @@ react-side-effect@^1.1.0: exenv "^1.2.1" shallowequal "^1.0.1" -react@15.3.1: - version "15.3.1" - resolved "https://registry.yarnpkg.com/react/-/react-15.3.1.tgz#f78501ed8c2ec6e6e31c3223652e97f1369d2bd6" - integrity sha1-94UB7YwuxubjHDIjZS6X8TadK9Y= - dependencies: - fbjs "^0.8.4" - loose-envify "^1.1.0" - object-assign "^4.1.0" - react@^16.0.0: version "16.2.0" resolved "https://registry.yarnpkg.com/react/-/react-16.2.0.tgz#a31bd2dab89bff65d42134fa187f24d054c273ba" @@ -10126,11 +10037,6 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.9.5: - version "0.9.6" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.9.6.tgz#d33eb95d0d2001a4be39659707c51b0cb71ce029" - integrity sha1-0z65XQ0gAaS+OWWXB8UbDLcc4Ck= - regenerator-transform@^0.10.0: version "0.10.1" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.10.1.tgz#1e4996837231da8b7f3cf4114d71b5691a0680dd" @@ -10655,11 +10561,6 @@ rimraf@2, rimraf@^2.2.8, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2. dependencies: glob "^7.0.5" -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= - ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.1.tgz#0f4584295c53a3628af7e6d79aca21ce57d1c6e7" @@ -11545,7 +11446,7 @@ strip-indent@^2.0.0: resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= -strip-json-comments@2.0.1, strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: +strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= @@ -11849,14 +11750,6 @@ temp-dir@^1.0.0: resolved "https://registry.yarnpkg.com/temp-dir/-/temp-dir-1.0.0.tgz#0a7c0ea26d3a39afa7e0ebea9c1fc0bc4daa011d" integrity sha1-CnwOom06Oa+n4OvqnB/AvE2qAR0= -temp@0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" - integrity sha1-4Ma8TSa5AxJEEOT+2BEDAU38H1k= - dependencies: - os-tmpdir "^1.0.0" - rimraf "~2.2.6" - tempfile@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/tempfile/-/tempfile-1.1.1.tgz#5bcc4eaecc4ab2c707d8bc11d99ccc9a2cb287f2" @@ -11880,14 +11773,6 @@ term-size@^1.2.0: dependencies: execa "^0.7.0" -terminal-table@0.0.12: - version "0.0.12" - resolved "https://registry.yarnpkg.com/terminal-table/-/terminal-table-0.0.12.tgz#7b56d009aa6828dfdd10f11b654e79c062965fa2" - integrity sha1-e1bQCapoKN/dEPEbZU55wGKWX6I= - dependencies: - colors "^1.0.3" - eastasianwidth "^0.1.0" - terser@^3.8.2: version "3.10.1" resolved "https://registry.yarnpkg.com/terser/-/terser-3.10.1.tgz#59c8cf87262d59e018ded4df30f834b602b1e232" @@ -12949,11 +12834,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" @@ -13004,11 +12884,6 @@ window-size@0.1.0: resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= -window-size@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" - integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= - wordwrap@0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" @@ -13168,14 +13043,6 @@ yargs-parser@^10.0.0: dependencies: camelcase "^4.1.0" -yargs-parser@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-3.2.0.tgz#5081355d19d9d0c8c5d81ada908cb4e6d186664f" - integrity sha1-UIE1XRnZ0MjF2BrakIy05tGGZk8= - dependencies: - camelcase "^3.0.0" - lodash.assign "^4.1.0" - yargs-parser@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" @@ -13215,26 +13082,6 @@ yargs@11.1.0: y18n "^3.2.1" yargs-parser "^9.0.2" -yargs@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-5.0.0.tgz#3355144977d05757dbb86d6e38ec056123b3a66e" - integrity sha1-M1UUSXfQV1fbuG1uOOwFYSOzpm4= - dependencies: - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - lodash.assign "^4.2.0" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - window-size "^0.2.0" - y18n "^3.2.1" - yargs-parser "^3.2.0" - yargs@^11.0.0: version "11.0.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-11.0.0.tgz#c052931006c5eee74610e5fc0354bedfd08a201b" From f7723f4a4308ed3fe29b974c009fb1ea56199529 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Fri, 2 Nov 2018 11:03:14 -0700 Subject: [PATCH 062/115] Fix build target script in package file --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 46e878b27a2..c430cd3d636 100644 --- a/package.json +++ b/package.json @@ -125,7 +125,7 @@ "start-debug": "run-p build-token watch-css watch-dev start-server", "start-bench": "run-p build-token watch-benchmarks watch-style-benchmarks start-server", "build-docs": "documentation build --github --format json --config ./docs/documentation.yml --output docs/components/api.json src/index.js", - "build": "run-s build-docs && . build/set-deploy-env.sh && batfish build # invoked by publisher when publishing docs on the mb-pages branch", + "build": "run-s build-docs && batfish build # invoked by publisher when publishing docs on the mb-pages branch", "start-docs": "run-s build-prod-min build-css build-docs && DEPLOY_ENV=local batfish start", "lint": "eslint --cache --ignore-path .gitignore src test bench docs docs/pages/example/*.html debug/*.html", "lint-docs": "documentation lint src/index.js", From b811bb4e861e3239528dcc6d0f8a7d17559f6b8d Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Wed, 7 Nov 2018 14:57:44 -0800 Subject: [PATCH 063/115] v-2.51.0 --- CHANGELOG.md | 7 ++++--- package.json | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a40c2d9e104..43e87640ebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,9 @@ -## 0.51.0-beta.1 -(Release date TBD) +## 0.51.0 +November 7, 2018 ### ✨ Features and improvements * Add initial bounds as map constructor option ([#5518](https://github.com/mapbox/mapbox-gl-js/pull/5518)) (h/t [stepankuzmin](https://github.com/stepankuzmin)) -* Improve performance on mahcines with > 8 cores ([#7407](https://github.com/mapbox/mapbox-gl-js/issues/7407), fixed by [#7430](https://github.com/mapbox/mapbox-gl-js/pull/7430)) +* Improve performance on machines with > 8 cores ([#7407](https://github.com/mapbox/mapbox-gl-js/issues/7407), fixed by [#7430](https://github.com/mapbox/mapbox-gl-js/pull/7430)) * Add `MercatorCoordinate` type ([#7488](https://github.com/mapbox/mapbox-gl-js/pull/7488)) * Allow browser-native `contextmenu` to be enabled ([#2301](https://github.com/mapbox/mapbox-gl-js/issues/2301), fixed by [#7369](https://github.com/mapbox/mapbox-gl-js/pull/7369)) * Add an unminified production build to the NPM package ([#7403](https://github.com/mapbox/mapbox-gl-js/pull/7403)) @@ -24,6 +24,7 @@ * Fix display of Scale control values < 1 ([#7469](https://github.com/mapbox/mapbox-gl-js/pull/7469)) (h/t [MichaelHedman](https://github.com/MichaelHedman)) * Fix an error when using location `hash` within iframes in IE11 ([#7411](https://github.com/mapbox/mapbox-gl-js/pull/7411)) * Fix depth mode usage in custom layers ([#7432](https://github.com/mapbox/mapbox-gl-js/pull/7432)) (h/t [markusjohnsson](https://github.com/markusjohnsson)) +* Fix an issue with shaky sprite images during scroll zooms ([#7558](https://github.com/mapbox/mapbox-gl-js/pull/7558)) ## 0.50.0 diff --git a/package.json b/package.json index c430cd3d636..354626477db 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.51.0-beta.2", + "version": "0.51.0", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From 324b0d640f15351ef9fb9d7d0345e05974574620 Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Tue, 30 Oct 2018 17:34:00 -0700 Subject: [PATCH 064/115] Changelog and version bump for v0.51.0 --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6f45e9ca346..43e87640ebf 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,32 @@ +## 0.51.0 +November 7, 2018 + +### ✨ Features and improvements +* Add initial bounds as map constructor option ([#5518](https://github.com/mapbox/mapbox-gl-js/pull/5518)) (h/t [stepankuzmin](https://github.com/stepankuzmin)) +* Improve performance on machines with > 8 cores ([#7407](https://github.com/mapbox/mapbox-gl-js/issues/7407), fixed by [#7430](https://github.com/mapbox/mapbox-gl-js/pull/7430)) +* Add `MercatorCoordinate` type ([#7488](https://github.com/mapbox/mapbox-gl-js/pull/7488)) +* Allow browser-native `contextmenu` to be enabled ([#2301](https://github.com/mapbox/mapbox-gl-js/issues/2301), fixed by [#7369](https://github.com/mapbox/mapbox-gl-js/pull/7369)) +* Add an unminified production build to the NPM package ([#7403](https://github.com/mapbox/mapbox-gl-js/pull/7403)) +* Add support for `LngLat` conversion from `{lat, lon}` ([#7507](https://github.com/mapbox/mapbox-gl-js/pull/7507)) (h/t [bfrengley](https://github.com/bfrengley)) +* Add tooltips for navigation controls ([#7373](https://github.com/mapbox/mapbox-gl-js/pull/7373)) +* Show attribution only for used sources ([#7384](https://github.com/mapbox/mapbox-gl-js/pull/7384)) +* Add telemetry event to log map loads ([#7431](https://github.com/mapbox/mapbox-gl-js/pull/7431)) +* **Tighten style validation** + * Disallow expressions as stop values ([#7396](https://github.com/mapbox/mapbox-gl-js/pull/7396)) + * Disallow `feature-state` expressions in filters ([#7366](https://github.com/mapbox/mapbox-gl-js/pull/7366)) + +### 🐛 Bug fixes +* Fix for GeoJSON geometries not working when coincident with tile boundaries([#7436](https://github.com/mapbox/mapbox-gl-js/issues/7436), fixed by [#7448](https://github.com/mapbox/mapbox-gl-js/pull/7448)) +* Fix depth buffer-related rendering issues on some Android devices. ([#7471](https://github.com/mapbox/mapbox-gl-js/pull/7471)) +* Fix positioning of compact attribution strings ([#7444](https://github.com/mapbox/mapbox-gl-js/pull/7444), [#7445](https://github.com/mapbox/mapbox-gl-js/pull/7445), and [#7391](https://github.com/mapbox/mapbox-gl-js/pull/7391)) +* Fix an issue with removing markers in mouse event callbacks ([#7442](https://github.com/mapbox/mapbox-gl-js/pull/7442)) (h/t [vbud](https://github.com/vbud)) +* Remove controls before destroying a map ([#7479](https://github.com/mapbox/mapbox-gl-js/pull/7479)) +* Fix display of Scale control values < 1 ([#7469](https://github.com/mapbox/mapbox-gl-js/pull/7469)) (h/t [MichaelHedman](https://github.com/MichaelHedman)) +* Fix an error when using location `hash` within iframes in IE11 ([#7411](https://github.com/mapbox/mapbox-gl-js/pull/7411)) +* Fix depth mode usage in custom layers ([#7432](https://github.com/mapbox/mapbox-gl-js/pull/7432)) (h/t [markusjohnsson](https://github.com/markusjohnsson)) +* Fix an issue with shaky sprite images during scroll zooms ([#7558](https://github.com/mapbox/mapbox-gl-js/pull/7558)) + + ## 0.50.0 October 10, 2018 diff --git a/package.json b/package.json index d4ce945445a..2aafeb6982f 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.50.0", + "version": "0.51.0", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From 9cce4468709a0e36a0d52505a4ad0bb31e2e45b4 Mon Sep 17 00:00:00 2001 From: jingsam Date: Thu, 8 Nov 2018 17:42:55 +0800 Subject: [PATCH 065/115] refactor: unify coordinate transformation. (#7570) --- src/source/tile_bounds.js | 22 ++++++---------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/src/source/tile_bounds.js b/src/source/tile_bounds.js index f8729b77865..de9de3a47b9 100644 --- a/src/source/tile_bounds.js +++ b/src/source/tile_bounds.js @@ -1,8 +1,7 @@ // @flow import LngLatBounds from '../geo/lng_lat_bounds'; - -import { clamp } from '../util/util'; +import {mercatorXfromLng, mercatorYfromLat} from '../geo/mercator_coordinate'; import type {CanonicalTileID} from './tile_id'; @@ -24,25 +23,16 @@ class TileBounds { } contains(tileID: CanonicalTileID) { + const worldSize = Math.pow(2, tileID.z); const level = { - minX: Math.floor(this.lngX(this.bounds.getWest(), tileID.z)), - minY: Math.floor(this.latY(this.bounds.getNorth(), tileID.z)), - maxX: Math.ceil(this.lngX(this.bounds.getEast(), tileID.z)), - maxY: Math.ceil(this.latY(this.bounds.getSouth(), tileID.z)) + minX: Math.floor(mercatorXfromLng(this.bounds.getWest()) * worldSize), + minY: Math.floor(mercatorYfromLat(this.bounds.getNorth()) * worldSize), + maxX: Math.ceil(mercatorXfromLng(this.bounds.getEast()) * worldSize), + maxY: Math.ceil(mercatorYfromLat(this.bounds.getSouth()) * worldSize) }; const hit = tileID.x >= level.minX && tileID.x < level.maxX && tileID.y >= level.minY && tileID.y < level.maxY; return hit; } - - lngX(lng: number, zoom: number) { - return (lng + 180) * (Math.pow(2, zoom) / 360); - } - - latY(lat: number, zoom: number) { - const f = clamp(Math.sin(Math.PI / 180 * lat), -0.9999, 0.9999); - const scale = Math.pow(2, zoom) / (2 * Math.PI); - return Math.pow(2, zoom - 1) + 0.5 * Math.log((1 + f) / (1 - f)) * -scale; - } } export default TileBounds; From 923221169a2f6e7a10456a74e67f397f8f75a243 Mon Sep 17 00:00:00 2001 From: Dan Cervelli Date: Thu, 8 Nov 2018 01:50:29 -0800 Subject: [PATCH 066/115] Avoid unnecessary image decode. (#7550) * Avoid unnecessary image decode. * Remove unused import. --- src/source/image_source.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/source/image_source.js b/src/source/image_source.js index 221fdb9ef81..751a6b7ed6f 100644 --- a/src/source/image_source.js +++ b/src/source/image_source.js @@ -3,7 +3,6 @@ import { CanonicalTileID } from './tile_id'; import { Event, ErrorEvent, Evented } from '../util/evented'; import { getImage, ResourceType } from '../util/ajax'; -import browser from '../util/browser'; import EXTENT from '../data/extent'; import { RasterBoundsArray } from '../data/array_types'; import rasterBoundsAttributes from '../data/raster_bounds_attributes'; @@ -79,7 +78,7 @@ class ImageSource extends Evented implements Source { dispatcher: Dispatcher; map: Map; texture: Texture | null; - image: ImageData; + image: HTMLImageElement; tileID: CanonicalTileID; _boundsArray: RasterBoundsArray; boundsBuffer: VertexBuffer; @@ -114,7 +113,7 @@ class ImageSource extends Evented implements Source { if (err) { this.fire(new ErrorEvent(err)); } else if (image) { - this.image = browser.getImageData(image); + this.image = image; if (newCoordinates) { this.coordinates = newCoordinates; } From 416f2a71e17f798f573d407f113cb9774ab58f6b Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Thu, 8 Nov 2018 11:15:25 -0800 Subject: [PATCH 067/115] Implement diffing on style URLs (#7562) --- src/ui/map.js | 60 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 42 insertions(+), 18 deletions(-) diff --git a/src/ui/map.js b/src/ui/map.js index 5d7be0168db..4ab3142c291 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -6,7 +6,8 @@ import browser from '../util/browser'; import window from '../util/window'; const { HTMLImageElement, HTMLElement } = window; import DOM from '../util/dom'; -import { getImage, ResourceType } from '../util/ajax'; +import { getImage, getJSON, ResourceType } from '../util/ajax'; +import { normalizeStyleURL } from '../util/mapbox'; import Style from '../style/style'; import EvaluationParameters from '../style/evaluation_parameters'; import Painter from '../render/painter'; @@ -934,16 +935,15 @@ class Map extends Camera { } /** - * Updates the map's Mapbox style object with a new value. If the given - * value is style JSON object, compares it against the the map's current - * state and perform only the changes necessary to make the map style match - * the desired state. + * Updates the map's Mapbox style object with a new value. If a style already is set and options.diff is true, + * this compares the style against the map's current state and performs only the changes necessary to make + * the map style match the desired state. * * @param style A JSON object conforming to the schema described in the * [Mapbox Style Specification](https://mapbox.com/mapbox-gl-style-spec/), or a URL to such JSON. * @param {Object} [options] * @param {boolean} [options.diff=true] If false, force a 'full' update, removing the current style - * and adding building the given one instead of attempting a diff-based update. + * and building the given one instead of attempting a diff-based update. * @param {string} [options.localIdeographFontFamily=null] If non-null, defines a css font-family * for locally overriding generation of glyphs in the 'CJK Unified Ideographs' and 'Hangul Syllables' * ranges. Forces a full update. @@ -951,20 +951,15 @@ class Map extends Camera { * @see [Change a map's style](https://www.mapbox.com/mapbox-gl-js/example/setstyle/) */ setStyle(style: StyleSpecification | string | null, options?: {diff?: boolean} & StyleOptions) { - const shouldTryDiff = (!options || (options.diff !== false && !options.localIdeographFontFamily)) && this.style; - if (shouldTryDiff && style && typeof style === 'object') { - try { - if (this.style.setState(style)) { - this._update(true); - } - return this; - } catch (e) { - warnOnce( - `Unable to perform style diff: ${e.message || e.error || e}. Rebuilding the style from scratch.` - ); - } + if ((!options || (options.diff !== false && !options.localIdeographFontFamily)) && this.style && style) { + this._diffStyle(style, options); + return this; + } else { + return this._updateStyle(style, options); } + } + _updateStyle(style: StyleSpecification | string | null, options?: {diff?: boolean} & StyleOptions) { if (this.style) { this.style.setEventedParent(null); this.style._remove(); @@ -988,6 +983,35 @@ class Map extends Camera { return this; } + _diffStyle(style: StyleSpecification | string, options?: {diff?: boolean} & StyleOptions) { + if (typeof style === 'string') { + const url = normalizeStyleURL(style); + const request = this._transformRequest(url, ResourceType.Style); + getJSON(request, (error: ?Error, json: ?Object) => { + if (error) { + this.fire(new ErrorEvent(error)); + } else if (json) { + this._updateDiff(json, options); + } + }); + } else if (typeof style === 'object') { + this._updateDiff(style, options); + } + } + + _updateDiff(style: StyleSpecification, options?: {diff?: boolean} & StyleOptions) { + try { + if (this.style.setState(style)) { + this._update(true); + } + } catch (e) { + warnOnce( + `Unable to perform style diff: ${e.message || e.error || e}. Rebuilding the style from scratch.` + ); + this._updateStyle(style, options); + } + } + /** * Returns the map's Mapbox style object, which can be used to recreate the map's style. * From c708474eb65d9c6a117fe232b677db19525f70b4 Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Fri, 9 Nov 2018 15:57:56 -0800 Subject: [PATCH 068/115] Fix MercatorCoordinate#toLngLat docs (#7580) --- src/geo/mercator_coordinate.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/geo/mercator_coordinate.js b/src/geo/mercator_coordinate.js index 30d18bd7820..ee363142420 100644 --- a/src/geo/mercator_coordinate.js +++ b/src/geo/mercator_coordinate.js @@ -89,12 +89,12 @@ class MercatorCoordinate { } /** - * Returns the `LatLng` for the coordinate. + * Returns the `LngLat` for the coordinate. * * @returns {LngLat} The `LngLat` object. * @example * var coord = new mapboxgl.MercatorCoordinate(0.5, 0.5, 0); - * var latLng = coord.toLatLng(); // LngLat(0, 0) + * var latLng = coord.toLngLat(); // LngLat(0, 0) */ toLngLat() { return new LngLat( From d3c7405f858ace430cc87ae3b62650c64d9b252b Mon Sep 17 00:00:00 2001 From: Michael Barry Date: Mon, 12 Nov 2018 13:57:50 -0500 Subject: [PATCH 069/115] begin touch zoom immediately when rotation disabled (#7582) --- src/ui/handler/touch_zoom_rotate.js | 3 +- .../unit/ui/handler/touch_zoom_rotate.test.js | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/src/ui/handler/touch_zoom_rotate.js b/src/ui/handler/touch_zoom_rotate.js index 0b50d20ecf5..0f2ab959d81 100644 --- a/src/ui/handler/touch_zoom_rotate.js +++ b/src/ui/handler/touch_zoom_rotate.js @@ -150,7 +150,8 @@ class TouchZoomRotateHandler { // Determine 'intent' by whichever threshold is surpassed first, // then keep that state for the duration of this gesture. if (!this._gestureIntent) { - const scalingSignificantly = (Math.abs(1 - scale) > significantScaleThreshold), + // when rotation is disabled, any scale change triggers the zoom gesture to start + const scalingSignificantly = (this._rotationDisabled && scale !== 1) || (Math.abs(1 - scale) > significantScaleThreshold), rotatingSignificantly = (Math.abs(bearing) > significantRotateThreshold); if (rotatingSignificantly) { diff --git a/test/unit/ui/handler/touch_zoom_rotate.test.js b/test/unit/ui/handler/touch_zoom_rotate.test.js index 0917736c429..40fa48e80ef 100644 --- a/test/unit/ui/handler/touch_zoom_rotate.test.js +++ b/test/unit/ui/handler/touch_zoom_rotate.test.js @@ -109,3 +109,43 @@ test('TouchZoomRotateHandler does not begin a gesture if preventDefault is calle map.remove(); t.end(); }); + +test('TouchZoomRotateHandler starts zoom immediately when rotation disabled', (t) => { + const map = createMap(t); + map.touchZoomRotate.disableRotation(); + + const zoomstart = t.spy(); + const zoom = t.spy(); + const zoomend = t.spy(); + + map.on('zoomstart', zoomstart); + map.on('zoom', zoom); + map.on('zoomend', zoomend); + + simulate.touchstart(map.getCanvas(), {touches: [{clientX: 0, clientY: -5}, {clientX: 0, clientY: 5}]}); + map._renderTaskQueue.run(); + t.equal(zoomstart.callCount, 0); + t.equal(zoom.callCount, 0); + t.equal(zoomend.callCount, 0); + + simulate.touchmove(map.getCanvas(), {touches: [{clientX: 0, clientY: -5}, {clientX: 0, clientY: 6}]}); + map._renderTaskQueue.run(); + t.equal(zoomstart.callCount, 1); + t.equal(zoom.callCount, 1); + t.equal(zoomend.callCount, 0); + + simulate.touchmove(map.getCanvas(), {touches: [{clientX: 0, clientY: -5}, {clientX: 0, clientY: 5}]}); + map._renderTaskQueue.run(); + t.equal(zoomstart.callCount, 1); + t.equal(zoom.callCount, 2); + t.equal(zoomend.callCount, 0); + + simulate.touchend(map.getCanvas(), {touches: []}); + map._renderTaskQueue.run(); + t.equal(zoomstart.callCount, 1); + t.equal(zoom.callCount, 2); + t.equal(zoomend.callCount, 1); + + map.remove(); + t.end(); +}); From 361769fd1f1c6f7c21ae7f4078efcd7ae2d542a7 Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Tue, 13 Nov 2018 14:31:36 -0800 Subject: [PATCH 070/115] Allow user to define element other than map container for full screen control (#7548) --- src/ui/control/fullscreen_control.js | 52 ++++++++++++++++--------- test/unit/ui/control/fullscreen.test.js | 17 +++++++- 2 files changed, 49 insertions(+), 20 deletions(-) diff --git a/src/ui/control/fullscreen_control.js b/src/ui/control/fullscreen_control.js index 539a26b549b..c5c6fbb3bb9 100644 --- a/src/ui/control/fullscreen_control.js +++ b/src/ui/control/fullscreen_control.js @@ -7,26 +7,40 @@ import window from '../../util/window'; import type Map from '../map'; +type Options = { + container?: HTMLElement +}; + /** * A `FullscreenControl` control contains a button for toggling the map in and out of fullscreen mode. * * @implements {IControl} + * @param {Object} [options] + * @param {HTMLElement} [options.container] `container` is the [compatible DOM element](https://developer.mozilla.org/en-US/docs/Web/API/Element/requestFullScreen#Compatible_elements) which should be made full screen. By default, the map container element will be made full screen. + * * @example - * map.addControl(new mapboxgl.FullscreenControl()); + * map.addControl(new mapboxgl.FullscreenControl({container: document.querySelector('body')})); * @see [View a fullscreen map](https://www.mapbox.com/mapbox-gl-js/example/fullscreen/) */ class FullscreenControl { _map: Map; - _mapContainer: HTMLElement; - _container: HTMLElement; + _controlContainer: HTMLElement; _fullscreen: boolean; _fullscreenchange: string; _fullscreenButton: HTMLElement; _className: string; + _container: HTMLElement; - constructor() { + constructor(options: Options) { this._fullscreen = false; + if (options && options.container) { + if (options.container instanceof window.HTMLElement) { + this._container = options.container; + } else { + warnOnce('Full screen control \'container\' must be a DOM element.'); + } + } bindAll([ '_onClickFullscreen', '_changeIcon' @@ -45,19 +59,19 @@ class FullscreenControl { onAdd(map: Map) { this._map = map; - this._mapContainer = this._map.getContainer(); - this._container = DOM.create('div', `${this._className} mapboxgl-ctrl-group`); + if (!this._container) this._container = this._map.getContainer(); + this._controlContainer = DOM.create('div', `${this._className} mapboxgl-ctrl-group`); if (this._checkFullscreenSupport()) { this._setupUI(); } else { - this._container.style.display = 'none'; + this._controlContainer.style.display = 'none'; warnOnce('This device does not support fullscreen mode.'); } - return this._container; + return this._controlContainer; } onRemove() { - DOM.remove(this._container); + DOM.remove(this._controlContainer); this._map = (null: any); window.document.removeEventListener(this._fullscreenchange, this._changeIcon); } @@ -72,7 +86,7 @@ class FullscreenControl { } _setupUI() { - const button = this._fullscreenButton = DOM.create('button', (`${this._className}-icon ${this._className}-fullscreen`), this._container); + const button = this._fullscreenButton = DOM.create('button', (`${this._className}-icon ${this._className}-fullscreen`), this._controlContainer); button.setAttribute("aria-label", "Toggle fullscreen"); button.type = 'button'; this._fullscreenButton.addEventListener('click', this._onClickFullscreen); @@ -90,7 +104,7 @@ class FullscreenControl { (window.document: any).webkitFullscreenElement || (window.document: any).msFullscreenElement; - if ((fullscreenElement === this._mapContainer) !== this._fullscreen) { + if ((fullscreenElement === this._container) !== this._fullscreen) { this._fullscreen = !this._fullscreen; this._fullscreenButton.classList.toggle(`${this._className}-shrink`); this._fullscreenButton.classList.toggle(`${this._className}-fullscreen`); @@ -108,14 +122,14 @@ class FullscreenControl { } else if (window.document.webkitCancelFullScreen) { (window.document: any).webkitCancelFullScreen(); } - } else if (this._mapContainer.requestFullscreen) { - this._mapContainer.requestFullscreen(); - } else if ((this._mapContainer: any).mozRequestFullScreen) { - (this._mapContainer: any).mozRequestFullScreen(); - } else if ((this._mapContainer: any).msRequestFullscreen) { - (this._mapContainer: any).msRequestFullscreen(); - } else if ((this._mapContainer: any).webkitRequestFullscreen) { - (this._mapContainer: any).webkitRequestFullscreen(); + } else if (this._container.requestFullscreen) { + this._container.requestFullscreen(); + } else if ((this._container: any).mozRequestFullScreen) { + (this._container: any).mozRequestFullScreen(); + } else if ((this._container: any).msRequestFullscreen) { + (this._container: any).msRequestFullscreen(); + } else if ((this._container: any).webkitRequestFullscreen) { + (this._container: any).webkitRequestFullscreen(); } } } diff --git a/test/unit/ui/control/fullscreen.test.js b/test/unit/ui/control/fullscreen.test.js index 0c38581282b..56cf4371036 100644 --- a/test/unit/ui/control/fullscreen.test.js +++ b/test/unit/ui/control/fullscreen.test.js @@ -14,7 +14,7 @@ test('FullscreenControl appears when fullscreen is enabled', (t) => { t.end(); }); -test('FullscreenControl does not appears when fullscreen is not enabled', (t) => { +test('FullscreenControl does not appear when fullscreen is not enabled', (t) => { window.document.fullscreenEnabled = false; const consoleWarn = t.stub(console, 'warn'); @@ -27,3 +27,18 @@ test('FullscreenControl does not appears when fullscreen is not enabled', (t) => t.equal(consoleWarn.getCall(0).args[0], 'This device does not support fullscreen mode.'); t.end(); }); + +test('FullscreenControl makes optional container element full screen', (t) => { + window.document.fullscreenEnabled = true; + + const map = createMap(t); + const fullscreen = new FullscreenControl({container: window.document.querySelector('body')}); + map.addControl(fullscreen); + const control = map._controls.find((ctrl) => { + return ctrl.hasOwnProperty('_fullscreen'); + }); + control._onClickFullscreen(); + + t.equal(control._container.tagName, 'BODY'); + t.end(); +}); From db9ed0a23e3c3c883a9521883270b14b562a8a65 Mon Sep 17 00:00:00 2001 From: Jason Wray Date: Tue, 13 Nov 2018 18:30:03 -0500 Subject: [PATCH 071/115] Update style spec for gl-native's release-horchata Also, change line-progress's group to Feature Data. --- src/style-spec/reference/v8.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 6060d7c469c..4f7bb8ef828 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -2566,7 +2566,10 @@ "group": "Types", "sdk-support": { "basic functionality": { - "js": "0.48.0" + "js": "0.48.0", + "android": "6.7.0", + "ios": "4.6.0", + "macos": "0.12.0" } } }, @@ -2761,7 +2764,15 @@ }, "line-progress": { "doc": "Gets the progress along a gradient line. Can only be used in the `line-gradient` property.", - "group": "Heatmap" + "group": "Feature data", + "sdk-support": { + "basic functionality": { + "js": "0.45.0", + "android": "6.5.0", + "ios": "4.6.0", + "macos": "0.12.0" + } + } }, "+": { "doc": "Returns the sum of the inputs.", From e6374ebbd745b435064239672a9f467468d1862d Mon Sep 17 00:00:00 2001 From: Asheem Mamoowala Date: Fri, 16 Nov 2018 11:18:48 -0800 Subject: [PATCH 072/115] v13.4.0 --- src/style-spec/CHANGELOG.md | 31 ++++++++++++++++++++++++++----- src/style-spec/package.json | 2 +- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/style-spec/CHANGELOG.md b/src/style-spec/CHANGELOG.md index edcad8756a9..bb3f45e1a0a 100644 --- a/src/style-spec/CHANGELOG.md +++ b/src/style-spec/CHANGELOG.md @@ -1,23 +1,44 @@ +## 13.4.0 + +### ✨ Features and improvements +* **Tighten style validation** + * Disallow expressions as stop values ([#7396](https://github.com/mapbox/mapbox-gl-js/pull/7396)) + * Disallow `feature-state` expressions in filters ([#7366](https://github.com/mapbox/mapbox-gl-js/pull/7366)) + +## 13.3.0 + +### 🐛 Bug fixes +* **Expressions** + * Fix `let` expression stripping expected type during parsing ([#7300](https://github.com/mapbox/mapbox-gl-js/issues/7300), fixed by [#7301](https://github.com/mapbox/mapbox-gl-js/pull/7301)) + * Fix superfluous wrapping of literals in `literal` expression ([#7336](https://github.com/mapbox/mapbox-gl-js/issues/7336), fixed by [#7337](https://github.com/mapbox/mapbox-gl-js/pull/7337)) + * Allow calling `to-color` on values that are already of type `Color` ([#7260](https://github.com/mapbox/mapbox-gl-js/pull/7260)) + * Fix `to-array` for empty arrays (([#7261](https://github.com/mapbox/mapbox-gl-js/pull/7261))) + * Fix identity functions for `text-field` when using formatted text ([#7351](https://github.com/mapbox/mapbox-gl-js/pull/7351)) + * Fix coercion of `null` to `0` in `to-number` expression ([#7083](https://github.com/mapbox/mapbox-gl-js/issues/7083), fixed by [#7274](https://github.com/mapbox/mapbox-gl-js/pull/7274)) + +### ✨ Features and improvements +* Add `fill-extrusion-vertical-gradient` property for controlling shading of fill extrusions ([#5768](https://github.com/mapbox/mapbox-gl-js/issues/5768), fixed by [#6841](https://github.com/mapbox/mapbox-gl-js/pull/6841)) + ## 13.2.0 -## 🐛 Bug fixes +### 🐛 Bug fixes * Update the style-spec's old `gl-style-migrate` script to include conversion of legacy functions and filters to their expression equivalents ([#6927](https://github.com/mapbox/mapbox-gl-js/issues/6927), fixed by [#7095](https://github.com/mapbox/mapbox-gl-js/pull/7095)) -## ✨ Features and improvements +### ✨ Features and improvements * Add `symbol-z-order` symbol layout property to style spec ([#7219](https://github.com/mapbox/mapbox-gl-js/pull/7219)) * Implement data-driven styling support for `*-pattern properties` ([#6289](https://github.com/mapbox/mapbox-gl-js/pull/6289)) ## 13.1.1 -## 🐛 Bug fixes +### 🐛 Bug fixes * Fix broken module import in mapboxgl-style-spec (v13.0.1) ([#6984](https://github.com/mapbox/mapbox-gl-js/issues/6984), fixed by [#6997](https://api.github.com/repos/mapbox/mapbox-gl-js/pulls/6997)) -## ✨ Features and improvements +### ✨ Features and improvements * Improve formatting for style output ([#7029](https://github.com/mapbox/mapbox-gl-js/pull/7029)) ## 13.1.0 -## ✨ Features and improvements +### ✨ Features and improvements * Add `raster-resampling` raster paint property ([#6411](https://github.com/mapbox/mapbox-gl-js/pull/6411)) (h/t [andrewharvey](https://github.com/andrewharvey)) * Add `symbol-placement: line-center` ([#6821](https://github.com/mapbox/mapbox-gl-js/pull/6821)) diff --git a/src/style-spec/package.json b/src/style-spec/package.json index 6fb6a545b63..d755105b39c 100644 --- a/src/style-spec/package.json +++ b/src/style-spec/package.json @@ -1,7 +1,7 @@ { "name": "@mapbox/mapbox-gl-style-spec", "description": "a specification for mapbox gl styles", - "version": "13.3.0", + "version": "13.4.0", "author": "Mapbox", "keywords": [ "mapbox", From f9aa2726974b8b06e799177111f5a1c4a482f811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 8 Nov 2018 17:19:02 -0800 Subject: [PATCH 073/115] Updated style spec compatibility tables android-v6.7.0, ios-v4.5.0, ios-v4.6.0, macos-v0.12.0 --- src/style-spec/reference/v8.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index 6060d7c469c..c4e1425f1e0 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -973,7 +973,8 @@ "sdk-support": { "basic functionality": { "js": "0.49.0", - "ios": "4.5.0" + "ios": "4.5.0", + "macos": "0.12.0" }, "data-driven styling": {} }, @@ -2566,7 +2567,10 @@ "group": "Types", "sdk-support": { "basic functionality": { - "js": "0.48.0" + "js": "0.48.0", + "android": "6.7.0", + "ios": "4.6.0", + "macos": "0.12.0" } } }, From 11a031d2cc3c809ea2a8a4bd072a846c53ddbac4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Minh=20Nguy=E1=BB=85n?= Date: Thu, 8 Nov 2018 17:33:06 -0800 Subject: [PATCH 074/115] Update v8.json --- src/style-spec/reference/v8.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index c4e1425f1e0..f52a10974b1 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -973,6 +973,7 @@ "sdk-support": { "basic functionality": { "js": "0.49.0", + "android": "6.6.0", "ios": "4.5.0", "macos": "0.12.0" }, From 0b04c72ed4304e37bb0f6a659c7a474b2e7342bf Mon Sep 17 00:00:00 2001 From: Lucas Wojciechowski Date: Wed, 21 Nov 2018 09:47:04 -0800 Subject: [PATCH 075/115] Fix layout of attribution control (#7608) --- src/css/mapbox-gl.css | 6 +++--- src/ui/control/attribution_control.js | 8 +++++--- test/unit/ui/control/attribution.test.js | 16 ++++++++-------- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/css/mapbox-gl.css b/src/css/mapbox-gl.css index 72ac12357ae..39fbadf00d4 100644 --- a/src/css/mapbox-gl.css +++ b/src/css/mapbox-gl.css @@ -234,12 +234,12 @@ a.mapboxgl-ctrl-logo.mapboxgl-compact { border-radius: 12px 3px 3px 12px; } - .mapboxgl-ctrl-attrib.mapboxgl-compact > * { + .mapboxgl-ctrl-attrib.mapboxgl-compact .mapboxgl-ctrl-attrib-inner { display: none; } - .mapboxgl-ctrl-attrib.mapboxgl-compact:hover > * { - display: inline; + .mapboxgl-ctrl-attrib.mapboxgl-compact:hover .mapboxgl-ctrl-attrib-inner { + display: block; } .mapboxgl-ctrl-attrib.mapboxgl-compact::after { diff --git a/src/ui/control/attribution_control.js b/src/ui/control/attribution_control.js index d27ae6b7ead..aaf59ab99b0 100644 --- a/src/ui/control/attribution_control.js +++ b/src/ui/control/attribution_control.js @@ -28,6 +28,7 @@ class AttributionControl { options: Options; _map: Map; _container: HTMLElement; + _innerContainer: HTMLElement; _editLink: ?HTMLAnchorElement; styleId: string; styleOwner: string; @@ -51,6 +52,7 @@ class AttributionControl { this._map = map; this._container = DOM.create('div', 'mapboxgl-ctrl mapboxgl-ctrl-attrib'); + this._innerContainer = DOM.create('div', 'mapboxgl-ctrl-attrib-inner', this._container); if (compact) { this._container.classList.add('mapboxgl-compact'); @@ -120,11 +122,11 @@ class AttributionControl { attributions = attributions.concat( this.options.customAttribution.map(attribution => { if (typeof attribution !== 'string') return ''; - return `

${attribution}

`; + return attribution; }) ); } else if (typeof this.options.customAttribution === 'string') { - attributions.push(`

${this.options.customAttribution}

`); + attributions.push(this.options.customAttribution); } } @@ -155,7 +157,7 @@ class AttributionControl { return true; }); if (attributions.length) { - this._container.innerHTML = attributions.join('

|

'); + this._innerContainer.innerHTML = attributions.join(' | '); this._container.classList.remove('mapboxgl-attrib-empty'); } else { this._container.classList.add('mapboxgl-attrib-empty'); diff --git a/test/unit/ui/control/attribution.test.js b/test/unit/ui/control/attribution.test.js index d0933f44f8c..b5c71bfbeb9 100644 --- a/test/unit/ui/control/attribution.test.js +++ b/test/unit/ui/control/attribution.test.js @@ -101,7 +101,7 @@ test('AttributionControl dedupes attributions that are substrings of others', (t map.on('data', (e) => { if (e.dataType === 'source' && e.sourceDataType === 'metadata') { if (++times === 7) { - t.equal(attribution._container.innerHTML, 'Hello World

|

Another Source

|

GeoJSON Source'); + t.equal(attribution._innerContainer.innerHTML, 'Hello World | Another Source | GeoJSON Source'); t.end(); } } @@ -138,7 +138,7 @@ test('AttributionControl is hidden if empty', (t) => { const container = map.getContainer(); const checkEmptyFirst = () => { - t.equal(attribution._container.innerHTML, ''); + t.equal(attribution._innerContainer.innerHTML, ''); t.equal(container.querySelectorAll('.mapboxgl-attrib-empty').length, 1, 'includes empty class when no attribution strings are provided'); map.addSource('2', { type: 'geojson', data: { type: 'FeatureCollection', features: [] }, attribution: 'Hello World'}); @@ -146,7 +146,7 @@ test('AttributionControl is hidden if empty', (t) => { }; const checkNotEmptyLater = () => { - t.equal(attribution._container.innerHTML, 'Hello World'); + t.equal(attribution._innerContainer.innerHTML, 'Hello World'); t.equal(container.querySelectorAll('.mapboxgl-attrib-empty').length, 0, 'removes empty class when source with attribution is added'); t.end(); }; @@ -171,7 +171,7 @@ test('AttributionControl shows custom attribution if customAttribution option is }); map.addControl(attributionControl); - t.equal(attributionControl._container.innerHTML, '

Custom string

'); + t.equal(attributionControl._innerContainer.innerHTML, 'Custom string'); t.end(); }); @@ -183,7 +183,7 @@ test('AttributionControl in compact mode shows custom attribution if customAttri }); map.addControl(attributionControl); - t.equal(attributionControl._container.innerHTML, '

Custom string

'); + t.equal(attributionControl._innerContainer.innerHTML, 'Custom string'); t.end(); }); @@ -196,8 +196,8 @@ test('AttributionControl shows all custom attributions if customAttribution arra map.addControl(attributionControl); t.equal( - attributionControl._container.innerHTML, - '

Custom string

|

Another custom string

|

Some very long custom string

' + attributionControl._innerContainer.innerHTML, + 'Custom string | Another custom string | Some very long custom string' ); t.end(); }); @@ -219,7 +219,7 @@ test('AttributionControl hides attributions for sources that are not currently v map.on('data', (e) => { if (e.dataType === 'source' && e.sourceDataType === 'metadata') { if (++times === 3) { - t.equal(attribution._container.innerHTML, 'Used'); + t.equal(attribution._innerContainer.innerHTML, 'Used'); t.end(); } } From 5401d2f053e8732842e9457c14dde1b12c9d0c58 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Wed, 21 Nov 2018 11:06:25 -0800 Subject: [PATCH 076/115] Force full placement on every frame when fadeDuration === 0 Fixes issue #7609: fadeDuration 0 didn't ensure every symbol would render immediately, if collision detection took longer than 2ms. --- src/style/style.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/style/style.js b/src/style/style.js index ec55b10b8a5..cb9fda74670 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -1101,7 +1101,9 @@ class Style extends Evented { // to start over. When we start over, we do a full placement instead of incremental // to prevent starvation. // We need to restart placement to keep layer indices in sync. - const forceFullPlacement = this._layerOrderChanged; + // Also force full placement when fadeDuration === 0 to ensure that newly loaded + // tiles will fully display symbols in their first frame + const forceFullPlacement = this._layerOrderChanged || fadeDuration === 0; if (forceFullPlacement || !this.pauseablePlacement || (this.pauseablePlacement.isDone() && !this.placement.stillRecent(browser.now()))) { this.pauseablePlacement = new PauseablePlacement(transform, this._order, forceFullPlacement, showCollisionBoxes, fadeDuration, crossSourceCollisions); From 8f13dc3d9d5285c529c1d126cf28ca25462dc322 Mon Sep 17 00:00:00 2001 From: Stepan Kuzmin Date: Fri, 23 Nov 2018 17:08:40 +0300 Subject: [PATCH 077/115] fix: initial bounds resets map's pitch to 0 #7597 (#7617) --- src/ui/map.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/ui/map.js b/src/ui/map.js index 4ab3142c291..e06604de06a 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -373,16 +373,16 @@ class Map extends Camera { this._hash = options.hash && (new Hash()).addTo(this); // don't set position from options if set through hash if (!this._hash || !this._hash._onHashChange()) { + this.jumpTo({ + center: options.center, + zoom: options.zoom, + bearing: options.bearing, + pitch: options.pitch + }); + if (options.bounds) { this.resize(); this.fitBounds(options.bounds, { duration: 0 }); - } else { - this.jumpTo({ - center: options.center, - zoom: options.zoom, - bearing: options.bearing, - pitch: options.pitch - }); } } From fcaa8697e7b67675b8f842ff506ad9e14e61d85a Mon Sep 17 00:00:00 2001 From: Vladimir Agafonkin Date: Fri, 23 Nov 2018 16:55:08 +0200 Subject: [PATCH 078/115] upgrade Supercluster to v5 (#7613) --- package.json | 2 +- src/source/geojson_worker_source.js | 4 ++-- yarn.lock | 18 +++++++++--------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 2aafeb6982f..cf06af67d39 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "potpack": "^1.0.1", "quickselect": "^1.0.0", "rw": "^1.3.3", - "supercluster": "^4.1.1", + "supercluster": "^5.0.0", "tinyqueue": "^1.1.0", "vt-pbf": "^3.0.1" }, diff --git a/src/source/geojson_worker_source.js b/src/source/geojson_worker_source.js index 95defc4aa93..d8219e90880 100644 --- a/src/source/geojson_worker_source.js +++ b/src/source/geojson_worker_source.js @@ -6,7 +6,7 @@ import performance from '../util/performance'; import rewind from 'geojson-rewind'; import GeoJSONWrapper from './geojson_wrapper'; import vtpbf from 'vt-pbf'; -import supercluster from 'supercluster'; +import Supercluster from 'supercluster'; import geojsonvt from 'geojson-vt'; import assert from 'assert'; import VectorTileWorkerSource from './vector_tile_worker_source'; @@ -171,7 +171,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { try { this._geoJSONIndex = params.cluster ? - supercluster(params.superclusterOptions).load(data.features) : + new Supercluster(params.superclusterOptions).load(data.features) : geojsonvt(data, params.geojsonVtOptions); } catch (err) { return callback(err); diff --git a/yarn.lock b/yarn.lock index aa3ddd08059..c4f40891da2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7020,10 +7020,10 @@ jws@^3.1.5: jwa "^1.1.5" safe-buffer "^5.0.1" -kdbush@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-2.0.1.tgz#90c6128e3001ac68c550d7c9e2f222c0269666f1" - integrity sha512-9KqSdmWCkBIisFIGclT0FRagKhI7IVbMyUjsxCFG0Ly1Dg6whlxJ7b9lrq8ifk3X/fGeJzok1R75LQfZTfA5zQ== +kdbush@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" + integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== kebab-case@^1.0.0: version "1.0.0" @@ -11535,12 +11535,12 @@ sugarss@^2.0.0: dependencies: postcss "^7.0.2" -supercluster@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-4.1.1.tgz#cf13c3b28a3fb3db5290bfad7f524e244bd4ce78" - integrity sha512-sF0FfUOPFp96DKzwWFLeQOEqqKu2PpcesxAFeFsknA/q7g7igVVn/p3NI2XHEghNSyDAqunKNKqAbqNO8+7NDQ== +supercluster@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-5.0.0.tgz#2a5a9b1ffbd0d6180dea10039d78b5d95fdb8f27" + integrity sha512-9eeD5Q3908+tqdz+wYHHzi5mLKgnqtpO5mrjUfqr67UmGuOwBtVoQ9pJJrfcVHwMwC0wEBvfNRF9PgFOZgsOpw== dependencies: - kdbush "^2.0.1" + kdbush "^3.0.0" supports-color@^2.0.0: version "2.0.0" From c78fa7a74cb3444fb84eeca4ef8c36fba888d66a Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Mon, 26 Nov 2018 12:51:51 -0500 Subject: [PATCH 079/115] Canonicalize tile url (#7594) * canonicalize tile urls so they use config.BASE_URL * add tests for canonicalizing tile urls * address review comments * address kk's comments * make tests more readable --- src/index.js | 14 ++++ src/source/load_tilejson.js | 6 +- src/util/mapbox.js | 41 ++++++++--- test/unit/util/mapbox.test.js | 126 ++++++++++++++++++++++++++-------- 4 files changed, 150 insertions(+), 37 deletions(-) diff --git a/src/index.js b/src/index.js index ab573999084..3ae69ceab78 100644 --- a/src/index.js +++ b/src/index.js @@ -57,6 +57,20 @@ const exported = { set accessToken(token: string) { config.ACCESS_TOKEN = token; }, + /** + * Gets and sets the map's default API URL for requesting tiles, styles, sprites, and glyphs + * + * @var {string} url + * @example + * mapboxgl.baseApiUrl = 'https://api.mapbox.com'; + */ + get baseApiUrl(): ?string { + return config.API_URL; + }, + + set baseApiUrl(url: string) { + config.API_URL = url; + }, get workerCount(): number { return WorkerPool.workerCount; diff --git a/src/source/load_tilejson.js b/src/source/load_tilejson.js index 06006e8f611..b244b602a2e 100644 --- a/src/source/load_tilejson.js +++ b/src/source/load_tilejson.js @@ -4,7 +4,7 @@ import { pick } from '../util/util'; import { getJSON, ResourceType } from '../util/ajax'; import browser from '../util/browser'; -import { normalizeSourceURL as normalizeURL } from '../util/mapbox'; +import { normalizeSourceURL as normalizeURL, canonicalizeTileset } from '../util/mapbox'; import type {RequestTransformFunction} from '../ui/map'; import type {Callback} from '../types/callback'; @@ -26,6 +26,10 @@ export default function(options: any, requestTransformFn: RequestTransformFuncti result.vectorLayerIds = result.vectorLayers.map((layer) => { return layer.id; }); } + // only canonicalize tile tileset if source is declared using a tilejson url + if (options.url) { + result.tiles = canonicalizeTileset(result, options.url); + } callback(null, result); } }; diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 875455ec701..5c5dccea7c3 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -10,6 +10,7 @@ import { postData } from './ajax'; import type { RequestParameters } from './ajax'; import type { Cancelable } from '../types/cancelable'; +import type {TileJSON} from '../types/tilejson'; const help = 'See https://www.mapbox.com/api-documentation/#access-tokens'; const telemEventKey = 'mapbox.eventData'; @@ -88,6 +89,8 @@ export const normalizeSpriteURL = function(url: string, format: string, extensio }; const imageExtensionRe = /(\.(png|jpg)\d*)(?=$)/; +// matches any file extension specified by a dot and one or more alphanumeric characters +const extensionRe = /\.[\w]+$/; export const normalizeTileURL = function(tileURL: string, sourceURL?: ?string, tileSize?: ?number): string { if (!sourceURL || !isMapboxURL(sourceURL)) return tileURL; @@ -100,18 +103,40 @@ export const normalizeTileURL = function(tileURL: string, sourceURL?: ?string, t const suffix = browser.devicePixelRatio >= 2 || tileSize === 512 ? '@2x' : ''; const extension = browser.supportsWebp ? '.webp' : '$1'; urlObject.path = urlObject.path.replace(imageExtensionRe, `${suffix}${extension}`); + urlObject.path = `/v4${urlObject.path}`; - replaceTempAccessToken(urlObject.params); - return formatUrl(urlObject); + return makeAPIURL(urlObject); }; -function replaceTempAccessToken(params: Array) { - for (let i = 0; i < params.length; i++) { - if (params[i].indexOf('access_token=tk.') === 0) { - params[i] = `access_token=${config.ACCESS_TOKEN || ''}`; - } +export const canonicalizeTileURL = function(url: string) { + const version = "/v4/"; + + const urlObject = parseUrl(url); + // Make sure that we are dealing with a valid Mapbox tile URL. + // Has to begin with /v4/, with a valid filename + extension + if (!urlObject.path.match(/(^\/v4\/)/) || !urlObject.path.match(extensionRe)) { + // Not a proper Mapbox tile URL. + return url; } -} + // Reassemble the canonical URL from the parts we've parsed before. + let result = "mapbox://tiles/"; + result += urlObject.path.replace(version, ''); + + // Append the query string, minus the access token parameter. + const params = urlObject.params.filter(p => !p.match(/^access_token=/)); + if (params.length) result += `?${params.join('&')}`; + return result; +}; + +export const canonicalizeTileset = function(tileJSON: TileJSON, sourceURL: string) { + if (!isMapboxURL(sourceURL)) return tileJSON.tiles || []; + const canonical = []; + for (const url of tileJSON.tiles) { + const canonicalUrl = canonicalizeTileURL(url); + canonical.push(canonicalUrl); + } + return canonical; +}; const urlRe = /^(\w+):\/\/([^/?]*)(\/[^?]+)?\??(.+)?/; diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index 727dbf50426..c3b6fc50f88 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -28,6 +28,7 @@ test("mapbox", (t) => { t.beforeEach((callback) => { config.ACCESS_TOKEN = 'key'; + config.REQUIRE_ACCESS_TOKEN = true; callback(); }); @@ -228,40 +229,105 @@ test("mapbox", (t) => { t.end(); }); + t.test('canonicalize raster tileset', (t) => { + const tileset = {tiles: ["http://a.tiles.mapbox.com/v4/mapbox.satellite/{z}/{x}/{y}.png?access_token=key"]}; + mapbox.canonicalizeTileset(tileset, "mapbox://mapbox.satellite"); + t.deepEquals(mapbox.canonicalizeTileset(tileset, "mapbox://mapbox.satellite"), ["mapbox://tiles/mapbox.satellite/{z}/{x}/{y}.png"]); + t.end(); + }); + + t.test('canonicalize vector tileset', (t) => { + const tileset = {tiles: ["http://a.tiles.mapbox.com/v4/mapbox.streets/{z}/{x}/{y}.vector.pbf?access_token=key"]}; + t.deepEquals(mapbox.canonicalizeTileset(tileset, "mapbox://mapbox.streets"), ["mapbox://tiles/mapbox.streets/{z}/{x}/{y}.vector.pbf"]); + t.end(); + }); + + t.test('.canonicalizeTileURL', (t) => { + t.equals(mapbox.canonicalizeTileURL("http://a.tiles.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("http://b.tiles.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("https://api.mapbox.cn/v4/a.b/{z}/{x}/{y}.vector.pbf?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b,c.d/{z}/{x}/{y}.vector.pbf?access_token=key"), + "mapbox://tiles/a.b,c.d/{z}/{x}/{y}.vector.pbf"); + t.equals(mapbox.canonicalizeTileURL("http://a.tiles.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf?access_token=key&custom=parameter"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf?custom=parameter"); + t.equals(mapbox.canonicalizeTileURL("http://a.tiles.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf?custom=parameter&access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf?custom=parameter"); + t.equals(mapbox.canonicalizeTileURL("http://a.tiles.mapbox.com/v4/a.b/{z}/{x}/{y}.vector.pbf?custom=parameter&access_token=key&second=param"), + "mapbox://tiles/a.b/{z}/{x}/{y}.vector.pbf?custom=parameter&second=param"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.jpg?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.jpg"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.jpg70?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.jpg70"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.jpg?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.jpg"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.jpg70?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.jpg70"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.png"), + "mapbox://tiles/a.b/{z}/{x}/{y}.png"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.png?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.png"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.png"), + "mapbox://tiles/a.b/{z}/{x}/{y}.png"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}.png?access_token=key"), + "mapbox://tiles/a.b/{z}/{x}/{y}.png"); + + // We don't ever expect to see these inputs, but be safe anyway. + t.equals(mapbox.canonicalizeTileURL("http://path"), "http://path"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/"), "http://api.mapbox.com/v4/"); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}."), "http://api.mapbox.com/v4/a.b/{z}/{x}/{y}."); + t.equals(mapbox.canonicalizeTileURL("http://api.mapbox.com/v4/a.b/{z}/{x}/{y}/."), "http://api.mapbox.com/v4/a.b/{z}/{x}/{y}/."); + t.end(); + }); + t.test('.normalizeTileURL', (t) => { browser.supportsWebp = false; t.test('does nothing on 1x devices', (t) => { - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/tile.png'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/tile.png32'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/tile.jpg70'); + config.API_URL = 'http://path.png'; + config.REQUIRE_ACCESS_TOKEN = false; + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/v4/tile.png'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/v4/tile.png32'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/v4/tile.jpg70'); t.end(); }); t.test('inserts @2x on 2x devices', (t) => { window.devicePixelRatio = 2; - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/tile@2x.png'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/tile@2x.png32'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/tile@2x.jpg70'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource), 'http://path.png/tile@2x.png?access_token=foo'); + config.API_URL = 'http://path.png'; + config.REQUIRE_ACCESS_TOKEN = false; + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/v4/tile@2x.png'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/v4/tile@2x.png32'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/v4/tile@2x.jpg70'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource), 'http://path.png/v4/tile@2x.png?access_token=foo'); window.devicePixelRatio = 1; t.end(); }); t.test('inserts @2x when tileSize == 512', (t) => { - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource, 512), 'http://path.png/tile@2x.png'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource, 512), 'http://path.png/tile@2x.png32'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource, 512), 'http://path.png/tile@2x.jpg70'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource, 512), 'http://path.png/tile@2x.png?access_token=foo'); + config.API_URL = 'http://path.png'; + config.REQUIRE_ACCESS_TOKEN = false; + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource, 512), 'http://path.png/v4/tile@2x.png'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource, 512), 'http://path.png/v4/tile@2x.png32'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource, 512), 'http://path.png/v4/tile@2x.jpg70'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource, 512), 'http://path.png/v4/tile@2x.png?access_token=foo'); t.end(); }); t.test('replaces img extension with webp on supporting devices', (t) => { browser.supportsWebp = true; - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/tile.webp'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/tile.webp'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/tile.webp'); - t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource), 'http://path.png/tile.webp?access_token=foo'); + config.API_URL = 'http://path.png'; + config.REQUIRE_ACCESS_TOKEN = false; + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/v4/tile.webp'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/v4/tile.webp'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/v4/tile.webp'); + t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource), 'http://path.png/v4/tile.webp?access_token=foo'); browser.supportsWebp = false; t.end(); }); @@ -276,23 +342,12 @@ test("mapbox", (t) => { t.end(); }); - t.test('replace temp access tokens with the latest token', (t) => { - t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?access_token=tk.abc.123', mapboxSource), 'http://example.com/tile.png?access_token=key'); - t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?foo=bar&access_token=tk.abc.123', mapboxSource), 'http://example.com/tile.png?foo=bar&access_token=key'); - t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?access_token=tk.abc.123&foo=bar', 'mapbox://user.map'), 'http://example.com/tile.png?access_token=key&foo=bar'); - t.end(); - }); - t.test('does not modify the access token for non-mapbox sources', (t) => { + config.API_URL = 'http://example.com'; t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?access_token=tk.abc.123', nonMapboxSource), 'http://example.com/tile.png?access_token=tk.abc.123'); t.end(); }); - t.test('does not modify the access token for non temp tokens', (t) => { - t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?access_token=pk.abc.123', mapboxSource), 'http://example.com/tile.png?access_token=pk.abc.123'); - t.equal(mapbox.normalizeTileURL('http://example.com/tile.png?access_token=tkk.abc.123', mapboxSource), 'http://example.com/tile.png?access_token=tkk.abc.123'); - t.end(); - }); t.test('throw error on falsy url input', (t) => { t.throws(() => { @@ -301,8 +356,23 @@ test("mapbox", (t) => { t.end(); }); - browser.supportsWebp = true; + t.test('matches gl-native normalization', (t) => { + config.API_URL = 'https://api.mapbox.com/'; + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0.pbf", mapboxSource), "https://api.mapbox.com/v4/a.b/0/0/0.pbf?access_token=key"); + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0.pbf?style=mapbox://styles/mapbox/streets-v9@0", mapboxSource), "https://api.mapbox.com/v4/a.b/0/0/0.pbf?style=mapbox://styles/mapbox/streets-v9@0&access_token=key"); + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0.pbf?", mapboxSource), "https://api.mapbox.com/v4/a.b/0/0/0.pbf?access_token=key"); + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0.png", mapboxSource), "https://api.mapbox.com/v4/a.b/0/0/0.png?access_token=key"); + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0@2x.png", mapboxSource), "https://api.mapbox.com/v4/a.b/0/0/0@2x.png?access_token=key"); + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b,c.d/0/0/0.pbf", mapboxSource), "https://api.mapbox.com/v4/a.b,c.d/0/0/0.pbf?access_token=key"); + config.API_URL = 'https://api.example.com/'; + t.equal(mapbox.normalizeTileURL("mapbox://tiles/a.b/0/0/0.png", mapboxSource), "https://api.example.com/v4/a.b/0/0/0.png?access_token=key"); + t.equal(mapbox.normalizeTileURL("http://path", nonMapboxSource), "http://path"); + + t.end(); + }); + + browser.supportsWebp = true; t.end(); }); From aab7551fd9a87fc5c0cb0e6ac6a66ecf475121da Mon Sep 17 00:00:00 2001 From: Molly Lloyd Date: Mon, 26 Nov 2018 11:37:32 -0800 Subject: [PATCH 080/115] add validation option to style setters (#7604) * add validation option to style setters * add StyleSetterOptions type --- src/style/light.js | 16 ++++-- src/style/style.js | 29 +++++----- src/style/style_layer.js | 7 ++- src/ui/map.js | 28 +++++---- test/unit/style/light.test.js | 39 +++++++++++-- test/unit/style/style.test.js | 103 ++++++++++++++++++++++++++++++++++ 6 files changed, 184 insertions(+), 38 deletions(-) diff --git a/src/style/light.js b/src/style/light.js index 2ed7f92e00b..14beb4e3e59 100644 --- a/src/style/light.js +++ b/src/style/light.js @@ -14,7 +14,7 @@ import { number as interpolate } from '../style-spec/util/interpolate'; import type {StylePropertySpecification} from '../style-spec/style-spec'; import type EvaluationParameters from './evaluation_parameters'; - +import type {StyleSetterOptions} from '../style/style'; import { Properties, Transitionable, Transitioning, PossiblyEvaluated, DataConstantProperty } from './properties'; import type { @@ -86,13 +86,13 @@ class Light extends Evented { return this._transitionable.serialize(); } - setLight(options?: LightSpecification) { - if (this._validate(validateLight, options)) { + setLight(light?: LightSpecification, options: StyleSetterOptions = {}) { + if (this._validate(validateLight, light, options)) { return; } - for (const name in options) { - const value = options[name]; + for (const name in light) { + const value = light[name]; if (endsWith(name, TRANSITION_SUFFIX)) { this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), value); } else { @@ -113,7 +113,11 @@ class Light extends Evented { this.properties = this._transitioning.possiblyEvaluate(parameters); } - _validate(validate: Function, value: mixed) { + _validate(validate: Function, value: mixed, options?: {validate?: boolean}) { + if (options && options.validate === false) { + return false; + } + return emitValidationErrors(this, validate.call(validateStyle, extend({ value, // Workaround for https://github.com/mapbox/mapbox-gl-js/issues/2407 diff --git a/src/style/style.js b/src/style/style.js index cb9fda74670..cb58f4e05cc 100644 --- a/src/style/style.js +++ b/src/style/style.js @@ -89,6 +89,9 @@ export type StyleOptions = { localIdeographFontFamily?: string }; +export type StyleSetterOptions = { + validate?: boolean +}; /** * @private */ @@ -200,9 +203,7 @@ class Style extends Evented { }); } - loadJSON(json: StyleSpecification, options: { - validate?: boolean - } = {}) { + loadJSON(json: StyleSpecification, options: StyleSetterOptions = {}) { this.fire(new Event('dataloading', {dataType: 'style'})); this._request = browser.frame(() => { @@ -481,7 +482,7 @@ class Style extends Evented { return this.imageManager.listImages(); } - addSource(id: string, source: SourceSpecification, options?: {validate?: boolean}) { + addSource(id: string, source: SourceSpecification, options: StyleSetterOptions = {}) { this._checkLoaded(); if (this.sourceCaches[id] !== undefined) { @@ -567,7 +568,7 @@ class Style extends Evented { * ID `before`, or appended if `before` is omitted. * @param {string} [before] ID of an existing layer to insert before */ - addLayer(layerObject: LayerSpecification | CustomLayerInterface, before?: string, options?: {validate?: boolean}) { + addLayer(layerObject: LayerSpecification | CustomLayerInterface, before?: string, options: StyleSetterOptions = {}) { this._checkLoaded(); const id = layerObject.id; @@ -733,7 +734,7 @@ class Style extends Evented { this._updateLayer(layer); } - setFilter(layerId: string, filter: ?FilterSpecification) { + setFilter(layerId: string, filter: ?FilterSpecification, options: StyleSetterOptions = {}) { this._checkLoaded(); const layer = this.getLayer(layerId); @@ -752,7 +753,7 @@ class Style extends Evented { return; } - if (this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter)) { + if (this._validate(validateStyle.filter, `layers.${layer.id}.filter`, filter, null, options)) { return; } @@ -769,7 +770,7 @@ class Style extends Evented { return clone(this.getLayer(layer).filter); } - setLayoutProperty(layerId: string, name: string, value: any) { + setLayoutProperty(layerId: string, name: string, value: any, options: StyleSetterOptions = {}) { this._checkLoaded(); const layer = this.getLayer(layerId); @@ -780,7 +781,7 @@ class Style extends Evented { if (deepEqual(layer.getLayoutProperty(name), value)) return; - layer.setLayoutProperty(name, value); + layer.setLayoutProperty(name, value, options); this._updateLayer(layer); } @@ -800,7 +801,7 @@ class Style extends Evented { return layer.getLayoutProperty(name); } - setPaintProperty(layerId: string, name: string, value: any) { + setPaintProperty(layerId: string, name: string, value: any, options: StyleSetterOptions = {}) { this._checkLoaded(); const layer = this.getLayer(layerId); @@ -811,7 +812,7 @@ class Style extends Evented { if (deepEqual(layer.getPaintProperty(name), value)) return; - const requiresRelayout = layer.setPaintProperty(name, value); + const requiresRelayout = layer.setPaintProperty(name, value, options); if (requiresRelayout) { this._updateLayer(layer); } @@ -1001,7 +1002,7 @@ class Style extends Evented { return this.light.getLight(); } - setLight(lightOptions: LightSpecification) { + setLight(lightOptions: LightSpecification, options: StyleSetterOptions = {}) { this._checkLoaded(); const light = this.light.getLight(); @@ -1022,11 +1023,11 @@ class Style extends Evented { }, this.stylesheet.transition) }; - this.light.setLight(lightOptions); + this.light.setLight(lightOptions, options); this.light.updateTransitions(parameters); } - _validate(validate: ({}) => void, key: string, value: any, props: any, options?: {validate?: boolean}) { + _validate(validate: ({}) => void, key: string, value: any, props: any, options: StyleSetterOptions = {}) { if (options && options.validate === false) { return false; } diff --git a/src/style/style_layer.js b/src/style/style_layer.js index 88d6acf4b39..8ddef032738 100644 --- a/src/style/style_layer.js +++ b/src/style/style_layer.js @@ -26,6 +26,7 @@ import type { } from '../style-spec/types'; import type {CustomLayerInterface} from './style_layer/custom_style_layer'; import type Map from '../ui/map'; +import type {StyleSetterOptions} from './style'; const TRANSITION_SUFFIX = '-transition'; @@ -115,7 +116,7 @@ class StyleLayer extends Evented { return this._unevaluatedLayout.getValue(name); } - setLayoutProperty(name: string, value: mixed, options: {validate: boolean}) { + setLayoutProperty(name: string, value: mixed, options: StyleSetterOptions = {}) { if (value !== null && value !== undefined) { const key = `layers.${this.id}.layout.${name}`; if (this._validate(validateLayoutProperty, key, name, value, options)) { @@ -139,7 +140,7 @@ class StyleLayer extends Evented { } } - setPaintProperty(name: string, value: mixed, options: {validate: boolean}) { + setPaintProperty(name: string, value: mixed, options: StyleSetterOptions = {}) { if (value !== null && value !== undefined) { const key = `layers.${this.id}.paint.${name}`; if (this._validate(validatePaintProperty, key, name, value, options)) { @@ -221,7 +222,7 @@ class StyleLayer extends Evented { }); } - _validate(validate: Function, key: string, name: string, value: mixed, options: {validate: boolean}) { + _validate(validate: Function, key: string, name: string, value: mixed, options: StyleSetterOptions = {}) { if (options && options.validate === false) { return false; } diff --git a/src/ui/map.js b/src/ui/map.js index e06604de06a..dce61a4c810 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -30,7 +30,7 @@ import type {PointLike} from '@mapbox/point-geometry'; import type {LngLatLike} from '../geo/lng_lat'; import type {LngLatBoundsLike} from '../geo/lng_lat_bounds'; import type {RequestParameters} from '../util/ajax'; -import type {StyleOptions} from '../style/style'; +import type {StyleOptions, StyleSetterOptions} from '../style/style'; import type {MapEvent, MapDataEvent} from './events'; import type {CustomLayerInterface} from '../style/style_layer/custom_style_layer'; @@ -52,7 +52,6 @@ import type { } from '../style-spec/types'; type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; - /* eslint-disable no-use-before-define */ type IControl = { onAdd(map: Map): HTMLElement; @@ -1264,6 +1263,9 @@ class Map extends Camera { * @param {string} layer The ID of the layer to which the filter will be applied. * @param {Array | null | undefined} filter The filter, conforming to the Mapbox Style Specification's * [filter definition](https://www.mapbox.com/mapbox-gl-js/style-spec/#other-filter). If `null` or `undefined` is provided, the function removes any existing filter from the layer. + * @param {Object} [options] + * @param {boolean} [options.validate=true] Whether to check if the filter conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. + * * @returns {Map} `this` * @example * map.setFilter('my-layer', ['==', 'name', 'USA']); @@ -1271,8 +1273,8 @@ class Map extends Camera { * @see [Highlight features containing similar data](https://www.mapbox.com/mapbox-gl-js/example/query-similar-features/) * @see [Create a timeline animation](https://www.mapbox.com/mapbox-gl-js/example/timeline-animation/) */ - setFilter(layer: string, filter: ?FilterSpecification) { - this.style.setFilter(layer, filter); + setFilter(layer: string, filter: ?FilterSpecification, options: StyleSetterOptions = {}) { + this.style.setFilter(layer, filter, options); return this._update(true); } @@ -1308,6 +1310,8 @@ class Map extends Camera { * @param {string} name The name of the paint property to set. * @param {*} value The value of the paint propery to set. * Must be of a type appropriate for the property, as defined in the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). + * @param {Object} [options] + * @param {boolean} [options.validate=true] Whether to check if `value` conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` * @example * map.setPaintProperty('my-layer', 'fill-color', '#faafee'); @@ -1315,8 +1319,8 @@ class Map extends Camera { * @see [Adjust a layer's opacity](https://www.mapbox.com/mapbox-gl-js/example/adjust-layer-opacity/) * @see [Create a draggable point](https://www.mapbox.com/mapbox-gl-js/example/drag-a-point/) */ - setPaintProperty(layer: string, name: string, value: any) { - this.style.setPaintProperty(layer, name, value); + setPaintProperty(layer: string, name: string, value: any, options: StyleSetterOptions = {}) { + this.style.setPaintProperty(layer, name, value, options); return this._update(true); } @@ -1337,12 +1341,14 @@ class Map extends Camera { * @param {string} layer The ID of the layer to set the layout property in. * @param {string} name The name of the layout property to set. * @param {*} value The value of the layout propery. Must be of a type appropriate for the property, as defined in the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/). + * @param {Object} [options] + * @param {boolean} [options.validate=true] Whether to check if `value` conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` * @example * map.setLayoutProperty('my-layer', 'visibility', 'none'); */ - setLayoutProperty(layer: string, name: string, value: any) { - this.style.setLayoutProperty(layer, name, value); + setLayoutProperty(layer: string, name: string, value: any, options: StyleSetterOptions = {}) { + this.style.setLayoutProperty(layer, name, value, options); return this._update(true); } @@ -1361,10 +1367,12 @@ class Map extends Camera { * Sets the any combination of light values. * * @param light Light properties to set. Must conform to the [Mapbox Style Specification](https://www.mapbox.com/mapbox-gl-style-spec/#light). + * @param {Object} [options] + * @param {boolean} [options.validate=true] Whether to check if the filter conforms to the Mapbox GL Style Specification. Disabling validation is a performance optimization that should only be used if you have previously validated the values you will be passing to this function. * @returns {Map} `this` */ - setLight(light: LightSpecification) { - this.style.setLight(light); + setLight(light: LightSpecification, options: StyleSetterOptions = {}) { + this.style.setLight(light, options); return this._update(true); } diff --git a/test/unit/style/light.test.js b/test/unit/style/light.test.js index 737556bc627..d16ad737207 100644 --- a/test/unit/style/light.test.js +++ b/test/unit/style/light.test.js @@ -58,12 +58,41 @@ test('Light#getLight', (t) => { }); test('Light#setLight', (t) => { - const light = new Light({}); - light.setLight({ color: 'red', "color-transition": { duration: 3000 }}); - light.updateTransitions({ transition: true }, {}); - light.recalculate({zoom: 16, zoomHistory: {}, now: 1500}); + t.test('sets light', (t) => { + const light = new Light({}); + light.setLight({ color: 'red', "color-transition": { duration: 3000 }}); + light.updateTransitions({ transition: true }, {}); + light.recalculate({zoom: 16, zoomHistory: {}, now: 1500}); + t.deepEqual(light.properties.get('color'), new Color(1, 0.5, 0.5, 1)); + t.end(); + }); + + t.test('validates by default', (t) => { + const light = new Light({}); + const lightSpy = t.spy(light, '_validate'); + t.stub(console, 'error'); + light.setLight({ color: 'notacolor'}); + light.updateTransitions({ transition: false}, {}); + light.recalculate({zoom: 16, zoomHistory: {}, now: 10}); + t.ok(lightSpy.calledOnce); + t.ok(console.error.calledOnce); + t.deepEqual(lightSpy.args[0][2], {}); + t.end(); + }); - t.deepEqual(light.properties.get('color'), new Color(1, 0.5, 0.5, 1)); + t.test('respects validation option', (t) => { + const light = new Light({}); + + const lightSpy = t.spy(light, '_validate'); + light.setLight({ color: [999]}, {validate: false}); + light.updateTransitions({ transition: false}, {}); + light.recalculate({zoom: 16, zoomHistory: {}, now: 10}); + + t.ok(lightSpy.calledOnce); + t.deepEqual(lightSpy.args[0][2], {validate: false}); + t.deepEqual(light.properties.get('color'), [999]); + t.end(); + }); t.end(); }); diff --git a/test/unit/style/style.test.js b/test/unit/style/style.test.js index 91e14ed76f1..8facc942fcb 100644 --- a/test/unit/style/style.test.js +++ b/test/unit/style/style.test.js @@ -1390,6 +1390,39 @@ test('Style#setPaintProperty', (t) => { }); }); + t.test('respects validate option', (t) => { + const style = new Style(new StubMap()); + style.loadJSON({ + "version": 8, + "sources": {}, + "layers": [ + { + "id": "background", + "type": "background" + } + ] + }); + + style.on('style.load', () => { + const backgroundLayer = style.getLayer('background'); + t.stub(console, 'error'); + const validate = t.spy(backgroundLayer, '_validate'); + + style.setPaintProperty('background', 'background-color', 'notacolor', {validate: false}); + t.deepEqual(validate.args[0][4], {validate: false}); + t.ok(console.error.notCalled); + + t.ok(style._changed); + style.update({}); + + style.setPaintProperty('background', 'background-color', 'alsonotacolor'); + t.ok(console.error.calledOnce, 'validates input by default'); + t.deepEqual(validate.args[1][4], {}); + + t.end(); + }); + }); + t.end(); }); @@ -1464,6 +1497,47 @@ test('Style#setLayoutProperty', (t) => { }); }); + t.test('respects validate option', (t) => { + const style = new Style(new StubMap()); + style.loadJSON({ + "version": 8, + "sources": { + "geojson": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [] + } + } + }, + "layers": [ + { + "id": "line", + "type": "line", + "source": "geojson" + } + ] + }); + + style.on('style.load', () => { + const lineLayer = style.getLayer('line'); + t.stub(console, 'error'); + const validate = t.spy(lineLayer, '_validate'); + + style.setLayoutProperty('line', 'line-cap', 'invalidcap', {validate: false}); + t.deepEqual(validate.args[0][4], {validate: false}); + t.ok(console.error.notCalled); + t.ok(style._changed); + style.update({}); + + style.setLayoutProperty('line', 'line-cap', 'differentinvalidcap'); + t.ok(console.error.calledOnce, 'validates input by default'); + t.deepEqual(validate.args[1][4], {}); + + t.end(); + }); + }); + t.end(); }); @@ -1614,6 +1688,35 @@ test('Style#setFilter', (t) => { }); }); + t.test('validates filter by default', (t) => { + const style = createStyle(); + t.stub(console, 'error'); + style.on('style.load', () => { + style.setFilter('symbol', 'notafilter'); + t.deepEqual(style.getFilter('symbol'), ['==', 'id', 0]); + t.ok(console.error.calledOnce); + style.update({}); // trigger dispatcher broadcast + t.end(); + }); + }); + + t.test('respects validate option', (t) => { + const style = createStyle(); + + style.on('style.load', () => { + style.dispatcher.broadcast = function(key, value) { + t.equal(key, 'updateLayers'); + t.deepEqual(value.layers[0].id, 'symbol'); + t.deepEqual(value.layers[0].filter, 'notafilter'); + t.end(); + }; + + style.setFilter('symbol', 'notafilter', {validate: false}); + t.deepEqual(style.getFilter('symbol'), 'notafilter'); + style.update({}); // trigger dispatcher broadcast + }); + }); + t.end(); }); From 9aed7d6785fb6a0b0783f08d3782248906af820d Mon Sep 17 00:00:00 2001 From: Tristen Brown Date: Tue, 27 Nov 2018 08:54:48 -0500 Subject: [PATCH 081/115] [WIP] Support benchmarking styles from file paths (#7611) * Support benchmarking styles from file paths * Remove `ref` property check It's not a defined type under `LayerSpecification` and should therefore not be a thing to check against. --- bench/README.md | 4 ++-- bench/benchmarks/expressions.js | 14 +++++--------- bench/benchmarks/layout.js | 5 +++-- bench/benchmarks/style_layer_create.js | 10 +++++----- bench/benchmarks/style_validate.js | 10 +++++----- bench/benchmarks/worker_transfer.js | 5 +++-- bench/lib/fetch_style.js | 7 ++++--- bench/styles/benchmarks.js | 6 +++--- bench/styles/rollup_config_benchmarks.js | 11 +++++++++-- 9 files changed, 39 insertions(+), 33 deletions(-) diff --git a/bench/README.md b/bench/README.md index 894a22e40eb..553e5c18153 100644 --- a/bench/README.md +++ b/bench/README.md @@ -21,9 +21,9 @@ By default, the benchmark page will compare the local branch against `master` an Start the benchmark server ```bash -MAPBOX_ACCESS_TOKEN={YOUR MAPBOX ACCESS TOKEN} MAPBOX_STYLE_URL={YOUR STYLES HERE} yarn start +MAPBOX_ACCESS_TOKEN={YOUR MAPBOX ACCESS TOKEN} MAPBOX_STYLES={YOUR STYLES HERE} yarn start ``` -Note: `MAPBOX_STYLE_URL` takes a comma-separated list of up to 3 Mapbox style URLs (e.g. `mapbox://styles/mapbox/streets-v10,mapbox://styles/mapbox/streets-v9`) +Note: `MAPBOX_STYLES` takes a comma-separated list of up to 3 Mapbox styles provided as a style URL or file system path (e.g. `./path/to/style.json,mapbox://styles/mapbox/streets-v10` or `mapbox://styles/mapbox/streets-v10,mapbox://styles/mapbox/streets-v9`) To run all benchmarks, open [the benchmark page, `http://localhost:9966/bench/styles`](http://localhost:9966/bench/styles). diff --git a/bench/benchmarks/expressions.js b/bench/benchmarks/expressions.js index d8a555e342e..0106bfd5756 100644 --- a/bench/benchmarks/expressions.js +++ b/bench/benchmarks/expressions.js @@ -6,8 +6,9 @@ import spec from '../../src/style-spec/reference/latest'; import convertFunction from '../../src/style-spec/function/convert'; import { isFunction, createFunction } from '../../src/style-spec/function'; import { createPropertyExpression } from '../../src/style-spec/expression'; -import { normalizeStyleURL } from '../../src/util/mapbox'; +import fetchStyle from '../lib/fetch_style'; +import type {StyleSpecification} from '../../src/style-spec/types'; import type {StylePropertySpecification} from '../../src/style-spec/style-spec'; import type {StylePropertyExpression} from '../../src/style-spec/expression'; @@ -19,24 +20,19 @@ class ExpressionBenchmark extends Benchmark { compiledFunction: StylePropertyExpression, compiledExpression: StylePropertyExpression }>; - style: string; + style: string | StyleSpecification; - constructor(style: string) { + constructor(style: string | StyleSpecification) { super(); this.style = style; } setup() { - return fetch(normalizeStyleURL(this.style)) - .then(response => response.json()) + return fetchStyle(this.style) .then(json => { this.data = []; for (const layer of json.layers) { - if (layer.ref) { - continue; - } - const expressionData = function(rawValue, propertySpec: StylePropertySpecification) { const rawExpression = convertFunction(rawValue, propertySpec); const compiledFunction = createFunction(rawValue, propertySpec); diff --git a/bench/benchmarks/layout.js b/bench/benchmarks/layout.js index 01ea1b6b559..32554f9c3ee 100644 --- a/bench/benchmarks/layout.js +++ b/bench/benchmarks/layout.js @@ -1,5 +1,6 @@ // @flow +import type {StyleSpecification} from '../../src/style-spec/types'; import Benchmark from '../lib/benchmark'; import fetchStyle from '../lib/fetch_style'; import TileParser from '../lib/tile_parser'; @@ -8,10 +9,10 @@ import { OverscaledTileID } from '../../src/source/tile_id'; export default class Layout extends Benchmark { tiles: Array<{tileID: OverscaledTileID, buffer: ArrayBuffer}>; parser: TileParser; - style: string; + style: string | StyleSpecification; locations: Array; - constructor(style: string, locations: ?Array) { + constructor(style: string | StyleSpecification, locations: ?Array) { super(); this.style = style; this.locations = locations || this.tileIDs(); diff --git a/bench/benchmarks/style_layer_create.js b/bench/benchmarks/style_layer_create.js index cfea7aeed02..a526e95b110 100644 --- a/bench/benchmarks/style_layer_create.js +++ b/bench/benchmarks/style_layer_create.js @@ -1,22 +1,22 @@ // @flow +import type {StyleSpecification} from '../../src/style-spec/types'; import Benchmark from '../lib/benchmark'; import createStyleLayer from '../../src/style/create_style_layer'; import deref from '../../src/style-spec/deref'; -import { normalizeStyleURL } from '../../src/util/mapbox'; +import fetchStyle from '../lib/fetch_style'; export default class StyleLayerCreate extends Benchmark { - style: string; + style: string | StyleSpecification; layers: Array; - constructor(style: string) { + constructor(style: string | StyleSpecification) { super(); this.style = style; } setup(): Promise { - return fetch(normalizeStyleURL(this.style)) - .then(response => response.json()) + return fetchStyle(this.style) .then(json => { this.layers = deref(json.layers); }); } diff --git a/bench/benchmarks/style_validate.js b/bench/benchmarks/style_validate.js index 24ab56ecdec..f41a5b4016c 100644 --- a/bench/benchmarks/style_validate.js +++ b/bench/benchmarks/style_validate.js @@ -1,12 +1,13 @@ // @flow +import type {StyleSpecification} from '../../src/style-spec/types'; import Benchmark from '../lib/benchmark'; import validateStyle from '../../src/style-spec/validate_style.min'; -import { normalizeStyleURL } from '../../src/util/mapbox'; +import fetchStyle from '../lib/fetch_style'; export default class StyleValidate extends Benchmark { - style: string; - json: Object; + style: string | StyleSpecification; + json: StyleSpecification; constructor(style: string) { super(); @@ -14,8 +15,7 @@ export default class StyleValidate extends Benchmark { } setup(): Promise { - return fetch(normalizeStyleURL(this.style)) - .then(response => response.json()) + return fetchStyle(this.style) .then(json => { this.json = json; }); } diff --git a/bench/benchmarks/worker_transfer.js b/bench/benchmarks/worker_transfer.js index b1ca7c2bf56..2feb7b9c2a8 100644 --- a/bench/benchmarks/worker_transfer.js +++ b/bench/benchmarks/worker_transfer.js @@ -1,5 +1,6 @@ // @flow +import type {StyleSpecification} from '../../src/style-spec/types'; import Benchmark from '../lib/benchmark'; import fetchStyle from '../lib/fetch_style'; import TileParser from '../lib/tile_parser'; @@ -12,9 +13,9 @@ export default class WorkerTransfer extends Benchmark { payloadTiles: Array; payloadJSON: Array; worker: Worker; - style: string; + style: string | StyleSpecification; - constructor(style: string) { + constructor(style: string | StyleSpecification) { super(); this.style = style; } diff --git a/bench/lib/fetch_style.js b/bench/lib/fetch_style.js index e2e9a2ac221..a766e8a6f75 100644 --- a/bench/lib/fetch_style.js +++ b/bench/lib/fetch_style.js @@ -3,7 +3,8 @@ import type {StyleSpecification} from '../../src/style-spec/types'; import {normalizeStyleURL} from '../../src/util/mapbox'; -export default function fetchStyle(url: string): Promise { - return fetch(normalizeStyleURL(url)) - .then(response => response.json()); +export default function fetchStyle(value: string | StyleSpecification): Promise { + return typeof value === 'string' ? + fetch(normalizeStyleURL(value)).then(response => response.json()) : + Promise.resolve(value); } diff --git a/bench/styles/benchmarks.js b/bench/styles/benchmarks.js index 1636871d09a..e0ccdac9ea2 100644 --- a/bench/styles/benchmarks.js +++ b/bench/styles/benchmarks.js @@ -6,7 +6,6 @@ import updateUI from '../benchmarks_view'; mapboxgl.accessToken = accessToken; -const urls = (process.env.MAPBOX_STYLE_URL || 'mapbox://styles/mapbox/streets-v10').split(','); const benchmarks = []; const filter = window.location.hash.substr(1); @@ -23,9 +22,10 @@ function register(Benchmark, locations, options) { if (options) Object.assign(benchmark, options); - urls.forEach(style => { + process.env.MAPBOX_STYLES.forEach(style => { + const { name } = style; benchmark.versions.push({ - name: style.replace("mapbox://styles/", ""), + name: name ? name : style.replace('mapbox://styles/', ''), bench: new Benchmark(style, locations), status: 'waiting', logs: [], diff --git a/bench/styles/rollup_config_benchmarks.js b/bench/styles/rollup_config_benchmarks.js index b7429a23afb..93dbd8f2b04 100644 --- a/bench/styles/rollup_config_benchmarks.js +++ b/bench/styles/rollup_config_benchmarks.js @@ -3,13 +3,20 @@ import sourcemaps from 'rollup-plugin-sourcemaps'; import replace from 'rollup-plugin-replace'; import {plugins as basePlugins} from '../../build/rollup_plugins'; +let styles = ['mapbox://styles/mapbox/streets-v10']; + +if (process.env.MAPBOX_STYLES) { + styles = process.env.MAPBOX_STYLES + .split(',') + .map(style => style.match(/\.json$/) ? require(style) : style); +} + const plugins = () => basePlugins().concat( replace({ 'process.env.BENCHMARK_VERSION': JSON.stringify(process.env.BENCHMARK_VERSION), 'process.env.MAPBOX_ACCESS_TOKEN': JSON.stringify(process.env.MAPBOX_ACCESS_TOKEN), 'process.env.MapboxAccessToken': JSON.stringify(process.env.MapboxAccessToken), - 'process.env.MAPBOX_STYLE_URL': JSON.stringify(process.env.MAPBOX_STYLE_URL), - 'process.env.MapboxStyleURL': JSON.stringify(process.env.MapboxStyleURL), + 'process.env.MAPBOX_STYLES': JSON.stringify(styles), 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV) }) ); From 8e267fe230dbafc75914e437d26efab2f81adf18 Mon Sep 17 00:00:00 2001 From: Bruno de Oliveira Abinader Date: Wed, 28 Nov 2018 09:21:25 +0200 Subject: [PATCH 082/115] Add narrow Y (height < tile size) render tests --- .../basic-v9/z0-narrow-y/expected.png | Bin 0 -> 45459 bytes .../z0-narrow-y}/style.json | 7 +++--- .../basic-v9/z0-wide-x/expected.png | Bin 0 -> 45703 bytes .../{z0-wide => z0-wide-x}/style.json | 2 +- .../basic-v9/z0-wide/expected.png | Bin 87606 -> 0 bytes .../bright-v9/z0-wide/expected.png | Bin 438710 -> 0 bytes .../satellite-v9/z0-wide/expected.png | Bin 660495 -> 0 bytes .../satellite-v9/z0-wide/style.json | 23 ------------------ 8 files changed, 4 insertions(+), 28 deletions(-) create mode 100644 test/integration/render-tests/basic-v9/z0-narrow-y/expected.png rename test/integration/render-tests/{bright-v9/z0-wide => basic-v9/z0-narrow-y}/style.json (56%) create mode 100644 test/integration/render-tests/basic-v9/z0-wide-x/expected.png rename test/integration/render-tests/basic-v9/{z0-wide => z0-wide-x}/style.json (92%) delete mode 100644 test/integration/render-tests/basic-v9/z0-wide/expected.png delete mode 100644 test/integration/render-tests/bright-v9/z0-wide/expected.png delete mode 100644 test/integration/render-tests/satellite-v9/z0-wide/expected.png delete mode 100644 test/integration/render-tests/satellite-v9/z0-wide/style.json diff --git a/test/integration/render-tests/basic-v9/z0-narrow-y/expected.png b/test/integration/render-tests/basic-v9/z0-narrow-y/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..c3547a5fc0e0baf1cfbcaea742fd65f2c2db73b5 GIT binary patch literal 45459 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 P0Y4AdUC3?ckkkJGa!Z`b literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/bright-v9/z0-wide/style.json b/test/integration/render-tests/basic-v9/z0-narrow-y/style.json similarity index 56% rename from test/integration/render-tests/bright-v9/z0-wide/style.json rename to test/integration/render-tests/basic-v9/z0-narrow-y/style.json index 790fcbbe179..acf13a57737 100644 --- a/test/integration/render-tests/bright-v9/z0-wide/style.json +++ b/test/integration/render-tests/basic-v9/z0-narrow-y/style.json @@ -2,13 +2,12 @@ "version": 8, "metadata": { "test": { - "width": 1024, - "height": 512, + "width": 600, + "height": 480, "center": [0, 0], "zoom": 0, - "diff": 0.00075, "operations": [ - ["setStyle", "local://mapbox-gl-styles/styles/bright-v9.json"], + ["setStyle", "local://mapbox-gl-styles/styles/basic-v9.json"], ["wait"] ] } diff --git a/test/integration/render-tests/basic-v9/z0-wide-x/expected.png b/test/integration/render-tests/basic-v9/z0-wide-x/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..35971a74ffec4c6934257b656899f55abdccea47 GIT binary patch literal 45703 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 diff --git a/test/integration/render-tests/bright-v9/z0-wide/expected.png b/test/integration/render-tests/bright-v9/z0-wide/expected.png deleted file mode 100644 index 07e59c7ae721e98101f3124c4b7226ee29b93a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438710 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 z 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%0DVj+%~E`H;XKxbDaa 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� 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

C$Azb#N(`U&sko>g+5u5XP0veoi_CyUfX2<% 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 TDtZy4OT88!1EjoKU+%A=5XgHmZ7Br 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 PWB>wBS3j3^P6{Q5> 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%0Dk|D6(mq6H_O8 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%0Dv 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%0DD+IfqUhq&}`db0t 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 z℞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%0Ap&+$#6>S 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

F$pL#1+T&pPwlST@;RGR7GA3HTnd3 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 diff --git a/test/integration/render-tests/satellite-v9/z0-wide/style.json b/test/integration/render-tests/satellite-v9/z0-wide/style.json deleted file mode 100644 index b34b026297e..00000000000 --- a/test/integration/render-tests/satellite-v9/z0-wide/style.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": 8, - "metadata": { - "test": { - "width": 1024, - "height": 512, - "center": [0, 0], - "zoom": 0, - "operations": [ - ["setStyle", "local://mapbox-gl-styles/styles/satellite-v9.json"], - ["wait"], - ["setPaintProperty", - "satellite", - "raster-fade-duration", - 0 - ], - ["wait"] - ] - } - }, - "sources": {}, - "layers": [] -} From 44b384829a2abd5890dc438cbe716eb69a5e1818 Mon Sep 17 00:00:00 2001 From: Dietmar Aumann Date: Tue, 27 Nov 2018 19:50:19 -0600 Subject: [PATCH 083/115] should be symbol-placement, text-placement does not exist --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 43e87640ebf..56ffa3e26f5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -102,7 +102,7 @@ August 16, 2018 * Treat tiles that error with status 404 as empty renderable tiles to prevent rendering duplicate features in some sparse tilesets ([#6803](https://github.com/mapbox/mapbox-gl-js/pull/6803)) ### 🐛 Bug fixes -* Fix issue where `text-max-angle` property was being calculated incorrectly internally, causing potential rendering errors when `"text-placement": line` +* Fix issue where `text-max-angle` property was being calculated incorrectly internally, causing potential rendering errors when `"symbol-placement": line` * Require `feature.id` when using `Map#setFeatureState` ([#6974](https://github.com/mapbox/mapbox-gl-js/pull/6974)) * Fix issue with removing the `GeolocateControl` when user location is being used ([#6977](https://github.com/mapbox/mapbox-gl-js/pull/6977)) (h/t [sergei-zelinsky](https://github.com/sergei-zelinsky)) * Fix memory leak caused by a failure to remove all controls added to the map ([#7042](https://github.com/mapbox/mapbox-gl-js/pull/7042)) From ff5eae5f9adcff7ea07712391a98ae1036632320 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Tue, 27 Nov 2018 12:04:12 -0800 Subject: [PATCH 084/115] Add 'idle' event: fires when no further rendering is expected without further interaction. --- src/ui/events.js | 14 ++++++++++++++ src/ui/map.js | 2 ++ test/unit/ui/map.test.js | 24 ++++++++++++++++++++++++ 3 files changed, 40 insertions(+) diff --git a/src/ui/events.js b/src/ui/events.js index 3a8c5f61757..d5348266ab3 100644 --- a/src/ui/events.js +++ b/src/ui/events.js @@ -677,6 +677,20 @@ export type MapEvent = */ | 'render' + /** + * Fired after the last frame rendered before the map enters an + * "idle" state: + * + * - No camera transitions are in progress + * - All currently requested tiles have loaded + * - All fade/transition animations have completed + * + * @event idle + * @memberof Map + * @instance + */ + | 'idle' + /** * Fired immediately after the map has been removed with {@link Map.event:remove}. * diff --git a/src/ui/map.js b/src/ui/map.js index dce61a4c810..5148e8839e8 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -1692,6 +1692,8 @@ class Map extends Camera { // Style#_updateSources could have caused them to be set again. if (this._sourcesDirty || this._repaint || this._styleDirty || this._placementDirty) { this.triggerRepaint(); + } else if (!this.isMoving() && this.loaded()) { + this.fire(new Event('idle')); } return this; diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index 2e91fb202b9..7b0dc2fdb12 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -1518,6 +1518,30 @@ test('Map', (t) => { }); }); + t.test('no render after idle event', (t) => { + const style = createStyle(); + const map = createMap(t, { style }); + map.on('idle', () => { + map.on('render', t.fail); + setTimeout(() => { + t.end(); + }, 100); + }); + }); + + t.test('no idle event during move', (t) => { + const style = createStyle(); + const map = createMap(t, { style, fadeDuration: 0 }); + map.once('idle', () => { + map.zoomTo(0.5, { duration: 100 }); + t.ok(map.isMoving(), "map starts moving immediately after zoomTo"); + map.once('idle', () => { + t.ok(!map.isMoving(), "map stops moving before firing idle event"); + t.end(); + }); + }); + }); + t.test('#removeLayer restores Map#loaded() to true', (t) => { const map = createMap(t, { style: extend(createStyle(), { From 1d16c6c30a2b3d85e3e91bfa3e21a738770fa6f7 Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Wed, 28 Nov 2018 10:32:07 -0800 Subject: [PATCH 085/115] Fix symbol rendering under opaque fill layers (#7612) --- src/render/draw_symbol.js | 4 +- src/render/painter.js | 5 +- .../expected.png | Bin 0 -> 207 bytes .../opaque-fill-over-symbol-layer/style.json | 78 ++++++++++++++++++ 4 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 test/integration/render-tests/fill-opacity/opaque-fill-over-symbol-layer/expected.png create mode 100644 test/integration/render-tests/fill-opacity/opaque-fill-over-symbol-layer/style.json diff --git a/src/render/draw_symbol.js b/src/render/draw_symbol.js index 80b4f60a6e4..2d96707db69 100644 --- a/src/render/draw_symbol.js +++ b/src/render/draw_symbol.js @@ -74,9 +74,7 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate // Unpitched point labels need to have their rotation applied after projection const rotateInShader = rotateWithMap && !pitchWithMap && !alongLine; - const depthOn = pitchWithMap; - - const depthMode = depthOn ? painter.depthModeForSublayer(0, DepthMode.ReadOnly) : DepthMode.disabled; + const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly); let program; let size; diff --git a/src/render/painter.js b/src/render/painter.js index 5475baf6298..df29f0d8987 100644 --- a/src/render/painter.js +++ b/src/render/painter.js @@ -278,9 +278,8 @@ class Painter { } depthModeForSublayer(n: number, mask: DepthMaskType, func: ?DepthFuncType): DepthMode { - const farDepth = 1 - ((1 + this.currentLayer) * this.numSublayers + n) * this.depthEpsilon; - const nearDepth = farDepth - 1 + this.depthRange; - return new DepthMode(func || this.context.gl.LEQUAL, mask, [nearDepth, farDepth]); + const depth = 1 - ((1 + this.currentLayer) * this.numSublayers + n) * this.depthEpsilon; + return new DepthMode(func || this.context.gl.LEQUAL, mask, [depth, depth]); } render(style: Style, options: PainterOptions) { diff --git a/test/integration/render-tests/fill-opacity/opaque-fill-over-symbol-layer/expected.png b/test/integration/render-tests/fill-opacity/opaque-fill-over-symbol-layer/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..289251c97769b5f1490c5269d2aa1a4bd2aa8767 GIT binary patch literal 207 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Or9=|Ar*{or0OmKc^x3$+k*#r z9UK@K4sJDBt<Y(X>|jtj W&LSwe Date: Thu, 29 Nov 2018 03:40:27 +1000 Subject: [PATCH 086/115] Fix documented return type of Transform#coveringTiles --- src/geo/transform.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/geo/transform.js b/src/geo/transform.js index 27098256336..3bc60a863ff 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.js @@ -235,7 +235,7 @@ class Transform { * @param {boolean} options.roundZoom * @param {boolean} options.reparseOverscaled * @param {boolean} options.renderWorldCopies - * @returns {Array} tiles + * @returns {Array} OverscaledTileIDs */ coveringTiles( options: { From 90577a9524312534ef85d90c9d89fbf74e340295 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 30 Nov 2018 14:53:40 +0200 Subject: [PATCH 087/115] advance image request queue when request aborted (#7641) and silence AbortError when using fetch api --- src/util/ajax.js | 36 ++++++++++++++++++++++++++++++------ test/unit/util/ajax.test.js | 26 +++++++++++++++++++++++++- 2 files changed, 55 insertions(+), 7 deletions(-) diff --git a/src/util/ajax.js b/src/util/ajax.js index 9cce7ff090f..98c4ea6b931 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -4,6 +4,7 @@ import window from './window'; import { extend } from './util'; import { isMapboxHTTPURL } from './mapbox'; import config from './config'; +import assert from 'assert'; import type { Callback } from '../types/callback'; import type { Cancelable } from '../types/cancelable'; @@ -110,6 +111,10 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon callback(new AJAXError(response.statusText, response.status, requestParameters.url)); } }).catch((error) => { + if (error.code === 20) { + // silence expected AbortError + return; + } callback(new Error(error.message)); }); @@ -175,8 +180,12 @@ function sameOrigin(url) { const transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII='; -const imageQueue = []; -let numImageRequests = 0; +let imageQueue, numImageRequests; +export const resetImageRequestQueue = () => { + imageQueue = []; + numImageRequests = 0; +}; +resetImageRequestQueue(); export const getImage = function(requestParameters: RequestParameters, callback: Callback): Cancelable { // limit concurrent image loads to help with raster sources performance on big screens @@ -187,17 +196,25 @@ export const getImage = function(requestParameters: RequestParameters, callback: } numImageRequests++; - // request the image with XHR to work around caching issues - // see https://github.com/mapbox/mapbox-gl-js/issues/1470 - return getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { - + let advanced = false; + const advanceImageRequestQueue = () => { + if (advanced) return; + advanced = true; numImageRequests--; + assert(numImageRequests >= 0); while (imageQueue.length && numImageRequests < config.MAX_PARALLEL_IMAGE_REQUESTS) { // eslint-disable-line const {requestParameters, callback, cancelled} = imageQueue.shift(); if (!cancelled) { getImage(requestParameters, callback); } } + }; + + // request the image with XHR to work around caching issues + // see https://github.com/mapbox/mapbox-gl-js/issues/1470 + const request = getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { + + advanceImageRequestQueue(); if (err) { callback(err); @@ -215,6 +232,13 @@ export const getImage = function(requestParameters: RequestParameters, callback: img.src = data.byteLength ? URL.createObjectURL(blob) : transparentPngUrl; } }); + + return { + cancel: () => { + request.cancel(); + advanceImageRequestQueue(); + } + }; }; export const getVideo = function(urls: Array, callback: Callback): Cancelable { diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index 69f24906984..97c6f1ff2b6 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -3,7 +3,8 @@ import { getArrayBuffer, getJSON, postData, - getImage + getImage, + resetImageRequestQueue } from '../../../src/util/ajax'; import window from '../../../src/util/window'; import config from '../../../src/util/config'; @@ -128,5 +129,28 @@ test('ajax', (t) => { window.server.requests[0].respond(); }); + t.test('getImage cancelling frees up request for maxParallelImageRequests', (t) => { + resetImageRequestQueue(); + + window.server.respondWith(request => request.respond(200, {'Content-Type': 'image/png'}, '')); + + const maxRequests = config.MAX_PARALLEL_IMAGE_REQUESTS; + + // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 + const jsdomImage = window.Image; + window.Image = class { + set src(src) { + setTimeout(() => this.onload()); + } + }; + + for (let i = 0; i < maxRequests + 1; i++) { + getImage({url: ''}, () => t.fail).cancel(); + } + t.equals(window.server.requests.length, maxRequests + 1); + window.Image = jsdomImage; + t.end(); + }); + t.end(); }); From 66fedb7ea2f979c7a12f33fd7d222c3087dc5f75 Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 29 Nov 2018 11:09:19 -0800 Subject: [PATCH 088/115] Update location of drone video used in examples. --- debug/video.html | 2 +- docs/pages/example/video-on-a-map.html | 2 +- docs/pages/style-spec.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/debug/video.html b/debug/video.html index ac090c6466e..ccb6888da16 100644 --- a/debug/video.html +++ b/debug/video.html @@ -28,7 +28,7 @@ }, "video": { "type": "video", - "urls": [ "https://www.mapbox.com/drone/video/drone.mp4", "https://www.mapbox.com/drone/video/drone.webm" ], + "urls": [ "https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm" ], "coordinates": [ [-122.51596391201019, 37.56238816766053], [-122.51467645168304, 37.56410183312965], diff --git a/docs/pages/example/video-on-a-map.html b/docs/pages/example/video-on-a-map.html index 39b6f33e7b1..8a62e0d8d78 100644 --- a/docs/pages/example/video-on-a-map.html +++ b/docs/pages/example/video-on-a-map.html @@ -10,7 +10,7 @@ }, "video": { "type": "video", - "urls": ["https://www.mapbox.com/drone/video/drone.mp4", "https://www.mapbox.com/drone/video/drone.webm"], + "urls": ["https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm"], "coordinates": [ [-122.51596391201019, 37.56238816766053], [-122.51467645168304, 37.56410183312965], diff --git a/docs/pages/style-spec.js b/docs/pages/style-spec.js index bb82ef56708..a81aac8a73c 100644 --- a/docs/pages/style-spec.js +++ b/docs/pages/style-spec.js @@ -752,8 +752,8 @@ export default class extends React.Component { "video": { "type": "video", "urls": [ - "https://www.mapbox.com/drone/video/drone.mp4", - "https://www.mapbox.com/drone/video/drone.webm" + "https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", + "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm" ], "coordinates": [ [-122.51596391201019, 37.56238816766053], From 2ba871fc013afe45f07f943cd97b9a78a8291b8f Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 29 Nov 2018 12:01:16 -0800 Subject: [PATCH 089/115] OverscaledTileID#isChildOf shouldn't include tiles with different wrap. --- src/source/tile_id.js | 4 ++++ test/unit/source/tile_id.test.js | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/src/source/tile_id.js b/src/source/tile_id.js index d6430920495..da33b7c419a 100644 --- a/src/source/tile_id.js +++ b/src/source/tile_id.js @@ -92,6 +92,10 @@ export class OverscaledTileID { } isChildOf(parent: OverscaledTileID) { + if (parent.wrap !== this.wrap) { + // We can't be a child if we're in a different world copy + return false; + } const zDifference = this.canonical.z - parent.canonical.z; // We're first testing for z == 0, to avoid a 32 bit shift, which is undefined. return parent.overscaledZ === 0 || ( diff --git a/test/unit/source/tile_id.test.js b/test/unit/source/tile_id.test.js index c133c19439e..2c72116c68b 100644 --- a/test/unit/source/tile_id.test.js +++ b/test/unit/source/tile_id.test.js @@ -113,5 +113,11 @@ test('OverscaledTileID', (t) => { t.end(); }); + t.test('.isChildOf', (t) => { + t.ok(new OverscaledTileID(2, 0, 2, 0, 0).isChildOf(new OverscaledTileID(0, 0, 0, 0, 0)), "child of z0 tile"); + t.notOk(new OverscaledTileID(2, 0, 2, 0, 0).isChildOf(new OverscaledTileID(0, 1, 0, 0, 0)), "not child of tile with different wrap"); + t.end(); + }); + t.end(); }); From 762389b7cd93d06b48eafbf14c8ecd1d4cdd73dd Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Fri, 30 Nov 2018 12:18:46 -0800 Subject: [PATCH 090/115] Add check for layer 'type' property (#7645) (#7658) --- bench/benchmarks/expressions.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bench/benchmarks/expressions.js b/bench/benchmarks/expressions.js index 0106bfd5756..01ed5784780 100644 --- a/bench/benchmarks/expressions.js +++ b/bench/benchmarks/expressions.js @@ -33,6 +33,12 @@ class ExpressionBenchmark extends Benchmark { this.data = []; for (const layer of json.layers) { + // some older layers still use the deprecated `ref property` instead of `type` + // if we don't filter out these older layers, the logic below will cause a fatal error + if (!layer.type) { + continue; + } + const expressionData = function(rawValue, propertySpec: StylePropertySpecification) { const rawExpression = convertFunction(rawValue, propertySpec); const compiledFunction = createFunction(rawValue, propertySpec); From 686dc28aa9c8bec306f5e77e2a5db77c4fe8daf8 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Sat, 1 Dec 2018 14:48:37 +0200 Subject: [PATCH 091/115] v0.52.0-beta1 --- CHANGELOG.md | 24 ++++++++++++++++++++++++ package.json | 2 +- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56ffa3e26f5..b634d9c86ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,27 @@ +## 0.52.0 + +# Breaking changes +* Canonicalize tile urls to `mapbox://` urls so they can be transformed with `config.API_URL` ([#7594](https://github.com/mapbox/mapbox-gl-js/pull/7594)) + +## Features and improvements +* Add getter and setter for `config.API_URL` ([#7594](https://github.com/mapbox/mapbox-gl-js/pull/7594)) +* Allow user to define element other than map container for full screen control ([#7548](https://github.com/mapbox/mapbox-gl-js/pull/7548)) +* Add validation option to style setters ([#7604](https://github.com/mapbox/mapbox-gl-js/pull/7604)) +* Add 'idle' event: fires when no further rendering is expected without further interaction. ([#7625](https://github.com/mapbox/mapbox-gl-js/pull/7625)) + +## Bug fixes +* Fire error when map.getLayoutProperty references missing layer ([#7537](https://github.com/mapbox/mapbox-gl-js/issues/7537), fixed by [#7539](https://github.com/mapbox/mapbox-gl-js/pull/7539)) +* Fix shaky sprites when zooming with scrolling ([#7558](https://github.com/mapbox/mapbox-gl-js/pull/7558)) +* Fix layout problems in attribution control ([#7608](https://github.com/mapbox/mapbox-gl-js/pull/7608)) (h/t [lucaswoj](https://github.com/lucaswoj)) +* Fixes resetting map's pitch to 0 if initial bounds is set ([#7617](https://github.com/mapbox/mapbox-gl-js/pull/7617)) (h/t [stepankuzmin](https://github.com/stepankuzmin)) +* Fix occasional failure to load images after multiple image request abortions [#7641](https://github.com/mapbox/mapbox-gl-js/pull/7641) +* Update repo url to correct one ([#7486](https://github.com/mapbox/mapbox-gl-js/pull/7486)) (h/t [nicholas-l](https://github.com/nicholas-l)) +* Fix bug where symbols were sometimes not rendered immediately ([#7610](https://github.com/mapbox/mapbox-gl-js/pull/7610)) +* Fix bug where cameraForBounds returns incorrect CameraOptions with asymmetrical padding/offset ([#7517](https://github.com/mapbox/mapbox-gl-js/issues/7517), fixed by [#7518](https://github.com/mapbox/mapbox-gl-js/pull/7518)) (h/t [mike-marcacci](https://github.com/mike-marcacci)) +* Use diff+patch approach to map.setStyle when the parameter is a URL ([#4025](https://github.com/mapbox/mapbox-gl-js/issues/4025), fixed by [#7562](https://github.com/mapbox/mapbox-gl-js/pull/7562)) +* Begin touch zoom immediately when rotation disabled ([#7582](https://github.com/mapbox/mapbox-gl-js/pull/7582)) (h/t [msbarry](https://github.com/msbarry)) +* Fix symbol rendering under opaque fill layers ([#7612](https://github.com/mapbox/mapbox-gl-js/pull/7612)) + ## 0.51.0 November 7, 2018 diff --git a/package.json b/package.json index cf06af67d39..fb8311e0a40 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.51.0", + "version": "0.52.0-beta1", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From 0f370bf5197e7365923d5f00765c56af591c2321 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Sat, 1 Dec 2018 15:32:31 +0200 Subject: [PATCH 092/115] v0.52.0-beta.1 (#7659) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index fb8311e0a40..2c93e69b9cd 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.52.0-beta1", + "version": "0.52.0-beta.1", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From f3e69b5c9a9c22b2f91a867a66f5496aa8f652fa Mon Sep 17 00:00:00 2001 From: chloe krawczyk <34117059+chloekraw@users.noreply.github.com> Date: Mon, 3 Dec 2018 21:00:58 +0200 Subject: [PATCH 093/115] add documentation that branch labels must be unique (#7662) if the same label literals are used for both match expression branches, the expression is invalid and parsing would fail --- src/style-spec/reference/v8.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/style-spec/reference/v8.json b/src/style-spec/reference/v8.json index f52a10974b1..38ecbf25be1 100644 --- a/src/style-spec/reference/v8.json +++ b/src/style-spec/reference/v8.json @@ -2390,7 +2390,7 @@ } }, "match": { - "doc": "Selects the output whose label value matches the input value, or the fallback value if no match is found. The input can be any expression (e.g. `[\"get\", \"building_type\"]`). Each label must either be a single literal value or an array of literal values (e.g. `\"a\"` or `[\"c\", \"b\"]`), and those values must be all strings or all numbers. (The values `\"1\"` and `1` cannot both be labels in the same match expression.) If the input type does not match the type of the labels, the result will be the fallback value.", + "doc": "Selects the output whose label value matches the input value, or the fallback value if no match is found. The input can be any expression (e.g. `[\"get\", \"building_type\"]`). Each label must either be a single literal value or an array of literal values (e.g. `\"a\"` or `[\"c\", \"b\"]`), and those values must be all strings or all numbers. (The values `\"1\"` and `1` cannot both be labels in the same match expression.) Each label must be unique. If the input type does not match the type of the labels, the result will be the fallback value.", "group": "Decision", "sdk-support": { "basic functionality": { From ce166abb1529b672fdd3234aa8932f20db7dde67 Mon Sep 17 00:00:00 2001 From: James Seppi Date: Wed, 5 Dec 2018 14:07:25 -0600 Subject: [PATCH 094/115] update page shell (#7674) --- vendor/dotcom-page-shell/page-shell-script.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vendor/dotcom-page-shell/page-shell-script.js b/vendor/dotcom-page-shell/page-shell-script.js index 7d3c1df339b..8e5affb26d3 100644 --- a/vendor/dotcom-page-shell/page-shell-script.js +++ b/vendor/dotcom-page-shell/page-shell-script.js @@ -1,2 +1,2 @@ /*eslint-disable*/ -!(function(){"use strict";var e=function(){for(var e={},n=0;n1&&void 0!==arguments[1]?arguments[1]:window)}function me(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ae;return e in n.style||!!t&&re.some((function(t){return me(ce(t,e))}))}function ve(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:ae,o=n.allowPrefixedProp,a=n.allowPrefixedValue,r=!1;return(o||a)&&(r=re.some((function(n){return ve(o?ce(n,e):e,a?"-"+n+"-"+t:t)}))),r||(i.style[e]=t,i.style[e]===t)}function fe(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ae;(le={flexBox:me("flex",e,t)&&ve("display","flex",{allowPrefixedProp:!1,allowPrefixedValue:e},t),viewportUnits:ve("width","100vw",{allowPrefixedProp:!1,allowPrefixedValue:!1},t),visibilityState:ue("visibilityState",window.document),devicePixelRatio:ue("devicePixelRatio")}).doesCutMustard=Object.keys(le).every((function(e){return le[e]}))}function ge(){var e=window.document.getElementById("page-shell-compatibility-dismiss"),t=window.document.getElementById("page-shell-compatibility-warning");de=!0,se=!1,e&&e.removeEventListener("click",ge),t&&(t.style.display="none"),window.localStorage&&window.localStorage.setItem("suppress-browser-compatibility-warning","true")}var pe=!1;function he(){window.matchMedia("(min-width: "+c+"px)").matches&&we()}function ye(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!0,e.classList.add("shell-animated-menu--visible"),t.classList.add("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform","translate(6 -1) rotate(45)"),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","translate(-6.5 6) rotate(-45)")),(function(){if(!ie){var e=document.getElementById("page-shell"),t=document.getElementById("mobile-nav-menu"),n=document.getElementById("mobile-nav-backdrop");if(t&&e&&n){var i=Math.max(t.getBoundingClientRect().bottom+120,window.innerHeight);e.style.height=String(i)+"px",e.style.overflow="hidden",n.classList.add("shell-mobile-nav__backdrop--visible"),n.style.height=String(i-parseInt(n.style.top))+"px",ie=!0}}})(),window.addEventListener("resize",he))}function we(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!1,e.classList.remove("shell-animated-menu--visible"),t.classList.remove("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform",""),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","")),oe(),window.removeEventListener("resize",he))}function be(e){var t=document.getElementById("mobile-nav-trigger-toggle"),n=document.getElementById("mobile-nav-menu"),i=document.getElementById("page-header-content");t&&n&&(e.target.getAttribute&&e.target.getAttribute("data-nav-link")?(document.documentElement.scrollTop=0,document.body.scrollTop=0,we()):t.contains(e.target)?pe?we():ye():!pe||n.contains(e.target)||i.contains(e.target)||we())}var Ee=!1;function ke(){if(!Ee){Ee=!0;var e=document.querySelectorAll("[data-nav-trigger]");if(0!==e.length){var t=void 0,n=void 0,i=void 0;for(i=0;i1&&void 0!==arguments[1]?arguments[1]:window)}function me(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ae;return e in n.style||!!t&&re.some((function(t){return me(ce(t,e))}))}function ve(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:ae,o=n.allowPrefixedProp,a=n.allowPrefixedValue,r=!1;return(o||a)&&(r=re.some((function(n){return ve(o?ce(n,e):e,a?"-"+n+"-"+t:t)}))),r||(i.style[e]=t,i.style[e]===t)}function fe(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ae;(le={flexBox:me("flex",e,t)&&ve("display","flex",{allowPrefixedProp:!1,allowPrefixedValue:e},t),viewportUnits:ve("width","100vw",{allowPrefixedProp:!1,allowPrefixedValue:!1},t),visibilityState:ue("visibilityState",window.document),devicePixelRatio:ue("devicePixelRatio")}).doesCutMustard=Object.keys(le).every((function(e){return le[e]}))}function ge(){var e=window.document.getElementById("page-shell-compatibility-dismiss"),t=window.document.getElementById("page-shell-compatibility-warning");de=!0,se=!1,e&&e.removeEventListener("click",ge),t&&(t.style.display="none"),window.localStorage&&window.localStorage.setItem("suppress-browser-compatibility-warning","true")}var pe=!1;function he(){window.matchMedia("(min-width: "+c+"px)").matches&&we()}function ye(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!0,e.classList.add("shell-animated-menu--visible"),t.classList.add("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform","translate(6 -1) rotate(45)"),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","translate(-6.5 6) rotate(-45)")),(function(){if(!ie){var e=document.getElementById("page-shell"),t=document.getElementById("mobile-nav-menu"),n=document.getElementById("mobile-nav-backdrop");if(t&&e&&n){var i=Math.max(t.getBoundingClientRect().bottom+120,window.innerHeight);e.style.height=String(i)+"px",e.style.overflow="hidden",n.classList.add("shell-mobile-nav__backdrop--visible"),n.style.height=String(i-parseInt(n.style.top))+"px",ie=!0}}})(),window.addEventListener("resize",he))}function we(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!1,e.classList.remove("shell-animated-menu--visible"),t.classList.remove("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform",""),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","")),oe(),window.removeEventListener("resize",he))}function be(e){var t=document.getElementById("mobile-nav-trigger-toggle"),n=document.getElementById("mobile-nav-menu"),i=document.getElementById("page-header-content");t&&n&&(e.target.getAttribute&&e.target.getAttribute("data-nav-link")?(document.documentElement.scrollTop=0,document.body.scrollTop=0,we()):t.contains(e.target)?pe?we():ye():!pe||n.contains(e.target)||i.contains(e.target)||we())}var Ee=!1;function ke(){if(!Ee){Ee=!0;var e=document.querySelectorAll("[data-nav-trigger]");if(0!==e.length){var t=void 0,n=void 0,i=void 0;for(i=0;i Date: Thu, 6 Dec 2018 13:27:44 -0800 Subject: [PATCH 095/115] Add mapbox events domain to CSP directives --- docs/components/quickstart.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/components/quickstart.js b/docs/components/quickstart.js index 09abbb7f2ac..60d6f4fabdf 100644 --- a/docs/components/quickstart.js +++ b/docs/components/quickstart.js @@ -140,7 +140,7 @@ export default class extends React.Component {

Requesting styles from Mapbox or other services will require additional directives. For Mapbox, you can use this connect-src directive:

-
{`connect-src https://*.tiles.mapbox.com https://api.mapbox.com`}
+
{`connect-src https://*.tiles.mapbox.com https://api.mapbox.com https://events.mapbox.com`}

Mapbox CSS

From 1e51f5c760ce965cabe39c2dc87be1235c35e695 Mon Sep 17 00:00:00 2001 From: Eli Fitch Date: Thu, 6 Dec 2018 13:36:13 -0500 Subject: [PATCH 096/115] Flattens nested single element all expressions when converting to expressions (#7679) --- src/style-spec/feature_filter/convert.js | 2 +- test/unit/style-spec/feature_filter.test.js | 39 +++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) diff --git a/src/style-spec/feature_filter/convert.js b/src/style-spec/feature_filter/convert.js index 574c64779d1..1998eabc87a 100644 --- a/src/style-spec/feature_filter/convert.js +++ b/src/style-spec/feature_filter/convert.js @@ -92,7 +92,7 @@ function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedType return ['any'].concat(children); } else if (op === 'all') { const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes)); - return ['all'].concat(children); + return children.length > 1 ? ['all'].concat(children) : [].concat(...children); } else if (op === 'none') { return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})]; } else if (op === 'in') { diff --git a/test/unit/style-spec/feature_filter.test.js b/test/unit/style-spec/feature_filter.test.js index d1624ca4487..6621b2dd713 100644 --- a/test/unit/style-spec/feature_filter.test.js +++ b/test/unit/style-spec/feature_filter.test.js @@ -100,6 +100,45 @@ test('convert legacy filters to expressions', t => { t.end(); }); + t.test('flattens nested, single child all expressions', (t) => { + const filter = [ + "all", + [ + "in", + "$type", + "Polygon", + "LineString", + "Point" + ], + [ + "all", + ["in", "type", "island"] + ] + ]; + + const expected = [ + "all", + [ + "match", + ["geometry-type"], + ["Polygon", "LineString", "Point"], + true, + false + ], + [ + "match", + ["get", "type"], + ["island"], + true, + false + ] + ]; + + const converted = convertFilter(filter); + t.same(converted, expected); + t.end(); + }); + t.end(); }); From ca638dc9a0b7cb285bfe575b09ef0defbae0367a Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 12 Dec 2018 16:01:11 -0500 Subject: [PATCH 097/115] only align raster sources to pixel grid when map is idle to prevent shaking (#7426) (#7694) * only align raster sources to pixel grid when map is idle to prevent shaking * remove integer zoom condition per kk's comment * ensure map renders once more on moveend --- src/render/draw_raster.js | 4 ++-- src/render/painter.js | 1 + src/render/program/hillshade_program.js | 4 ++-- src/ui/map.js | 2 ++ 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/src/render/draw_raster.js b/src/render/draw_raster.js index f8ec292ee47..6047ba73145 100644 --- a/src/render/draw_raster.js +++ b/src/render/draw_raster.js @@ -28,7 +28,7 @@ function drawRaster(painter: Painter, sourceCache: SourceCache, layer: RasterSty const stencilMode = StencilMode.disabled; const colorMode = painter.colorModeForRenderPass(); const minTileZ = coords.length && coords[0].overscaledZ; - + const align = !painter.options.moving; for (const coord of coords) { // Set the lower zoom level to sublayer 0, and higher zoom levels to higher sublayers // Use gl.LESS to prevent double drawing in areas where tiles overlap. @@ -36,7 +36,7 @@ function drawRaster(painter: Painter, sourceCache: SourceCache, layer: RasterSty layer.paint.get('raster-opacity') === 1 ? DepthMode.ReadWrite : DepthMode.ReadOnly, gl.LESS); const tile = sourceCache.getTile(coord); - const posMatrix = painter.transform.calculatePosMatrix(coord.toUnwrapped(), true); + const posMatrix = painter.transform.calculatePosMatrix(coord.toUnwrapped(), align); tile.registerFadeDuration(layer.paint.get('raster-fade-duration')); diff --git a/src/render/painter.js b/src/render/painter.js index df29f0d8987..2008c49e36c 100644 --- a/src/render/painter.js +++ b/src/render/painter.js @@ -70,6 +70,7 @@ type PainterOptions = { showTileBoundaries: boolean, rotating: boolean, zooming: boolean, + moving: boolean, fadeDuration: number } diff --git a/src/render/program/hillshade_program.js b/src/render/program/hillshade_program.js index ddfa8948da1..f62af13a452 100644 --- a/src/render/program/hillshade_program.js +++ b/src/render/program/hillshade_program.js @@ -71,9 +71,9 @@ const hillshadeUniformValues = ( if (layer.paint.get('hillshade-illumination-anchor') === 'viewport') { azimuthal -= painter.transform.angle; } - + const align = !painter.options.moving; return { - 'u_matrix': painter.transform.calculatePosMatrix(tile.tileID.toUnwrapped(), true), + 'u_matrix': painter.transform.calculatePosMatrix(tile.tileID.toUnwrapped(), align), 'u_image': 0, 'u_latrange': getTileLatRange(painter, tile.tileID), 'u_light': [layer.paint.get('hillshade-exaggeration'), azimuthal], diff --git a/src/ui/map.js b/src/ui/map.js index 5148e8839e8..ef0197e9f7e 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -360,6 +360,7 @@ class Map extends Camera { } this.on('move', () => this._update(false)); + this.on('moveend', () => this._update(false)); this.on('zoom', () => this._update(true)); if (typeof window !== 'undefined') { @@ -1664,6 +1665,7 @@ class Map extends Camera { showOverdrawInspector: this._showOverdrawInspector, rotating: this.isRotating(), zooming: this.isZooming(), + moving: this.isMoving(), fadeDuration: this._fadeDuration }); From 578de298b75cc65cf73104dc2375d2e31351c885 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 12 Dec 2018 16:24:56 -0500 Subject: [PATCH 098/115] avoid incomplete webp support in Edge 18 (#7687) (#7692) --- src/ui/map.js | 3 ++ src/util/browser.js | 11 +----- src/util/mapbox.js | 3 +- src/util/webp_supported.js | 61 ++++++++++++++++++++++++++++++++++ test/unit/util/browser.test.js | 5 --- test/unit/util/mapbox.test.js | 10 +++--- 6 files changed, 72 insertions(+), 21 deletions(-) create mode 100755 src/util/webp_supported.js diff --git a/src/ui/map.js b/src/ui/map.js index ef0197e9f7e..1c0e7d3af40 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -25,6 +25,7 @@ import { RGBAImage } from '../util/image'; import { Event, ErrorEvent } from '../util/evented'; import { MapMouseEvent } from './events'; import TaskQueue from '../util/task_queue'; +import webpSupported from '../util/webp_supported'; import type {PointLike} from '@mapbox/point-geometry'; import type {LngLatLike} from '../geo/lng_lat'; @@ -1540,6 +1541,8 @@ class Map extends Camera { } this.painter = new Painter(gl, this.transform); + + webpSupported.testSupport(gl); } _contextLost(event: *) { diff --git a/src/util/browser.js b/src/util/browser.js index 2ea3570a851..70036884a76 100755 --- a/src/util/browser.js +++ b/src/util/browser.js @@ -51,16 +51,7 @@ const exported = { }, hardwareConcurrency: window.navigator.hardwareConcurrency || 4, - get devicePixelRatio() { return window.devicePixelRatio; }, - supportsWebp: false + get devicePixelRatio() { return window.devicePixelRatio; } }; export default exported; - -if (window.document) { - const webpImgTest = window.document.createElement('img'); - webpImgTest.onload = function() { - exported.supportsWebp = true; - }; - webpImgTest.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA='; -} diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 5c5dccea7c3..14b75347a4a 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -3,6 +3,7 @@ import config from './config'; import browser from './browser'; +import webpSupported from './webp_supported'; import window from './window'; import { version } from '../../package.json'; import { uuid, validateUuid, storageAvailable, warnOnce, extend } from './util'; @@ -101,7 +102,7 @@ export const normalizeTileURL = function(tileURL: string, sourceURL?: ?string, t // is appended to the tile URL. If `tileSize: 512` is specified for // a Mapbox raster source force the @2x suffix even if a non hidpi device. const suffix = browser.devicePixelRatio >= 2 || tileSize === 512 ? '@2x' : ''; - const extension = browser.supportsWebp ? '.webp' : '$1'; + const extension = webpSupported.supported ? '.webp' : '$1'; urlObject.path = urlObject.path.replace(imageExtensionRe, `${suffix}${extension}`); urlObject.path = `/v4${urlObject.path}`; diff --git a/src/util/webp_supported.js b/src/util/webp_supported.js new file mode 100755 index 00000000000..452bb10a5f9 --- /dev/null +++ b/src/util/webp_supported.js @@ -0,0 +1,61 @@ +// @flow + +import window from './window'; + +const exported = { + supported: false, + testSupport +}; + +export default exported; + +let glForTesting; +let webpCheckComplete = false; +let webpImgTest; + +if (window.document) { + webpImgTest = window.document.createElement('img'); + webpImgTest.onload = function() { + if (glForTesting) testWebpTextureUpload(glForTesting); + glForTesting = null; + }; + webpImgTest.onerror = function() { + webpCheckComplete = true; + glForTesting = null; + }; + webpImgTest.src = 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA='; +} + +function testSupport(gl: WebGLRenderingContext) { + if (webpCheckComplete || !webpImgTest) return; + + if (!webpImgTest.complete) { + glForTesting = gl; + return; + } + + testWebpTextureUpload(gl); +} + +function testWebpTextureUpload(gl: WebGLRenderingContext) { + // Edge 18 supports WebP but not uploading a WebP image to a gl texture + // Test support for this before allowing WebP images. + // https://github.com/mapbox/mapbox-gl-js/issues/7671 + const texture = gl.createTexture(); + gl.bindTexture(gl.TEXTURE_2D, texture); + + try { + gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, webpImgTest); + + // The error does not get triggered in Edge if the context is lost + if (gl.isContextLost()) return; + + exported.supported = true; + } catch (e) { + // Catch "Unspecified Error." in Edge 18. + } + + gl.deleteTexture(texture); + + webpCheckComplete = true; +} diff --git a/test/unit/util/browser.test.js b/test/unit/util/browser.test.js index e520f0d9016..4a65646f225 100644 --- a/test/unit/util/browser.test.js +++ b/test/unit/util/browser.test.js @@ -33,10 +33,5 @@ test('browser', (t) => { t.end(); }); - t.test('supportsWebp', (t) => { - t.equal(typeof browser.supportsWebp, 'boolean'); - t.end(); - }); - t.end(); }); diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index c3b6fc50f88..25480485395 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -1,7 +1,7 @@ import { test } from 'mapbox-gl-js-test'; import * as mapbox from '../../../src/util/mapbox'; import config from '../../../src/util/config'; -import browser from '../../../src/util/browser'; +import webpSupported from '../../../src/util/webp_supported'; import window from '../../../src/util/window'; import { uuid } from '../../../src/util/util'; import { version } from '../../../package.json'; @@ -287,7 +287,7 @@ test("mapbox", (t) => { }); t.test('.normalizeTileURL', (t) => { - browser.supportsWebp = false; + webpSupported.supported = false; t.test('does nothing on 1x devices', (t) => { config.API_URL = 'http://path.png'; @@ -321,14 +321,14 @@ test("mapbox", (t) => { }); t.test('replaces img extension with webp on supporting devices', (t) => { - browser.supportsWebp = true; + webpSupported.supported = true; config.API_URL = 'http://path.png'; config.REQUIRE_ACCESS_TOKEN = false; t.equal(mapbox.normalizeTileURL('http://path.png/tile.png', mapboxSource), 'http://path.png/v4/tile.webp'); t.equal(mapbox.normalizeTileURL('http://path.png/tile.png32', mapboxSource), 'http://path.png/v4/tile.webp'); t.equal(mapbox.normalizeTileURL('http://path.png/tile.jpg70', mapboxSource), 'http://path.png/v4/tile.webp'); t.equal(mapbox.normalizeTileURL('http://path.png/tile.png?access_token=foo', mapboxSource), 'http://path.png/v4/tile.webp?access_token=foo'); - browser.supportsWebp = false; + webpSupported.supported = false; t.end(); }); @@ -372,7 +372,7 @@ test("mapbox", (t) => { t.end(); }); - browser.supportsWebp = true; + webpSupported.supported = true; t.end(); }); From 22ab43e085a7e302dc968d8b68b282cf7e7660ba Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 12 Dec 2018 16:29:11 -0500 Subject: [PATCH 099/115] Cache hillshade textures based on texture size, not tile size. (#7695) Fixes #7690 -- hillshade layers leak GPU memory. --- src/render/draw_hillshade.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/render/draw_hillshade.js b/src/render/draw_hillshade.js index a16ae8df277..81426847fc1 100644 --- a/src/render/draw_hillshade.js +++ b/src/render/draw_hillshade.js @@ -80,6 +80,7 @@ function prepareHillshade(painter, tile, layer, sourceMaxZoom, depthMode, stenci // base 2 - 0000 0000, 0000 0001, 0000 0110, 1110 1100 if (tile.dem && tile.dem.data) { const tileSize = tile.dem.dim; + const textureStride = tile.dem.stride; const pixelData = tile.dem.getPixels(); context.activeTexture.set(gl.TEXTURE1); @@ -88,7 +89,7 @@ function prepareHillshade(painter, tile, layer, sourceMaxZoom, depthMode, stenci // tiles will appear blank, because as you can see above the alpha value for these textures // is always 0 context.pixelStoreUnpackPremultiplyAlpha.set(false); - tile.demTexture = tile.demTexture || painter.getTileTexture(tile.tileSize); + tile.demTexture = tile.demTexture || painter.getTileTexture(textureStride); if (tile.demTexture) { const demTexture = tile.demTexture; demTexture.update(pixelData, { premultiply: false }); From be188730213be333df6b92d8f1aadacce5a422cb Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 12 Dec 2018 18:56:46 -0500 Subject: [PATCH 100/115] v0.52.0-beta.2 --- CHANGELOG.md | 3 +++ package.json | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b634d9c86ab..ba2c3061a31 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,9 @@ * Use diff+patch approach to map.setStyle when the parameter is a URL ([#4025](https://github.com/mapbox/mapbox-gl-js/issues/4025), fixed by [#7562](https://github.com/mapbox/mapbox-gl-js/pull/7562)) * Begin touch zoom immediately when rotation disabled ([#7582](https://github.com/mapbox/mapbox-gl-js/pull/7582)) (h/t [msbarry](https://github.com/msbarry)) * Fix symbol rendering under opaque fill layers ([#7612](https://github.com/mapbox/mapbox-gl-js/pull/7612)) +* Fix shaking by aligning raster sources to pixel grid only when map is idle ([7426](https://github.com/mapbox/mapbox-gl-js/pull/7426)) +* Fix raster layers in Edge 18 by disabling it's incomplete WebP support ([7687](https://github.com/mapbox/mapbox-gl-js/pull/7687)) +* Fix memory leak in hillshade layer ([7691](https://github.com/mapbox/mapbox-gl-js/pull/7691)) ## 0.51.0 November 7, 2018 diff --git a/package.json b/package.json index 2c93e69b9cd..50fd7908a85 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.52.0-beta.1", + "version": "0.52.0-beta.2", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", From 14b77d057910a9e3f0f44f6c827dc324205406fa Mon Sep 17 00:00:00 2001 From: Chris Loer Date: Thu, 29 Nov 2018 11:09:19 -0800 Subject: [PATCH 101/115] Update location of drone video used in examples. --- debug/video.html | 2 +- docs/pages/example/video-on-a-map.html | 2 +- docs/pages/style-spec.js | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/debug/video.html b/debug/video.html index ac090c6466e..ccb6888da16 100644 --- a/debug/video.html +++ b/debug/video.html @@ -28,7 +28,7 @@ }, "video": { "type": "video", - "urls": [ "https://www.mapbox.com/drone/video/drone.mp4", "https://www.mapbox.com/drone/video/drone.webm" ], + "urls": [ "https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm" ], "coordinates": [ [-122.51596391201019, 37.56238816766053], [-122.51467645168304, 37.56410183312965], diff --git a/docs/pages/example/video-on-a-map.html b/docs/pages/example/video-on-a-map.html index 39b6f33e7b1..8a62e0d8d78 100644 --- a/docs/pages/example/video-on-a-map.html +++ b/docs/pages/example/video-on-a-map.html @@ -10,7 +10,7 @@ }, "video": { "type": "video", - "urls": ["https://www.mapbox.com/drone/video/drone.mp4", "https://www.mapbox.com/drone/video/drone.webm"], + "urls": ["https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm"], "coordinates": [ [-122.51596391201019, 37.56238816766053], [-122.51467645168304, 37.56410183312965], diff --git a/docs/pages/style-spec.js b/docs/pages/style-spec.js index 680c73af292..18f5b2d8069 100644 --- a/docs/pages/style-spec.js +++ b/docs/pages/style-spec.js @@ -752,8 +752,8 @@ export default class extends React.Component { "video": { "type": "video", "urls": [ - "https://www.mapbox.com/drone/video/drone.mp4", - "https://www.mapbox.com/drone/video/drone.webm" + "https://static-assets.mapbox.com/mapbox-gl-js/drone.mp4", + "https://static-assets.mapbox.com/mapbox-gl-js/drone.webm" ], "coordinates": [ [-122.51596391201019, 37.56238816766053], From 63248b9a6176ee2c7f3cc73271437a593b71dafc Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 19 Dec 2018 13:10:32 -0500 Subject: [PATCH 102/115] cherry-pick color state fix to release branch (#7715) --- CHANGELOG.md | 1 + src/render/draw_custom.js | 1 + .../mapbox-gl-js#7708/expected.png | Bin 0 -> 150 bytes .../regressions/mapbox-gl-js#7708/style.json | 44 ++++++++++++++++++ 4 files changed, 46 insertions(+) create mode 100644 test/integration/render-tests/regressions/mapbox-gl-js#7708/expected.png create mode 100644 test/integration/render-tests/regressions/mapbox-gl-js#7708/style.json diff --git a/CHANGELOG.md b/CHANGELOG.md index ba2c3061a31..b430d2ba7b2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,7 @@ * Fix shaking by aligning raster sources to pixel grid only when map is idle ([7426](https://github.com/mapbox/mapbox-gl-js/pull/7426)) * Fix raster layers in Edge 18 by disabling it's incomplete WebP support ([7687](https://github.com/mapbox/mapbox-gl-js/pull/7687)) * Fix memory leak in hillshade layer ([7691](https://github.com/mapbox/mapbox-gl-js/pull/7691)) +* Fix disappearing custom layers ([7711](https://github.com/mapbox/mapbox-gl-js/pull/7711)) ## 0.51.0 November 7, 2018 diff --git a/src/render/draw_custom.js b/src/render/draw_custom.js index 03f74ebabde..e9dd3328e2b 100644 --- a/src/render/draw_custom.js +++ b/src/render/draw_custom.js @@ -45,6 +45,7 @@ function drawCustom(painter: Painter, sourceCache: SourceCache, layer: CustomSty } else { painter.setCustomLayerDefaults(); + context.setColorMode(painter.colorModeForRenderPass()); context.setStencilMode(StencilMode.disabled); const depthMode = painter.depthModeForSublayer(0, DepthMode.ReadOnly); diff --git a/test/integration/render-tests/regressions/mapbox-gl-js#7708/expected.png b/test/integration/render-tests/regressions/mapbox-gl-js#7708/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..8546863a53e9468c379eb4b129dbb58e4314507c GIT binary patch literal 150 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=Or9=|Ar*{or0OmKdHx{Y+k=jb z2NW2NY$*C?Yb^Zus+x-DBrtN}>yO#-=f#1Cjf&<^+U`t{E^^L0!MhWk;|5VZNkvNj Y(k3R2pevGLK%*HvUHx3vIVCg!03>@dMF0Q* literal 0 HcmV?d00001 diff --git a/test/integration/render-tests/regressions/mapbox-gl-js#7708/style.json b/test/integration/render-tests/regressions/mapbox-gl-js#7708/style.json new file mode 100644 index 00000000000..c5fc3d05fe1 --- /dev/null +++ b/test/integration/render-tests/regressions/mapbox-gl-js#7708/style.json @@ -0,0 +1,44 @@ +{ + "version": 8, + "metadata": { + "test": { + "width": 64, + "height": 64, + "operations": [ + [ + "addCustomLayer", + "null-island" + ] + ] + } + }, + "sources": { + "geometry": { + "type": "geojson", + "data": { + "type": "FeatureCollection", + "features": [{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [0, 0] + } + }] + } + } + }, + "layers": [ + { + "id": "geometry", + "type": "circle", + "source": "geometry", + "layout": { + "visibility": "none" + }, + "paint": { + "circle-radius": 40 + } + } + ] +} From 8006677bb4001cb9b47ec8ac9edbc1ef951a500a Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Wed, 19 Dec 2018 14:12:18 -0500 Subject: [PATCH 103/115] v0.52.0 --- package.json | 2 +- src/style-spec/CHANGELOG.md | 6 ++++++ src/style-spec/package.json | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 50fd7908a85..5623efb5e72 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "mapbox-gl", "description": "A WebGL interactive maps library", - "version": "0.52.0-beta.2", + "version": "0.52.0", "main": "dist/mapbox-gl.js", "style": "dist/mapbox-gl.css", "license": "SEE LICENSE IN LICENSE.txt", diff --git a/src/style-spec/CHANGELOG.md b/src/style-spec/CHANGELOG.md index bb3f45e1a0a..5c3269e0f6d 100644 --- a/src/style-spec/CHANGELOG.md +++ b/src/style-spec/CHANGELOG.md @@ -1,3 +1,9 @@ +## 13.5.0 + +### Features and improvements +* Flattens `all` expressions in converted filters ([#7679](https://github.com/mapbox/mapbox-gl-js/pull/7679)) +* Compatibility tables are updated ([#7574](https://github.com/mapbox/mapbox-gl-js/pull/7574)) + ## 13.4.0 ### ✨ Features and improvements diff --git a/src/style-spec/package.json b/src/style-spec/package.json index 5a2f077f3b1..21c4b2ce9c6 100644 --- a/src/style-spec/package.json +++ b/src/style-spec/package.json @@ -1,7 +1,7 @@ { "name": "@mapbox/mapbox-gl-style-spec", "description": "a specification for mapbox gl styles", - "version": "13.4.0", + "version": "13.5.0", "author": "Mapbox", "keywords": [ "mapbox", From 64c38153ed8f0630ed5a08af204f72c3ade0667a Mon Sep 17 00:00:00 2001 From: Kayla Bauhaus Date: Wed, 19 Dec 2018 16:48:41 -0500 Subject: [PATCH 104/115] updates mapbox-gl-directions version in example (#7719) --- docs/pages/example/mapbox-gl-directions.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/pages/example/mapbox-gl-directions.html b/docs/pages/example/mapbox-gl-directions.html index caf18240c60..dfa4d78de19 100644 --- a/docs/pages/example/mapbox-gl-directions.html +++ b/docs/pages/example/mapbox-gl-directions.html @@ -1,5 +1,5 @@ - - + +
diff --git a/docs/pages/example/toggle-worldviews.js b/docs/pages/example/toggle-worldviews.js new file mode 100644 index 00000000000..0d49277cedb --- /dev/null +++ b/docs/pages/example/toggle-worldviews.js @@ -0,0 +1,16 @@ +/*--- +title: Change worldview of administrative boundaries +description: | + Uses the [worldview](https://www.mapbox.com/vector-tiles/mapbox-streets-v8/#-worldview-text) value to adjust administrative boundaries based on the map's audience. You can see the worldview options within the worldviews variable in this example. They are as follows: + - **CN**: Boundaries for a mainland Chinese audience/worldview, but not officially approved for use in the PRC. + - **IN**: Boundaries conforming to cartographic requirements for use in India. + - **US**: Boundaries for an American audience, & which are generally appropriate outside of China & India. + Lines do not necessarily reflect official US foreign policy. +tags: + - layers + - user interaction +pathname: /mapbox-gl-js/example/toggle-worldviews/ +---*/ +import Example from '../../components/example'; +import html from './toggle-worldviews.html'; +export default Example(html); From de17c18a41dce61d0539e63efa661b452f4a41ba Mon Sep 17 00:00:00 2001 From: Ryan Hamley Date: Thu, 3 Jan 2019 12:59:39 -0800 Subject: [PATCH 107/115] Fixes bugs in documentation (#7741) --- docs/documentation.yml | 1 + src/ui/events.js | 6 +----- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/docs/documentation.yml b/docs/documentation.yml index 2f69418b898..1bf4e883133 100644 --- a/docs/documentation.yml +++ b/docs/documentation.yml @@ -1,6 +1,7 @@ toc: - Map - accessToken + - url - supported - version - setRTLTextPlugin diff --git a/src/ui/events.js b/src/ui/events.js index d5348266ab3..82968ccf8ba 100644 --- a/src/ui/events.js +++ b/src/ui/events.js @@ -8,7 +8,6 @@ import { extend } from '../util/util'; import type Map from './map'; import type LngLat from '../geo/lng_lat'; -import type LngLatBounds from '../geo/lng_lat_bounds'; /** * `MapMouseEvent` is the event type for mouse-related map events. @@ -218,16 +217,13 @@ export class MapWheelEvent extends Event { /** * @typedef {Object} MapBoxZoomEvent * @property {MouseEvent} originalEvent - * @property {LngLatBounds} boxZoomBounds The bounding box of the "box zoom" interaction. - * This property is only provided for `boxzoomend` events. */ export type MapBoxZoomEvent = { type: 'boxzoomstart' | 'boxzoomend' | 'boxzoomcancel', map: Map, - originalEvent: MouseEvent, - boxZoomBounds: LngLatBounds + originalEvent: MouseEvent }; /** From e27786c56bc0d832413022d9026b9eb24ed96bfd Mon Sep 17 00:00:00 2001 From: David Clark Date: Tue, 8 Jan 2019 12:13:55 -0700 Subject: [PATCH 108/115] [docs] Use docs-page-shell (#7742) * Use docs-page-shell * fix p pre nesting error * updates docs-page-shell * adds cushion for footer * adds spaces * adds margin-left to footer to clear left_nav * rm pad4 for consistent padding around content pages * adds z-index to page-footer to make links active --- batfish.config.js | 4 +- docs/components/page_shell.js | 2 +- docs/components/quickstart.js | 12 +- docs/components/site.css | 11 + vendor/docs-page-shell/page-shell-script.js | 2 + vendor/docs-page-shell/page-shell-styles.css | 706 ++++ vendor/docs-page-shell/react-page-shell.js | 1084 ++++++ vendor/dotcom-page-shell/page-shell-script.js | 2 - .../dotcom-page-shell/page-shell-styles.css | 1089 ------ vendor/dotcom-page-shell/react-page-shell.js | 2905 ----------------- 10 files changed, 1810 insertions(+), 4007 deletions(-) create mode 100644 vendor/docs-page-shell/page-shell-script.js create mode 100644 vendor/docs-page-shell/page-shell-styles.css create mode 100644 vendor/docs-page-shell/react-page-shell.js delete mode 100644 vendor/dotcom-page-shell/page-shell-script.js delete mode 100644 vendor/dotcom-page-shell/page-shell-styles.css delete mode 100644 vendor/dotcom-page-shell/react-page-shell.js diff --git a/batfish.config.js b/batfish.config.js index 87afb906c93..2fa1932b4fa 100644 --- a/batfish.config.js +++ b/batfish.config.js @@ -10,7 +10,7 @@ module.exports = () => { stylesheets: [ `${__dirname}/docs/components/site.css`, `${__dirname}/docs/components/prism_highlight.css`, - `${__dirname}/vendor/dotcom-page-shell/page-shell-styles.css` + `${__dirname}/vendor/docs-page-shell/page-shell-styles.css` ], applicationWrapperPath: `${__dirname}/docs/components/application-wrapper.js`, webpackLoaders: [ @@ -30,7 +30,7 @@ module.exports = () => { ], inlineJs: [ { - filename: `${__dirname}/vendor/dotcom-page-shell/page-shell-script.js` + filename: `${__dirname}/vendor/docs-page-shell/page-shell-script.js` } ], dataSelectors: { diff --git a/docs/components/page_shell.js b/docs/components/page_shell.js index e955d3cd715..0146dd74467 100644 --- a/docs/components/page_shell.js +++ b/docs/components/page_shell.js @@ -1,6 +1,6 @@ import React from 'react'; import Helmet from 'react-helmet'; -import ReactPageShell from '../../vendor/dotcom-page-shell/react-page-shell.js'; +import ReactPageShell from '../../vendor/docs-page-shell/react-page-shell.js'; // initialize analytics if (typeof window !== 'undefined' && window.initializeMapboxAnalytics) { diff --git a/docs/components/quickstart.js b/docs/components/quickstart.js index 5162a21b319..53ff0d5057f 100644 --- a/docs/components/quickstart.js +++ b/docs/components/quickstart.js @@ -73,18 +73,15 @@ export default class extends React.Component { render() { return ( -
+

Mapbox GL JS

- Mapbox GL JS is a JavaScript library that uses WebGL to render interactive maps from - vector tiles and - Mapbox styles. - It is part of the Mapbox GL ecosystem, which includes - Mapbox Mobile, + Mapbox GL JS is a JavaScript library that uses WebGL to render interactive maps from{' '}vector tiles and{' '}Mapbox styles. + It is part of the Mapbox GL ecosystem, which includes{' '}Mapbox Mobile, a compatible renderer written in C++ with bindings for desktop and mobile platforms. To see what new features our team is working on, take a look at our roadmap. @@ -156,8 +153,7 @@ export default class extends React.Component { Including it with a {''} in the head of the document via the Mapbox CDN is the simplest and easiest way to provide the CSS, but it is also bundled in the Mapbox module, meaning that if you have a bundler - that can handle CSS, you can import the CSS from -

{`mapbox-gl/dist/mapbox-gl.css`}
. + that can handle CSS, you can import the CSS from {`mapbox-gl/dist/mapbox-gl.css`}.

Note too that if the CSS isn't available by the first render, as soon as the CSS is provided, diff --git a/docs/components/site.css b/docs/components/site.css index 5db5a4a12a2..e73eebbc396 100644 --- a/docs/components/site.css +++ b/docs/components/site.css @@ -30,3 +30,14 @@ a.dark-link:hover { div.toggle-sibling:hover { opacity: 0.7; } .line-height15 {line-height: 15px} + +@media only screen and (min-width: 640px) { + #page-footer-legal-social { + margin-left: 25% !important; + } +} + +#page-footer { + z-index: 1; + position: relative; +} diff --git a/vendor/docs-page-shell/page-shell-script.js b/vendor/docs-page-shell/page-shell-script.js new file mode 100644 index 00000000000..e2bc3ed91f9 --- /dev/null +++ b/vendor/docs-page-shell/page-shell-script.js @@ -0,0 +1,2 @@ +/*eslint-disable*/ +!function(){"use strict";var S,t="https://www.mapbox.com",i="https://122e4e-mapbox.global.ssl.fastly.net",s=640,L=[];function x(e){var t=e.triggerEl,n=e.pointerEl,o=e.onCrossMobileThreshhold,i=e.menuBodyContainerEl,a=e.menuBodyEl,r=e||B,c=function(){window.matchMedia("(min-width: ".concat(s,"px)")).matches?r({pointerEl:n,triggerEl:t,menuBodyContainerEl:i,menuBodyEl:a}):o&&o()};L.push(c),window.addEventListener("resize",c)}function B(e){var t=e.pointerEl,n=e.triggerEl.getBoundingClientRect();t.style.left=Math.round(n.left+n.width/2)+"px"}var a,r,I,M=function(o,i,a){var r,c,s,l,t=!1,u=!1,n={},d=0,m=0,v={sensitivity:7,interval:100,timeout:0,handleFocus:!1};function f(e){r=e.clientX,c=e.clientY}function e(e){return t=!0,m&&(m=clearTimeout(m)),o.removeEventListener("mousemove",f,!1),1!==d&&(s=e.clientX,l=e.clientY,o.addEventListener("mousemove",f,!1),m=setTimeout(function(){!function e(t,n){if(m&&(m=clearTimeout(m)),Math.abs(s-r)+Math.abs(l-c) .shell-col { + padding-left: 12px; +} +.shell-wrapper .shell-grid--gut24 > .shell-col { + padding-left: 24px; +} +.shell-wrapper .shell-my12 { + margin-top: 12px !important; + margin-bottom: 12px !important; +} +.shell-wrapper .shell-ml12 { + margin-left: 12px !important; +} +.shell-wrapper .shell-ml-neg6 { + margin-left: -6px !important; +} +.shell-wrapper .shell-mx6 { + margin-left: 6px !important; + margin-right: 6px !important; +} +.shell-wrapper .shell-mx12 { + margin-left: 12px !important; + margin-right: 12px !important; +} +.shell-wrapper .shell-mt3 { + margin-top: 3px !important; +} +.shell-wrapper .shell-mt6 { + margin-top: 6px !important; +} +.shell-wrapper .shell-mt12 { + margin-top: 12px !important; +} +.shell-wrapper .shell-mt18 { + margin-top: 18px !important; +} +.shell-wrapper .shell-mt24 { + margin-top: 24px !important; +} +.shell-wrapper .shell-mr18 { + margin-right: 18px !important; +} +.shell-wrapper .shell-mb6 { + margin-bottom: 6px !important; +} +.shell-wrapper .shell-mb12 { + margin-bottom: 12px !important; +} +.shell-wrapper .shell-ml6 { + margin-left: 6px !important; +} +.shell-wrapper .shell-ml24 { + margin-left: 24px !important; +} +.shell-wrapper .shell-p12 { + padding: 12px !important; +} +.shell-wrapper .shell-py6 { + padding-top: 6px !important; + padding-bottom: 6px !important; +} +.shell-wrapper .shell-py12 { + padding-top: 12px !important; + padding-bottom: 12px !important; +} +.shell-wrapper .shell-py24 { + padding-top: 24px !important; + padding-bottom: 24px !important; +} +.shell-wrapper .shell-py30 { + padding-top: 30px !important; + padding-bottom: 30px !important; +} +.shell-wrapper .shell-px12 { + padding-left: 12px !important; + padding-right: 12px !important; +} +.shell-wrapper .shell-px24 { + padding-left: 24px !important; + padding-right: 24px !important; +} +.shell-wrapper .shell-px30 { + padding-left: 30px !important; + padding-right: 30px !important; +} +.shell-wrapper .shell-pt3 { + padding-top: 3px !important; +} +.shell-wrapper .shell-pb24 { + padding-bottom: 24px !important; +} + +/* Sizing */ +.shell-wrapper .shell-w30 { + width: 30px !important; +} +.shell-wrapper .shell-w-full { + width: 100% !important; +} +.shell-wrapper .shell-h24 { + height: 24px !important; +} +.shell-wrapper .shell-h30 { + height: 30px !important; +} + +/* Media Queries */ +@media screen and (min-width: 640px) { + .shell-wrapper .shell-col--6-mm { + width: 50% !important; + } + .shell-wrapper .shell-none-mm { + display: none !important; + } + .shell-wrapper .shell-flex-child-mm { + display: block !important; + max-width: 100% !important; + } + .shell-wrapper .shell-flex-parent-mm { + display: -webkit-flex !important; + display: flex !important; + } + .shell-wrapper .shell-mb0-mm { + margin-bottom: 0 !important; + } + .shell-wrapper .shell-align-l-mm { + text-align: left !important; + } + .shell-wrapper .shell-align-r-mm { + text-align: right !important; + } +} +@media screen and (min-width: 800px) { + .shell-wrapper .shell-mt42-ml { + margin-top: 42px !important; + } + .shell-wrapper .shell-ml12-ml { + margin-left: 12px !important; + } + .shell-wrapper .shell-py0-ml { + padding-top: 0 !important; + padding-bottom: 0 !important; + } + .shell-wrapper .shell-py48-ml { + padding-top: 48px !important; + padding-bottom: 48px !important; + } +} +@media screen and (min-width: 1200px) { + .shell-wrapper .shell-txt-s-mxl { + font-size: 12px !important; + line-height: 18px; + } + .shell-wrapper .shell-mx18-mxl { + margin-right: 18px !important; + } + .shell-wrapper .shell-ml18-mxl, + .shell-wrapper .shell-mx18-mxl { + margin-left: 18px !important; + } +} + +.shell-wrapper .shell-transition { + transition: all .125s; +} +.shell-wrapper .shell-clip { + overflow: hidden !important; +} + +/* mapbox-assembly Typography */ +@font-face { + font-family: 'Cera'; + font-weight: 700; + /* Notice the absolute URLs! */ + src: url('https://api.mapbox.com/mapbox-assembly/mbx/v0.14.0/CeraPRO-Bold.woff2') + format('woff2'), + url('https://api.mapbox.com/mapbox-assembly/mbx/v0.14.0/CeraPRO-Bold.woff') + format('woff'); +} +.shell-wrapper .shell-txt-fancy { + font-family: 'Cera', sans-serif !important; +} + +/* mapbox-assembly Branding */ +.shell-wrapper .shell-mb-logo { + background-image: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 790 180%22%3E%3Cpath d%3D%22M89.1 1.8C39.9 1.8 0 41.7 0 90.9 0 140.1 39.9 180 89.1 180c49.2 0 89.1-39.9 89.1-89.1 0-49.2-39.9-89.1-89.1-89.1zm457.8 19.7c-1.2 0-2.2 1-2.2 2.2v103.2c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-7.1c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2-10 0-19.5 4.1-26.3 11.3V23.7c0-1.2-1-2.2-2.2-2.2h-13.4zM98.3 36.4c11.4.3 22.9 4.8 31.7 13.7 17.7 17.7 18.3 45.7 1.4 62.7-30.5 30.5-84.8 20.7-84.8 20.7s-9.8-54.3 20.7-84.8c8.5-8.4 19.7-12.5 31-12.3zm160.3 14.2c-8.2 0-15.9 4-20.8 10.6v-6.4c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V127c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V83.8c.5-9.7 7.2-17.3 15.4-17.3 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-44.9c1.2-8.8 7.6-15.6 15.3-15.6 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-49.6c.3-14.8-12.3-26.8-27.9-26.8-10 .1-19.2 5.9-23.5 15-5-9.3-14.7-15.1-25.3-15zm127.9 0c-20.9 0-37.9 18-37.9 40.3 0 22.3 17 40.3 37.9 40.3 10 0 19.5-4.1 26.3-11.3v7.1c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V54.8c.1-1.2-.9-2.2-2.2-2.2H415c-1.2 0-2.2 1-2.2 2.2v7.1c-6.9-7.2-16.4-11.3-26.3-11.3zm106.1 0c-10 0-19.5 4.1-26.3 11.3v-7.1c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V158c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-38.2c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2zm185.5 0c-22.7 0-41 18-41 40.3 0 22.3 18.4 40.3 41 40.3s41-18 41-40.3c0-22.3-18.3-40.3-41-40.3zm45.4 2c-1.1 0-2 .9-2 2 0 .4.1.8.3 1.1l23 35-23.3 35.4c-.6.9-.4 2.2.6 2.8.3.2.7.3 1.1.3h15.5c1.2 0 2.3-.6 2.9-1.6l13.8-23.1 13.8 23.1c.6 1 1.7 1.6 2.9 1.6h15.5c1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1.1L766 90.7l23-35c.6-.9.4-2.2-.6-2.8-.3-.2-.7-.3-1.1-.3h-15.5c-1.2 0-2.3.6-2.9 1.6l-13.5 22.7-13.5-22.7c-.6-1-1.7-1.6-2.9-1.6h-15.5zM99.3 54l-8.7 18-17.9 8.7 17.9 8.7 8.7 18 8.8-18 17.9-8.7-17.9-8.7-8.8-18zm290.3 12.7c12.7 0 23 10.7 23.2 23.9v.6c-.1 13.2-10.5 23.9-23.2 23.9-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2zm99.8 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm96.3 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm92.2 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2z%22 fill%3D%22%234264fb%22%2F%3E%3C%2Fsvg%3E%0A"); + background-size: 132px 42px; + background-repeat: no-repeat; + display: inline-block; + width: 132px; + height: 42px; +} +.shell-wrapper .shell-mb-logo__wrapper { + height: 42px; +} +.shell-wrapper .shell-mb-logo--white { + background-image: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 790 180%22%3E%3Cpath d%3D%22M89.1 1.8C39.9 1.8 0 41.7 0 90.9 0 140.1 39.9 180 89.1 180c49.2 0 89.1-39.9 89.1-89.1 0-49.2-39.9-89.1-89.1-89.1zm457.8 19.7c-1.2 0-2.2 1-2.2 2.2v103.2c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-7.1c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2-10 0-19.5 4.1-26.3 11.3V23.7c0-1.2-1-2.2-2.2-2.2h-13.4zM98.3 36.4c11.4.3 22.9 4.8 31.7 13.7 17.7 17.7 18.3 45.7 1.4 62.7-30.5 30.5-84.8 20.7-84.8 20.7s-9.8-54.3 20.7-84.8c8.5-8.4 19.7-12.5 31-12.3zm160.3 14.2c-8.2 0-15.9 4-20.8 10.6v-6.4c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V127c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V83.8c.5-9.7 7.2-17.3 15.4-17.3 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-44.9c1.2-8.8 7.6-15.6 15.3-15.6 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-49.6c.3-14.8-12.3-26.8-27.9-26.8-10 .1-19.2 5.9-23.5 15-5-9.3-14.7-15.1-25.3-15zm127.9 0c-20.9 0-37.9 18-37.9 40.3 0 22.3 17 40.3 37.9 40.3 10 0 19.5-4.1 26.3-11.3v7.1c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V54.8c.1-1.2-.9-2.2-2.2-2.2H415c-1.2 0-2.2 1-2.2 2.2v7.1c-6.9-7.2-16.4-11.3-26.3-11.3zm106.1 0c-10 0-19.5 4.1-26.3 11.3v-7.1c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V158c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-38.2c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2zm185.5 0c-22.7 0-41 18-41 40.3 0 22.3 18.4 40.3 41 40.3s41-18 41-40.3c0-22.3-18.3-40.3-41-40.3zm45.4 2c-1.1 0-2 .9-2 2 0 .4.1.8.3 1.1l23 35-23.3 35.4c-.6.9-.4 2.2.6 2.8.3.2.7.3 1.1.3h15.5c1.2 0 2.3-.6 2.9-1.6l13.8-23.1 13.8 23.1c.6 1 1.7 1.6 2.9 1.6h15.5c1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1.1L766 90.7l23-35c.6-.9.4-2.2-.6-2.8-.3-.2-.7-.3-1.1-.3h-15.5c-1.2 0-2.3.6-2.9 1.6l-13.5 22.7-13.5-22.7c-.6-1-1.7-1.6-2.9-1.6h-15.5zM99.3 54l-8.7 18-17.9 8.7 17.9 8.7 8.7 18 8.8-18 17.9-8.7-17.9-8.7-8.8-18zm290.3 12.7c12.7 0 23 10.7 23.2 23.9v.6c-.1 13.2-10.5 23.9-23.2 23.9-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2zm99.8 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm96.3 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm92.2 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2z%22 fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E%0A"); +} + +/* Color Variants */ +.shell-wrapper .shell-color-light-blue { + color: #7290AC !important; +} +.shell-wrapper .shell-color-blue { + color: #4264fb !important; +} +.shell-wrapper .shell-color-gray { + color: #607d9c !important; +} +.shell-wrapper .shell-color-gray-dark { + color: #273d56 !important; +} +.shell-wrapper .shell-color-darken50 { + color: rgba(31, 51, 73, .5) !important; +} +.shell-wrapper .shell-color-white { + color: #fff !important; +} +.shell-wrapper .shell-color-pink { + color: #ed6498 !important; +} + + +/*Background*/ +.shell-wrapper .shell-bg-blue { + background-color: #4264fb !important; +} +.shell-wrapper .shell-bg-darken25 { + background-color: rgba(31, 51, 73, .25) !important; +} +.shell-wrapper .shell-bg-white { + background-color: #fff !important; +} +.shell-wrapper .shell-bg-pink { + background-color: #ed6498 !important; +} + +/*Links*/ +.shell-wrapper .shell-link--white { + color: #fff; +} +.shell-wrapper .shell-link--white:hover { + color: rgba(255, 255, 255, .75); +} + +/*Border*/ +.shell-wrapper .shell-border--white { + border-color: #fff !important; +} +.shell-wrapper .shell-border--gray-light { + border-color: #c6d2e1 !important +} + +/*Shadow*/ +.shell-wrapper .shell-shadow-darken10-bold { + box-shadow: 0 0 30px 6px rgba(31, 51, 73, .10) !important; +} + +/*Hovers*/ +.shell-wrapper .shell-color-blue-on-hover:hover { + color: #4264fb !important; +} +.shell-wrapper .shell-color-blue-dark-on-hover:hover { + color: #314ccd !important; +} +.shell-wrapper .shell-color-gray-dark-on-hover:hover { + color: #273d56 !important; +} + +/* ========================================================================== */ +/* Special shell things */ +/* ========================================================================== */ + +.shell-wrapper .shell-triangle-wide { + width: 16px !important; + height: 16px !important; + font-size: 0 !important; + line-height: 0 !important; +} +.shell-wrapper .shell-triangle-wide--u { + border-left: 16px solid transparent !important; + border-right: 16px solid transparent !important; + border-bottom: 16px solid currentColor !important; +} +/* shell-header-buffer is not scoped so it can be used inside the shell */ +.shell-header-buffer { + padding-top: 66px; +} + +@media (min-width: 640px) { + .shell-header-buffer { + padding-top: 84px; + } +} +/* Menu transitions */ +/* If you change the speed of these transitions, you must also update the timeout value in + ./page-shell-script/menu-pointer-positioner.js#setPointerResetTimeout */ +.shell-animated-menu, +.shell-animated-menu__pointer, +.shell-mobile-nav__backdrop { + transition: opacity 0.25s, visibility 0.25s, transform 0.25s, -webkit-transform 0.25s; +} + +.shell-mobile-nav__backdrop { + will-change: opacity; +} + +.shell-animated-menu__pointer { + -webkit-transform: translateX(-50%) translateY(0); + transform: translateX(-50%) translateY(0); +} + +.shell-animated-menu__pointer--visible { + -webkit-transform: translateX(-50%) translateY(-100%); + transform: translateX(-50%) translateY(-100%); +} + +.shell-animated-menu { + opacity: 0; + pointer-events: none; + -webkit-transform: translate(0, 0, 0) scale(0.95); + transform: translate(0, 0, 0) scale(0.95); + -webkit-transform-origin: 50% 0; + transform-origin: 50% 0; + visibility: hidden; +} + +.shell-animated-menu--visible { + opacity: 1; + pointer-events: auto; + -webkit-transform: translate(0, 0, 0) scale(1); + transform: translate(0, 0, 0) scale(1); + visibility: visible; +} + +.shell-mb-logo--white, +.shell-mobile-nav__logo--overlay { + transition: opacity 0.125s, visibility 0.125s; +} + +.shell-mb-logo--white { + opacity: 1; +} + +.shell-mobile-nav__logo--overlay, +.shell-mobile-nav__backdrop { + opacity: 0; + visibility: hidden; +} + +.shell-mobile-nav--visible .shell-mobile-nav__trigger, +.shell-mobile-nav--visible .shell-mobile-nav__trigger:hover { + color: #4264fb; +} + +.shell-mobile-nav--visible .shell-mb-logo--white { + opacity: 0; +} + +.shell-mobile-nav--visible .shell-mobile-nav__logo--overlay, +.shell-mobile-nav__backdrop--visible { + opacity: 1; + visibility: visible; +} + +.shell-mobile-nav__trigger__bar--top, +.shell-mobile-nav__trigger__bar--middle, +.shell-mobile-nav__trigger__bar--bottom { + opacity: 1; + transition: opacity 0.25s, transform 0.25s; + -webkit-transform: translateY(0) rotate(0deg) scale(1); + transform: translateY(0) rotate(0deg) scale(1); +} + +.shell-mobile-nav__trigger__bar--middle { + -webkit-transform-origin: 9px 9px; + transform-origin: 9px 9px; +} + +.shell-mobile-nav__trigger__bar--top { + -webkit-transform-origin: 9px 5px; + transform-origin: 9px 5px; +} + +.shell-mobile-nav__trigger__bar--bottom { + -webkit-transform-origin: 9px 13px; + transform-origin: 9px 13px; +} + +.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--middle { + opacity: 0; + -webkit-transform: scale(0.5); + transform: scale(0.5); +} + +.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--top { + -webkit-transform: translateY(4px) rotate(45deg); + transform: translateY(4px) rotate(45deg); +} + +.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--bottom { + -webkit-transform: translateY(-4px) rotate(-45deg); + transform: translateY(-4px) rotate(-45deg); +} + +/* user menu color changes: it's a button when you're signed in, an anchor when you're not */ + +.shell-mobile-nav--visible #mbx-user-menu-mobile button { + color: #4264fb !important; +} + +.shell-mobile-nav--visible #mbx-user-menu-mobile a { + color: #4264fb !important; + box-shadow: inset 0 0 0 1px currentColor; +} diff --git a/vendor/docs-page-shell/react-page-shell.js b/vendor/docs-page-shell/react-page-shell.js new file mode 100644 index 00000000000..8b9ca59ffff --- /dev/null +++ b/vendor/docs-page-shell/react-page-shell.js @@ -0,0 +1,1084 @@ +/* eslint-disable */ +'use strict'; + +function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } + +var React = _interopDefault(require('react')); +var PropTypes = _interopDefault(require('prop-types')); +var Helmet = require('react-helmet'); +var Helmet__default = _interopDefault(Helmet); + +function _classCallCheck(instance, Constructor) { + if (!(instance instanceof Constructor)) { + throw new TypeError("Cannot call a class as a function"); + } +} + +function _defineProperties(target, props) { + for (var i = 0; i < props.length; i++) { + var descriptor = props[i]; + descriptor.enumerable = descriptor.enumerable || false; + descriptor.configurable = true; + if ("value" in descriptor) descriptor.writable = true; + Object.defineProperty(target, descriptor.key, descriptor); + } +} + +function _createClass(Constructor, protoProps, staticProps) { + if (protoProps) _defineProperties(Constructor.prototype, protoProps); + if (staticProps) _defineProperties(Constructor, staticProps); + return Constructor; +} + +function _extends() { + _extends = Object.assign || function (target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i]; + + for (var key in source) { + if (Object.prototype.hasOwnProperty.call(source, key)) { + target[key] = source[key]; + } + } + } + + return target; + }; + + return _extends.apply(this, arguments); +} + +function _inherits(subClass, superClass) { + if (typeof superClass !== "function" && superClass !== null) { + throw new TypeError("Super expression must either be null or a function"); + } + + subClass.prototype = Object.create(superClass && superClass.prototype, { + constructor: { + value: subClass, + writable: true, + configurable: true + } + }); + if (superClass) _setPrototypeOf(subClass, superClass); +} + +function _getPrototypeOf(o) { + _getPrototypeOf = Object.setPrototypeOf ? Object.getPrototypeOf : function _getPrototypeOf(o) { + return o.__proto__ || Object.getPrototypeOf(o); + }; + return _getPrototypeOf(o); +} + +function _setPrototypeOf(o, p) { + _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { + o.__proto__ = p; + return o; + }; + + return _setPrototypeOf(o, p); +} + +function _assertThisInitialized(self) { + if (self === void 0) { + throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); + } + + return self; +} + +function _possibleConstructorReturn(self, call) { + if (call && (typeof call === "object" || typeof call === "function")) { + return call; + } + + return _assertThisInitialized(self); +} + +function BrowserCompatibilityWarning() { + return React.createElement("div", { + className: "shell-wrapper", + id: "page-shell-compatibility-warning", + style: { + display: 'none' + } + }, React.createElement("div", { + className: "shell-py12 shell-px24 shell-bg-pink shell-color-white shell-align-l" + }, React.createElement("button", { + className: "shell-absolute shell-top shell-right shell-p12", + id: "page-shell-compatibility-dismiss" + }, React.createElement("svg", { + className: "shell-icon", + viewBox: "0 0 18 18" + }, React.createElement("path", { + d: "M5.8,5C5.4,5,5,5.4,5,5.8C5,6,5.1,6.2,5.3,6.3l0,0L7.9,9l-2.6,2.6C5.1,11.8,5,12,5,12.2C5,12.6,5.4,13,5.8,13 c0.2,0,0.4-0.1,0.6-0.3L9,10.1l2.6,2.6c0.1,0.2,0.4,0.3,0.6,0.3c0.4,0,0.8-0.4,0.8-0.8c0-0.2-0.1-0.4-0.2-0.6L10.1,9l2.6-2.7 C12.9,6.2,13,6,13,5.8C13,5.4,12.6,5,12.2,5c-0.2,0-0.4,0.1-0.6,0.2L9,7.8L6.4,5.2C6.2,5.1,6,5,5.8,5L5.8,5z" + }))), React.createElement("div", { + className: "limiter shell-block shell-relative" + }, React.createElement("div", { + className: "compatibility-warning-copy shell-mb6 shell-mb0-mm shell-align-center shell-align-l-mm shell-txt-bold" + }, "You are using an outdated browser and will encounter some problems with our website. Please consider upgrading."), React.createElement("div", { + className: "compatibility-warning-action shell-align-center" + }, React.createElement("a", { + className: "shell-btn shell-btn--white shell-color-pink shell-txt-nowrap", + href: "http://outdatedbrowser.com" + }, "Upgrade Now"))))); +} + +function PageHelmet() { + return React.createElement(Helmet.Helmet, null, React.createElement("meta", { + charSet: "utf-8" + }), React.createElement("meta", { + name: "viewport", + content: "width=device-width, initial-scale=1" + }), React.createElement("link", { + rel: "apple-touch-icon", + sizes: "180x180", + href: "https://static-assets.mapbox.com/branding/favicon/v1/apple-touch-icon.png?v=gAd4JjrGWl" + }), React.createElement("link", { + rel: "icon", + type: "image/png", + sizes: "32x32", + href: "https://static-assets.mapbox.com/branding/favicon/v1/favicon-32x32.png?v=gAd4JjrGWl" + }), React.createElement("link", { + rel: "icon", + type: "image/png", + sizes: "16x16", + href: "https://static-assets.mapbox.com/branding/favicon/v1/favicon-16x16.png?v=gAd4JjrGWl" + }), React.createElement("link", { + rel: "manifest", + href: "https://static-assets.mapbox.com/branding/favicon/v1/site.webmanifest?v=gAd4JjrGWl" + }), React.createElement("link", { + rel: "mask-icon", + href: "https://static-assets.mapbox.com/branding/favicon/v1/safari-pinned-tab.svg?v=gAd4JjrGWl", + color: "#4264fb" + }), React.createElement("link", { + rel: "shortcut icon", + href: "https://static-assets.mapbox.com/branding/favicon/v1/favicon.ico?v=gAd4JjrGWl" + }), React.createElement("meta", { + name: "msapplication-TileColor", + content: "#ffffff" + }), React.createElement("meta", { + name: "msapplication-config", + content: "https://static-assets.mapbox.com/branding/favicon/v1/browserconfig.xml?v=gAd4JjrGWl" + }), React.createElement("meta", { + name: "theme-color", + content: "#ffffff" + }), React.createElement("meta", { + name: "p:domain_verify", + content: "57838af58c8045c2c024bc2f9d1577f9" + }), React.createElement("meta", { + name: "google-site-verification", + content: "umPiCFUc_EX8CJ7xWQDPgQwApDxNi59w6riFZPNZj4w" + }), React.createElement("meta", { + name: "twitter:site", + content: "@Mapbox" + }), React.createElement("meta", { + property: "og:site_name", + content: "Mapbox" + })); +} + +var shellStyles = { + // Header names + headerMenuName: 'shell-txt-s shell-txt-s-mxl shell-txt-bold shell-txt-nowrap shell-py6', + // Medium to X-large navigation + navigationItem: 'shell-mx6 shell-mx9-ml shell-mx18-mxl', + // Medium to X-large navigation popup menu + popupMenuBody: 'shell-shadow-darken10-bold shell-bg-white shell-absolute shell-inline-block shell-round shell-txt-s', + popupMenuNavHeading: 'shell-txt-uppercase shell-txt-s shell-txt-spacing1 shell-txt-fancy shell-color-light-blue', + popupMenuLink: 'shell-txt-bold shell-color-blue-on-hover shell-color-gray-dark', + // User menu popup + userNavLink: 'shell-color-gray-dark shell-color-blue-on-hover shell-txt-s shell-txt-bold shell-my12 shell-block', + userAvatar: 'shell-border shell-border--2 shell-border--white shell-h30 shell-w30 shell-bg-darken25 shell-clip shell-round-full' +}; + +function PopupMenu(props) { + var name = props.name, + darkText = props.darkText, + children = props.children; + var menuNameClasses = shellStyles.headerMenuName; + menuNameClasses += darkText ? ' shell-navigation-menu-button shell-transition shell-color-gray-dark shell-color-blue-on-hover' : ' shell-navigation-menu-button shell-link shell-link--white'; + return React.createElement("div", { + style: { + lineHeight: 1 + } + }, React.createElement("div", { + id: "".concat(name, "-menu"), + className: "shell-relative ".concat(shellStyles.navigationItem) + }, React.createElement("button", { + id: "".concat(name, "-menu-trigger"), + "data-nav-trigger": name, + "data-test": "nav-menu-trigger-".concat(name), + "aria-haspopup": "true", + "aria-controls": "".concat(name, "-menu-container"), + "aria-expanded": "false", + "aria-label": "".concat(name, " menu"), + className: menuNameClasses + }, name)), React.createElement("div", { + id: "".concat(name, "-menu-container"), + "data-nav-menu": name, + "data-test": "nav-menu-".concat(name), + role: "group", + "aria-labelledby": "".concat(name, "-menu-trigger"), + className: "shell-absolute shell-z2 shell-disable-text-size-adjust shell-w-full shell-animated-menu", + style: { + right: 0, + top: '100%', + marginTop: '14px' + } + }, React.createElement("div", { + "data-nav-pointer": name, + className: "shell-triangle-wide shell-triangle-wide--u shell-color-white shell-z5 shell-animated-menu__pointer", + style: { + position: 'absolute', + top: 0 + } + }), React.createElement("div", { + className: shellStyles.popupMenuBody, + "data-nav-menu-body": name + }, children))); +} + +PopupMenu.propTypes = { + darkText: PropTypes.bool, + name: PropTypes.string.isRequired, + children: PropTypes.node.isRequired +}; +PopupMenu.defaultProps = { + darkText: true +}; + +var nonMobile = { + maps: { + sdks: { + title: 'Maps SDKs', + links: [{ + name: 'for iOS', + to: '/ios-sdk/' + }, { + name: 'for Android', + to: '/android-docs/maps/overview/' + }, { + name: 'for Unity', + to: '/unity-sdk/' + }, { + name: 'for React Native', + to: 'https://github.com/mapbox/react-native-mapbox-gl' + }, { + name: 'for Qt', + to: 'https://doc.qt.io/qt-5/location-plugin-mapboxgl.html' + }] + }, + links: [{ + name: 'Mapbox GL JS', + to: '/mapbox-gl-js/' + }, { + name: 'Mapbox Studio', + to: '/studio-manual/' + }, { + name: 'Mapbox Style Spec', + to: '/mapbox-gl-js/style-spec/' + }, { + name: 'Vector tiles', + to: '/vector-tiles/' + }, { + name: 'Maps APIs', + to: '/api-documentation/#maps' + }] + }, + navigation: { + sdks: { + title: 'Navigation SDKs', + links: [{ + name: 'for iOS', + to: '/ios-sdk/navigation/' + }, { + name: 'for Android', + to: '/android-docs/navigation/' + }] + }, + links: [{ + name: 'Directions APIs', + to: '/api-documentation/#directions' + }] + }, + search: { + links: [{ + name: 'Geocoding API', + to: '/api-documentation/#geocoding' + }] + }, + help: { + links: [{ + name: 'How Mapbox works', + to: '/help/how-mapbox-works/' + }, { + name: 'Tutorials', + to: '/help/tutorials/' + }, { + name: 'Troubleshooting', + to: '/help/troubleshooting/' + }, { + name: 'Glossary', + to: '/help/glossary/' + }, { + name: 'Account FAQ', + to: '/help/account-faq/' + }, { + name: 'API playground', + to: '/api-playground/' + }] + } +}; +var mobile = { + maps: { + links: nonMobile.maps.sdks.links.map(function (item) { + return Object.assign({}, item, { + name: "SDK ".concat(item.name) + }); + }).concat(nonMobile.maps.links) + }, + navigation: { + links: nonMobile.navigation.sdks.links.map(function (item) { + return Object.assign({}, item, { + name: "SDK ".concat(item.name) + }); + }).concat(nonMobile.navigation.links) + }, + search: nonMobile.search, + help: nonMobile.help +}; +var navigationMenuData = { + nonMobile: nonMobile, + mobile: mobile +}; + +function LinkList(props) { + var title = props.title, + links = props.links, + bullets = props.bullets; + var navigationHeading = !title ? null : React.createElement("div", { + className: "".concat(shellStyles.popupMenuNavHeading, " shell-mb12") + }, title); + var ulClasses = bullets ? 'shell-txt-ul shell-ml24' : ''; + var linkListItems = React.createElement("ul", { + className: ulClasses + }, links.map(function (link, i) { + var liClasses = i === 0 ? '' : 'shell-mt12'; + if (bullets) liClasses += ' shell-txt-li'; + return React.createElement("li", { + key: i, + className: liClasses + }, React.createElement("a", { + href: link.to, + "data-nav-link": true, + className: shellStyles.popupMenuLink + }, link.name)); + })); + return React.createElement("div", null, navigationHeading, linkListItems); +} + +LinkList.propTypes = { + title: PropTypes.string, + links: PropTypes.arrayOf(PropTypes.shape({ + to: PropTypes.string.isRequired, + name: PropTypes.string.isRequired + })).isRequired, + bullets: PropTypes.bool +}; +LinkList.defaultProps = { + bullets: false +}; + +var navItems = navigationMenuData.nonMobile.search.links; + +function SearchMenu(props) { + return React.createElement(PopupMenu, _extends({}, props, { + name: "Search" + }), React.createElement("div", { + className: "shell-py30 shell-px30" + }, React.createElement(LinkList, { + links: navItems + }))); +} + +var navItems$1 = navigationMenuData.nonMobile.help.links; + +function HelpMenu(props) { + return React.createElement(PopupMenu, _extends({}, props, { + name: "Help" + }), React.createElement("div", { + className: "shell-py30 shell-px30" + }, React.createElement(LinkList, { + links: navItems$1 + }))); +} + +var menuData = navigationMenuData.nonMobile.maps; +var standardLinks = menuData.links; + +function MapsMenu(props) { + var sdkEls = React.createElement(LinkList, { + title: menuData.sdks.title, + links: menuData.sdks.links, + bullets: true + }); + var standardLinkEls = React.createElement(LinkList, { + links: standardLinks + }); + return React.createElement(PopupMenu, _extends({}, props, { + name: "Maps" + }), React.createElement("div", { + className: "shell-py30 shell-px30 w360" + }, React.createElement("div", { + className: "shell-grid shell-grid--gut24" + }, React.createElement("div", { + className: "shell-col shell-col--6" + }, sdkEls), React.createElement("div", { + className: "shell-col shell-col--6" + }, standardLinkEls)))); +} + +var menuData$1 = navigationMenuData.nonMobile.navigation; +var standardLinks$1 = menuData$1.links; + +function NavigationMenu(props) { + var sdkEls = React.createElement(LinkList, { + title: menuData$1.sdks.title, + links: menuData$1.sdks.links, + bullets: true + }); + var standardLinkEls = React.createElement(LinkList, { + links: standardLinks$1 + }); + return React.createElement(PopupMenu, _extends({}, props, { + name: "Navigation" + }), React.createElement("div", { + className: "shell-py30 shell-px30 w360" + }, React.createElement("div", { + className: "shell-grid shell-grid--gut24" + }, React.createElement("div", { + className: "shell-col shell-col--6" + }, sdkEls), React.createElement("div", { + className: "shell-col shell-col--6" + }, standardLinkEls)))); +} + +function NavigationItem(props) { + var colorBasedClasses = props.darkText ? 'shell-navigation-menu-button shell-color-gray-dark shell-color-blue-on-hover' : 'shell-navigation-menu-button shell-link shell-link--white'; + return React.createElement("div", { + className: "shell-flex-child ".concat(shellStyles.navigationItem), + style: { + lineHeight: 1 + } + }, React.createElement("a", { + className: "shell-py6 shell-txt-s shell-txt-bold ".concat(colorBasedClasses), + "data-test": "nav-menu-item-".concat(props.name), + href: props.href + }, props.children)); +} + +NavigationItem.propTypes = { + darkText: PropTypes.bool, + name: PropTypes.string.isRequired, + href: PropTypes.string.isRequired, + children: PropTypes.string.isRequired +}; + +function MobileMenuButton(props) { + var menuButtonClasses = 'shell-block'; + + if (!props.darkText) { + menuButtonClasses += ' shell-link shell-link--white'; + } else { + menuButtonClasses += ' shell-color-blue'; + } + + return React.createElement("button", { + id: "mobile-nav-trigger-toggle", + "aria-label": "Toggle navigation", + className: menuButtonClasses, + "data-test": "mobile-nav-trigger-toggle" + }, React.createElement("svg", { + id: "mobile-nav-trigger-menu", + viewBox: "0 0 18 18", + className: "shell-mobile-nav__trigger shell-icon shell-transition shell-icon--l" + }, React.createElement("g", null, React.createElement("path", { + className: "shell-mobile-nav__trigger__bar--top", + d: "M4.2,6h9.6C14.5,6,15,5.6,15,5s-0.5-1-1.2-1H4.2C3.5,4,3,4.4,3,5S3.5,6,4.2,6z" + }), React.createElement("path", { + className: "shell-mobile-nav__trigger__bar--middle", + d: "M13.8,8H4.2C3.5,8,3,8.4,3,9s0.5,1,1.2,1h9.6c0.7,0,1.2-0.4,1.2-1S14.5,8,13.8,8z" + }), React.createElement("path", { + className: "shell-mobile-nav__trigger__bar--bottom", + d: "M13.8,12H4.2C3.5,12,3,12.4,3,13s0.5,1,1.2,1h9.6c0.7,0,1.2-0.4,1.2-1S14.5,12,13.8,12z" + })))); +} + +MobileMenuButton.propTypes = { + darkText: PropTypes.bool +}; + +function MobileLinkList(props) { + var title = props.title, + links = props.links; + var navigationHeading = !title ? null : React.createElement("div", { + className: "".concat(shellStyles.popupMenuNavHeading) + }, title); + var ulClasses = 'shell-txt-s shell-grid shell-grid--gut12'; + if (navigationHeading) ulClasses += ' shell-mb6'; + var linkListItems = React.createElement("div", { + className: ulClasses + }, links.map(function (link, i) { + return React.createElement("div", { + key: i, + className: "shell-col shell-col--6 shell-mt6" + }, React.createElement("a", { + href: link.to, + "data-nav-link": true, + className: "shell-color-gray-dark" + }, link.name)); + })); + return React.createElement("div", null, navigationHeading, linkListItems); +} + +MobileLinkList.propTypes = { + title: PropTypes.string, + links: PropTypes.arrayOf(PropTypes.shape({ + to: PropTypes.string.isRequired, + name: PropTypes.string.isRequired + })).isRequired +}; + +var DEFAULT_SOCIAL_IMAGE_URL = 'https://static-assets.mapbox.com/branding/social/social-1200x630.v1.png'; +var DEFAULT_SOCIAL_IMAGE_THUMBNAIL_URL = 'https://static-assets.mapbox.com/branding/social/social-120x120.v1.png'; + +var MOBILE_HEADER_HEIGHT = 72; + +function MobileNavigation() { + return React.createElement("div", { + className: "shell-z1 shell-absolute shell-top shell-left shell-right shell-w-full" + }, React.createElement("div", { + id: "mobile-nav-backdrop", + "data-test": "mobile-nav-backdrop", + className: "shell-absolute shell-bottom shell-left shell-right shell-mobile-nav__backdrop", + style: { + top: MOBILE_HEADER_HEIGHT, + backgroundImage: "linear-gradient(to bottom, transparent, rgba(31, 51, 73, .5))" + } + }), React.createElement("div", { + id: "mobile-nav-menu", + "data-test": "mobile-nav-menu", + className: "shell-absolute shell-z5 shell-w-full shell-animated-menu", + style: { + top: 0, + right: 0 + } + }, React.createElement("div", { + className: "shell-shadow-darken10-bold shell-bg-white shell-clip shell-px24", + style: { + paddingTop: MOBILE_HEADER_HEIGHT + } + }, React.createElement("div", { + className: "shell-pb24" + }, React.createElement(MobileLinkList, { + title: "Maps", + links: navigationMenuData.mobile.maps.links + }), React.createElement("div", { + className: "shell-mt24" + }, React.createElement(MobileLinkList, { + title: "Navigation", + links: navigationMenuData.mobile.navigation.links + })), React.createElement("div", { + className: "shell-mt24" + }, React.createElement(MobileLinkList, { + title: "Search", + links: navigationMenuData.mobile.search.links + })), React.createElement("div", { + className: "shell-mt24" + }, React.createElement(MobileLinkList, { + title: "Help", + links: navigationMenuData.mobile.help.links + }))), React.createElement("div", { + className: "shell-border-t shell-border--gray-light shell-py24" + }, React.createElement("a", { + href: "/documentation/", + className: "shell-color-blue" + }, "All docs"))))); +} + +function Logo(props) { + var darkText = props.darkText, + mini = props.mini; + var logoClasses = 'shell-flex-child shell-mb-logo'; + + if (!darkText) { + logoClasses += ' shell-mb-logo--white'; + } + + var logoStyles = {}; + + if (mini) { + logoStyles.width = 30; + } + + var border = null; + + if (!mini) { + var borderClasses = 'shell-flex-child shell-h24 shell-mx12'; + borderClasses += darkText ? ' shell-bg-blue' : ' shell-bg-white'; + border = React.createElement("div", { + className: borderClasses, + style: { + width: 2 + }, + "data-subtitle-bar-dark": darkText + }); + } + + var nameClasses = 'shell-flex-child shell-txt-bold shell-txt-l '; + nameClasses += darkText ? ' shell-color-blue shell-color-blue-dark-on-hover' : ' shell-link shell-link--white'; + + if (mini) { + nameClasses += ' shell-ml6'; + } + + return React.createElement("div", { + className: "shell-flex-parent shell-flex-parent--center-cross" + }, React.createElement("a", { + href: "https://www.mapbox.com", + "aria-label": "Mapbox", + className: logoClasses, + style: logoStyles + }), border, React.createElement("a", { + href: "/documentation/", + className: nameClasses, + style: { + marginBottom: 2 + }, + "data-subtitle-dark": darkText + }, "Docs")); +} + +Logo.propTypes = { + darkText: PropTypes.bool, + mini: PropTypes.bool +}; +Logo.defaultProps = { + darkText: false, + mini: false +}; + +var USER_MENU_WIDTH = 66; + +function PageHeader(props) { + var logoOverlay = null; + + if (!props.darkText) { + logoOverlay = React.createElement("div", { + className: "shell-mobile-nav__logo--overlay shell-absolute shell-top shell-left" + }, React.createElement(Logo, { + darkText: true, + mini: true + })); + } + + return React.createElement("header", { + className: "shell-absolute shell-w-full shell-z1", + "data-swiftype-index": "false" + }, React.createElement("div", { + className: "shell-none limiter shell-mt24 shell-flex-parent-mm shell-flex-parent--center-cross" + }, React.createElement(Logo, { + darkText: props.darkText + }), React.createElement("div", { + className: "shell-flex-child shell-flex-child--grow shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--end-main" + }, React.createElement("div", { + className: "shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--end-main" + }, React.createElement(MapsMenu, { + darkText: props.darkText + }), React.createElement(NavigationMenu, { + darkText: props.darkText + }), React.createElement(SearchMenu, { + darkText: props.darkText + }), React.createElement(NavigationItem, { + href: "/documentation/", + darkText: props.darkText, + name: "all" + }, "All docs"), React.createElement(HelpMenu, { + darkText: props.darkText + }))), React.createElement("div", { + className: "shell-flex-child shell-ml6 shell-ml12-ml shell-ml18-mxl" + }, React.createElement("div", { + id: "mbx-user-menu", + style: { + width: USER_MENU_WIDTH + }, + "data-user-menu-trigger": true + }))), React.createElement("div", { + id: "page-header-content", + className: "shell-none-mm limiter shell-py12 shell-z2 shell-relative" + }, React.createElement("div", { + className: "shell-flex-parent shell-flex-parent--center-cross" + }, React.createElement("div", { + className: "shell-flex-child shell-flex-child--no-shrink shell-ml-neg6" + }, React.createElement(MobileMenuButton, { + darkText: props.darkText + })), React.createElement("div", { + className: "shell-flex-child shell-flex-child--grow shell-relative shell-mb-logo__wrapper shell-ml12" + }, React.createElement(Logo, { + darkText: props.darkText, + mini: true + }), logoOverlay), React.createElement("div", { + className: "shell-flex-child shell-flex-child--no-shrink" + }, React.createElement("div", { + id: "mbx-user-menu-mobile", + style: { + width: USER_MENU_WIDTH + }, + "data-user-menu-trigger": true + })))), React.createElement(MobileNavigation, null)); +} + +PageHeader.propTypes = { + darkText: PropTypes.bool +}; +PageHeader.defaultProps = { + darkText: false +}; + +function FooterLegalStrip(props) { + return React.createElement("div", { + className: props.className + }, React.createElement("a", { + className: "shell-link shell-color-darken50 shell-color-blue-on-hover shell-mr18", + href: "https://www.mapbox.com/" + }, "\xA9 Mapbox"), React.createElement("a", { + className: "shell-link shell-color-darken50 shell-color-blue-on-hover shell-mr18", + href: "https://www.mapbox.com/tos/" + }, "Terms"), React.createElement("a", { + className: "shell-link shell-color-darken50 shell-color-blue-on-hover shell-mr18", + href: "https://www.mapbox.com/privacy/" + }, "Privacy"), React.createElement("a", { + className: "shell-link shell-color-darken50 shell-color-blue-on-hover", + href: "https://www.mapbox.com/platform/security/" + }, "Security")); +} + +FooterLegalStrip.propTypes = { + className: PropTypes.string +}; + +function FooterSocialMediaStrip(props) { + return React.createElement("div", { + className: props.className + }, React.createElement("a", { + "aria-label": "Github", + className: "shell-color-blue shell-color-gray-dark-on-hover", + href: "https://github.com/mapbox" + }, React.createElement("svg", { + viewBox: "0 0 1790 1790", + className: "shell-mr18 shell-icon shell-icon--s shell-inline" + }, React.createElement("path", { + d: "M704 1216q0 40-12.5 82t-43 76-72.5 34-72.5-34-43-76-12.5-82 12.5-82 43-76 72.5-34 72.5 34 43 76 12.5 82zm640 0q0 40-12.5 82t-43 76-72.5 34-72.5-34-43-76-12.5-82 12.5-82 43-76 72.5-34 72.5 34 43 76 12.5 82zm160 0q0-120-69-204t-187-84q-41 0-195 21-71 11-157 11t-157-11q-152-21-195-21-118 0-187 84t-69 204q0 88 32 153.5t81 103 122 60 140 29.5 149 7h168q82 0 149-7t140-29.5 122-60 81-103 32-153.5zm224-176q0 207-61 331-38 77-105.5 133t-141 86-170 47.5-171.5 22-167 4.5q-78 0-142-3t-147.5-12.5-152.5-30-137-51.5-121-81-86-115q-62-123-62-331 0-237 136-396-27-82-27-170 0-116 51-218 108 0 190 39.5t189 123.5q147-35 309-35 148 0 280 32 105-82 187-121t189-39q51 102 51 218 0 87-27 168 136 160 136 398z" + }))), React.createElement("a", { + "aria-label": "Twitter", + className: "shell-color-blue shell-color-gray-dark-on-hover ", + href: "https://twitter.com/mapbox/" + }, React.createElement("svg", { + viewBox: "0 0 50 50", + className: "shell-mr18 shell-icon shell-icon--s shell-inline" + }, React.createElement("g", { + id: "77744030-a5d8-4d71-88ad-2c70d4dcad7b", + "data-name": "svg" + }, React.createElement("path", { + d: "M15.72,45.31c18.87,0,29.19-15.63,29.19-29.19,0-.44,0-.89,0-1.33A20.87,20.87,0,0,0,50,9.49a20.48,20.48,0,0,1-5.89,1.61,10.29,10.29,0,0,0,4.51-5.67A20.56,20.56,0,0,1,42.1,7.92a10.27,10.27,0,0,0-17.48,9.36A29.12,29.12,0,0,1,3.48,6.56,10.27,10.27,0,0,0,6.66,20.25,10.18,10.18,0,0,1,2,19v.13a10.26,10.26,0,0,0,8.23,10.06,10.24,10.24,0,0,1-4.63.18,10.27,10.27,0,0,0,9.58,7.12,20.58,20.58,0,0,1-12.74,4.4A20.88,20.88,0,0,1,0,40.71a29,29,0,0,0,15.72,4.6" + })))), React.createElement("a", { + "aria-label": "LinkedIn", + className: "shell-color-blue shell-color-gray-dark-on-hover", + href: "https://www.linkedin.com/company/mapbox" + }, React.createElement("svg", { + viewBox: "0 0 50 50", + className: "shell-mr18 shell-icon shell-icon--s shell-inline" + }, React.createElement("g", { + id: "875e301f-501b-48d2-a663-a3a855ad9d70", + "data-name": "svg" + }, React.createElement("rect", { + x: "1.32", + y: "13.16", + width: "10.53", + height: "36.84" + }), React.createElement("path", { + d: "M36.84,13.16c-7.34,0-8.61,2.68-9.21,5.26V13.16H17.11V50H27.63V28.95c0-3.41,1.85-5.26,5.26-5.26s5.26,1.81,5.26,5.26V50H48.68V31.58C48.68,21.05,47.31,13.16,36.84,13.16Z" + }), React.createElement("circle", { + cx: "6.58", + cy: "5.26", + r: "5.26" + })))), React.createElement("a", { + "aria-label": "Facebook", + className: "shell-color-blue shell-color-gray-dark-on-hover", + href: "https://www.facebook.com/Mapbox" + }, React.createElement("svg", { + viewBox: "0 0 50 50", + className: "shell-mr18 shell-icon shell-icon--s shell-inline" + }, React.createElement("g", { + id: "38f48a9c-03c5-4a1e-8aed-38100e1cd6a4", + "data-name": "svg" + }, React.createElement("path", { + id: "c5d5da0e-6004-406b-ad77-825ffd134c21", + "data-name": "f", + d: "M28.87,50V27.19h7.65l1.15-8.89h-8.8V12.63c0-2.57.71-4.33,4.41-4.33H38v-8A63.78,63.78,0,0,0,31.13,0C24.34,0,19.69,4.14,19.69,11.75V18.3H12v8.89h7.68V50Z" + })))), React.createElement("a", { + "aria-label": "Dribbble", + className: "shell-color-blue shell-color-gray-dark-on-hover", + href: "https://dribbble.com/mapbox" + }, React.createElement("svg", { + viewBox: "0 0 216 216", + className: "shell-mr18 shell-icon shell-icon--s shell-inline" + }, React.createElement("g", { + id: "bce6e84c-15aa-4744-93d1-a9e4a673398a", + "data-name": "ball" + }, React.createElement("g", { + id: "99079e24-a239-40f3-bf61-84ebc8f0b2ce", + "data-name": "ball" + }, React.createElement("path", { + d: "M108,15.78a92.16,92.16,0,1,0,92.16,92.16A92.27,92.27,0,0,0,108,15.78ZM169,58.28a78.31,78.31,0,0,1,17.78,49c-2.6-.55-28.62-5.83-54.81-2.54-.55-1.35-1.12-2.7-1.7-4.06-1.63-3.84-3.39-7.65-5.22-11.4C154.1,77.44,167.29,60.53,169,58.28ZM108,29.34A78.41,78.41,0,0,1,160.2,49.18c-1.41,2-13.26,17.94-41.25,28.43A421.91,421.91,0,0,0,89.58,31.53,79,79,0,0,1,108,29.34ZM74.56,36.82a503.63,503.63,0,0,1,29.18,45.53A293.82,293.82,0,0,1,31,91.94,79,79,0,0,1,74.56,36.82ZM29.31,108.06c0-.8,0-1.61,0-2.41,3.44.08,41.59.57,80.9-11.2,2.25,4.41,4.4,8.89,6.38,13.36-1,.29-2.08.61-3.1.94-40.6,13.12-62.2,48.89-64,51.94A78.39,78.39,0,0,1,29.31,108.06ZM108,186.78a78.29,78.29,0,0,1-48.31-16.62c1.41-2.9,17.35-33.69,61.75-49.16l.52-.17a326.92,326.92,0,0,1,16.79,59.69A78.19,78.19,0,0,1,108,186.78Zm44-13.47a338.31,338.31,0,0,0-15.29-56.12c24.67-4,46.34,2.51,49,3.36A78.84,78.84,0,0,1,152,173.31Z" + }))))), React.createElement("a", { + "aria-label": "Instagram", + className: "shell-color-blue shell-color-gray-dark-on-hover", + href: "https://www.instagram.com/Mapbox" + }, React.createElement("svg", { + viewBox: "0 0 50 50", + className: "shell-icon shell-icon--s shell-inline" + }, React.createElement("g", { + id: "fb2f6c01-da64-4dee-86ea-29fec95d4f45", + "data-name": "svg" + }, React.createElement("path", { + d: "M25,0c-6.79,0-7.64,0-10.31.15A18.35,18.35,0,0,0,8.62,1.31,12.25,12.25,0,0,0,4.2,4.2,12.25,12.25,0,0,0,1.31,8.62,18.35,18.35,0,0,0,.15,14.69C0,17.36,0,18.21,0,25s0,7.64.15,10.31a18.35,18.35,0,0,0,1.16,6.07A12.26,12.26,0,0,0,4.2,45.8a12.25,12.25,0,0,0,4.43,2.88,18.35,18.35,0,0,0,6.07,1.16C17.36,50,18.21,50,25,50s7.64,0,10.31-.15a18.35,18.35,0,0,0,6.07-1.16,12.78,12.78,0,0,0,7.31-7.31,18.35,18.35,0,0,0,1.16-6.07C50,32.64,50,31.79,50,25s0-7.64-.15-10.31a18.35,18.35,0,0,0-1.16-6.07A12.25,12.25,0,0,0,45.8,4.2a12.26,12.26,0,0,0-4.43-2.88A18.35,18.35,0,0,0,35.31.15C32.64,0,31.79,0,25,0Zm0,4.5c6.68,0,7.47,0,10.1.15a13.83,13.83,0,0,1,4.64.86,7.75,7.75,0,0,1,2.87,1.87,7.75,7.75,0,0,1,1.87,2.87,13.83,13.83,0,0,1,.86,4.64c.12,2.64.15,3.43.15,10.1s0,7.47-.15,10.1a13.83,13.83,0,0,1-.86,4.64,8.28,8.28,0,0,1-4.74,4.74,13.83,13.83,0,0,1-4.64.86c-2.64.12-3.43.15-10.1.15s-7.47,0-10.1-.15a13.83,13.83,0,0,1-4.64-.86,7.74,7.74,0,0,1-2.87-1.87,7.75,7.75,0,0,1-1.87-2.87,13.83,13.83,0,0,1-.86-4.64C4.53,32.47,4.5,31.68,4.5,25s0-7.47.15-10.1a13.83,13.83,0,0,1,.86-4.64A7.75,7.75,0,0,1,7.38,7.38a7.75,7.75,0,0,1,2.87-1.87,13.83,13.83,0,0,1,4.64-.86c2.64-.12,3.43-.15,10.1-.15" + }), React.createElement("path", { + d: "M25,33.33A8.33,8.33,0,1,1,33.33,25,8.33,8.33,0,0,1,25,33.33Zm0-21.17A12.84,12.84,0,1,0,37.84,25,12.84,12.84,0,0,0,25,12.16Z" + }), React.createElement("path", { + d: "M41.35,11.65a3,3,0,1,1-3-3,3,3,0,0,1,3,3Z" + }))))); +} + +FooterSocialMediaStrip.propTypes = { + className: PropTypes.string +}; + +function PageFooter() { + return React.createElement("footer", { + id: "page-footer", + className: "shell-py12 shell-py48-ml", + "data-swiftype-index": "false" + }, React.createElement("div", { + className: "limiter" + }, React.createElement("div", { + id: "page-footer-legal-social", + className: "shell-grid shell-txt-s shell-color-darken50 shell-py12 shell-py0-ml" + }, React.createElement(FooterLegalStrip, { + className: "shell-col shell-col--12 shell-col--6-mm shell-my12" + }), React.createElement(FooterSocialMediaStrip, { + className: "shell-col shell-col--12 shell-col--6-mm shell-my12 shell-align-r-mm" + })))); +} + +function MetaTagger(props) { + var suffixedTitle = /^Mapbox/.test(props.title) ? props.title : "".concat(props.title, " | Mapbox"); + var preppedDescription = props.description.replace(/\s+/g, ' '); + var prodUrl = 'https://www.mapbox.com'; + if (props.pathname[0] !== '/') prodUrl += '/'; + prodUrl += props.pathname; + var metaItems = [{ + name: 'description', + content: preppedDescription + }]; + metaItems.push({ + name: 'twitter:title', + content: props.title + }, { + property: 'og:title', + content: props.title + }, { + name: 'twitter:description', + content: preppedDescription + }, { + property: 'og:description', + content: preppedDescription + }, { + property: 'og:url', + content: prodUrl + }, { + property: 'og:type', + content: 'website' + }, { + class: 'swiftype', + name: 'title', + 'data-type': 'string', + content: props.title + }, { + class: 'swiftype', + name: 'excerpt', + 'data-type': 'string', + content: props.description + }, { + name: 'twitter:image:alt', + content: props.imageAlt + }, { + property: 'og:image', + content: props.imageUrl + }, { + class: 'swiftype', + name: 'image', + 'data-type': 'enum', + content: props.imageUrl + }); + + if (props.largeImage) { + metaItems.push({ + name: 'twitter:card', + content: 'summary_large_image' + }, { + name: 'twitter:image', + content: props.imageUrl + }); + } else { + metaItems.push({ + name: 'twitter:card', + content: 'summary' + }, { + name: 'twitter:image', + content: props.imageUrlThumbnail + }); + } + + return React.createElement(Helmet__default, { + title: suffixedTitle, + meta: metaItems + }); +} + +MetaTagger.propTypes = { + title: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + pathname: PropTypes.string.isRequired, + imageUrl: PropTypes.string, + imageUrlThumbnail: PropTypes.string, + imageAlt: PropTypes.string, + largeImage: PropTypes.bool +}; +MetaTagger.defaultProps = { + imageUrl: DEFAULT_SOCIAL_IMAGE_URL, + imageUrlThumbnail: DEFAULT_SOCIAL_IMAGE_THUMBNAIL_URL, + imageAlt: 'Mapbox', + largeImage: true +}; + +var pageShellInitialized = false; +var lastUrl; + +var ReactPageShell = +/*#__PURE__*/ +function (_React$Component) { + _inherits(ReactPageShell, _React$Component); + + function ReactPageShell() { + _classCallCheck(this, ReactPageShell); + + return _possibleConstructorReturn(this, _getPrototypeOf(ReactPageShell).apply(this, arguments)); + } + + _createClass(ReactPageShell, [{ + key: "componentDidMount", + value: function componentDidMount() { + if (!window.MapboxPageShell) throw new Error('MapboxPageShell not loaded'); + + if (!pageShellInitialized) { + this.initialize(); + } else { + MapboxPageShell.initialize(); + } + } + }, { + key: "componentDidUpdate", + value: function componentDidUpdate() { + var currentUrl = window.location.href; + if (currentUrl === lastUrl) return; + lastUrl = currentUrl; + this.initialize(); + } + }, { + key: "componentWillUnmount", + value: function componentWillUnmount() { + MapboxPageShell.removeNavigation(); + } + }, { + key: "initialize", + value: function initialize() { + var _this = this; + + MapboxPageShell.initialize(); + MapboxPageShell.afterUserCheck(function () { + if (_this.props.onUser) { + _this.props.onUser(MapboxPageShell.getUser(), MapboxPageShell.getUserPublicAccessToken()); + } + + MapboxPageShell.loadUserMenu({ + dark: _this.props.darkHeaderText + }); + pageShellInitialized = true; + }); + } + }, { + key: "render", + value: function render() { + var nonFooterClasses = 'shell-flex-child shell-flex-child--grow shell-flex-child--no-shrink'; + + if (this.props.nonFooterBgClass) { + nonFooterClasses += " ".concat(this.props.nonFooterBgClass); + } + + return React.createElement("div", { + id: "page-shell" + }, React.createElement(BrowserCompatibilityWarning, null), React.createElement("div", { + className: "shell-flex-parent shell-flex-parent--column", + style: { + minHeight: '100vh', + overflowX: 'hidden' + } + }, React.createElement(PageHelmet, null), React.createElement(MetaTagger, this.props.meta), React.createElement("div", { + className: nonFooterClasses + }, React.createElement("div", { + className: "shell-wrapper" + }, React.createElement(PageHeader, { + darkText: this.props.darkHeaderText + })), React.createElement("main", { + style: { + zIndex: 0, + position: 'relative', + display: 'block' + } + }, this.props.children)), React.createElement("div", { + className: "shell-flex-child shell-flex-child--no-shrink shell-wrapper" + }, React.createElement(PageFooter, null)))); + } + }]); + + return ReactPageShell; +}(React.Component); + +ReactPageShell.propTypes = { + meta: PropTypes.shape({ + title: PropTypes.string.isRequired, + description: PropTypes.string.isRequired, + pathname: PropTypes.string + }).isRequired, + children: PropTypes.node.isRequired, + darkHeaderText: PropTypes.bool, + nonFooterBgClass: PropTypes.string, + onUser: PropTypes.func +}; +ReactPageShell.defaultProps = { + darkHeaderText: false +}; + +module.exports = ReactPageShell; diff --git a/vendor/dotcom-page-shell/page-shell-script.js b/vendor/dotcom-page-shell/page-shell-script.js deleted file mode 100644 index 8e5affb26d3..00000000000 --- a/vendor/dotcom-page-shell/page-shell-script.js +++ /dev/null @@ -1,2 +0,0 @@ -/*eslint-disable*/ -!(function(){"use strict";var e=function(){for(var e={},n=0;n1&&void 0!==arguments[1]?arguments[1]:window)}function me(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:ae;return e in n.style||!!t&&re.some((function(t){return me(ce(t,e))}))}function ve(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:ae,o=n.allowPrefixedProp,a=n.allowPrefixedValue,r=!1;return(o||a)&&(r=re.some((function(n){return ve(o?ce(n,e):e,a?"-"+n+"-"+t:t)}))),r||(i.style[e]=t,i.style[e]===t)}function fe(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:ae;(le={flexBox:me("flex",e,t)&&ve("display","flex",{allowPrefixedProp:!1,allowPrefixedValue:e},t),viewportUnits:ve("width","100vw",{allowPrefixedProp:!1,allowPrefixedValue:!1},t),visibilityState:ue("visibilityState",window.document),devicePixelRatio:ue("devicePixelRatio")}).doesCutMustard=Object.keys(le).every((function(e){return le[e]}))}function ge(){var e=window.document.getElementById("page-shell-compatibility-dismiss"),t=window.document.getElementById("page-shell-compatibility-warning");de=!0,se=!1,e&&e.removeEventListener("click",ge),t&&(t.style.display="none"),window.localStorage&&window.localStorage.setItem("suppress-browser-compatibility-warning","true")}var pe=!1;function he(){window.matchMedia("(min-width: "+c+"px)").matches&&we()}function ye(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!0,e.classList.add("shell-animated-menu--visible"),t.classList.add("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform","translate(6 -1) rotate(45)"),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","translate(-6.5 6) rotate(-45)")),(function(){if(!ie){var e=document.getElementById("page-shell"),t=document.getElementById("mobile-nav-menu"),n=document.getElementById("mobile-nav-backdrop");if(t&&e&&n){var i=Math.max(t.getBoundingClientRect().bottom+120,window.innerHeight);e.style.height=String(i)+"px",e.style.overflow="hidden",n.classList.add("shell-mobile-nav__backdrop--visible"),n.style.height=String(i-parseInt(n.style.top))+"px",ie=!0}}})(),window.addEventListener("resize",he))}function we(){var e=document.getElementById("mobile-nav-menu"),t=document.getElementById("page-header-content");e&&(pe=!1,e.classList.remove("shell-animated-menu--visible"),t.classList.remove("shell-mobile-nav--visible"),me("textOrientation",!0)||(document.querySelector(".shell-mobile-nav__trigger__bar--top").setAttribute("transform",""),document.querySelector(".shell-mobile-nav__trigger__bar--bottom").setAttribute("transform","")),oe(),window.removeEventListener("resize",he))}function be(e){var t=document.getElementById("mobile-nav-trigger-toggle"),n=document.getElementById("mobile-nav-menu"),i=document.getElementById("page-header-content");t&&n&&(e.target.getAttribute&&e.target.getAttribute("data-nav-link")?(document.documentElement.scrollTop=0,document.body.scrollTop=0,we()):t.contains(e.target)?pe?we():ye():!pe||n.contains(e.target)||i.contains(e.target)||we())}var Ee=!1;function ke(){if(!Ee){Ee=!0;var e=document.querySelectorAll("[data-nav-trigger]");if(0!==e.length){var t=void 0,n=void 0,i=void 0;for(i=0;i .shell-col { - padding-left: 12px; -} -.shell-wrapper .shell-grid--gut24 > .shell-col { - padding-left: 24px; -} -.shell-wrapper .shell-my0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} -.shell-wrapper .shell-my6 { - margin-top: 6px !important; - margin-bottom: 6px !important; -} -.shell-wrapper .shell-my12 { - margin-top: 12px !important; - margin-bottom: 12px !important; -} -.shell-wrapper .shell-my18 { - margin-top: 18px !important; - margin-bottom: 18px !important; -} -.shell-wrapper .shell-mx6 { - margin-left: 6px !important; - margin-right: 6px !important; -} -.shell-wrapper .shell-mx12 { - margin-left: 12px !important; - margin-right: 12px !important; -} -.shell-wrapper .shell-mt6 { - margin-top: 6px !important; -} -.shell-wrapper .shell-mt12 { - margin-top: 12px !important; -} -.shell-wrapper .shell-mt18 { - margin-top: 18px !important; -} -.shell-wrapper .shell-mt24 { - margin-top: 24px !important; -} -.shell-wrapper .shell-mt30 { - margin-top: 30px !important; -} -.shell-wrapper .shell-mr-neg6 { - margin-right: -6px !important; -} -.shell-wrapper .shell-mt-neg12 { - margin-top: -12px !important; -} -.shell-wrapper .shell-ml-neg24 { - margin-left: -24px !important; -} -.shell-wrapper .shell-mr-neg24 { - margin-right: -24px !important; -} -.shell-wrapper .shell-mr3 { - margin-right: 3px !important; -} -.shell-wrapper .shell-mr6 { - margin-right: 6px !important; -} -.shell-wrapper .shell-mr18 { - margin-right: 18px !important; -} -.shell-wrapper .shell-mb0 { - margin-bottom: 0px !important; -} -.shell-wrapper .shell-mb3 { - margin-bottom: 3px !important; -} -.shell-wrapper .shell-mb6 { - margin-bottom: 6px !important; -} -.shell-wrapper .shell-mb12 { - margin-bottom: 12px !important; -} -.shell-wrapper .shell-mb24 { - margin-bottom: 24px !important; -} -.shell-wrapper .shell-mb30 { - margin-bottom: 30px !important; -} -.shell-wrapper .shell-ml-neg24 { - margin-left: -24px !important; -} -.shell-wrapper .shell-ml6 { - margin-left: 6px !important; -} -.shell-wrapper .shell-ml-auto { - margin-left: auto !important; -} -.shell-wrapper .shell-p12 { - padding: 12px !important; -} -.shell-wrapper .shell-py3 { - padding-top: 3px !important; - padding-bottom: 3px !important; -} -.shell-wrapper .shell-py6 { - padding-top: 6px !important; - padding-bottom: 6px !important; -} -.shell-wrapper .shell-py12 { - padding-top: 12px !important; - padding-bottom: 12px !important; -} -.shell-wrapper .shell-py24 { - padding-top: 24px !important; - padding-bottom: 24px !important; -} -.shell-wrapper .shell-py30 { - padding-top: 30px !important; - padding-bottom: 30px !important; -} -.shell-wrapper .shell-px12 { - padding-left: 12px !important; - padding-right: 12px !important; -} -.shell-wrapper .shell-px24 { - padding-left: 24px !important; - padding-right: 24px !important; -} -.shell-wrapper .shell-px30 { - padding-left: 30px !important; - padding-right: 30px !important; -} -.shell-wrapper .shell-pt3 { - padding-top: 3px !important; -} -.shell-wrapper .shell-pt12 { - padding-top: 12px !important; -} -.shell-wrapper .shell-pt18 { - padding-top: 18px !important; -} -.shell-wrapper .shell-pt24 { - padding-top: 24px !important; -} -.shell-wrapper .shell-pt30 { - padding-top: 30px !important; -} -.shell-wrapper .shell-pr24 { - padding-right: 24px !important; -} -.shell-wrapper .shell-pr12 { - padding-right: 12px !important; -} -.shell-wrapper .shell-pr6 { - padding-right: 6px !important; -} -.shell-wrapper .shell-pb3 { - padding-bottom: 3px !important; -} -.shell-wrapper .shell-pb6 { - padding-bottom: 6px !important; -} -.shell-wrapper .shell-pb12 { - padding-bottom: 12px !important; -} -.shell-wrapper .shell-pb24 { - padding-bottom: 24px !important; -} -.shell-wrapper .shell-pb30 { - padding-bottom: 30px !important; -} - -/* Sizing */ -.shell-wrapper .shell-w24 { - width: 24px !important; -} -.shell-wrapper .shell-w30 { - width: 30px !important; -} -.shell-wrapper .shell-w-full { - width: 100% !important; -} -.shell-wrapper .shell-h-full { - height: 100% !important; -} -.shell-wrapper .shell-h24 { - height: 24px !important; -} -.shell-wrapper .shell-h30 { - height: 30px !important; -} - -/* Media Queries */ -@media screen and (min-width: 640px) { - .shell-wrapper .shell-col--3-mm { - width: 25% !important; - } - .shell-wrapper .shell-col--6-mm { - width: 50% !important; - } - .shell-wrapper .shell-col--12-mm { - width: 100% !important; - } - .shell-wrapper .shell-none-mm { - display: none !important; - } - .shell-wrapper .shell-flex-child-mm { - display: block !important; - max-width: 100% !important; - } - .shell-wrapper .shell-flex-parent-mm { - display: -webkit-flex !important; - display: flex !important; - } - .shell-wrapper .shell-flex-parent--space-between-main-mm { - -webkit-justify-content: space-between !important; - justify-content: space-between !important; - } - .shell-wrapper .shell-mt0-mm { - margin-top: 0 !important; - } - .shell-wrapper .shell-my0-mm { - margin-top: 0 !important; - margin-bottom: 0 !important; - } - .shell-wrapper .shell-mb0-mm { - margin-bottom: 0 !important; - } - .shell-wrapper .shell-align-left-mm { - text-align: left !important; - } - .shell-wrapper .shell-footer-column { - /* max-width based on Turn-by-turn navigation in Use Cases column */ - width: 20% !important; - max-width: 130px !important; - } - .shell-wrapper .shell-w180-mm { - width: 180px !important; - } -} -@media screen and (min-width: 800px) { - .shell-wrapper .shell-grid--gut18-ml { - margin-left: -18px; - } - .shell-wrapper .shell-grid--gut18-ml > .shell-col { - padding-left: 18px; - } - .shell-wrapper .shell-flex-parent-ml { - display: -webkit-flex !important; - display: flex !important; - } - .shell-wrapper .shell-flex-child-ml { - display: block !important; - max-width: 100% !important; - } - .shell-wrapper .shell-none-ml { - display: none !important; - } - .shell-wrapper .shell-block-ml { - display: block !important; - } - .shell-wrapper .shell-mx9-ml { - margin-left: 9px !important; - margin-right: 9px !important; - } - .shell-wrapper .shell-mt42-ml { - margin-top: 42px !important; - } - .shell-wrapper .shell-ml12-ml { - margin-left: 12px !important; - } - .shell-wrapper .shell-py0-ml { - padding-top: 0 !important; - padding-bottom: 0 !important; - } - .shell-wrapper .shell-py48-ml { - padding-top: 48px !important; - padding-bottom: 48px !important; - } - .shell-wrapper .shell-footer-column { - /* max-width based on Turn-by-turn navigation in Use Cases column */ - width: 20% !important; - max-width: 130px !important; - } -} -@media screen and (min-width: 1200px) { - .shell-wrapper .shell-grid--gut24-mxl { - margin-left: -24px; - } - .shell-wrapper .shell-grid--gut24-mxl > .shell-col { - padding-left: 24px; - } - .shell-wrapper .shell-col--2-mxl { - width: 16.6% !important; - } - .shell-wrapper .shell-col--3-mxl { - width: 25% !important; - } - .shell-wrapper .shell-col--4-mxl { - width: 33.3333% !important; - } - .shell-wrapper .shell-col--10-mxl { - width: 83.3333% !important; - } - .shell-wrapper .shell-txt-s-mxl { - font-size: 12px !important; - line-height: 18px; - } - .shell-wrapper .shell-mx18-mxl { - margin-right: 18px !important; - } - .shell-wrapper .shell-ml18-mxl, - .shell-wrapper .shell-mx18-mxl { - margin-left: 18px !important; - } - .shell-wrapper .shell-footer-column { - /* max-width based on Turn-by-turn navigation in Use Cases column */ - width: 20% !important; - max-width: 140px !important; - } -} - -/* Triangles */ -.shell-wrapper .shell-triangle { - width: 12px !important; - height: 12px !important; - font-size: 0 !important; - line-height: 0 !important; -} -.shell-wrapper .shell-triangle--u { - border-left: 6px solid transparent !important; - border-right: 6px solid transparent !important; - border-bottom: 9px solid currentColor !important; -} -.shell-wrapper .shell-triangle-l { - width: 24px !important; - height: 24px !important; - font-size: 0 !important; - line-height: 0 !important; -} -.shell-wrapper .shell-triangle-l--u { - border-left: 12px solid transparent !important; - border-right: 12px solid transparent !important; - border-bottom: 18px solid currentColor !important; -} -.shell-wrapper .shell-transition { - transition: all .125s; -} -.shell-wrapper .shell-clip { - overflow: hidden !important; -} - -/* mapbox-assembly Typography */ -@font-face { - font-family: 'Cera'; - font-weight: 700; - /* Notice the absolute URLs! */ - src: url('https://api.mapbox.com/mapbox-assembly/mbx/v0.14.0/CeraPRO-Bold.woff2') - format('woff2'), - url('https://api.mapbox.com/mapbox-assembly/mbx/v0.14.0/CeraPRO-Bold.woff') - format('woff'); -} -.shell-wrapper .shell-txt-fancy { - font-family: 'Cera', sans-serif !important; -} - -/* mapbox-assembly Branding */ -.shell-wrapper .shell-mb-logo { - background-image: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 790 180%22%3E%3Cpath d%3D%22M89.1 1.8C39.9 1.8 0 41.7 0 90.9 0 140.1 39.9 180 89.1 180c49.2 0 89.1-39.9 89.1-89.1 0-49.2-39.9-89.1-89.1-89.1zm457.8 19.7c-1.2 0-2.2 1-2.2 2.2v103.2c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-7.1c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2-10 0-19.5 4.1-26.3 11.3V23.7c0-1.2-1-2.2-2.2-2.2h-13.4zM98.3 36.4c11.4.3 22.9 4.8 31.7 13.7 17.7 17.7 18.3 45.7 1.4 62.7-30.5 30.5-84.8 20.7-84.8 20.7s-9.8-54.3 20.7-84.8c8.5-8.4 19.7-12.5 31-12.3zm160.3 14.2c-8.2 0-15.9 4-20.8 10.6v-6.4c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V127c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V83.8c.5-9.7 7.2-17.3 15.4-17.3 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-44.9c1.2-8.8 7.6-15.6 15.3-15.6 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-49.6c.3-14.8-12.3-26.8-27.9-26.8-10 .1-19.2 5.9-23.5 15-5-9.3-14.7-15.1-25.3-15zm127.9 0c-20.9 0-37.9 18-37.9 40.3 0 22.3 17 40.3 37.9 40.3 10 0 19.5-4.1 26.3-11.3v7.1c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V54.8c.1-1.2-.9-2.2-2.2-2.2H415c-1.2 0-2.2 1-2.2 2.2v7.1c-6.9-7.2-16.4-11.3-26.3-11.3zm106.1 0c-10 0-19.5 4.1-26.3 11.3v-7.1c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V158c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-38.2c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2zm185.5 0c-22.7 0-41 18-41 40.3 0 22.3 18.4 40.3 41 40.3s41-18 41-40.3c0-22.3-18.3-40.3-41-40.3zm45.4 2c-1.1 0-2 .9-2 2 0 .4.1.8.3 1.1l23 35-23.3 35.4c-.6.9-.4 2.2.6 2.8.3.2.7.3 1.1.3h15.5c1.2 0 2.3-.6 2.9-1.6l13.8-23.1 13.8 23.1c.6 1 1.7 1.6 2.9 1.6h15.5c1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1.1L766 90.7l23-35c.6-.9.4-2.2-.6-2.8-.3-.2-.7-.3-1.1-.3h-15.5c-1.2 0-2.3.6-2.9 1.6l-13.5 22.7-13.5-22.7c-.6-1-1.7-1.6-2.9-1.6h-15.5zM99.3 54l-8.7 18-17.9 8.7 17.9 8.7 8.7 18 8.8-18 17.9-8.7-17.9-8.7-8.8-18zm290.3 12.7c12.7 0 23 10.7 23.2 23.9v.6c-.1 13.2-10.5 23.9-23.2 23.9-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2zm99.8 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm96.3 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm92.2 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2z%22 fill%3D%22%234264fb%22%2F%3E%3C%2Fsvg%3E%0A"); - background-size: 132px 42px; - background-repeat: no-repeat; - display: inline-block; - width: 132px; - height: 42px; -} -.shell-wrapper .shell-mb-logo__wrapper { - height: 42px; -} -.shell-wrapper .shell-mb-logo--white { - background-image: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 790 180%22%3E%3Cpath d%3D%22M89.1 1.8C39.9 1.8 0 41.7 0 90.9 0 140.1 39.9 180 89.1 180c49.2 0 89.1-39.9 89.1-89.1 0-49.2-39.9-89.1-89.1-89.1zm457.8 19.7c-1.2 0-2.2 1-2.2 2.2v103.2c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-7.1c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2-10 0-19.5 4.1-26.3 11.3V23.7c0-1.2-1-2.2-2.2-2.2h-13.4zM98.3 36.4c11.4.3 22.9 4.8 31.7 13.7 17.7 17.7 18.3 45.7 1.4 62.7-30.5 30.5-84.8 20.7-84.8 20.7s-9.8-54.3 20.7-84.8c8.5-8.4 19.7-12.5 31-12.3zm160.3 14.2c-8.2 0-15.9 4-20.8 10.6v-6.4c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V127c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V83.8c.5-9.7 7.2-17.3 15.4-17.3 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-44.9c1.2-8.8 7.6-15.6 15.3-15.6 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-49.6c.3-14.8-12.3-26.8-27.9-26.8-10 .1-19.2 5.9-23.5 15-5-9.3-14.7-15.1-25.3-15zm127.9 0c-20.9 0-37.9 18-37.9 40.3 0 22.3 17 40.3 37.9 40.3 10 0 19.5-4.1 26.3-11.3v7.1c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V54.8c.1-1.2-.9-2.2-2.2-2.2H415c-1.2 0-2.2 1-2.2 2.2v7.1c-6.9-7.2-16.4-11.3-26.3-11.3zm106.1 0c-10 0-19.5 4.1-26.3 11.3v-7.1c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V158c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-38.2c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2zm185.5 0c-22.7 0-41 18-41 40.3 0 22.3 18.4 40.3 41 40.3s41-18 41-40.3c0-22.3-18.3-40.3-41-40.3zm45.4 2c-1.1 0-2 .9-2 2 0 .4.1.8.3 1.1l23 35-23.3 35.4c-.6.9-.4 2.2.6 2.8.3.2.7.3 1.1.3h15.5c1.2 0 2.3-.6 2.9-1.6l13.8-23.1 13.8 23.1c.6 1 1.7 1.6 2.9 1.6h15.5c1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1.1L766 90.7l23-35c.6-.9.4-2.2-.6-2.8-.3-.2-.7-.3-1.1-.3h-15.5c-1.2 0-2.3.6-2.9 1.6l-13.5 22.7-13.5-22.7c-.6-1-1.7-1.6-2.9-1.6h-15.5zM99.3 54l-8.7 18-17.9 8.7 17.9 8.7 8.7 18 8.8-18 17.9-8.7-17.9-8.7-8.8-18zm290.3 12.7c12.7 0 23 10.7 23.2 23.9v.6c-.1 13.2-10.5 23.9-23.2 23.9-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2zm99.8 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm96.3 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm92.2 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2z%22 fill%3D%22%23fff%22%2F%3E%3C%2Fsvg%3E%0A"); -} - -/* Color Variants */ -.shell-wrapper .shell-btn--lighten25 { - background-color: rgba(255, 255, 255, .25); -} -.shell-wrapper .shell-btn--lighten25:hover { - background-color: rgba(255, 255, 255, .5); -} -.shell-wrapper .shell-color-light-blue { - color: #7290AC !important; -} -.shell-wrapper .shell-color-blue { - color: #4264fb !important; -} -.shell-wrapper .shell-color-gray { - color: #607d9c !important; -} -.shell-wrapper .shell-color-gray-dark { - color: #273d56 !important; -} -.shell-wrapper .shell-color-darken50 { - color: rgba(31, 51, 73, .5) !important; -} -.shell-wrapper .shell-color-white { - color: #fff !important; -} -.shell-wrapper .shell-color-pink { - color: #ed6498 !important; -} - - -/*Background*/ -.shell-wrapper .shell-bg-green-light { - background-color: #72c781 !important; -} -.shell-wrapper .shell-bg-blue-light { - background-color: #00b1ff !important; -} -.shell-wrapper .shell-bg-purple { - background-color: #8c50c7 !important; -} -.shell-wrapper .shell-bg-gray-faint { - background-color: #f4f7fb !important; -} -.shell-wrapper .shell-bg-darken25 { - background-color: rgba(31, 51, 73, .25) !important; -} -.shell-wrapper .shell-bg-darken50 { - background-color: rgba(31, 51, 73, .5) !important; -} -.shell-wrapper .shell-bg-white { - background-color: #fff !important; -} -.shell-wrapper .shell-bg-pink { - background-color: #ed6498 !important; -} - -/*Links*/ -.shell-wrapper .shell-link--white { - color: #fff; -} -.shell-wrapper .shell-link--white:hover { - color: rgba(255, 255, 255, .75); -} - -/*Border*/ -.shell-wrapper .shell-border--white { - border-color: #fff !important; -} -.shell-wrapper .shell-border--gray-light { - border-color: #c6d2e1 !important -} - -/*Shadow*/ -.shell-wrapper .shell-shadow-darken10-bold { - box-shadow: 0 0 30px 6px rgba(31, 51, 73, .10) !important; -} - -/*Hovers*/ -.shell-wrapper .shell-color-blue-on-hover:hover { - color: #4264fb !important; -} -.shell-wrapper .shell-color-gray-dark-on-hover:hover { - color: #273d56 !important; -} - -/*Loading*/ -.shell-wrapper .shell-loading--dark::after, -.shell-wrapper .shell-loading::after { - content: ''; - display: block; - margin: auto; - height: 36px; - width: 36px; - animation: spin 0.8s infinite cubic-bezier(0.45, 0.05, 0.55, 0.95); -} -.shell-wrapper .shell-loading--dark::after { - background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' version='1.1' width='36' height='36' viewBox='0 0 36 36'%3E%3Cdefs%3E%3Cstyle%3E.a%7Bfill:%23f7f7f7;%7D.b%7Bopacity:0.1;%7D.c%7Bfill:%23fff;%7D%3C/style%3E%3C/defs%3E%3Cpath class='a' d='M5.2721,5.2721,7.3934,7.3934a15,15,0,0,1,21.2132,0l2.1213-2.1213A18,18,0,0,0,5.2721,5.2721Z'/%3E%3Cg class='b'%3E%3Cpath class='c' d='M28.6066,28.6066A15,15,0,0,1,7.3934,7.3934L5.2721,5.2721a18,18,0,1,0,25.4558,0L28.6066,7.3934A15,15,0,0,1,28.6066,28.6066Z'/%3E%3C/g%3E%3C/svg%3E"); -} - -/* ========================================================================== */ -/* Special shell things */ -/* ========================================================================== */ - -.shell-wrapper .shell-illustration-container::after { - content: ''; - display: block; - padding-bottom: 60% -} - -.shell-wrapper .shell-mb-logo-m { - background-image: url("data:image/svg+xml,%3Csvg xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22 viewBox%3D%220 0 790 180%22%3E%3Cpath d%3D%22M89.1 1.8C39.9 1.8 0 41.7 0 90.9 0 140.1 39.9 180 89.1 180c49.2 0 89.1-39.9 89.1-89.1 0-49.2-39.9-89.1-89.1-89.1zm457.8 19.7c-1.2 0-2.2 1-2.2 2.2v103.2c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-7.1c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2-10 0-19.5 4.1-26.3 11.3V23.7c0-1.2-1-2.2-2.2-2.2h-13.4zM98.3 36.4c11.4.3 22.9 4.8 31.7 13.7 17.7 17.7 18.3 45.7 1.4 62.7-30.5 30.5-84.8 20.7-84.8 20.7s-9.8-54.3 20.7-84.8c8.5-8.4 19.7-12.5 31-12.3zm160.3 14.2c-8.2 0-15.9 4-20.8 10.6v-6.4c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V127c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V83.8c.5-9.7 7.2-17.3 15.4-17.3 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-44.9c1.2-8.8 7.6-15.6 15.3-15.6 8.5 0 15.6 7.1 15.6 16.5v44c0 1.2 1 2.2 2.2 2.2h13.5c1.2 0 2.2-1 2.2-2.2l-.1-49.6c.3-14.8-12.3-26.8-27.9-26.8-10 .1-19.2 5.9-23.5 15-5-9.3-14.7-15.1-25.3-15zm127.9 0c-20.9 0-37.9 18-37.9 40.3 0 22.3 17 40.3 37.9 40.3 10 0 19.5-4.1 26.3-11.3v7.1c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2V54.8c.1-1.2-.9-2.2-2.2-2.2H415c-1.2 0-2.2 1-2.2 2.2v7.1c-6.9-7.2-16.4-11.3-26.3-11.3zm106.1 0c-10 0-19.5 4.1-26.3 11.3v-7.1c0-1.2-1-2.2-2.2-2.2h-13.4c-1.2 0-2.2 1-2.2 2.2V158c0 1.2 1 2.2 2.2 2.2h13.4c1.2 0 2.2-1 2.2-2.2v-38.2c6.9 7.2 16.4 11.3 26.3 11.3 20.9 0 37.9-18 37.9-40.3 0-22.3-17-40.2-37.9-40.2zm185.5 0c-22.7 0-41 18-41 40.3 0 22.3 18.4 40.3 41 40.3s41-18 41-40.3c0-22.3-18.3-40.3-41-40.3zm45.4 2c-1.1 0-2 .9-2 2 0 .4.1.8.3 1.1l23 35-23.3 35.4c-.6.9-.4 2.2.6 2.8.3.2.7.3 1.1.3h15.5c1.2 0 2.3-.6 2.9-1.6l13.8-23.1 13.8 23.1c.6 1 1.7 1.6 2.9 1.6h15.5c1.1 0 2-.9 2-2 0-.4-.1-.7-.3-1.1L766 90.7l23-35c.6-.9.4-2.2-.6-2.8-.3-.2-.7-.3-1.1-.3h-15.5c-1.2 0-2.3.6-2.9 1.6l-13.5 22.7-13.5-22.7c-.6-1-1.7-1.6-2.9-1.6h-15.5zM99.3 54l-8.7 18-17.9 8.7 17.9 8.7 8.7 18 8.8-18 17.9-8.7-17.9-8.7-8.8-18zm290.3 12.7c12.7 0 23 10.7 23.2 23.9v.6c-.1 13.2-10.5 23.9-23.2 23.9-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2zm99.8 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm96.3 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.7 0-23-10.7-23.2-23.9v-.6c.2-13.2 10.5-23.9 23.2-23.9zm92.2 0c12.8 0 23.2 10.8 23.2 24.2 0 13.4-10.4 24.2-23.2 24.2-12.8 0-23.2-10.8-23.2-24.2 0-13.4 10.4-24.2 23.2-24.2z%22 fill%3D%22%234264fb%22%2F%3E%3C%2Fsvg%3E%0A"); - background-size: 100px 32px; - background-repeat: no-repeat; - display: inline-block; - width: 100px; - height: 32px; -} -.shell-wrapper .shell-triangle-wide { - width: 16px !important; - height: 16px !important; - font-size: 0 !important; - line-height: 0 !important; -} -.shell-wrapper .shell-triangle-wide--u { - border-left: 16px solid transparent !important; - border-right: 16px solid transparent !important; - border-bottom: 16px solid currentColor !important; -} -/* shell-header-buffer is not scoped so it can be used inside the shell */ -.shell-header-buffer { - padding-top: 66px; -} -.shell-wrapper .shell-color-blue-on-hover:hover p { - color: #4264fb !important; -} -.shell-wrapper .shell-footer-column { - width: 100%; -} - -.shell-products-nav-item { - padding-left: 42px; - background-size: 36px 36px; - background-repeat: no-repeat; -} - -.shell-platforms-nav-item { - padding-left: 36px; - background-size: 30px 30px; - background-repeat: no-repeat; -} - -@media (min-width: 640px) { - .shell-footer-fr { - text-align: right; - } - .shell-header-buffer { - padding-top: 84px; - } - .shell-wrapper .shell-footer-column { - /* max-width based on Turn-by-turn navigation in Use Cases column */ - width: 25%; - max-width: 130px; - } - .shell-wrapper .compatibility-warning-copy { - padding-right: 150px; - } - .shell-wrapper .compatibility-warning-action { - margin-top: -18px; - position: absolute; - right: 0; - top: 50%; - } - .shell-wrapper .shell-w210-mm { - width: 210px !important; - } -} -/* Menu transitions */ -/* If you change the speed of these transitions, you must also update the timeout value in - ./page-shell-script/menu-pointer-positioner.js#setPointerResetTimeout */ -.shell-animated-menu, -.shell-animated-menu__pointer, -.shell-mobile-nav__backdrop { - transition: opacity 0.25s, visibility 0.25s, -webkit-transform 0.25s; - transition: opacity 0.25s, transform 0.25s, visibility 0.25s; - transition: opacity 0.25s, transform 0.25s, visibility 0.25s, -webkit-transform 0.25s; -} - -.shell-mobile-nav__backdrop { - will-change: opacity; -} - -.shell-animated-menu__pointer { - -webkit-transform: translateX(-50%) translateY(0); - transform: translateX(-50%) translateY(0); -} - -.shell-animated-menu__pointer--visible { - -webkit-transform: translateX(-50%) translateY(-100%); - transform: translateX(-50%) translateY(-100%); -} - -.shell-animated-menu { - opacity: 0; - pointer-events: none; - -webkit-transform: translateY(0) scale(0.95); - transform: translateY(0) scale(0.95); - -webkit-transform-origin: 50% 0; - transform-origin: 50% 0; - visibility: hidden; -} - -.shell-animated-menu--visible { - opacity: 1; - pointer-events: auto; - -webkit-transform: translateY(0) scale(1); - transform: translateY(0) scale(1); - visibility: visible; -} - -.shell-mb-logo--white, -.shell-mobile-nav__logo--overlay { - transition: opacity 0.125s, visibility 0.125s; -} - -.shell-mb-logo--white { - opacity: 1; -} - -.shell-mobile-nav__logo--overlay, -.shell-mobile-nav__backdrop { - opacity: 0; - visibility: hidden; -} - -.shell-mobile-nav--visible .shell-mobile-nav__trigger, -.shell-mobile-nav--visible .shell-mobile-nav__trigger:hover { - color: #4264fb; -} - -.shell-mobile-nav--visible .shell-mb-logo--white { - opacity: 0; -} - -.shell-mobile-nav--visible .shell-mobile-nav__logo--overlay, -.shell-mobile-nav__backdrop--visible { - opacity: 1; - visibility: visible; -} - -.shell-mobile-nav__trigger__bar--top, -.shell-mobile-nav__trigger__bar--middle, -.shell-mobile-nav__trigger__bar--bottom { - opacity: 1; - transition: opacity 0.25s, transform 0.25s; - -webkit-transform: translateY(0) rotate(0deg) scale(1); - transform: translateY(0) rotate(0deg) scale(1); -} - -.shell-mobile-nav__trigger__bar--middle { - -webkit-transform-origin: 9px 9px; - transform-origin: 9px 9px; -} - -.shell-mobile-nav__trigger__bar--top { - -webkit-transform-origin: 9px 5px; - transform-origin: 9px 5px; -} - -.shell-mobile-nav__trigger__bar--bottom { - -webkit-transform-origin: 9px 13px; - transform-origin: 9px 13px; -} - -.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--middle { - opacity: 0; - -webkit-transform: scale(0.5); - transform: scale(0.5); -} - -.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--top { - -webkit-transform: translateY(4px) rotate(45deg); - transform: translateY(4px) rotate(45deg); -} - -.shell-mobile-nav--visible .shell-mobile-nav__trigger__bar--bottom { - -webkit-transform: translateY(-4px) rotate(-45deg); - transform: translateY(-4px) rotate(-45deg); -} - -/* DO NOT MODIFY DIRECTLY! This content is generated by bin/build-inline-svg-styles.js */ -.shell-icon--ar { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLWFyLWEiIHgxPSIxMi41NzciIHkxPSIxNS45NjYiIHgyPSIxMy41NzkiIHkyPSIzMi42OTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNhYWI3ZWYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM1MzcyZmIiIHN0b3Atb3BhY2l0eT0iLjkiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtYXItYiIgeDE9IjYuMzUiIHkxPSIyMC43MDMiIHgyPSIyMi44MDkiIHkyPSIyMC42MjkiIHhsaW5rOmhyZWY9IiNzaGVsbC1hci1hIi8+PGxpbmVhckdyYWRpZW50IGlkPSJzaGVsbC1hci1jIiB4MT0iMTAuMzcyIiB5MT0iMTIuMzgyIiB4Mj0iMjUuNjI2IiB5Mj0iMTIuMzgyIiB4bGluazpocmVmPSIjc2hlbGwtYXItYSIvPjwvZGVmcz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2U1ZWVmNyIvPjxwYXRoIGQ9Ik0xNi44NTUgMjYuMTgyYS41MzIuNTMyIDAgMCAxLS44MS41MjRsLTYuMzc5LTIuODUyYTEuNDkgMS40OSAwIDAgMS0uODA5LTEuMjQ4di03LjUzM2EuNTMyLjUzMiAwIDAgMSAuODEtLjUyNGw2LjM4IDIuODUyYTEuNDkgMS40OSAwIDAgMSAuODA5IDEuMjQ4eiIgZmlsbD0idXJsKCNzaGVsbC1hci1hKSIvPjxwYXRoIGQ9Ik0xOS4xNDUgMjYuMTgyYS41MzIuNTMyIDAgMCAwIC44MS41MjRsNi4zOC0yLjg1MmExLjQ5IDEuNDkgMCAwIDAgLjgwOC0xLjI0OHYtNy41MzNhLjUzMi41MzIgMCAwIDAtLjgwOS0uNTI0bC02LjM4IDIuODUyYTEuNDkgMS40OSAwIDAgMC0uODA5IDEuMjQ4eiIgZmlsbD0idXJsKCNzaGVsbC1hci1iKSIvPjxwYXRoIGQ9Ik0xMC43MTUgMTEuODU2Yy0uNDUyLjE4NC0uNDU4LjUtLjAxNC43MDFsNi40MjkgMi45MjhhMi4yNDMgMi4yNDMgMCAwIDAgMS42MTYuMDA0bDYuNTUxLTIuOTM1Yy40NDUtLjIuNDM5LS41MS0uMDE1LS42OWwtNi41NTYtMi42MDVhMi41NDggMi41NDggMCAwIDAtMS42NDUuMDA3eiIgZmlsbD0idXJsKCNzaGVsbC1hci1jKSIvPjwvc3ZnPg=='); -} -.shell-icon--ar:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLWFyX2hvdmVyLWEiIHgxPSIxMi41NzciIHkxPSIxNS45NjYiIHgyPSIxMy41NzkiIHkyPSIzMi42OTciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzZjVlN2UiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxNTMzNGMiLz48L2xpbmVhckdyYWRpZW50PjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtYXJfaG92ZXItYiIgeDE9IjYuMzUiIHkxPSIyMC43MDMiIHgyPSIyMi44MDkiIHkyPSIyMC42MjkiIHhsaW5rOmhyZWY9IiNzaGVsbC1hcl9ob3Zlci1hIi8+PGxpbmVhckdyYWRpZW50IGlkPSJzaGVsbC1hcl9ob3Zlci1jIiB4MT0iMTAuMzcyIiB5MT0iMTIuMzgyIiB4Mj0iMjUuNjI2IiB5Mj0iMTIuMzgyIiB4bGluazpocmVmPSIjc2hlbGwtYXJfaG92ZXItYSIvPjwvZGVmcz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2MyZDFlMSIvPjxwYXRoIGQ9Ik0xNi44NTUgMjYuMTgyYS41MzIuNTMyIDAgMCAxLS44MS41MjRsLTYuMzc5LTIuODUyYTEuNDkgMS40OSAwIDAgMS0uODA5LTEuMjQ4di03LjUzMmEuNTMyLjUzMiAwIDAgMSAuODEtLjUyNWw2LjM3OSAyLjg1MmExLjQ5IDEuNDkgMCAwIDEgLjgxIDEuMjQ4eiIgZmlsbD0idXJsKCNzaGVsbC1hcl9ob3Zlci1hKSIvPjxwYXRoIGQ9Ik0xOS4xNDUgMjYuMTgyYS41MzIuNTMyIDAgMCAwIC44MS41MjRsNi4zNzktMi44NTJhMS40OSAxLjQ5IDAgMCAwIC44MDktMS4yNDh2LTcuNTMyYS41MzIuNTMyIDAgMCAwLS44MS0uNTI1TDE5Ljk1NSAxNy40YTEuNDkgMS40OSAwIDAgMC0uODEgMS4yNDh6IiBmaWxsPSJ1cmwoI3NoZWxsLWFyX2hvdmVyLWIpIi8+PHBhdGggZD0iTTEwLjcxNSAxMS44NTZjLS40NTIuMTg0LS40NTguNS0uMDE0LjcwMWw2LjQyOSAyLjkyOGEyLjI0MyAyLjI0MyAwIDAgMCAxLjYxNi4wMDRsNi41NTEtMi45MzVjLjQ0NS0uMi40MzgtLjUxLS4wMTUtLjY5bC02LjU1Ni0yLjYwNWEyLjU0OCAyLjU0OCAwIDAgMC0xLjY0NS4wMDd6IiBmaWxsPSJ1cmwoI3NoZWxsLWFyX2hvdmVyLWMpIi8+PC9zdmc+'); -} -.shell-icon--atlas { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJzaGVsbC1hdGxhcy1hIiB4MT0iMTguNTIzIiB5MT0iMTQuMTU0IiB4Mj0iMTcuODU2IiB5Mj0iMjkuOTg3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjNDI2NGZiIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMDAyZWMzIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLWF0bGFzLWIiIHgxPSIxOC4xNTYiIHkxPSIxNC4xMzgiIHgyPSIxNy40OSIgeTI9IjI5Ljk3MSIgeGxpbms6aHJlZj0iI3NoZWxsLWF0bGFzLWEiLz48L2RlZnM+PGcgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBkYXRhLW5hbWU9IkxheWVyIDEiPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjZTVlZWY3Ii8+PHBhdGggZD0iTTE0LjY4OCAyMS45OTZhMS42ODIgMS42ODIgMCAwIDAgMCAzLjM2NCAxLjY4MiAxLjY4MiAwIDAgMCAwLTMuMzY0eiIgZmlsbD0ibm9uZSIvPjxwYXRoIGQ9Ik0yNS45NTYgMjAuMzE0aC0xNS44MWwtLjUwNCA1LjA0NiAxLjY4MiAxLjY4MmgxMy40NTVsMS42ODEtMS42ODJ6TTE0LjY4OCAyNS4zNmExLjY4MiAxLjY4MiAwIDAgMSAwLTMuMzY0IDEuNjgyIDEuNjgyIDAgMCAxIDAgMy4zNjR6IiBmaWxsPSJ1cmwoI3NoZWxsLWF0bGFzLWEpIi8+PHBhdGggZmlsbD0idXJsKCNzaGVsbC1hdGxhcy1iKSIgZD0iTTI0LjYxIDEwLjIyM2wtMS42ODEtMS42ODFoLTkuOTIzbC0xLjY4MiAxLjY4MS0xLjAwOSA4LjQxaDE1LjMwNGwtMS4wMDktOC40MXoiLz48L2c+PC9nPjwvc3ZnPg=='); -} -.shell-icon--atlas:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB3aWR0aD0iMzYiIGhlaWdodD0iMzYiIHZpZXdCb3g9IjAgMCAzNiAzNiI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJzaGVsbC1hdGxhc19ob3Zlci1hIiB4MT0iMTguNTIzIiB5MT0iMTQuMTU0IiB4Mj0iMTcuODU2IiB5Mj0iMjkuOTg3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjM2Y1ZTdlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTUzMzRjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLWF0bGFzX2hvdmVyLWIiIHgxPSIxOC4xNTYiIHkxPSIxNC4xMzgiIHgyPSIxNy40OSIgeTI9IjI5Ljk3MSIgeGxpbms6aHJlZj0iI3NoZWxsLWF0bGFzX2hvdmVyLWEiLz48L2RlZnM+PGcgZGF0YS1uYW1lPSJMYXllciAyIj48ZyBkYXRhLW5hbWU9IkxheWVyIDEiPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjYzJkMWUxIi8+PHBhdGggZD0iTTI1Ljk1NiAyMC4zMTRoLTE1LjgxbC0uNTA0IDUuMDQ2IDEuNjgyIDEuNjgyaDEzLjQ1NWwxLjY4MS0xLjY4MnpNMTQuNjg4IDI1LjM2YTEuNjgyIDEuNjgyIDAgMCAxIDAtMy4zNjQgMS42ODIgMS42ODIgMCAxIDEgMCAzLjM2NHoiIGZpbGw9InVybCgjc2hlbGwtYXRsYXNfaG92ZXItYSkiLz48cGF0aCBmaWxsPSJ1cmwoI3NoZWxsLWF0bGFzX2hvdmVyLWIpIiBkPSJNMjQuNjEgMTAuMjIzbC0xLjY4MS0xLjY4MWgtOS45MjNsLTEuNjgyIDEuNjgxLTEuMDA5IDguNDFoMTUuMzA0bC0xLjAwOS04LjQxeiIvPjwvZz48L2c+PC9zdmc+'); -} -.shell-icon--auto { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtYXV0by1hIiB4MT0iMTcuOTEiIHkxPSI4Ljg0OSIgeDI9IjE4LjEzNyIgeTI9IjMxLjc3OCIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2FhYjdlZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzUzNzJmYiIgc3RvcC1vcGFjaXR5PSIuOSIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjZTVlZWY3Ii8+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTE4LjAxIDI2LjM2N2gtLjAybC4wMS4wMDEuMDEtLjAwMXpNMTEuNTgxIDIyLjJsLS41MjguNDQ3YTguMzcxIDguMzcxIDAgMCAwIDQuNzk2IDMuNDMxIDIuMjM2IDIuMjM2IDAgMCAwIC4yMDMtLjEwMy40OTMuNDkzIDAgMCAwIC4yNjItLjU2NiAxOC4wOTMgMTguMDkzIDAgMCAwLTEuMTU5LTQuNDQ3Yy0uNzM3LTEuMzczLTMuNjAyLTEuMjg3LTQuNjg4LTEuMDJhLjQ4NS40ODUgMCAwIDAtLjM2LjU3NyA3LjI0IDcuMjQgMCAwIDAgLjMzNSAxLjAzMWwuMDY3LjE0LjM3NS0uMzE2ek0yNC44MTcgMjIuODRsLS43NTctLjYzOS42OTctLjgyNy42My41MzEuMDE3LS4wMzNjLjA1NS0uMTA1LjEwMy0uMjE0LjE1NC0uMzIyYTcuMjQgNy4yNCAwIDAgMCAuMzM2LTEuMDMxLjQ4NS40ODUgMCAwIDAtLjM2LS41NzZjLTEuMDg3LS4yNjgtMy45NTItLjM1My00LjY5IDEuMDJhMTguMDkgMTguMDkgMCAwIDAtMS4xNTggNC40NDYuNDkzLjQ5MyAwIDAgMCAuMjYyLjU2NiAyLjIzNiAyLjIzNiAwIDAgMCAuMjAzLjEwNCA4LjM3NCA4LjM3NCAwIDAgMCA0LjY2Ni0zLjIzOXpNMjQuMjQgMTMuNTIxbC41MjQtLjQ0M2E4LjM2MSA4LjM2MSAwIDAgMC0xMy41MjggMGwuNTI1LjQ0My0uNjk3LjgyOEwxMC42NSAxNGMtLjAyNC4wNDUtLjA0Ni4wOTItLjA3LjEzOC0uMDQyLjA4LS4wNzkuMTY0LS4xMTguMjQ2LS4wODcuMTk5LS4yMDYuNDk0LS4wNDguNjhhLjk1Mi45NTIgMCAwIDAgLjY4NC4yOTNoMTMuODAyYS45NTMuOTUzIDAgMCAwIC42ODQtLjI5MmMuMTU4LS4xODguMDQtLjQ4My0uMDQ4LS42ODItLjA0LS4wOC0uMDc2LS4xNjMtLjExNy0uMjQybC0uMDctLjE0LS40MTMuMzQ3eiIvPjxwYXRoIGQ9Ik0yOC43OTkgMTguNTczYy4wMTItLjE5LjAyMy0uMzguMDIzLS41NzN2LS4wMDZjMCAuMTk1LS4wMTEuMzg3LS4wMjMuNTh6TTI1LjUwNiAxNC4zMTJsLS4wODYtLjE3MWMuMDQxLjA4LjA3OC4xNjEuMTE3LjI0MnpNNy4xNzggMThhOS4wMzEgOS4wMzEgMCAwIDAgMC0uMDA2ek0xMC40OTQgMTQuMzEybC0uMDMxLjA3MmMuMDQtLjA4Mi4wNzYtLjE2Ni4xMTktLjI0Ni0uMDMuMDU4LS4wNi4xMTYtLjA4OC4xNzR6IiBmaWxsPSIjYWFiN2VmIi8+PHBhdGggZD0iTTE4IDE2Ljk5M2MtLjk0NiAwLTEuNzEzLjU3OC0xLjcxMyAxLjI5cy43NjcgMS4yOTEgMS43MTMgMS4yOTEgMS43MTMtLjU3OCAxLjcxMy0xLjI5LS43NjctMS4yOTEtMS43MTMtMS4yOTF6IiBmaWxsPSIjZTVlZWY3Ii8+PHBhdGggZD0iTTI4LjgyIDE3Ljk2NmExMC44MSAxMC44MSAwIDAgMC0uMDk4LTEuMzY0IDExLjUxNCAxMS41MTQgMCAwIDAtLjA2MS0uMzk5IDEwLjc1OCAxMC43NTggMCAwIDAtLjIzNy0xLjA4Yy0uMDI1LS4wODktLjA0My0uMTgtLjA3LS4yNjhhMTAuNzI4IDEwLjcyOCAwIDAgMC0uNDYtMS4yM2MtLjA1LS4xMS0uMTA1LS4yMTgtLjE1OC0uMzI3cS0uMjIzLS40Ni0uNDg3LS44OTZsLS4wMDItLjAwNGMtLjA0LS4wNjYtLjA3LS4xNC0uMTExLS4yMDVsLS4wMDguMDA5Yy0uMTU0LS4yNDItLjMzMi0uNDY1LS41MDQtLjY5M2ExMC43NTIgMTAuNzUyIDAgMCAwLTE3LjI0OCAwYy0uMTcyLjIyOC0uMzUuNDUxLS41MDMuNjkzbC0uMDA5LS4wMDljLS4wNDEuMDY2LS4wNzEuMTM5LS4xMTEuMjA1bC0uMDAzLjAwNXEtLjI2My40MzUtLjQ4Ni44OTRjLS4wNTMuMTEtLjEwOS4yMTgtLjE1OC4zM2ExMC43MTggMTAuNzE4IDAgMCAwLS40NiAxLjIyOWMtLjAyNy4wODctLjA0NS4xNzktLjA3LjI2N2ExMC43MyAxMC43MyAwIDAgMC0uMjM3IDEuMDggMTAuODMgMTAuODMgMCAwIDAtLjA2LjM5OSAxMC44MSAxMC44MSAwIDAgMC0uMDk5IDEuMzY0bC0uMDAyLjAyNHYuMDA0YzAgLjIxNS4wMTIuNDI3LjAyNi42MzcuMDAyLjAzMi4wMDEuMDY0LjAwNC4wOTUuMDE4LjI0LjA0NS40OC4wNzcuNzE2LjAxMy4wOTcuMDI5LjE5Mi4wNDQuMjg4LjA1OS4zNTguMTM3LjcwOC4yMjkgMS4wNTMuMDIuMDc1LjA0NS4xNDguMDY3LjIyMi4wNzcuMjY2LjE2LjUzLjI1OC43ODguMDM0LjA5LjA3Mi4xOC4xMDguMjdhMTAuNjI5IDEwLjYyOSAwIDAgMCAuNDQ1Ljk2MWMuMDUuMDk2LjEwOC4xODYuMTYxLjI4LjA4LjE0My4xNTguMjg4LjI0NS40MjcuMDI0LjAzNy4wNDMuMDc4LjA2Ny4xMTZsLjAwNC0uMDA0Yy4wODQuMTMyLjE4Ni4yNS4yNzYuMzc3YTEwLjczMyAxMC43MzMgMCAwIDAgMTcuNDg2LjE4N2MuMTM4LS4xODcuMjg2LS4zNjcuNDEzLS41NjRsLjAwMy4wMDRjLjAyNC0uMDM4LjA0My0uMDc5LjA2Ny0uMTE3LjA0Ni0uMDcyLjA4NC0uMTQ5LjEyOC0uMjIyLjA5NS0uMTYuMTkyLS4zMi4yNzktLjQ4NGExMC40MTggMTAuNDE4IDAgMCAwIC40NDQtLjk2MWMuMDM3LS4wOS4wNzUtLjE4LjExLS4yNy4wOTYtLjI1OC4xOC0uNTIxLjI1Ny0uNzg4LjAyMS0uMDc0LjA0Ny0uMTQ2LjA2Ny0uMjIxYTEwLjkyIDEwLjkyIDAgMCAwIC4zNS0yLjA1N2MuMDA0LS4wNS4wMDMtLjEwMi4wMDYtLjE1My4wMTItLjE5Mi4wMjMtLjM4NS4wMjMtLjU4di0uMDA0em0tMTguMTYzLTMuOThhOC4zOCA4LjM4IDAgMCAxIDE0LjY4NiAwbC4wMDYuMDE0Yy4wMjUuMDQ2LjA0OC4wOTQuMDcxLjE0LjAyOS4wNTguMDU5LjExNC4wODYuMTcybC4wMy4wNzFjLjA4OC4xOTkuMjA3LjQ5NC4wNDkuNjgxYS45NTMuOTUzIDAgMCAxLS42ODQuMjkySDExLjA5OWEuOTUyLjk1MiAwIDAgMS0uNjg0LS4yOTJjLS4xNTgtLjE4Ny0uMDQtLjQ4MS4wNDgtLjY4bC4wMy0uMDcyYy4wMjktLjA1OS4wNi0uMTE2LjA4OC0uMTc0LjAyMy0uMDQ2LjA0Ni0uMDkzLjA3LS4xMzhsLjAwNi0uMDEzem05LjA1NiA0LjI5OGMwIC43MTItLjc2NyAxLjI5LTEuNzEzIDEuMjlzLTEuNzEzLS41NzgtMS43MTMtMS4yOS43NjctMS4yOTEgMS43MTMtMS4yOTEgMS43MTMuNTc4IDEuNzEzIDEuMjl6bS04LjY2IDQuMzYzYTguMjggOC4yOCAwIDAgMS0uMzY0LS41ODFsLjAwNC0uMDA0Yy0uMDM0LS4wNjItLjA2NC0uMTI3LS4wOTctLjE5LS4wMy0uMDYtLjA1OC0uMTIxLS4wODctLjE4MmwtLjA2Ny0uMTRhNy4yNCA3LjI0IDAgMCAxLS4zMzYtMS4wMzIuNDg1LjQ4NSAwIDAgMSAuMzYtLjU3NmMxLjA4Ni0uMjY3IDMuOTUyLS4zNTMgNC42OSAxLjAyYTE4LjA5MyAxOC4wOTMgMCAwIDEgMS4xNTggNC40NDYuNDkzLjQ5MyAwIDAgMS0uMjYyLjU2NiAyLjIzNiAyLjIzNiAwIDAgMS0uMjAzLjEwNCA4LjM3MSA4LjM3MSAwIDAgMS00Ljc5Ni0zLjQzMXpNMTggMjYuMzY3aC0uMDEuMDJ6bTcuMzEtNC4zMDFhOC40NjQgOC40NjQgMCAwIDEtNS4xNiA0LjAxMiAyLjIzNiAyLjIzNiAwIDAgMS0uMjAyLS4xMDQuNDkzLjQ5MyAwIDAgMS0uMjYyLS41NjUgMTguMDkgMTguMDkgMCAwIDEgMS4xNTktNC40NDdjLjczNy0xLjM3MyAzLjYwMy0xLjI4NyA0LjY4OC0xLjAyYS40ODUuNDg1IDAgMCAxIC4zNi41NzYgNy4yNCA3LjI0IDAgMCAxLS4zMzUgMS4wMzJjLS4wNTEuMTA4LS4xLjIxNy0uMTU0LjMyMmwtLjAxNy4wMzNjLS4wMjcuMDUyLS4wNTIuMTA2LS4wOC4xNTd6IiBmaWxsPSJ1cmwoI3NoZWxsLWF1dG8tYSkiLz48L3N2Zz4='); -} -.shell-icon--auto:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtYXV0b19ob3Zlci1hIiB4MT0iMTgiIHkxPSI5LjU2NSIgeDI9IjE4IiB5Mj0iMjYuNzYxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjM2Y1ZTdlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTUzMzRjIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMTgiIGZpbGw9IiNjMmQxZTEiLz48cGF0aCBmaWxsPSJub25lIiBkPSJNMTguMDEgMjYuMzY3aC0uMDJsLjAxLjAwMS4wMS0uMDAxek0xMS41ODEgMjIuMmwtLjUyOC40NDdhOC4zNzEgOC4zNzEgMCAwIDAgNC43OTYgMy40MzEgMi4yMzYgMi4yMzYgMCAwIDAgLjIwMy0uMTAzLjQ5My40OTMgMCAwIDAgLjI2Mi0uNTY2IDE4LjA5MyAxOC4wOTMgMCAwIDAtMS4xNTktNC40NDdjLS43MzctMS4zNzMtMy42MDItMS4yODctNC42ODgtMS4wMmEuNDg1LjQ4NSAwIDAgMC0uMzYuNTc3IDcuMjQgNy4yNCAwIDAgMCAuMzM1IDEuMDMxbC4wNjcuMTQuMzc1LS4zMTZ6TTI0LjgxNyAyMi44NGwtLjc1Ny0uNjM5LjY5Ny0uODI3LjYzLjUzMS4wMTctLjAzM2MuMDU1LS4xMDUuMTAzLS4yMTQuMTU0LS4zMjJhNy4yNCA3LjI0IDAgMCAwIC4zMzYtMS4wMzEuNDg1LjQ4NSAwIDAgMC0uMzYtLjU3NmMtMS4wODctLjI2OC0zLjk1Mi0uMzUzLTQuNjkgMS4wMmExOC4wOSAxOC4wOSAwIDAgMC0xLjE1OCA0LjQ0Ni40OTMuNDkzIDAgMCAwIC4yNjIuNTY2IDIuMjM2IDIuMjM2IDAgMCAwIC4yMDMuMTA0IDguMzc0IDguMzc0IDAgMCAwIDQuNjY2LTMuMjM5ek0yNC4yNCAxMy41MjFsLjUyNC0uNDQzYTguMzYxIDguMzYxIDAgMCAwLTEzLjUyOCAwbC41MjUuNDQzLS42OTcuODI4TDEwLjY1IDE0Yy0uMDI0LjA0NS0uMDQ2LjA5Mi0uMDcuMTM4LS4wNDIuMDgtLjA3OS4xNjQtLjExOC4yNDYtLjA4Ny4xOTktLjIwNi40OTQtLjA0OC42OGEuOTUyLjk1MiAwIDAgMCAuNjg0LjI5M2gxMy44MDJhLjk1My45NTMgMCAwIDAgLjY4NC0uMjkyYy4xNTgtLjE4OC4wNC0uNDgzLS4wNDgtLjY4Mi0uMDQtLjA4LS4wNzYtLjE2My0uMTE3LS4yNDJsLS4wNy0uMTQtLjQxMy4zNDd6Ii8+PHBhdGggZD0iTTI4Ljc5OSAxOC41NzNjLjAxMi0uMTkuMDIzLS4zOC4wMjMtLjU3M3YtLjAwNmMwIC4xOTUtLjAxMS4zODctLjAyMy41OHpNMjUuNTA2IDE0LjMxMmwtLjA4Ni0uMTcxYy4wNDEuMDguMDc4LjE2MS4xMTcuMjQyek03LjE3OCAxOGE5LjAzMSA5LjAzMSAwIDAgMCAwLS4wMDZ6TTEwLjQ5NCAxNC4zMTJsLS4wMzEuMDcyYy4wNC0uMDgyLjA3Ni0uMTY2LjExOS0uMjQ2LS4wMy4wNTgtLjA2LjExNi0uMDg4LjE3NHoiIGZpbGw9IiNhYWI3ZWYiLz48cGF0aCBkPSJNMTggMTYuOTkzYy0uOTQ2IDAtMS43MTMuNTc4LTEuNzEzIDEuMjlzLjc2NyAxLjI5MSAxLjcxMyAxLjI5MSAxLjcxMy0uNTc4IDEuNzEzLTEuMjktLjc2Ny0xLjI5MS0xLjcxMy0xLjI5MXoiIGZpbGw9IiNjMmQxZTEiLz48cGF0aCBkPSJNMjguODIgMTcuOTY2YTEwLjgxIDEwLjgxIDAgMCAwLS4wOTgtMS4zNjQgMTEuNTE0IDExLjUxNCAwIDAgMC0uMDYxLS4zOTkgMTAuNzU4IDEwLjc1OCAwIDAgMC0uMjM3LTEuMDhjLS4wMjUtLjA4OS0uMDQzLS4xOC0uMDctLjI2OGExMC43MjggMTAuNzI4IDAgMCAwLS40Ni0xLjIzYy0uMDUtLjExLS4xMDUtLjIxOC0uMTU4LS4zMjdxLS4yMjMtLjQ2LS40ODctLjg5NmwtLjAwMi0uMDA0Yy0uMDQtLjA2Ni0uMDctLjE0LS4xMTEtLjIwNWwtLjAwOC4wMDljLS4xNTQtLjI0Mi0uMzMyLS40NjUtLjUwNC0uNjkzYTEwLjc1MiAxMC43NTIgMCAwIDAtMTcuMjQ4IDBjLS4xNzIuMjI4LS4zNS40NTEtLjUwMy42OTNsLS4wMDktLjAwOWMtLjA0MS4wNjYtLjA3MS4xMzktLjExMS4yMDVsLS4wMDMuMDA1cS0uMjYzLjQzNS0uNDg2Ljg5NGMtLjA1My4xMS0uMTA5LjIxOC0uMTU4LjMzYTEwLjcxOCAxMC43MTggMCAwIDAtLjQ2IDEuMjI5Yy0uMDI3LjA4Ny0uMDQ1LjE3OS0uMDcuMjY3YTEwLjczIDEwLjczIDAgMCAwLS4yMzcgMS4wOCAxMC44MyAxMC44MyAwIDAgMC0uMDYuMzk5IDEwLjgxIDEwLjgxIDAgMCAwLS4wOTkgMS4zNjRsLS4wMDIuMDI0di4wMDRjMCAuMjE1LjAxMi40MjcuMDI2LjYzNy4wMDIuMDMyLjAwMS4wNjQuMDA0LjA5NS4wMTguMjQuMDQ1LjQ4LjA3Ny43MTYuMDEzLjA5Ny4wMjkuMTkyLjA0NC4yODguMDU5LjM1OC4xMzcuNzA4LjIyOSAxLjA1My4wMi4wNzUuMDQ1LjE0OC4wNjcuMjIyLjA3Ny4yNjYuMTYuNTMuMjU4Ljc4OC4wMzQuMDkuMDcyLjE4LjEwOC4yN2ExMC42MjkgMTAuNjI5IDAgMCAwIC40NDUuOTYxYy4wNS4wOTYuMTA4LjE4Ni4xNjEuMjguMDguMTQzLjE1OC4yODguMjQ1LjQyNy4wMjQuMDM3LjA0My4wNzguMDY3LjExNmwuMDA0LS4wMDRjLjA4NC4xMzIuMTg2LjI1LjI3Ni4zNzdhMTAuNzMzIDEwLjczMyAwIDAgMCAxNy40ODYuMTg3Yy4xMzgtLjE4Ny4yODYtLjM2Ny40MTMtLjU2NGwuMDAzLjAwNGMuMDI0LS4wMzguMDQzLS4wNzkuMDY3LS4xMTcuMDQ2LS4wNzIuMDg0LS4xNDkuMTI4LS4yMjIuMDk1LS4xNi4xOTItLjMyLjI3OS0uNDg0YTEwLjQxOCAxMC40MTggMCAwIDAgLjQ0NC0uOTYxYy4wMzctLjA5LjA3NS0uMTguMTEtLjI3LjA5Ni0uMjU4LjE4LS41MjEuMjU3LS43ODguMDIxLS4wNzQuMDQ3LS4xNDYuMDY3LS4yMjFhMTAuOTIgMTAuOTIgMCAwIDAgLjM1LTIuMDU3Yy4wMDQtLjA1LjAwMy0uMTAyLjAwNi0uMTUzLjAxMi0uMTkyLjAyMy0uMzg1LjAyMy0uNTh2LS4wMDR6bS0xOC4xNjMtMy45OGE4LjM4IDguMzggMCAwIDEgMTQuNjg2IDBsLjAwNi4wMTRjLjAyNS4wNDYuMDQ4LjA5NC4wNzEuMTQuMDI5LjA1OC4wNTkuMTE0LjA4Ni4xNzJsLjAzLjA3MWMuMDg4LjE5OS4yMDcuNDk0LjA0OS42ODFhLjk1My45NTMgMCAwIDEtLjY4NC4yOTJIMTEuMDk5YS45NTIuOTUyIDAgMCAxLS42ODQtLjI5MmMtLjE1OC0uMTg3LS4wNC0uNDgxLjA0OC0uNjhsLjAzLS4wNzJjLjAyOS0uMDU5LjA2LS4xMTYuMDg4LS4xNzQuMDIzLS4wNDYuMDQ2LS4wOTMuMDctLjEzOGwuMDA2LS4wMTN6bTkuMDU2IDQuMjk4YzAgLjcxMi0uNzY3IDEuMjktMS43MTMgMS4yOXMtMS43MTMtLjU3OC0xLjcxMy0xLjI5Ljc2Ny0xLjI5MSAxLjcxMy0xLjI5MSAxLjcxMy41NzggMS43MTMgMS4yOXptLTguNjYgNC4zNjNhOC4yOCA4LjI4IDAgMCAxLS4zNjQtLjU4MWwuMDA0LS4wMDRjLS4wMzQtLjA2Mi0uMDY0LS4xMjctLjA5Ny0uMTktLjAzLS4wNi0uMDU4LS4xMjEtLjA4Ny0uMTgybC0uMDY3LS4xNGE3LjI0IDcuMjQgMCAwIDEtLjMzNi0xLjAzMi40ODUuNDg1IDAgMCAxIC4zNi0uNTc2YzEuMDg2LS4yNjcgMy45NTItLjM1MyA0LjY5IDEuMDJhMTguMDkzIDE4LjA5MyAwIDAgMSAxLjE1OCA0LjQ0Ni40OTMuNDkzIDAgMCAxLS4yNjIuNTY2IDIuMjM2IDIuMjM2IDAgMCAxLS4yMDMuMTA0IDguMzcxIDguMzcxIDAgMCAxLTQuNzk2LTMuNDMxek0xOCAyNi4zNjdoLS4wMS4wMnptNy4zMS00LjMwMWE4LjQ2NCA4LjQ2NCAwIDAgMS01LjE2IDQuMDEyIDIuMjM2IDIuMjM2IDAgMCAxLS4yMDItLjEwNC40OTMuNDkzIDAgMCAxLS4yNjItLjU2NSAxOC4wOSAxOC4wOSAwIDAgMSAxLjE1OS00LjQ0N2MuNzM3LTEuMzczIDMuNjAzLTEuMjg3IDQuNjg4LTEuMDJhLjQ4NS40ODUgMCAwIDEgLjM2LjU3NiA3LjI0IDcuMjQgMCAwIDEtLjMzNSAxLjAzMmMtLjA1MS4xMDgtLjEuMjE3LS4xNTQuMzIybC0uMDE3LjAzM2MtLjAyNy4wNTItLjA1Mi4xMDYtLjA4LjE1N3oiIGZpbGw9InVybCgjc2hlbGwtYXV0b19ob3Zlci1hKSIvPjwvc3ZnPg=='); -} -.shell-icon--maps { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48Y2xpcFBhdGggaWQ9InNoZWxsLW1hcHMtYSI+PHBhdGggZD0iTTguMyAyNS41OTh2LTE0LjU1YTEuNDE0IDEuNDE0IDAgMCAxIC45Ny0xLjQ1NUwxMy4xNSA4LjN2MTYuOTc1bC0zLjM5NSAxLjEzMmMtLjY0Ny4xNjEtMS40NTUtLjE2Mi0xLjQ1NS0uODA5ek0yNi4yNDUgOS41OTNsLTMuMzk1IDEuMTMyVjI3LjdsMy44OC0xLjI5M2ExLjQxNCAxLjQxNCAwIDAgMCAuOTctMS40NTV2LTE0LjU1YS45NzMuOTczIDAgMCAwLTEuNDU1LS44MDl6TTIxLjIzMyAyNy43VjEwLjcyNUwxNC43NjcgOC4zdjE2Ljk3NXoiIGZpbGw9Im5vbmUiLz48L2NsaXBQYXRoPjwvZGVmcz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2U1ZWVmNyIvPjxnIGNsaXAtcGF0aD0idXJsKCNzaGVsbC1tYXBzLWEpIj48aW1hZ2Ugd2lkdGg9IjgiIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE0IDgpIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFnQUFBQVVDQVlBQUFDd0czeHJBQUFBQ1hCSVdYTUFBQXNTQUFBTEVnSFMzWDc4QUFBQXQwbEVRVlFvVTQyUVdRNENJUkJFSDBOZnpMTjQvMThkWmFqeUF3WWN0OWdKSWFGckpaM094ZnlZNWRmeUwwQzA2N3RMN0VzRCtCMFlraVpnak1kRDJNWVlHMnhqbTVUU1VJeGJLWVAxNm1CTTJLSldVVldKSEV6RmR1SmVObVN4cEVUWk5td2pId0Rsd01oTFJoYVNrRTFjMXBYbkRxOTFXd2FKV2l1UjgxdWpadEdySFRLd0E3YlMwWTJWODRMa25rSEVkVjFSVjVoUjV2ZUhlaUNyeVdKam1oclFNbUJEU2lQNXMxS01TcDA1UVQ1YWZCeWJCM2xXenBPTHJtWTNBQUFBQUVsRlRrU3VRbUNDIi8+PGltYWdlIHdpZHRoPSI2IiBoZWlnaHQ9IjE5IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMiA5KSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFUQ0FZQUFBQ3oxM3hnQUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUFvMGxFUVZRWVYyMlJXNjdESUF4RVQ4QWJ1MnU1Ky85dDB4aG0rZ0ZFaVJvTGdXVG1aZGorL3RNOFZIbHFBc1E0ZmtteG12YjlNaVRkOFJNUXR2SEpHa3pieENjVE1GY2xZMElXNnFLclUwdEZOcmFJekVReXNqaXlVY3FHSk9MSWhxMkpOR3JUL0xYdm5KRXhjeEgyME85ZDFGcVFacW9qRTFsSTVtaEoyY3IwYUlubE00M1dnTzk5dnc2OG5JaUZXQk1QOCtseEs0OHRsc1pGYVQzSnd3ZmFmQUVya3FhVDFyU1ZYZ0FBQUFCSlJVNUVya0pnZ2c9PSIvPjxpbWFnZSB3aWR0aD0iNiIgaGVpZ2h0PSIyMCIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoOCA4KSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBWUFBQUFVQ0FZQUFBQ3Uwa3pZQUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUFxRWxFUVZRWVYzMlFRYkxDTUF4RFgxTmZqTE53Ly9VbmlTdjlSZHdDQTRNM25qeEZsc2ZiN1Q3TmwycmY0RThoVnZ1YzFzRFlUOEdBYmVLRVY2OFA0VVhmSUVCSTRyME1oc0FtSmRxMkxXeGpJTElja2pER3J2RGpPT0FGdUpKaVpsN0NtV0VnWkRGbnN1OXRPYzVSY3lZQW1RZTJrVlZDemdJdVIyWDg5WDZ0K2RwREVuME1JdmJsMUhKRkh3T0FNU2ZTeXBCRVBNYkE5WkROZWFMb28xK250czNlR3BuSlB6dkNzb1U3OGg3QkFBQUFBRWxGVGtTdVFtQ0MiLz48L2c+PC9zdmc+'); -} -.shell-icon--maps:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtbWFwc19ob3Zlci1hIiB4MT0iMTcuOTkyIiB5MT0iMTEuOTg4IiB4Mj0iMTguMDEzIiB5Mj0iMjguMzM3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjM2Y1ZTdlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTUzMzRjIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMTgiIGZpbGw9IiNjMmQxZTEiLz48cGF0aCBkPSJNOC4zIDI1LjU5OHYtMTQuNTVhMS40MTQgMS40MTQgMCAwIDEgLjk3LTEuNDU1TDEzLjE1IDguM3YxNi45NzVsLTMuMzk1IDEuMTMyYy0uNjQ3LjE2MS0xLjQ1NS0uMTYyLTEuNDU1LS44MDl6TTI2LjI0NSA5LjU5M2wtMy4zOTUgMS4xMzJWMjcuN2wzLjg4LTEuMjkzYTEuNDE0IDEuNDE0IDAgMCAwIC45Ny0xLjQ1NXYtMTQuNTVhLjk3My45NzMgMCAwIDAtMS40NTUtLjgwOXpNMjEuMjMzIDI3LjdWMTAuNzI1TDE0Ljc2NyA4LjN2MTYuOTc1eiIgZmlsbD0idXJsKCNzaGVsbC1tYXBzX2hvdmVyLWEpIi8+PC9zdmc+'); -} -.shell-icon--mobile { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtbW9iaWxlLWEiIHgxPSIxNy41NDciIHkxPSIxMC40NDIiIHgyPSIxOS4xNzIiIHkyPSIzNy41NjciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiNhYWI3ZWYiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiM0MjY0ZmIiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2U1ZWVmNyIvPjxwYXRoIGQ9Ik0yMy4xMiA4SDEyLjg3QTEuODY3IDEuODY3IDAgMCAwIDExIDkuODd2MTYuMjZBMS44NjcgMS44NjcgMCAwIDAgMTIuODcgMjhoMTAuMjVBMS44NzYgMS44NzYgMCAwIDAgMjUgMjYuMTNWOS44N0ExLjg3NiAxLjg3NiAwIDAgMCAyMy4xMiA4em0tNS4xMyAxOC40NGExLjQzIDEuNDMgMCAxIDEgMS40My0xLjQzIDEuNDI4IDEuNDI4IDAgMCAxLTEuNDMgMS40M3ptNC4yOS00LjI5aC04LjU3VjEwLjcyaDguNTd6IiBmaWxsPSJ1cmwoI3NoZWxsLW1vYmlsZS1hKSIvPjwvc3ZnPg=='); -} -.shell-icon--mobile:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMwIiBoZWlnaHQ9IjMwIiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtbW9iaWxlX2hvdmVyLWEiIHgxPSIxNy41NDciIHkxPSIxMC40NDIiIHgyPSIxOS4xNzIiIHkyPSIzNy41NjciIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIj48c3RvcCBvZmZzZXQ9IjAiIHN0b3AtY29sb3I9IiMzZjVlN2UiLz48c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMxNTMzNGMiLz48L2xpbmVhckdyYWRpZW50PjwvZGVmcz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2MyZDFlMSIvPjxwYXRoIGQ9Ik0yMy4xMiA4SDEyLjg3QTEuODY3IDEuODY3IDAgMCAwIDExIDkuODd2MTYuMjZBMS44NjcgMS44NjcgMCAwIDAgMTIuODcgMjhoMTAuMjVBMS44NzYgMS44NzYgMCAwIDAgMjUgMjYuMTNWOS44N0ExLjg3NiAxLjg3NiAwIDAgMCAyMy4xMiA4em0tNS4xMyAxOC40NGExLjQzIDEuNDMgMCAxIDEgMS40My0xLjQzIDEuNDI4IDEuNDI4IDAgMCAxLTEuNDMgMS40M3ptNC4yOS00LjI5aC04LjU3VjEwLjcyaDguNTd6IiBmaWxsPSJ1cmwoI3NoZWxsLW1vYmlsZV9ob3Zlci1hKSIvPjwvc3ZnPg=='); -} -.shell-icon--navigation { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48Y2xpcFBhdGggaWQ9InNoZWxsLW5hdmlnYXRpb24tYSI+PHBhdGggZD0iTTE5LjQ2NSA5LjUwN2MtLjI5NS0uNjMtLjg4NC0xLjI1OS0xLjQ3NC0xLjI1OXMtMS4xNzkuNjMtMS40NzMgMS4yNTlsLTUuODk1IDE0LjE1OGExLjg4OCAxLjg4OCAwIDAgMC0uMTEuODI4IDEuMjgyIDEuMjgyIDAgMCAwIDIuMzIuNzQ1bDIuNjctMi40NDMgMi40NjUtMi4yNTUuMDIzLS4wMjEgNS4xNTggNC43MmMxLjMyNiAxLjI1OCAyLjggMCAyLjIxLTEuNTczeiIgZmlsbD0ibm9uZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjZTVlZWY3Ii8+PGcgY2xpcC1wYXRoPSJ1cmwoI3NoZWxsLW5hdmlnYXRpb24tYSkiPjxpbWFnZSB3aWR0aD0iMTciIGhlaWdodD0iMjAiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDkgNykiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQkVBQUFBVUNBWUFBQUJyb05aSkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBdlVsRVFWUTRUOTFUUVJLRElCQ0xIWjdWUy91VjlzVjlpeTZXVnRKREJSWkU3YWluWnBRSnNpWmhCMEFTVzkvTDdVV1NNTmY3bTlpSjAxckJMemhFcENHSnZWczZKTW1maVpoRTEzc2JLNWpYR2dEd2ZsQVNERThDV1ZndzA0bEpuczRWaTRrekV3NThuSEVVNloyYjNBc2ZPT3IzeGl0dUFLQ3pGcTBJa2xmTk9VK251UUdBVm1UV3NlWmNKalFBSUwyQUJEb3JjWi9STGRIWnVVb1NtcXZBT09TZkNzVEdCdmpCVjhxVzhUMG5HMzdVVUNkMkhueWNtNlgxRDZYNTlVbVhNSk95QUFBQUFFbEZUa1N1UW1DQyIvPjwvZz48L3N2Zz4='); -} -.shell-icon--navigation:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtbmF2aWdhdGlvbl9ob3Zlci1hIiB4MT0iMTguMTg4IiB5MT0iMTEuNzQiIHgyPSIxNy44MzIiIHkyPSIyNi43MiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzNmNWU3ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzE1MzM0YyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjYzJkMWUxIi8+PHBhdGggZD0iTTE5LjYxNCA5LjUzNGMtLjI4NC0uNjM1LS44NjItMS4yNzQtMS40NTItMS4yODVzLTEuMTkuNjA5LTEuNDk1IDEuMjMzbC02LjE0MiAxNC4wNTNhMS44ODcgMS44ODcgMCAwIDAtLjEyNC44MjYgMS4yODIgMS4yODIgMCAwIDAgMi4zMDcuNzg2bDIuNzEyLTIuMzk2IDIuNTA0LTIuMjEyLjAyMy0uMDIgNS4wNzQgNC44MDljMS4zMDQgMS4yODEgMi44LjA0OSAyLjIzOC0xLjUzNXoiIGZpbGw9InVybCgjc2hlbGwtbmF2aWdhdGlvbl9ob3Zlci1hKSIvPjwvc3ZnPg=='); -} -.shell-icon--search { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48Y2xpcFBhdGggaWQ9InNoZWxsLXNlYXJjaC1hIj48cGF0aCBkPSJNMTggOGE3LjY1MyA3LjY1MyAwIDAgMC03LjIzIDcuMjNjMCAxLjk2MiAxLjQ0IDQuNjgyIDMuMDc2IDcuMTYzQzE1LjQxOCAyNC43OCAxNy4xNzEgMjYuOTQ0IDE4IDI4YTY4LjcwNSA2OC43MDUgMCAwIDAgNS4wNzctNy4wOGMxLjIxNy0yLjA0MiAyLjE1NC00LjExMSAyLjE1NC01LjY5QTcuNjUzIDcuNjUzIDAgMCAwIDE4IDh6IiBmaWxsPSJub25lIi8+PC9jbGlwUGF0aD48L2RlZnM+PGNpcmNsZSBjeD0iMTgiIGN5PSIxOCIgcj0iMTgiIGZpbGw9IiNlNWVlZjciLz48ZyBjbGlwLXBhdGg9InVybCgjc2hlbGwtc2VhcmNoLWEpIj48aW1hZ2Ugd2lkdGg9IjE2IiBoZWlnaHQ9IjIyIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgxMCA3KSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFCQUFBQUFXQ0FZQUFBREpxaHg4QUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUE1VWxFUVZRNFQrMVRXdzdDSUJBY1lJL2xqMTVGVCt4UlRKcTJsakorOEdoNVZJengwMGxhWUptZGZRQ0tKSTV3dWRuanpRQjF2aTVkMGp2b0hxR0h2OEFQQktSSGFHTTdlU2tOVFZyanNrV0xPTGY2QlptUElKVFNBRmo1RTB3S01qMmZ5Uno4RzRqaXRWMUlnaVJjR0VrSHJYVVE4dEg5ZXduekVKM3dmSm5tT1MweUo5Q1hROEFZWFFUWlBua01ROG90OWlETE52V2ttTU5uSnF0Yk04Vm1GR05BRktXUUlBaVo1cWxaV3l4SGpHQ3hGbzZFdFRiakFZQU00NGl0dy90Uy9JK1k2L1QzQXRzeEZ0Z0pWdVlkSkNyVDFlUlBJTzVMeDRqdVkrTDlwTjd0dndEV25lY3M3RjFPc3dBQUFBQkpSVTVFcmtKZ2dnPT0iLz48L2c+PGNpcmNsZSBjeD0iMTgiIGN5PSIxNS4yMjIiIHI9IjIuMzQ5IiBmaWxsPSIjZTVlZWY3Ii8+PC9zdmc+'); -} -.shell-icon--search:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtc2VhcmNoX2hvdmVyLWEiIHgxPSIxNy45MTkiIHkxPSIxMy42MzMiIHgyPSIxOC42NiIgeTI9IjI4LjA3NiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzNmNWU3ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzE1MzM0YyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjYzJkMWUxIi8+PHBhdGggZD0iTTE4IDhhNy42NTMgNy42NTMgMCAwIDAtNy4yMyA3LjIzYzAgMS45NjIgMS40NCA0LjY4MiAzLjA3NiA3LjE2M0MxNS40MTggMjQuNzggMTcuMTcxIDI2Ljk0NCAxOCAyOGE2OC43MDUgNjguNzA1IDAgMCAwIDUuMDc3LTcuMDhjMS4yMTctMi4wNDIgMi4xNTQtNC4xMTEgMi4xNTQtNS42OUE3LjY1MyA3LjY1MyAwIDAgMCAxOCA4eiIgZmlsbD0idXJsKCNzaGVsbC1zZWFyY2hfaG92ZXItYSkiLz48Y2lyY2xlIGN4PSIxOCIgY3k9IjE1LjIyMiIgcj0iMi4zNDkiIGZpbGw9IiNjMmQxZTEiLz48L3N2Zz4='); -} -.shell-icon--studio { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzNiIgaGVpZ2h0PSIzNiIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48Y2xpcFBhdGggaWQ9InNoZWxsLXN0dWRpby1hIj48cGF0aCBkPSJNMTggNy44NDZBMTAuMTMgMTAuMTMgMCAwIDAgNy44NDYgMThjMCA1LjMxMSA0LjY4NiAxMC4xNTQgOS44NDIgMTAuMTU0YTEuOTIgMS45MiAwIDAgMCAyLjAzLTEuNzE4IDIuNTA5IDIuNTA5IDAgMCAwLS43OC0xLjcxOUEyLjQzIDIuNDMgMCAwIDEgMTggMjNjMC0xLjI1LjYyNS0xLjg3NSAxLjU2Mi0xLjg3NWgzLjEyNGMyLjM0NCAwIDUuNDY4LjYyNSA1LjQ2OC0zLjI4IDAtNC4wNjItMy40MzctOS45OTgtMTAuMTU0LTkuOTk4em0wIDIuMzQzYTEuNDc2IDEuNDc2IDAgMCAxIDEuNTYyIDEuNTYyIDEuNTYyIDEuNTYyIDAgMSAxLTMuMTI0IDBBMS40NzYgMS40NzYgMCAwIDEgMTggMTAuMTl6bS00LjY4NiAzLjEyNWExLjQ3NiAxLjQ3NiAwIDAgMSAxLjU2MiAxLjU2MiAxLjQ3NiAxLjQ3NiAwIDAgMS0xLjU2MiAxLjU2MiAxLjQ3NiAxLjQ3NiAwIDAgMS0xLjU2Mi0xLjU2MiAxLjQ3NiAxLjQ3NiAwIDAgMSAxLjU2Mi0xLjU2MnptOS41MjkgMGExLjQ3NiAxLjQ3NiAwIDAgMSAxLjU2MiAxLjU2MiAxLjU2MiAxLjU2MiAwIDEgMS0zLjEyNCAwIDEuNDc2IDEuNDc2IDAgMCAxIDEuNTYyLTEuNTYyeiIgZmlsbD0ibm9uZSIvPjwvY2xpcFBhdGg+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjZTVlZWY3Ii8+PGcgY2xpcC1wYXRoPSJ1cmwoI3NoZWxsLXN0dWRpby1hKSI+PGltYWdlIHdpZHRoPSI1IiBoZWlnaHQ9IjE2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyMCAxMykiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQVVBQUFBUUNBWUFBQURlZExYTkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFBazBsRVFWUVlWMjJQUVE3Q01Bd0V4elJwMUZmd0Z5NThoRy96Q2xSYXAzWE1JVWtwRW50WmEyVHZ5dUx1M0I2N2M5S0ZQd3JWZmhZckxLVWdJcFZJZzQ3ajdvMUpnNmRyZC8rZVd6R0dZVUJvN2JwbEFEUm5kck82YVZZd0svUTU5SnhlRHExOVh0NEFqREVDSU5mNzB6dkkyOFlZSThGS3pWcFVEdyt2ZVQ2eXBwVHFSNnNxdEpJMUsxTktCTTNLV2FyS0J6RnFUa1pqSURKNkFBQUFBRWxGVGtTdVFtQ0MiLz48aW1hZ2Ugd2lkdGg9IjQiIGhlaWdodD0iMTYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDExIDEzKSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBUUFBQUFRQ0FZQUFBQXh0dDd6QUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUFna2xFUVZRWVYxMk9RUTZETUF3RXgrQVE4YXkrcGY4L3RLQ1daQ0h1SVFWVjNaTTEyckZ0dDd1Q253ejh4U01hQUdiV0d4SGRpQWdpQWo4SE0vdUNyM3MydmFvQ01JNk9BYjRmQndENzBaZDdhNWQwZ3NZVkExL2ZMNmFVTHVaVm9rcE1LU0dwL3dGUWFyL21qMlVCZ3pubkRyWmFBTmhLWWM2WlFSS1NBSGl1S3g5VkRVN3h3Um5iVkFBQUFBQkpSVTVFcmtKZ2dnPT0iLz48aW1hZ2Ugd2lkdGg9IjUiIGhlaWdodD0iMTkiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDE1IDEwKSIgeGxpbms6aHJlZj0iZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFBVUFBQUFUQ0FZQUFBQlk0TWRqQUFBQUNYQklXWE1BQUFzU0FBQUxFZ0hTM1g3OEFBQUFrVWxFUVZRWVY2V1BVUTZDUUF4RVh3V1djQjV2NEZrOHJOY3hHc0l1Yk1jUFNuQVQvK3hQbTVkcFoycVN1TjAzOFZVWGZ0U2ZzTjliNDdORGQ4Zk1XaWdKU1pnWmtnS0dRbEs3dnRWSzMzVkF1T2RTT0hxdGRWZFdkNm83eHh4R0hsZnR2UG1lWjlJd3RMQ3NLMlZiQVNNTlE3aExrVXNzT1ovS3BXU21OSUtCcGV1amVYd2FSL29TR1FGU1NqeGZMejZDZmxBbkcveEtWQUFBQUFCSlJVNUVya0pnZ2c9PSIvPjxpbWFnZSB3aWR0aD0iMjIiIGhlaWdodD0iMjMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDcgNykiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQllBQUFBWENBWUFBQUFQNkwrZUFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFCTlVsRVFWUTRUOVZTd1ZIRFFBeGN4WElNUFZBREZmQ0JWa0pacVNJRjhLSUNmblRCd0NNK254WHhpSDIrMDUxdG1KQUgrL0ZJdDE1Sks1R3E0dW01VjF5QWx6MlR6WEdKK0Z1VUd0dVVpSCtCL3lkTWp6dC8wZUxtY0xXT3J5Yk1xcWMxRG9peU03V01MTU9xNnhhWE9Fa3hVbGh4UHBtZjFub2JvZEE0QUVCSk1RWUFFVGxIa1dxMXFiQ0liQWhOSm1QWGRRQUFhNk5JN2oxWGhXSTA5bU9zRUpHWitTbExseWFiaXBVOEx1NXZmYW5BL0dSOGRDMkF1QjRsSHdEWTFyWHB4MFRHeDE0RTNIbWYwaWlYOE41UDBmQzhWSXdJUnBnTUFRWTByY2w3ajIxZHg0K2hwL2ZESFRFUXVhbEpWTGlvTkhOMHpqSUMrT1ByTXdUaERvYlBiZE9FSUIybW5Jc241RGF1U3VsajY5eVpQaVJ2bWlhV2pDMFB1ZEVPN3Z1NU84N1JoU1d1Zy9YdDRZZXl5NkQ3MTJRQjM4R09aN2lRYXl4MkFBQUFBRWxGVGtTdVFtQ0MiLz48L2c+PC9zdmc+'); -} -.shell-icon--studio:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjM2IiBoZWlnaHQ9IjM2IiB2aWV3Qm94PSIwIDAgMzYgMzYiPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ic2hlbGwtc3R1ZGlvX2hvdmVyLWEiIHgxPSIxOC4wOSIgeTE9IjEzLjAwOCIgeDI9IjE3Ljc4MSIgeTI9IjI5LjgzMiIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iIzNmNWU3ZSIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzE1MzM0YyIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjxjaXJjbGUgY3g9IjE4IiBjeT0iMTgiIHI9IjE4IiBmaWxsPSIjYzJkMWUxIi8+PHBhdGggZD0iTTE4IDcuODQ2QTEwLjEzIDEwLjEzIDAgMCAwIDcuODQ2IDE4YzAgNS4zMTEgNC42ODYgMTAuMTU0IDkuODQyIDEwLjE1NGExLjkyIDEuOTIgMCAwIDAgMi4wMy0xLjcxOCAyLjUwOSAyLjUwOSAwIDAgMC0uNzgtMS43MTlBMi40MyAyLjQzIDAgMCAxIDE4IDIzYzAtMS4yNS42MjUtMS44NzUgMS41NjItMS44NzVoMy4xMjRjMi4zNDQgMCA1LjQ2OC42MjUgNS40NjgtMy4yOCAwLTQuMDYyLTMuNDM3LTkuOTk4LTEwLjE1NC05Ljk5OHptMCAyLjM0M2ExLjQ3NiAxLjQ3NiAwIDAgMSAxLjU2MiAxLjU2MiAxLjU2MiAxLjU2MiAwIDEgMS0zLjEyNCAwQTEuNDc2IDEuNDc2IDAgMCAxIDE4IDEwLjE5em0tNC42ODYgMy4xMjVhMS40NzYgMS40NzYgMCAwIDEgMS41NjIgMS41NjIgMS40NzYgMS40NzYgMCAwIDEtMS41NjIgMS41NjIgMS40NzYgMS40NzYgMCAwIDEtMS41NjItMS41NjIgMS40NzYgMS40NzYgMCAwIDEgMS41NjItMS41NjJ6bTkuNTI5IDBhMS40NzYgMS40NzYgMCAwIDEgMS41NjIgMS41NjIgMS41NjIgMS41NjIgMCAxIDEtMy4xMjQgMCAxLjQ3NiAxLjQ3NiAwIDAgMSAxLjU2Mi0xLjU2MnoiIGZpbGw9InVybCgjc2hlbGwtc3R1ZGlvX2hvdmVyLWEpIi8+PC9zdmc+'); -} -.shell-icon--web { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLXdlYi1hIiB4MT0iMTguMDIiIHkxPSI5LjQ3MSIgeDI9IjE4LjE4MSIgeTI9IjI1Ljc5OSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIG9mZnNldD0iMCIgc3RvcC1jb2xvcj0iI2FhYjdlZiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzUzNzJmYiIgc3RvcC1vcGFjaXR5PSIuOSIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJzaGVsbC13ZWItYiIgeDE9IjE3LjkzNiIgeTE9IjEzLjAyNiIgeDI9IjE3Ljk1NyIgeTI9IjE1LjE5NSIgeGxpbms6aHJlZj0iI3NoZWxsLXdlYi1hIi8+PC9kZWZzPjxjaXJjbGUgY3g9IjE4LjA0MSIgY3k9IjE4IiByPSIxOCIgZmlsbD0iI2U1ZWVmNyIvPjxwYXRoIGQ9Ik0xMC4yIDguNTEzaDE1Ljc2NGExLjMyMyAxLjMyMyAwIDAgMSAxLjMyMiAxLjMyMnYxMS45MzJIOC44NzhWOS44MzVhMS4zMjMgMS4zMjMgMCAwIDEgMS4zMjMtMS4zMjJ6IiBmaWxsPSJ1cmwoI3NoZWxsLXdlYi1hKSIvPjxwYXRoIGQ9Ik02LjIxNSAyMi45MjJoMjMuNjUydjEuNDk5YTEuMDY2IDEuMDY2IDAgMCAxLTEuMDY2IDEuMDY2SDcuMjhhMS4wNjYgMS4wNjYgMCAwIDEtMS4wNjYtMS4wNjZ2LTEuNDk5eiIgZmlsbD0idXJsKCNzaGVsbC13ZWItYikiLz48cGF0aCBmaWxsPSIjZTVlZWY3IiBkPSJNMTEuMzY0IDEwLjg5OUgyNC44djguNDgxSDExLjM2NHoiLz48L3N2Zz4='); -} -.shell-icon--web:hover { - background-image: url('data:image/svg+xml;charset=utf8;base64,PHN2ZyBkYXRhLW5hbWU9IkxheWVyIDEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHdpZHRoPSIzMCIgaGVpZ2h0PSIzMCIgdmlld0JveD0iMCAwIDM2IDM2Ij48ZGVmcz48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLXdlYl9ob3Zlci1hIiB4MT0iMTguMDIiIHkxPSI5LjQ3MSIgeDI9IjE4LjEyMyIgeTI9IjE5LjkxIiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agb2Zmc2V0PSIwIiBzdG9wLWNvbG9yPSIjM2Y1ZTdlIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMTUzMzRjIi8+PC9saW5lYXJHcmFkaWVudD48bGluZWFyR3JhZGllbnQgaWQ9InNoZWxsLXdlYl9ob3Zlci1iIiB4MT0iMTguMDM1IiB5MT0iMjMuMDIiIHgyPSIxOC4wNTYiIHkyPSIyNS4xODkiIHhsaW5rOmhyZWY9IiNzaGVsbC13ZWJfaG92ZXItYSIvPjwvZGVmcz48Y2lyY2xlIGN4PSIxOC4wNDEiIGN5PSIxOCIgcj0iMTgiIGZpbGw9IiNjMmQxZTEiLz48cGF0aCBkPSJNMTAuMiA4LjUxM2gxNS43NjRhMS4zMjMgMS4zMjMgMCAwIDEgMS4zMjIgMS4zMjJ2MTEuOTMySDguODc4VjkuODM1YTEuMzIzIDEuMzIzIDAgMCAxIDEuMzIzLTEuMzIyeiIgZmlsbD0idXJsKCNzaGVsbC13ZWJfaG92ZXItYSkiLz48cGF0aCBkPSJNNi4yMTUgMjIuOTIyaDIzLjY1MnYxLjQ5OWExLjA2NiAxLjA2NiAwIDAgMS0xLjA2NiAxLjA2Nkg3LjI4YTEuMDY2IDEuMDY2IDAgMCAxLTEuMDY2LTEuMDY2di0xLjQ5OXoiIGZpbGw9InVybCgjc2hlbGwtd2ViX2hvdmVyLWIpIi8+PHBhdGggZmlsbD0iI2MyZDFlMSIgZD0iTTExLjM2NCAxMC44OTlIMjQuOHY4LjQ4MUgxMS4zNjR6Ii8+PC9zdmc+'); -} \ No newline at end of file diff --git a/vendor/dotcom-page-shell/react-page-shell.js b/vendor/dotcom-page-shell/react-page-shell.js deleted file mode 100644 index 666a19e557a..00000000000 --- a/vendor/dotcom-page-shell/react-page-shell.js +++ /dev/null @@ -1,2905 +0,0 @@ -/* eslint-disable */ -'use strict'; - -function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } - -var React = require('react'); -var React__default = _interopDefault(React); -var PropTypes = _interopDefault(require('prop-types')); -var Helmet = require('react-helmet'); -var Helmet__default = _interopDefault(Helmet); - -var classCallCheck = function (instance, Constructor) { - if (!(instance instanceof Constructor)) { - throw new TypeError("Cannot call a class as a function"); - } -}; - -var createClass = function () { - function defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - - return function (Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; -}(); - - - - - - - -var _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; -}; - - - -var inherits = function (subClass, superClass) { - if (typeof superClass !== "function" && superClass !== null) { - throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); - } - - subClass.prototype = Object.create(superClass && superClass.prototype, { - constructor: { - value: subClass, - enumerable: false, - writable: true, - configurable: true - } - }); - if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; -}; - - - - - - - - - - - -var possibleConstructorReturn = function (self, call) { - if (!self) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - - return call && (typeof call === "object" || typeof call === "function") ? call : self; -}; - -var BrowserCompatibilityWarning = function (_React$Component) { - inherits(BrowserCompatibilityWarning, _React$Component); - - function BrowserCompatibilityWarning() { - classCallCheck(this, BrowserCompatibilityWarning); - return possibleConstructorReturn(this, (BrowserCompatibilityWarning.__proto__ || Object.getPrototypeOf(BrowserCompatibilityWarning)).apply(this, arguments)); - } - - createClass(BrowserCompatibilityWarning, [{ - key: "shouldComponentUpdate", - value: function shouldComponentUpdate() { - return false; - } - }, { - key: "render", - value: function render() { - return React__default.createElement( - "div", - { - className: "shell-wrapper", - id: "page-shell-compatibility-warning", - style: { display: 'none' } - }, - React__default.createElement( - "div", - { className: "shell-py12 shell-px24 shell-bg-pink shell-color-white shell-align-left" }, - React__default.createElement( - "button", - { - className: "shell-absolute shell-top shell-right shell-p12", - id: "page-shell-compatibility-dismiss" - }, - React__default.createElement( - "svg", - { className: "shell-icon", viewBox: "0 0 18 18" }, - React__default.createElement("path", { d: "M5.8,5C5.4,5,5,5.4,5,5.8C5,6,5.1,6.2,5.3,6.3l0,0L7.9,9l-2.6,2.6C5.1,11.8,5,12,5,12.2C5,12.6,5.4,13,5.8,13 c0.2,0,0.4-0.1,0.6-0.3L9,10.1l2.6,2.6c0.1,0.2,0.4,0.3,0.6,0.3c0.4,0,0.8-0.4,0.8-0.8c0-0.2-0.1-0.4-0.2-0.6L10.1,9l2.6-2.7 C12.9,6.2,13,6,13,5.8C13,5.4,12.6,5,12.2,5c-0.2,0-0.4,0.1-0.6,0.2L9,7.8L6.4,5.2C6.2,5.1,6,5,5.8,5L5.8,5z" }) - ) - ), - React__default.createElement( - "div", - { className: "limiter shell-block shell-relative" }, - React__default.createElement( - "div", - { className: "compatibility-warning-copy shell-mb6 shell-mb0-mm shell-align-center shell-align-left-mm shell-txt-bold" }, - "You are using an outdated browser and will encounter some problems with our website. Please consider upgrading." - ), - React__default.createElement( - "div", - { className: "compatibility-warning-action shell-align-center" }, - React__default.createElement( - "a", - { - className: "shell-btn shell-btn--white shell-color-pink shell-txt-nowrap", - href: "http://outdatedbrowser.com" - }, - "Upgrade Now" - ) - ) - ) - ) - ); - } - }]); - return BrowserCompatibilityWarning; -}(React__default.Component); - -var PageHelmet = function (_React$Component) { - inherits(PageHelmet, _React$Component); - - function PageHelmet() { - classCallCheck(this, PageHelmet); - return possibleConstructorReturn(this, (PageHelmet.__proto__ || Object.getPrototypeOf(PageHelmet)).apply(this, arguments)); - } - - createClass(PageHelmet, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - return React__default.createElement( - Helmet.Helmet, - null, - React__default.createElement('meta', { charSet: 'utf-8' }), - React__default.createElement('meta', { name: 'viewport', content: 'width=device-width, initial-scale=1' }), - React__default.createElement('link', { rel: 'shortcut icon', href: '/favicon.ico', type: 'image/x-icon' }), - React__default.createElement('meta', { - name: 'p:domain_verify', - content: '57838af58c8045c2c024bc2f9d1577f9' - }), - React__default.createElement('meta', { - name: 'google-site-verification', - content: 'umPiCFUc_EX8CJ7xWQDPgQwApDxNi59w6riFZPNZj4w' - }), - React__default.createElement('meta', { name: 'twitter:site', content: '@Mapbox' }), - React__default.createElement('meta', { property: 'og:site_name', content: 'Mapbox' }) - ); - } - }]); - return PageHelmet; -}(React__default.Component); - -var shellStyles = { - // Header names - headerMenuName: 'shell-txt-s shell-txt-s-mxl shell-txt-bold shell-txt-nowrap shell-py6', - - // Mobile navigation popover - mobilePopoverContainer: 'shell-absolute shell-z5', - - // Medium to X-large navigation - navigationItem: 'shell-mx6 shell-mx9-ml shell-mx18-mxl', - - // Medium to X-large navigation popup menu - popupMenuContainer: 'shell-absolute shell-z2 shell-disable-text-size-adjust', - popupMenuBody: 'shell-shadow-darken10-bold shell-bg-white shell-absolute shell-inline-block shell-round shell-txt-s', - popupMenuNavHeading: 'shell-txt-uppercase shell-txt-s shell-txt-spacing1 shell-txt-fancy shell-color-light-blue', - popupMenuLink: 'shell-txt-bold shell-color-blue-on-hover shell-color-gray-dark', - popupTriangle: 'shell-triangle-wide shell-triangle-wide--u shell-color-white shell-z5', - - // Right navigation, user menu, footer links section - popoverNavLink: 'shell-inline-block shell-color-gray-dark shell-color-blue-on-hover', - - // User menu popup - userNavLink: 'shell-color-gray-dark shell-color-blue-on-hover shell-txt-s shell-txt-bold shell-my12 shell-block', - userAvatar: 'shell-border shell-border--2 shell-border--white shell-h30 shell-w30 shell-bg-darken25 shell-clip shell-round-full' -}; - -var UserMenu = function (_React$Component) { - inherits(UserMenu, _React$Component); - - function UserMenu() { - classCallCheck(this, UserMenu); - return possibleConstructorReturn(this, (UserMenu.__proto__ || Object.getPrototypeOf(UserMenu)).apply(this, arguments)); - } - - createClass(UserMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var signInButtonColorClasses = this.props.darkText ? 'shell-btn--stroke shell-color-gray-dark shell-color-blue-on-hover' : 'shell-btn--lighten25'; - var userButtonColorClasses = this.props.darkText ? 'shell-color-gray-dark shell-color-blue-on-hover' : 'shell-link shell-link--white'; - - // Very special case: If we are on the sign-up page with a route-to query param, - // we need that param to persist when the user clicks the sign-in button in - // the page header. - var signInQuery = ''; - if (typeof window !== 'undefined' && window.location.search) { - var match = window.location.search.match(/^\?.*?(?:.&)?(route-to=[^&]*).*$/); - if (match) { - signInQuery = '?' + match[1]; - } - } - return ( - // Hard-coded width matches the width of the sign-in button, which is slightly - // wider than the user-menu trigger. By hard-coding this value we can prevent - // horizontal bounce when the session API response comes back. - // **Be careful changing this value!** The width varies based on browser, - // so you need to accommodate the browser with the fattest fonts. - React__default.createElement( - 'div', - null, - React__default.createElement( - 'div', - { className: 'shell-relative', style: { width: 66 } }, - React__default.createElement( - 'div', - { 'data-show-unauthenticated': true, style: { visibility: 'hidden' } }, - React__default.createElement( - 'a', - { - className: 'shell-btn shell-w-full shell-py6 shell-round-full shell-txt-s ' + signInButtonColorClasses, - href: '/signin/' + signInQuery, - id: 'signin-button', - 'data-test': 'signin-button' - }, - 'Sign in' - ) - ), - React__default.createElement( - 'div', - { - 'data-show-authenticated': true, - style: { visibility: 'hidden' }, - className: 'clearfix shell-absolute shell-top shell-right' - }, - React__default.createElement( - 'div', - { - id: 'user-menu', - className: 'shell-flex-parent shell-flex-parent--center-cross', - style: { paddingRight: 16 } - }, - React__default.createElement( - 'button', - { - id: 'user-menu-trigger', - 'data-test': 'user-menu-trigger', - 'aria-haspopup': 'true', - 'aria-controls': 'user-menu-container', - 'aria-expanded': 'false', - 'aria-label': 'User menu', - className: userButtonColorClasses + ' shell-relative' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 18 18', - className: 'shell-icon shell-absolute shell-mt-neg12 shell-h24 shell-w24', - style: { left: '100%', top: '50%' } - }, - React__default.createElement('path', { d: 'M12,7L6,7l3,4L12,7z' }) - ), - React__default.createElement('span', { - 'data-user-avatar': true, - className: 'shell-flex-child shell-flex-child--no-shrink ' + shellStyles.userAvatar - }) - ) - ) - ) - ), - React__default.createElement( - 'div', - { - id: 'user-menu-container', - 'data-test': 'user-menu', - role: 'group', - 'aria-labelledby': 'user-menu-trigger', - className: shellStyles.popupMenuContainer + ' shell-w-full shell-animated-menu', - style: { - right: 0, - top: '100%', - marginTop: '14px' - } - }, - React__default.createElement('div', { - id: 'user-menu-pointer', - className: shellStyles.popupTriangle + ' shell-animated-menu__pointer', - style: { - position: 'absolute', - top: 0 - } - }), - React__default.createElement( - 'div', - { - className: 'shell-shadow-darken10-bold shell-bg-white shell-absolute shell-py30 shell-px24 shell-round shell-w-full shell-w210-mm', - id: 'user-menu-body', - style: { - right: 10 - } - }, - React__default.createElement( - 'div', - { className: 'shell-mt-neg12', 'data-generic-user-menu': true }, - React__default.createElement( - 'a', - { href: '/studio/', className: shellStyles.userNavLink }, - 'Studio' - ), - React__default.createElement( - 'a', - { href: '/account/', className: shellStyles.userNavLink }, - 'Account' - ), - React__default.createElement( - 'a', - { - 'data-user-staff-generic': true, - href: '/admin/', - className: 'shell-color-gray-dark shell-color-blue-on-hover shell-txt-s shell-txt-bold shell-my12', - style: { display: 'none' } - }, - 'Admin' - ), - React__default.createElement( - 'a', - { href: '/account/settings', className: shellStyles.userNavLink }, - 'Settings' - ), - React__default.createElement( - 'a', - { href: '/help/', className: shellStyles.userNavLink }, - 'Help' - ) - ), - React__default.createElement( - 'div', - { className: 'shell-mt-neg12', 'data-app-specific-user-menu': true }, - React__default.createElement( - 'a', - { - 'data-user-staff-specific': true, - href: '/admin/', - className: 'shell-color-gray-dark shell-color-blue-on-hover shell-txt-s shell-txt-bold shell-my12', - style: { display: 'none' } - }, - 'Admin' - ), - React__default.createElement( - 'a', - { href: '/account/settings/', className: shellStyles.userNavLink }, - 'Settings' - ), - React__default.createElement( - 'a', - { href: '/help/', className: shellStyles.userNavLink }, - 'Help' - ) - ), - React__default.createElement( - 'div', - { className: 'shell-pt24 shell-mt24 shell-border-t shell-border--gray-light' }, - React__default.createElement('div', { 'data-user-name': true, className: 'shell-txt-s shell-color-gray' }), - React__default.createElement( - 'button', - { - 'data-sign-out': true, - 'data-test': 'signout-button', - className: 'shell-color-gray-dark shell-color-blue-on-hover shell-txt-s shell-txt-bold shell-mt6 shell-block shell-w-full' - }, - React__default.createElement( - 'div', - { className: 'shell-flex-parent shell-flex-parent--center-cross shell-txt-bold' }, - React__default.createElement( - 'svg', - { className: 'shell-icon shell-mr3', viewBox: '0 0 18 18' }, - React__default.createElement('path', { d: 'M4,4c0,0-1,0-1,1v8c0,1,1,1,1,1h4c0.6,0,1-0.4,1-1s-0.4-1-1-1H5V6h3c0.6,0,1-0.4,1-1S8.6,4,8,4H4z M11,5 c-0.3,0-0.5,0.1-0.7,0.3c-0.4,0.4-0.4,1,0,1.4L11.6,8H7C6.5,8,6,8.5,6,9s0.5,1,1,1h4.6l-1.3,1.3c-0.4,0.4-0.4,1,0,1.4s1,0.4,1.4,0 l2.8-2.9c0.2-0.2,0.4-0.5,0.4-0.9c0-0.3-0.2-0.6-0.4-0.9l-2.8-2.9C11.5,5.1,11.3,5,11,5L11,5z' }) - ), - React__default.createElement( - 'span', - { className: 'shell-flex-child' }, - 'Sign out' - ) - ) - ) - ) - ) - ) - ) - ); - } - }]); - return UserMenu; -}(React__default.Component); - -UserMenu.propTypes = { - darkText: PropTypes.bool -}; - -var PopupMenu = function (_React$Component) { - inherits(PopupMenu, _React$Component); - - function PopupMenu() { - classCallCheck(this, PopupMenu); - return possibleConstructorReturn(this, (PopupMenu.__proto__ || Object.getPrototypeOf(PopupMenu)).apply(this, arguments)); - } - - createClass(PopupMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'renderName', - value: function renderName() { - var _props = this.props, - name = _props.name, - shortName = _props.shortName; - - if (shortName) { - return React__default.createElement( - 'span', - null, - React__default.createElement( - 'span', - { className: 'shell-none-ml' }, - shortName - ), - React__default.createElement( - 'span', - { className: 'shell-none shell-block-ml' }, - name - ) - ); - } - - return name; - } - }, { - key: 'render', - value: function render() { - var menuNameClasses = shellStyles.headerMenuName; - menuNameClasses += this.props.darkText ? ' shell-navigation-menu-button shell-transition shell-color-gray-dark shell-color-blue-on-hover' : ' shell-navigation-menu-button shell-link shell-link--white'; - - var _props2 = this.props, - name = _props2.name, - children = _props2.children; - - - return React__default.createElement( - 'div', - { style: { lineHeight: 1 } }, - React__default.createElement( - 'div', - { - id: name + '-menu', - className: 'shell-relative ' + shellStyles.navigationItem - }, - React__default.createElement( - 'button', - { - id: name + '-menu-trigger', - 'data-nav-trigger': name, - 'data-test': 'nav-menu-trigger-' + name, - 'aria-haspopup': 'true', - 'aria-controls': name + '-menu-container', - 'aria-expanded': 'false', - 'aria-label': name + ' menu', - className: menuNameClasses - }, - this.renderName() - ) - ), - React__default.createElement( - 'div', - { - id: name + '-menu-container', - 'data-nav-menu': name, - 'data-test': 'nav-menu-' + name, - role: 'group', - 'aria-labelledby': name + '-menu-trigger', - className: shellStyles.popupMenuContainer + ' shell-w-full shell-animated-menu', - style: { - right: 0, - top: '100%', - marginTop: '14px' - } - }, - React__default.createElement('div', { - 'data-nav-pointer': name, - className: shellStyles.popupTriangle + ' shell-animated-menu__pointer', - style: { - position: 'absolute', - top: 0 - } - }), - React__default.createElement( - 'div', - { className: shellStyles.popupMenuBody, 'data-nav-menu-body': name }, - children - ) - ) - ); - } - }]); - return PopupMenu; -}(React__default.Component); - -PopupMenu.propTypes = { - darkText: PropTypes.bool, - name: PropTypes.string.isRequired, - shortName: PropTypes.string, - children: PropTypes.node.isRequired -}; - -PopupMenu.defaultProps = { - darkText: true, - shortName: null -}; - -var SmallMapsIcon = function (_React$Component) { - inherits(SmallMapsIcon, _React$Component); - - function SmallMapsIcon() { - classCallCheck(this, SmallMapsIcon); - return possibleConstructorReturn(this, (SmallMapsIcon.__proto__ || Object.getPrototypeOf(SmallMapsIcon)).apply(this, arguments)); - } - - createClass(SmallMapsIcon, [{ - key: "shouldComponentUpdate", - value: function shouldComponentUpdate() { - return false; - } - }, { - key: "render", - value: function render() { - return React__default.createElement( - "svg", - _extends({}, this.props, { - width: "12", - height: "12", - xmlns: "http://www.w3.org/2000/svg" - }), - React__default.createElement("path", { - d: "M4 10.5V0l4 1.5V12l-4-1.5zM3 0L.6.8c-.4.1-.6.5-.6.9v9c0 .4.5.6.9.5l2.1-.7V0zm8.4 11.2c.4-.1.6-.5.6-.9v-9c0-.4-.4-.7-.9-.5L9 1.5V12l2.4-.8z", - fill: "#4264FB", - fillRule: "nonzero" - }) - ); - } - }]); - return SmallMapsIcon; -}(React__default.Component); - -var SmallNavigationIcon = function (_React$Component) { - inherits(SmallNavigationIcon, _React$Component); - - function SmallNavigationIcon() { - classCallCheck(this, SmallNavigationIcon); - return possibleConstructorReturn(this, (SmallNavigationIcon.__proto__ || Object.getPrototypeOf(SmallNavigationIcon)).apply(this, arguments)); - } - - createClass(SmallNavigationIcon, [{ - key: "shouldComponentUpdate", - value: function shouldComponentUpdate() { - return false; - } - }, { - key: "render", - value: function render() { - return React__default.createElement( - "svg", - _extends({}, this.props, { - width: "12", - height: "12", - xmlns: "http://www.w3.org/2000/svg" - }), - React__default.createElement("path", { - d: "M2.5 11.2c-.9.8-1.9 0-1.5-1l4-9c.2-.4.6-.8 1-.8s.8.4 1 .8l4 9c.4 1-.6 1.8-1.5 1L6 8.2l-3.5 3z", - fill: "#4264FB", - fillRule: "nonzero" - }) - ); - } - }]); - return SmallNavigationIcon; -}(React__default.Component); - -var SmallStudioIcon = function (_React$Component) { - inherits(SmallStudioIcon, _React$Component); - - function SmallStudioIcon() { - classCallCheck(this, SmallStudioIcon); - return possibleConstructorReturn(this, (SmallStudioIcon.__proto__ || Object.getPrototypeOf(SmallStudioIcon)).apply(this, arguments)); - } - - createClass(SmallStudioIcon, [{ - key: "shouldComponentUpdate", - value: function shouldComponentUpdate() { - return false; - } - }, { - key: "render", - value: function render() { - return React__default.createElement( - "svg", - _extends({}, this.props, { - width: "14", - height: "14", - xmlns: "http://www.w3.org/2000/svg" - }), - React__default.createElement("path", { - d: "M6.99.5C3.595.5.5 3.2.5 7c0 3.4 2.995 6.5 6.29 6.5.7 0 1.298-.5 1.298-1.1 0-.4-.2-.8-.499-1.1-.6-.5-.6-1.1-.6-1.1 0-.8.4-1.2 1-1.2h1.997c1.497 0 3.494.4 3.494-2.1 0-2.6-2.196-6.4-6.49-6.4zm0 1.5c.599 0 .998.4.998 1S7.59 4 6.99 4c-.6 0-.999-.4-.999-1s.4-1 .999-1zM3.994 4c.6 0 .999.4.999 1s-.4 1-.999 1-.998-.4-.998-1 .4-1 .998-1zm6.091 0c.6 0 .999.4.999 1s-.4 1-.999 1-.998-.4-.998-1 .4-1 .998-1z", - fill: "#4264FB", - fillRule: "nonzero" - }) - ); - } - }]); - return SmallStudioIcon; -}(React__default.Component); - -var SmallServicesIcon = function (_React$Component) { - inherits(SmallServicesIcon, _React$Component); - - function SmallServicesIcon() { - classCallCheck(this, SmallServicesIcon); - return possibleConstructorReturn(this, (SmallServicesIcon.__proto__ || Object.getPrototypeOf(SmallServicesIcon)).apply(this, arguments)); - } - - createClass(SmallServicesIcon, [{ - key: "shouldComponentUpdate", - value: function shouldComponentUpdate() { - return false; - } - }, { - key: "render", - value: function render() { - return React__default.createElement( - "svg", - _extends({}, this.props, { - width: "14", - height: "14", - xmlns: "http://www.w3.org/2000/svg" - }), - React__default.createElement("path", { - d: "M4.4.4l-1.8 1 .5 2.4c-.3.5-.6.9-.8 1.4L0 6v2l2.3.8c.2.5.5.9.8 1.3l-.5 2.4 1.8 1 1.8-1.6c.3.1.5.1.8.1.3 0 .5 0 .8-.1l1.8 1.6 1.8-1-.5-2.4c.3-.4.6-.8.8-1.3L14 8V6l-2.3-.8c-.2-.5-.5-.9-.8-1.3l.5-2.4-1.8-1-1.8 1.6C7.5 2 7.3 2 7 2c-.3 0-.5 0-.8.1L4.4.4zM7 5c1.1 0 2 .9 2 2s-.9 2-2 2-2-.9-2-2 .9-2 2-2z", - fill: "#4264FB", - fillRule: "nonzero" - }) - ); - } - }]); - return SmallServicesIcon; -}(React__default.Component); - -var navigationMenuData = { - headerMainMenus: { - products: { - products: { - title: 'Products', - links: [{ - name: 'Maps', - description: 'Smooth, fast, real-time maps', - to: '/maps/' - }, { - name: 'Search', - description: 'Turn addresses into coordinates', - to: '/geocoding/' - }, { - name: 'Navigation', - description: 'Turn-by-turn routing', - to: '/navigation/' - }, { - name: 'Studio', - description: 'Design custom maps', - to: '/mapbox-studio/' - }, { - name: 'Atlas', - description: 'Maps and location on-premise', - to: '/atlas/' - }], - more: { - title: 'View all products', - to: '/products/' - } - }, - platforms: { - title: 'Platforms', - links: [{ - name: 'Web', - to: '/help/how-web-apps-work/', - hideInMobile: true - }, { - name: 'Mobile', - to: '/mobile/' - }, { - name: 'AR', - to: '/augmented-reality/' - }, { - name: 'Auto', - to: '/automotive/', - hideInMobile: true - }] - } - }, - solutions: { - industries: { - title: 'Industries', - links: [{ - name: 'Consumer apps (B2C)', - to: '/industries/consumer/' - }, { - name: 'Logistics', - to: '/industries/logistics/' - }, { - name: 'Business intelligence', - to: '/industries/business-intelligence/' - }, { - name: 'Government', - to: '/industries/government/' - }] - }, - useCases: { - title: 'Use Cases', - links: [{ - name: 'Store locator', - to: '/use-cases/store-locator/' - }, { - name: 'Turn-by-turn navigation', - to: '/use-cases/turn-by-turn-navigation/' - }, { - name: 'On-demand logistics', - to: '/use-cases/on-demand-logistics/' - }, { - name: 'Asset tracking', - to: '/use-cases/asset-tracking/' - }, { - name: 'Data visualization', - to: '/use-cases/data-visualization/' - }], - more: { - title: 'Built with Mapbox blog', - to: 'https://blog.mapbox.com/tagged/built-with-mapbox/' - } - } - }, - documentation: { - documentation: { - title: 'Documentation', - sections: { - maps: { - title: 'Maps', - icon: SmallMapsIcon, - links: [{ - name: 'Mapbox GL JS', - to: '/mapbox-gl-js/api/' - }], - subsections: { - mapsSdks: { - title: 'Maps SDKs', - links: [{ - name: 'iOS', - showFor: true, - to: '/ios-sdk/' - }, { - name: 'Android', - showFor: true, - to: '/android-docs/map-sdk/overview/' - }, { - name: 'Unity', - showFor: true, - to: '/unity-sdk/' - }, { - name: 'React Native', - showFor: true, - to: '/help/first-steps-react-native-sdk/' - }, { - name: 'Qt', - showFor: true, - to: '/qt/' - }] - } - } - }, - navigation: { - title: 'Navigation', - icon: SmallNavigationIcon, - subsections: { - sdks: { - title: 'Navigation SDKs', - links: [{ - name: 'iOS', - showFor: true, - to: '/ios-sdk/navigation/' - }, { - name: 'Android', - showFor: true, - to: '/android-docs/navigation/' - }] - } - } - }, - studio: { - title: 'Studio', - icon: SmallStudioIcon, - links: [{ - name: 'Mapbox Studio manual', - to: '/help/studio-manual/' - }] - }, - services: { - title: 'Mapbox services', - icon: SmallServicesIcon, - links: [{ - name: 'Maps APIs', - to: '/api-documentation/#maps' - }, { - name: 'Directions APIs', - to: '/api-documentation/#directions' - }, { - name: 'Geocoding API', - to: '/api-documentation/#geocoding' - }] - } - }, - more: { - title: 'More documentation', - to: '/documentation/' - } - }, - help: { - title: 'Help', - links: [{ - name: 'How Mapbox works', - subTitle: 'Learn how the Mapbox platform works', - to: '/help/how-mapbox-works/' - }, { - name: 'Tutorials', - subTitle: 'Start with a guide or explore project ideas', - to: '/help/tutorials/' - }], - more: { - title: 'More help', - to: '/help/' - } - } - }, - company: { - name: 'Company', - links: [{ - name: 'About', - to: '/about/' - }, { - name: 'Customers', - to: '/showcase/' - }, { - name: 'Careers', - to: '/jobs/' - }, { - name: 'Diversity & Inclusion', - to: '/diversity-inclusion/' - }] - } - }, - productsMenu: { - name: 'Products', - links: [{ - name: 'Maps', - to: '/maps/' - }, { - name: 'Search', - to: '/geocoding/' - }, { - name: 'Navigation', - to: '/navigation/' - }, { - name: 'Studio', - to: '/mapbox-studio/' - }, { - name: 'Atlas', - to: '/atlas/' - }], - highlightedLinks: [{ - name: 'Pricing', - to: '/pricing/' - }] - }, - useCaseMenu: { - name: 'Use cases', - links: [{ - name: 'Store locator', - to: '/use-cases/store-locator/' - }, { - name: 'Turn-by-turn navigation', - to: '/use-cases/turn-by-turn-navigation/' - }, { - name: 'On-demand logistics', - to: '/use-cases/on-demand-logistics/' - }, { - name: 'Data visualization', - to: '/use-cases/data-visualization/' - }, { - name: 'Asset tracking', - to: '/use-cases/asset-tracking/' - }], - highlightedLinks: [] - }, - resourcesMenu: { - name: 'Resources', - links: [{ - name: 'Documentation', - to: '/documentation/' - }, { - name: 'Help', - to: '/help/' - }, { - name: 'Events', - to: '/events/' - }, { - name: 'Live sessions', - to: '/live/' - }, { - name: 'Open source', - to: '/about/open/' - }], - highlightedLinks: [] - }, - companyMenu: { - name: 'Company', - links: [{ - name: 'About', - to: '/about/' - }, { - name: 'Customers', - to: '/showcase/' - }, { - name: 'Community', - to: '/community/' - }, { - name: 'Careers', - to: '/careers/' - }, { - name: 'Diversity & Inclusion', - to: '/diversity-inclusion/' - }, { - name: 'Team', - to: '/about/team/' - }, { - name: 'Blog', - to: '/blog/' - }, { - name: 'Press', - to: '/about/press/' - }, { - name: 'Contact', - to: '/contact/' - }], - highlightedLinks: [] - }, - mobileCombinationMenu: { - links: [{ - name: 'Customers', - to: '/showcase/' - }, { - name: 'Documentation', - to: '/documentation/' - }, { - name: 'Pricing', - to: '/pricing/' - }, { - name: 'Contact', - to: '/contact/' - }, { - name: 'About', - to: '/about/' - }, { - name: 'Careers', - to: '/careers/' - }, { - name: 'Team', - to: '/about/team/' - }, { - name: 'Blog', - to: '/blog/' - }] - } -}; - -var CompanyMenu = function (_React$Component) { - inherits(CompanyMenu, _React$Component); - - function CompanyMenu() { - classCallCheck(this, CompanyMenu); - return possibleConstructorReturn(this, (CompanyMenu.__proto__ || Object.getPrototypeOf(CompanyMenu)).apply(this, arguments)); - } - - createClass(CompanyMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var navItems = navigationMenuData.headerMainMenus.company.links; - - return React__default.createElement( - PopupMenu, - _extends({}, this.props, { name: 'Company' }), - React__default.createElement( - 'div', - { className: 'shell-py30 shell-px30' }, - React__default.createElement( - 'ul', - null, - navItems.map(function (navItem, i) { - return React__default.createElement( - 'li', - { key: navItem.name, className: i === 0 ? '' : 'shell-mt18' }, - React__default.createElement( - 'a', - { - href: navItem.to, - className: shellStyles.popupMenuLink, - 'data-nav-link': true, - 'data-test': 'nav-link-' + navItem.name - }, - navItem.name - ) - ); - }) - ) - ) - ); - } - }]); - return CompanyMenu; -}(React__default.Component); - -var NavigationHighlightLink = function (_React$Component) { - inherits(NavigationHighlightLink, _React$Component); - - function NavigationHighlightLink() { - classCallCheck(this, NavigationHighlightLink); - return possibleConstructorReturn(this, (NavigationHighlightLink.__proto__ || Object.getPrototypeOf(NavigationHighlightLink)).apply(this, arguments)); - } - - createClass(NavigationHighlightLink, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var splitText = this.props.label.split(' '); - var lastWord = splitText.pop(); - var textWithoutLastWord = splitText.join(' '); - - return React__default.createElement( - 'span', - { className: 'shell-color-blue shell-txt-bold shell-color-gray-dark-on-hover' }, - textWithoutLastWord, - ' ', - React__default.createElement( - 'span', - { className: 'shell-txt-nowrap' }, - lastWord, - React__default.createElement( - 'span', - { className: 'shell-icon-inliner' }, - React__default.createElement( - 'svg', - { className: 'shell-icon' }, - React__default.createElement('use', { xlinkHref: '#shell-icon-chevron-right' }) - ) - ) - ) - ); - } - }]); - return NavigationHighlightLink; -}(React__default.Component); - -NavigationHighlightLink.propTypes = { - label: PropTypes.string.isRequired -}; - -var DocumentationMenu = function (_React$Component) { - inherits(DocumentationMenu, _React$Component); - - function DocumentationMenu() { - classCallCheck(this, DocumentationMenu); - return possibleConstructorReturn(this, (DocumentationMenu.__proto__ || Object.getPrototypeOf(DocumentationMenu)).apply(this, arguments)); - } - - createClass(DocumentationMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'renderAnchorLi', - value: function renderAnchorLi(linkItem) { - return React__default.createElement( - 'li', - { key: linkItem.name, className: 'shell-mb12' }, - React__default.createElement( - 'a', - { - href: linkItem.to, - className: shellStyles.popupMenuLink, - 'data-nav-link': true, - 'data-test': 'nav-link-' + linkItem.name - }, - linkItem.showFor && React__default.createElement( - 'span', - { className: 'shell-txt-normal' }, - 'for ' - ), - linkItem.name, - linkItem.subTitle && React__default.createElement( - 'p', - { className: 'shell-txt-xs shell-txt-normal shell-color-light-blue' }, - linkItem.subTitle - ) - ) - ); - } - }, { - key: 'renderSubsectionNav', - value: function renderSubsectionNav(subKey, subsection) { - return React__default.createElement( - 'div', - { key: subKey }, - React__default.createElement( - 'div', - { className: 'shell-color-light-blue shell-txt-bold shell-pb12' }, - subsection.title - ), - React__default.createElement( - 'div', - { className: 'shell-ml6' }, - React__default.createElement( - 'ul', - null, - subsection.links.map(this.renderAnchorLi) - ) - ) - ); - } - }, { - key: 'renderSectionNav', - value: function renderSectionNav(section) { - var _this2 = this; - - var subKeys = section.subsections ? Object.keys(section.subsections) : null; - - return React__default.createElement( - 'div', - null, - React__default.createElement( - 'div', - { className: 'shell-border-b shell-border--gray-light shell-pb6 shell-mb12' }, - React__default.createElement(section.icon, { className: 'shell-align-middle shell-mb3' }), - React__default.createElement( - 'span', - { className: 'shell-txt-bold shell-ml6 shell-color-light-blue' }, - section.title - ) - ), - section.links && React__default.createElement( - 'ul', - null, - section.links.map(this.renderAnchorLi) - ), - subKeys && React__default.createElement( - 'div', - null, - subKeys.map(function (subKey) { - return _this2.renderSubsectionNav(subKey, section.subsections[subKey]); - }) - ) - ); - } - }, { - key: 'render', - value: function render() { - var navSections = navigationMenuData.headerMainMenus.documentation; - var docNavSection = navSections.documentation; - var helpNavSection = navSections.help; - - return React__default.createElement( - PopupMenu, - _extends({}, this.props, { name: 'Documentation', shortName: 'Docs' }), - React__default.createElement( - 'div', - { style: { width: 540 } }, - React__default.createElement( - 'div', - { className: 'shell-grid' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--8 shell-pt30 shell-px30' }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading + ' shell-pb12' }, - docNavSection.title - ), - React__default.createElement( - 'div', - { className: 'shell-grid' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6 shell-pr24' }, - this.renderSectionNav(docNavSection.sections.maps) - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - React__default.createElement( - 'div', - { className: 'shell-mb24' }, - this.renderSectionNav(docNavSection.sections.navigation) - ), - React__default.createElement( - 'div', - { className: 'shell-mb24' }, - this.renderSectionNav(docNavSection.sections.studio) - ), - React__default.createElement( - 'div', - { className: 'shell-mb24' }, - this.renderSectionNav(docNavSection.sections.services) - ) - ) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--4 shell-bg-gray-faint shell-round shell-pt30 shell-px30' }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading + ' shell-pb12' }, - helpNavSection.title - ), - React__default.createElement( - 'ul', - null, - helpNavSection.links.map(this.renderAnchorLi) - ) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-grid' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--8 shell-px30 shell-pb30' }, - React__default.createElement( - 'a', - { - href: docNavSection.more.to, - className: shellStyles.popoverNavLinkHighlight, - 'data-nav-link': true, - 'data-test': 'nav-link-' + docNavSection.more.title - }, - React__default.createElement(NavigationHighlightLink, { label: docNavSection.more.title }) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--4 shell-bg-gray-faint shell-round shell-px30 shell-pb30' }, - React__default.createElement( - 'a', - { - href: helpNavSection.more.to, - className: shellStyles.popoverNavLinkHighlight, - 'data-nav-link': true, - 'data-test': 'nav-link-' + helpNavSection.more.title - }, - React__default.createElement(NavigationHighlightLink, { label: helpNavSection.more.title }) - ) - ) - ) - ) - ); - } - }]); - return DocumentationMenu; -}(React__default.Component); - -var ProductsNavItem = function (_React$Component) { - inherits(ProductsNavItem, _React$Component); - - function ProductsNavItem() { - classCallCheck(this, ProductsNavItem); - return possibleConstructorReturn(this, (ProductsNavItem.__proto__ || Object.getPrototypeOf(ProductsNavItem)).apply(this, arguments)); - } - - createClass(ProductsNavItem, [{ - key: 'render', - value: function render() { - var link = this.props.link; - - var lowerName = link.name.toLowerCase(); - - return React__default.createElement( - 'a', - { - href: link.to, - className: 'shell-products-nav-item shell-icon--' + lowerName + ' shell-block shell-mr6 shell-color-blue-on-hover', - 'data-nav-link': true, - 'data-test': 'nav-link-' + link.name - }, - React__default.createElement( - 'div', - { className: 'shell-mb0 shell-pt3' }, - React__default.createElement( - 'span', - { className: 'shell-txt-bold' }, - link.name - ), - React__default.createElement( - 'p', - { className: 'shell-txt-xs shell-color-light-blue' }, - link.description - ) - ) - ); - } - }]); - return ProductsNavItem; -}(React__default.Component); - -ProductsNavItem.propTypes = { - link: PropTypes.shape({ - name: PropTypes.string.isRequired, - description: PropTypes.string.isRequired, - to: PropTypes.string.isRequired - }).isRequired -}; - -var PlatformsNavItem = function (_React$Component) { - inherits(PlatformsNavItem, _React$Component); - - function PlatformsNavItem() { - classCallCheck(this, PlatformsNavItem); - return possibleConstructorReturn(this, (PlatformsNavItem.__proto__ || Object.getPrototypeOf(PlatformsNavItem)).apply(this, arguments)); - } - - createClass(PlatformsNavItem, [{ - key: 'render', - value: function render() { - var link = this.props.link; - - var lowerName = link.name.toLowerCase(); - - return React__default.createElement( - 'a', - { - href: link.to, - 'data-nav-link': true, - 'data-test': 'nav-link-' + link.name, - className: 'shell-platforms-nav-item shell-h30 shell-py6 shell-icon--' + lowerName + ' shell-block shell-color-blue-on-hover shell-txt-bold' - }, - link.name - ); - } - }]); - return PlatformsNavItem; -}(React__default.Component); - -PlatformsNavItem.propTypes = { - link: PropTypes.shape({ - name: PropTypes.string.isRequired, - to: PropTypes.string.isRequired - }).isRequired -}; - -var ProductsMenu = function (_React$Component) { - inherits(ProductsMenu, _React$Component); - - function ProductsMenu() { - classCallCheck(this, ProductsMenu); - return possibleConstructorReturn(this, (ProductsMenu.__proto__ || Object.getPrototypeOf(ProductsMenu)).apply(this, arguments)); - } - - createClass(ProductsMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var navSections = navigationMenuData.headerMainMenus.products; - var productsNavSection = navSections.products; - var platformsNavSection = navSections.platforms; - - return React__default.createElement( - PopupMenu, - _extends({}, this.props, { name: 'Products' }), - React__default.createElement( - 'div', - { style: { width: 500 }, className: 'shell-px30 shell-py30' }, - React__default.createElement( - 'div', - { className: 'shell-border-b shell-border--gray-light shell-pb12' }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading }, - productsNavSection.title - ), - React__default.createElement( - 'div', - { className: 'shell-grid' }, - productsNavSection.links.map(function (link) { - return React__default.createElement( - 'div', - { - key: link.name, - className: 'shell-col shell-col--6 shell-my12' - }, - React__default.createElement(ProductsNavItem, { link: link }) - ); - }) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-py24' }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading + ' shell-pb12' }, - platformsNavSection.title - ), - React__default.createElement( - 'div', - { className: 'shell-flex-parent shell-flex-parent--space-between-main' }, - platformsNavSection.links.map(function (link) { - return React__default.createElement( - 'div', - { key: link.name, className: 'shell-flex-child' }, - React__default.createElement(PlatformsNavItem, { link: link }) - ); - }) - ) - ), - React__default.createElement( - 'div', - null, - React__default.createElement( - 'a', - { - href: productsNavSection.more.to, - className: shellStyles.popoverNavLinkHighlight, - 'data-nav-link': true, - 'data-test': 'nav-link-' + productsNavSection.more.title - }, - React__default.createElement(NavigationHighlightLink, { label: productsNavSection.more.title }) - ) - ) - ) - ); - } - }]); - return ProductsMenu; -}(React__default.Component); - -var SolutionsMenu = function (_React$Component) { - inherits(SolutionsMenu, _React$Component); - - function SolutionsMenu() { - classCallCheck(this, SolutionsMenu); - return possibleConstructorReturn(this, (SolutionsMenu.__proto__ || Object.getPrototypeOf(SolutionsMenu)).apply(this, arguments)); - } - - createClass(SolutionsMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'renderMenuSideNavSection', - value: function renderMenuSideNavSection(navSection) { - return React__default.createElement( - 'div', - { className: 'shell-pb12' }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading + ' shell-pb12' }, - navSection.title - ), - React__default.createElement( - 'ul', - null, - navSection.links.map(function (link) { - return React__default.createElement( - 'li', - { key: link.name, className: 'shell-mb12' }, - React__default.createElement( - 'a', - { - href: link.to, - className: shellStyles.popupMenuLink, - 'data-nav-link': true, - 'data-test': 'nav-link-' + link.name - }, - link.name - ) - ); - }) - ) - ); - } - }, { - key: 'render', - value: function render() { - var navSections = navigationMenuData.headerMainMenus.solutions; - var useCasesNavSection = navSections.useCases; - var industriesNavSection = navSections.industries; - - return React__default.createElement( - PopupMenu, - _extends({}, this.props, { name: 'Solutions' }), - React__default.createElement( - 'div', - { style: { width: 380 }, className: 'shell-py30 shell-px30' }, - React__default.createElement( - 'div', - { className: 'shell-flex-parent shell-flex-parent--space-between-main' }, - React__default.createElement( - 'div', - { className: 'shell-flex-child' }, - this.renderMenuSideNavSection(industriesNavSection) - ), - React__default.createElement( - 'div', - { className: 'shell-flex-child' }, - this.renderMenuSideNavSection(useCasesNavSection) - ) - ), - React__default.createElement( - 'div', - null, - React__default.createElement( - 'a', - { - href: useCasesNavSection.more.to, - className: shellStyles.popoverNavLinkHighlight, - 'data-nav-link': true, - 'data-test': 'nav-link-' + useCasesNavSection.more.title - }, - React__default.createElement(NavigationHighlightLink, { label: useCasesNavSection.more.title }) - ) - ) - ) - ); - } - }]); - return SolutionsMenu; -}(React__default.Component); - -var NavigationItem = function (_React$Component) { - inherits(NavigationItem, _React$Component); - - function NavigationItem() { - classCallCheck(this, NavigationItem); - return possibleConstructorReturn(this, (NavigationItem.__proto__ || Object.getPrototypeOf(NavigationItem)).apply(this, arguments)); - } - - createClass(NavigationItem, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var colorBasedClasses = this.props.darkText ? 'shell-navigation-menu-button shell-color-gray-dark shell-color-blue-on-hover' : 'shell-navigation-menu-button shell-link shell-link--white'; - - return React__default.createElement( - 'div', - { - className: 'shell-flex-child ' + shellStyles.navigationItem, - style: { lineHeight: 1 } - }, - React__default.createElement( - 'a', - { - className: 'shell-py6 shell-txt-s shell-txt-bold ' + colorBasedClasses, - 'data-test': 'nav-menu-item-' + this.props.name, - href: this.props.href - }, - this.props.children - ) - ); - } - }]); - return NavigationItem; -}(React__default.Component); - -var MobileMenuButton = function (_React$Component) { - inherits(MobileMenuButton, _React$Component); - - function MobileMenuButton() { - classCallCheck(this, MobileMenuButton); - return possibleConstructorReturn(this, (MobileMenuButton.__proto__ || Object.getPrototypeOf(MobileMenuButton)).apply(this, arguments)); - } - - createClass(MobileMenuButton, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var extraMenuButtonClasses = void 0; - if (!this.props.darkText) { - extraMenuButtonClasses = 'shell-link shell-link--white'; - } else { - extraMenuButtonClasses = 'shell-color-blue'; - } - return React__default.createElement( - 'button', - { - id: 'mobile-nav-trigger-toggle', - 'aria-label': 'Toggle navigation', - className: extraMenuButtonClasses + ' shell-mr-neg6', - 'data-test': 'mobile-nav-trigger-toggle' - }, - React__default.createElement( - 'svg', - { - id: 'mobile-nav-trigger-menu', - viewBox: '0 0 18 18', - className: 'shell-mobile-nav__trigger shell-icon shell-transition shell-icon--l' - }, - React__default.createElement( - 'g', - null, - React__default.createElement('path', { - className: 'shell-mobile-nav__trigger__bar--top', - d: 'M4.2,6h9.6C14.5,6,15,5.6,15,5s-0.5-1-1.2-1H4.2C3.5,4,3,4.4,3,5S3.5,6,4.2,6z' - }), - React__default.createElement('path', { - className: 'shell-mobile-nav__trigger__bar--middle', - d: 'M13.8,8H4.2C3.5,8,3,8.4,3,9s0.5,1,1.2,1h9.6c0.7,0,1.2-0.4,1.2-1S14.5,8,13.8,8z' - }), - React__default.createElement('path', { - className: 'shell-mobile-nav__trigger__bar--bottom', - d: 'M13.8,12H4.2C3.5,12,3,12.4,3,13s0.5,1,1.2,1h9.6c0.7,0,1.2-0.4,1.2-1S14.5,12,13.8,12z' - }) - ) - ) - ); - } - }]); - return MobileMenuButton; -}(React__default.Component); - -MobileMenuButton.propTypes = { - darkText: PropTypes.bool -}; - -// This is currently used in the bottom half of the mobile navigation - -var NavigationDividedLinkList = function (_React$Component) { - inherits(NavigationDividedLinkList, _React$Component); - - function NavigationDividedLinkList() { - classCallCheck(this, NavigationDividedLinkList); - return possibleConstructorReturn(this, (NavigationDividedLinkList.__proto__ || Object.getPrototypeOf(NavigationDividedLinkList)).apply(this, arguments)); - } - - createClass(NavigationDividedLinkList, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - // Font size is larger for items with a heading in mobile - var linkFontSize = this.props.navigationType === 'mobile-navigation' ? 'shell-txt-m' : 'shell-txt-s'; - - // Calculate even column breaks - var firstColumnLength = Math.ceil(this.props.links.length / 2); - var firstColumnItems = this.props.links.slice(0, firstColumnLength).map(function (link, i) { - return React__default.createElement( - 'div', - { key: i, className: 'shell-mb0 shell-mt12' }, - React__default.createElement( - 'a', - { - href: link.to, - className: shellStyles.popoverNavLink + ' ' + linkFontSize, - 'data-nav-link': link.name, - 'data-test': 'mobile-nav-link-' + link.name - }, - link.name - ) - ); - }); - var secondColumnItems = this.props.links.slice(firstColumnLength).map(function (link, i) { - return React__default.createElement( - 'div', - { key: i, className: 'shell-mb0 shell-mt12' }, - React__default.createElement( - 'a', - { - href: link.to, - className: shellStyles.popoverNavLink + ' ' + linkFontSize, - 'data-nav-link': link.name, - 'data-test': 'mobile-nav-link-' + link.name - }, - link.name - ) - ); - }); - var items = React__default.createElement( - 'div', - { className: 'shell-grid shell-grid--gut12' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - firstColumnItems - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - secondColumnItems - ) - ); - - // Special case: the custom combination menu doesn't need a heading - var showNavHeading = this.props.name ? React__default.createElement( - 'div', - { className: shellStyles.popoverNavHeading }, - this.props.name - ) : ''; - return React__default.createElement( - 'div', - null, - showNavHeading, - items - ); - } - }]); - return NavigationDividedLinkList; -}(React__default.Component); - -NavigationDividedLinkList.propTypes = { - name: PropTypes.string, - navigationType: PropTypes.string.isRequired, - links: PropTypes.arrayOf(PropTypes.shape({ - to: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - description: PropTypes.string, - hideInHeader: PropTypes.bool - })).isRequired -}; - -// This is currently used in the top half of the mobile navigation - -var NavigationLinkList = function (_React$Component) { - inherits(NavigationLinkList, _React$Component); - - function NavigationLinkList() { - classCallCheck(this, NavigationLinkList); - return possibleConstructorReturn(this, (NavigationLinkList.__proto__ || Object.getPrototypeOf(NavigationLinkList)).apply(this, arguments)); - } - - createClass(NavigationLinkList, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var _this2 = this; - - // Font size is larger for items with a heading in mobile - var linkFontSize = this.props.title && this.props.navigationType === 'mobile-navigation' ? 'shell-txt-l' : 'shell-txt-m'; - - // Special case: the custom combination menu doesn't need a heading - var navigationHeading = this.props.title ? React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading }, - this.props.title - ) : ''; - - var linkListItems = React__default.createElement( - 'ul', - null, - this.props.links.map(function (link, i) { - if (link.hideInMobile) { - return; - } - return React__default.createElement( - 'li', - { key: i }, - React__default.createElement( - 'a', - { - href: link.to, - 'data-nav-link': true, - 'data-test': _this2.props.navigationType + '-link-' + link.name - }, - React__default.createElement( - 'p', - { - className: shellStyles.popoverNavLink + ' ' + linkFontSize + ' shell-mb0 shell-mt12' - }, - link.name - ) - ) - ); - }) - ); - - return React__default.createElement( - 'div', - { className: 'shell-pt24' }, - navigationHeading, - linkListItems - ); - } - }]); - return NavigationLinkList; -}(React__default.Component); - -NavigationLinkList.propTypes = { - title: PropTypes.string, - navigationType: PropTypes.string.isRequired, - links: PropTypes.arrayOf(PropTypes.shape({ - to: PropTypes.string.isRequired, - name: PropTypes.string.isRequired, - description: PropTypes.string, - hideInHeader: PropTypes.bool, - hideInMobile: PropTypes.bool - })).isRequired -}; - -var MobileUserMenu = function (_React$Component) { - inherits(MobileUserMenu, _React$Component); - - function MobileUserMenu() { - classCallCheck(this, MobileUserMenu); - return possibleConstructorReturn(this, (MobileUserMenu.__proto__ || Object.getPrototypeOf(MobileUserMenu)).apply(this, arguments)); - } - - createClass(MobileUserMenu, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - return React__default.createElement( - 'div', - null, - React__default.createElement( - 'div', - { - className: 'shell-border-t shell-border--gray-light shell-mb30 shell-pt30', - 'data-test': 'mobile-user-menu', - 'data-generic-navigation': true, - style: { display: 'none' } - }, - React__default.createElement( - 'div', - { className: 'shell-flex-child shell-flex-child--grow' }, - React__default.createElement( - 'div', - { className: 'shell-grid shell-grid--gut12' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - React__default.createElement( - 'a', - { - href: '/account/', - className: shellStyles.popoverNavLink + ' shell-txt-m shell-mb0' - }, - 'Account' - ) - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - React__default.createElement( - 'a', - { - href: '/studio/', - className: shellStyles.popoverNavLink + ' shell-txt-m shell-mb0' - }, - 'Studio' - ) - ) - ) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-bg-gray-faint shell-py24 shell-px24 shell-ml-neg24 shell-mr-neg24 shell-mb-neg24' }, - React__default.createElement( - 'div', - { 'data-display-block-authenticated': true }, - React__default.createElement( - 'div', - { className: 'shell-flex-parent shell-flex-parent--space-center-main shell-flex-parent--space-between-main' }, - React__default.createElement('div', { - 'data-user-name': true, - className: 'shell-flex-child shell-txt-s shell-color-gray' - }), - React__default.createElement( - 'div', - { className: 'shell-flex-child' }, - React__default.createElement( - 'button', - { - 'data-sign-out': true, - 'data-test': 'mobile-signout-button', - className: shellStyles.popoverNavLink + ' shell-txt-s shell-mb0' - }, - React__default.createElement( - 'div', - { className: 'shell-flex-parent shell-flex-parent--center-cross shell-txt-bold' }, - React__default.createElement( - 'svg', - { className: 'shell-icon shell-mr3', viewBox: '0 0 18 18' }, - React__default.createElement('path', { d: 'M4,4c0,0-1,0-1,1v8c0,1,1,1,1,1h4c0.6,0,1-0.4,1-1s-0.4-1-1-1H5V6h3c0.6,0,1-0.4,1-1S8.6,4,8,4H4z M11,5 c-0.3,0-0.5,0.1-0.7,0.3c-0.4,0.4-0.4,1,0,1.4L11.6,8H7C6.5,8,6,8.5,6,9s0.5,1,1,1h4.6l-1.3,1.3c-0.4,0.4-0.4,1,0,1.4s1,0.4,1.4,0 l2.8-2.9c0.2-0.2,0.4-0.5,0.4-0.9c0-0.3-0.2-0.6-0.4-0.9l-2.8-2.9C11.5,5.1,11.3,5,11,5L11,5z' }) - ), - React__default.createElement( - 'span', - { className: 'shell-flex-child' }, - 'Sign out' - ) - ) - ) - ) - ) - ), - React__default.createElement( - 'div', - { 'data-display-block-unauthenticated': true, style: { display: 'none' } }, - React__default.createElement( - 'a', - { - href: '/signin/', - className: shellStyles.popoverNavLink + ' shell-txt-m shell-w-full', - 'data-test': 'mobile-signin-button' - }, - React__default.createElement(NavigationHighlightLink, { label: 'Sign in' }) - ) - ) - ) - ); - } - }]); - return MobileUserMenu; -}(React__default.Component); - -MobileUserMenu.propTypes = { - className: PropTypes.string -}; - -var MOBILE_HEADER_HEIGHT = 72; // This number should match the actual height of the mobile header! - -var MobileNavigation = function (_React$Component) { - inherits(MobileNavigation, _React$Component); - - function MobileNavigation() { - classCallCheck(this, MobileNavigation); - return possibleConstructorReturn(this, (MobileNavigation.__proto__ || Object.getPrototypeOf(MobileNavigation)).apply(this, arguments)); - } - - createClass(MobileNavigation, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - var menuItemClasses = shellStyles.popoverNavLink + ' txt-l'; - - return React__default.createElement( - 'div', - { className: 'shell-mr-neg6 shell-flex-child shell-flex-parent shell-flex-parent--end-main shell-z1 shell-absolute shell-top shell-left shell-w-full' }, - React__default.createElement('div', { - id: 'mobile-nav-backdrop', - 'data-test': 'mobile-nav-backdrop', - className: 'shell-absolute shell-bottom shell-left shell-right shell-mobile-nav__backdrop', - style: { - top: MOBILE_HEADER_HEIGHT, - backgroundImage: 'linear-gradient(to bottom, transparent, rgba(31, 51, 73, .5))' - } - }), - React__default.createElement( - 'div', - { - id: 'mobile-nav-menu', - 'data-test': 'mobile-nav-menu', - className: shellStyles.mobilePopoverContainer + ' shell-w-full shell-animated-menu', - style: { - top: 0, - right: 0 - } - }, - React__default.createElement( - 'div', - { - className: 'shell-shadow-darken10-bold shell-bg-white shell-clip shell-px24', - style: { paddingTop: MOBILE_HEADER_HEIGHT } - }, - React__default.createElement( - 'div', - { className: 'shell-flex-parent--column', 'data-generic-navigation': true }, - React__default.createElement( - 'div', - { className: 'shell-grid shell-grid--gut12' }, - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - React__default.createElement(NavigationLinkList, _extends({}, navigationMenuData.headerMainMenus.products.products, { - navigationType: 'mobile-navigation' - })), - React__default.createElement(NavigationLinkList, _extends({}, navigationMenuData.headerMainMenus.products.platforms, { - navigationType: 'mobile-navigation' - })) - ), - React__default.createElement( - 'div', - { className: 'shell-col shell-col--6' }, - React__default.createElement(NavigationLinkList, _extends({}, navigationMenuData.headerMainMenus.solutions.industries, { - navigationType: 'mobile-navigation' - })) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-relative shell-mt30 shell-pt18 shell-pb30' }, - React__default.createElement('div', { className: 'shell-border-t shell-border--gray-light shell-absolute shell-top shell-left shell-right' }), - React__default.createElement(NavigationDividedLinkList, _extends({}, navigationMenuData.mobileCombinationMenu, { - navigationType: 'mobile-navigation' - })) - ) - ), - React__default.createElement( - 'div', - { - className: 'shell-flex-parent--column shell-mb24', - 'data-app-specific-navigation': true - }, - React__default.createElement( - 'a', - { href: '/studio/', className: menuItemClasses + ' shell-mb12' }, - 'Studio' - ), - React__default.createElement( - 'a', - { href: '/account/', className: menuItemClasses + ' shell-mb12' }, - 'Account' - ), - React__default.createElement( - 'a', - { - 'data-user-staff-mobile': true, - href: '/admin/', - className: 'shell-color-gray-dark shell-color-blue-on-hover txt-l shell-mb12', - style: { display: 'none' } - }, - 'Admin' - ), - React__default.createElement( - 'a', - { - href: '/account/settings/', - className: menuItemClasses + ' shell-mb12' - }, - 'Settings' - ), - React__default.createElement( - 'a', - { href: '/help/', className: menuItemClasses }, - 'Help' - ) - ), - React__default.createElement(MobileUserMenu, null) - ) - ) - ); - } - }]); - return MobileNavigation; -}(React__default.Component); - -var PageHeader = function (_React$Component) { - inherits(PageHeader, _React$Component); - - function PageHeader() { - classCallCheck(this, PageHeader); - return possibleConstructorReturn(this, (PageHeader.__proto__ || Object.getPrototypeOf(PageHeader)).apply(this, arguments)); - } - - createClass(PageHeader, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'getMenuID', - value: function getMenuID(menuName) { - return menuName.replace(/\s+/g, '').toLowerCase() + '-menu'; - } - }, { - key: 'getTriggerID', - value: function getTriggerID(menuID) { - return menuID + '-trigger'; - } - }, { - key: 'getPointerID', - value: function getPointerID(menuID) { - return menuID + '-pointer'; - } - }, { - key: 'renderIconReference', - value: function renderIconReference() { - // Reference shell specific icon for chevron-right - return React__default.createElement( - 'svg', - { - xmlns: 'http://www.w3.org/2000/svg', - xmlnsXlink: 'http://www.w3.org/1999/xlink', - className: 'shell-none' - }, - React__default.createElement( - 'symbol', - { id: 'shell-icon-chevron-right', viewBox: '0 0 18 18' }, - React__default.createElement('path', { d: 'M7.5 13.105a.806.806 0 0 1-.537-1.407l3.055-2.724-3.08-2.997a.806.806 0 1 1 1.124-1.155l3.7 3.6a.805.805 0 0 1-.025 1.18l-3.7 3.3a.803.803 0 0 1-.537.204z' }) - ) - ); - } - }, { - key: 'render', - value: function render() { - var logoClasses = 'shell-mb-logo'; - var logoOverlay = null; - if (!this.props.darkText) { - logoClasses += ' shell-mb-logo--white'; - // When we're rendering the white logo, we also need to render a blue logo to display - // when the mobile navigation opens. - logoOverlay = React__default.createElement('a', { - className: 'shell-mb-logo shell-mobile-nav__logo--overlay shell-absolute shell-top shell-left', - href: '/', - 'aria-label': 'Mapbox' - }); - } - - var headerClasses = 'relative'; - if (this.props.position === 'absolute') { - headerClasses = 'shell-absolute shell-w-full shell-z1'; - } - - return React__default.createElement( - 'header', - { className: headerClasses, 'data-swiftype-index': 'false' }, - React__default.createElement( - 'div', - { className: 'shell-none limiter shell-mt24 shell-flex-parent-mm shell-flex-parent--center-cross' }, - React__default.createElement('a', { - className: 'shell-flex-child shell-flex-child--no-shrink ' + logoClasses, - href: '/', - 'aria-label': 'Mapbox', - 'data-test': 'logo-link' - }), - React__default.createElement( - 'div', - { className: 'shell-flex-child shell-flex-child--grow shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--end-main' }, - React__default.createElement( - 'div', - { - className: 'shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--end-main', - 'data-app-specific-navigation': true, - 'data-test': 'app-specific-navigation', - style: { display: 'none' } - }, - React__default.createElement( - NavigationItem, - { - darkText: this.props.darkText, - href: '/studio/', - name: 'Studio' - }, - 'Studio' - ), - React__default.createElement( - NavigationItem, - { - darkText: this.props.darkText, - href: '/account/', - name: 'Account' - }, - 'Account' - ) - ), - React__default.createElement( - 'div', - { - className: 'shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--end-main', - 'data-generic-navigation': true, - 'data-test': 'generic-navigation', - style: { display: 'none' } - }, - React__default.createElement(ProductsMenu, { darkText: this.props.darkText }), - React__default.createElement(SolutionsMenu, { darkText: this.props.darkText }), - React__default.createElement(DocumentationMenu, { darkText: this.props.darkText }), - React__default.createElement(CompanyMenu, { darkText: this.props.darkText }), - React__default.createElement( - NavigationItem, - { - darkText: this.props.darkText, - href: '/pricing/', - name: 'Pricing' - }, - 'Pricing' - ), - React__default.createElement( - NavigationItem, - { - darkText: this.props.darkText, - href: '/blog/', - name: 'Blog' - }, - 'Blog' - ) - ) - ), - React__default.createElement( - 'div', - { className: 'shell-flex-child shell-ml6 shell-ml12-ml shell-ml18-mxl' }, - React__default.createElement(UserMenu, { darkText: this.props.darkText }) - ) - ), - React__default.createElement( - 'div', - { - id: 'page-header-content', - className: 'shell-none-mm limiter shell-py12 shell-flex-parent shell-flex-parent--center-cross shell-flex-parent--space-between-main shell-relative shell-z2' - }, - React__default.createElement( - 'div', - { className: 'shell-mb-logo__wrapper shell-flex-child shell-relative' }, - React__default.createElement('a', { - className: logoClasses, - href: '/', - 'aria-label': 'Mapbox', - 'data-test': 'mobile-logo-link' - }), - logoOverlay - ), - React__default.createElement(MobileMenuButton, { darkText: this.props.darkText }) - ), - React__default.createElement(MobileNavigation, null), - this.renderIconReference() - ); - } - }]); - return PageHeader; -}(React__default.Component); - -PageHeader.propTypes = { - darkText: PropTypes.bool, - position: PropTypes.oneOf(['absolute', 'static']) -}; - -PageHeader.defaultProps = { - darkText: false, - position: 'absolute' -}; - -var FooterLegalStrip = function (_React$Component) { - inherits(FooterLegalStrip, _React$Component); - - function FooterLegalStrip() { - classCallCheck(this, FooterLegalStrip); - return possibleConstructorReturn(this, (FooterLegalStrip.__proto__ || Object.getPrototypeOf(FooterLegalStrip)).apply(this, arguments)); - } - - createClass(FooterLegalStrip, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - return React__default.createElement( - 'div', - { className: this.props.className }, - React__default.createElement( - 'span', - { className: 'shell-mr18' }, - '\xA9 Mapbox' - ), - React__default.createElement( - 'a', - { - className: 'shell-link shell-color-darken50 shell-color-blue-on-hover shell-mr18', - href: '/tos/' - }, - 'Terms' - ), - React__default.createElement( - 'a', - { - className: 'shell-link shell-color-darken50 shell-color-blue-on-hover shell-mr18', - href: '/privacy/' - }, - 'Privacy' - ), - React__default.createElement( - 'a', - { - className: 'shell-link shell-color-darken50 shell-color-blue-on-hover', - href: '/platform/security/' - }, - 'Security' - ) - ); - } - }]); - return FooterLegalStrip; -}(React__default.Component); - -FooterLegalStrip.propTypes = { - className: PropTypes.string -}; - -var FooterSocialMediaStrip = function (_React$Component) { - inherits(FooterSocialMediaStrip, _React$Component); - - function FooterSocialMediaStrip() { - classCallCheck(this, FooterSocialMediaStrip); - return possibleConstructorReturn(this, (FooterSocialMediaStrip.__proto__ || Object.getPrototypeOf(FooterSocialMediaStrip)).apply(this, arguments)); - } - - createClass(FooterSocialMediaStrip, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'render', - value: function render() { - return React__default.createElement( - 'div', - { className: this.props.className }, - React__default.createElement( - 'a', - { - 'aria-label': 'Github', - className: 'shell-color-blue shell-color-gray-dark-on-hover', - href: 'https://github.com/mapbox' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 1790 1790', - className: 'shell-mr18 shell-icon shell-icon--s shell-inline' - }, - React__default.createElement('path', { d: 'M704 1216q0 40-12.5 82t-43 76-72.5 34-72.5-34-43-76-12.5-82 12.5-82 43-76 72.5-34 72.5 34 43 76 12.5 82zm640 0q0 40-12.5 82t-43 76-72.5 34-72.5-34-43-76-12.5-82 12.5-82 43-76 72.5-34 72.5 34 43 76 12.5 82zm160 0q0-120-69-204t-187-84q-41 0-195 21-71 11-157 11t-157-11q-152-21-195-21-118 0-187 84t-69 204q0 88 32 153.5t81 103 122 60 140 29.5 149 7h168q82 0 149-7t140-29.5 122-60 81-103 32-153.5zm224-176q0 207-61 331-38 77-105.5 133t-141 86-170 47.5-171.5 22-167 4.5q-78 0-142-3t-147.5-12.5-152.5-30-137-51.5-121-81-86-115q-62-123-62-331 0-237 136-396-27-82-27-170 0-116 51-218 108 0 190 39.5t189 123.5q147-35 309-35 148 0 280 32 105-82 187-121t189-39q51 102 51 218 0 87-27 168 136 160 136 398z' }) - ) - ), - React__default.createElement( - 'a', - { - 'aria-label': 'Twitter', - className: 'shell-color-blue shell-color-gray-dark-on-hover ', - href: 'https://twitter.com/mapbox/' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 50 50', - className: 'shell-mr18 shell-icon shell-icon--s shell-inline' - }, - React__default.createElement( - 'g', - { id: '77744030-a5d8-4d71-88ad-2c70d4dcad7b', 'data-name': 'svg' }, - React__default.createElement('path', { d: 'M15.72,45.31c18.87,0,29.19-15.63,29.19-29.19,0-.44,0-.89,0-1.33A20.87,20.87,0,0,0,50,9.49a20.48,20.48,0,0,1-5.89,1.61,10.29,10.29,0,0,0,4.51-5.67A20.56,20.56,0,0,1,42.1,7.92a10.27,10.27,0,0,0-17.48,9.36A29.12,29.12,0,0,1,3.48,6.56,10.27,10.27,0,0,0,6.66,20.25,10.18,10.18,0,0,1,2,19v.13a10.26,10.26,0,0,0,8.23,10.06,10.24,10.24,0,0,1-4.63.18,10.27,10.27,0,0,0,9.58,7.12,20.58,20.58,0,0,1-12.74,4.4A20.88,20.88,0,0,1,0,40.71a29,29,0,0,0,15.72,4.6' }) - ) - ) - ), - React__default.createElement( - 'a', - { - 'aria-label': 'LinkedIn', - className: 'shell-color-blue shell-color-gray-dark-on-hover', - href: 'https://www.linkedin.com/company/mapbox' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 50 50', - className: 'shell-mr18 shell-icon shell-icon--s shell-inline' - }, - React__default.createElement( - 'g', - { id: '875e301f-501b-48d2-a663-a3a855ad9d70', 'data-name': 'svg' }, - React__default.createElement('rect', { x: '1.32', y: '13.16', width: '10.53', height: '36.84' }), - React__default.createElement('path', { d: 'M36.84,13.16c-7.34,0-8.61,2.68-9.21,5.26V13.16H17.11V50H27.63V28.95c0-3.41,1.85-5.26,5.26-5.26s5.26,1.81,5.26,5.26V50H48.68V31.58C48.68,21.05,47.31,13.16,36.84,13.16Z' }), - React__default.createElement('circle', { cx: '6.58', cy: '5.26', r: '5.26' }) - ) - ) - ), - React__default.createElement( - 'a', - { - 'aria-label': 'Facebook', - className: 'shell-color-blue shell-color-gray-dark-on-hover', - href: 'https://www.facebook.com/Mapbox' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 50 50', - className: 'shell-mr18 shell-icon shell-icon--s shell-inline' - }, - React__default.createElement( - 'g', - { id: '38f48a9c-03c5-4a1e-8aed-38100e1cd6a4', 'data-name': 'svg' }, - React__default.createElement('path', { - id: 'c5d5da0e-6004-406b-ad77-825ffd134c21', - 'data-name': 'f', - d: 'M28.87,50V27.19h7.65l1.15-8.89h-8.8V12.63c0-2.57.71-4.33,4.41-4.33H38v-8A63.78,63.78,0,0,0,31.13,0C24.34,0,19.69,4.14,19.69,11.75V18.3H12v8.89h7.68V50Z' - }) - ) - ) - ), - React__default.createElement( - 'a', - { - 'aria-label': 'Dribbble', - className: 'shell-color-blue shell-color-gray-dark-on-hover', - href: 'https://dribbble.com/mapbox' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 216 216', - className: 'shell-mr18 shell-icon shell-icon--s shell-inline' - }, - React__default.createElement( - 'g', - { id: 'bce6e84c-15aa-4744-93d1-a9e4a673398a', 'data-name': 'ball' }, - React__default.createElement( - 'g', - { id: '99079e24-a239-40f3-bf61-84ebc8f0b2ce', 'data-name': 'ball' }, - React__default.createElement('path', { d: 'M108,15.78a92.16,92.16,0,1,0,92.16,92.16A92.27,92.27,0,0,0,108,15.78ZM169,58.28a78.31,78.31,0,0,1,17.78,49c-2.6-.55-28.62-5.83-54.81-2.54-.55-1.35-1.12-2.7-1.7-4.06-1.63-3.84-3.39-7.65-5.22-11.4C154.1,77.44,167.29,60.53,169,58.28ZM108,29.34A78.41,78.41,0,0,1,160.2,49.18c-1.41,2-13.26,17.94-41.25,28.43A421.91,421.91,0,0,0,89.58,31.53,79,79,0,0,1,108,29.34ZM74.56,36.82a503.63,503.63,0,0,1,29.18,45.53A293.82,293.82,0,0,1,31,91.94,79,79,0,0,1,74.56,36.82ZM29.31,108.06c0-.8,0-1.61,0-2.41,3.44.08,41.59.57,80.9-11.2,2.25,4.41,4.4,8.89,6.38,13.36-1,.29-2.08.61-3.1.94-40.6,13.12-62.2,48.89-64,51.94A78.39,78.39,0,0,1,29.31,108.06ZM108,186.78a78.29,78.29,0,0,1-48.31-16.62c1.41-2.9,17.35-33.69,61.75-49.16l.52-.17a326.92,326.92,0,0,1,16.79,59.69A78.19,78.19,0,0,1,108,186.78Zm44-13.47a338.31,338.31,0,0,0-15.29-56.12c24.67-4,46.34,2.51,49,3.36A78.84,78.84,0,0,1,152,173.31Z' }) - ) - ) - ) - ), - React__default.createElement( - 'a', - { - 'aria-label': 'Instagram', - className: 'shell-color-blue shell-color-gray-dark-on-hover', - href: 'https://www.instagram.com/Mapbox' - }, - React__default.createElement( - 'svg', - { - viewBox: '0 0 50 50', - className: 'shell-icon shell-icon--s shell-inline' - }, - React__default.createElement( - 'g', - { id: 'fb2f6c01-da64-4dee-86ea-29fec95d4f45', 'data-name': 'svg' }, - React__default.createElement('path', { d: 'M25,0c-6.79,0-7.64,0-10.31.15A18.35,18.35,0,0,0,8.62,1.31,12.25,12.25,0,0,0,4.2,4.2,12.25,12.25,0,0,0,1.31,8.62,18.35,18.35,0,0,0,.15,14.69C0,17.36,0,18.21,0,25s0,7.64.15,10.31a18.35,18.35,0,0,0,1.16,6.07A12.26,12.26,0,0,0,4.2,45.8a12.25,12.25,0,0,0,4.43,2.88,18.35,18.35,0,0,0,6.07,1.16C17.36,50,18.21,50,25,50s7.64,0,10.31-.15a18.35,18.35,0,0,0,6.07-1.16,12.78,12.78,0,0,0,7.31-7.31,18.35,18.35,0,0,0,1.16-6.07C50,32.64,50,31.79,50,25s0-7.64-.15-10.31a18.35,18.35,0,0,0-1.16-6.07A12.25,12.25,0,0,0,45.8,4.2a12.26,12.26,0,0,0-4.43-2.88A18.35,18.35,0,0,0,35.31.15C32.64,0,31.79,0,25,0Zm0,4.5c6.68,0,7.47,0,10.1.15a13.83,13.83,0,0,1,4.64.86,7.75,7.75,0,0,1,2.87,1.87,7.75,7.75,0,0,1,1.87,2.87,13.83,13.83,0,0,1,.86,4.64c.12,2.64.15,3.43.15,10.1s0,7.47-.15,10.1a13.83,13.83,0,0,1-.86,4.64,8.28,8.28,0,0,1-4.74,4.74,13.83,13.83,0,0,1-4.64.86c-2.64.12-3.43.15-10.1.15s-7.47,0-10.1-.15a13.83,13.83,0,0,1-4.64-.86,7.74,7.74,0,0,1-2.87-1.87,7.75,7.75,0,0,1-1.87-2.87,13.83,13.83,0,0,1-.86-4.64C4.53,32.47,4.5,31.68,4.5,25s0-7.47.15-10.1a13.83,13.83,0,0,1,.86-4.64A7.75,7.75,0,0,1,7.38,7.38a7.75,7.75,0,0,1,2.87-1.87,13.83,13.83,0,0,1,4.64-.86c2.64-.12,3.43-.15,10.1-.15' }), - React__default.createElement('path', { d: 'M25,33.33A8.33,8.33,0,1,1,33.33,25,8.33,8.33,0,0,1,25,33.33Zm0-21.17A12.84,12.84,0,1,0,37.84,25,12.84,12.84,0,0,0,25,12.16Z' }), - React__default.createElement('path', { d: 'M41.35,11.65a3,3,0,1,1-3-3,3,3,0,0,1,3,3Z' }) - ) - ) - ) - ); - } - }]); - return FooterSocialMediaStrip; -}(React__default.Component); - -FooterSocialMediaStrip.propTypes = { - className: PropTypes.string -}; - -var PageFooter = function (_Component) { - inherits(PageFooter, _Component); - - function PageFooter() { - classCallCheck(this, PageFooter); - return possibleConstructorReturn(this, (PageFooter.__proto__ || Object.getPrototypeOf(PageFooter)).apply(this, arguments)); - } - - createClass(PageFooter, [{ - key: 'shouldComponentUpdate', - value: function shouldComponentUpdate() { - return false; - } - }, { - key: 'renderLogo', - value: function renderLogo() { - return React__default.createElement( - 'div', - { className: 'shell-footer-column shell-col shell-col--6 shell-flex-child shell-mt24 shell-mt0-mm shell-none shell-block-ml' }, - React__default.createElement('a', { - className: 'shell-mb-logo-m', - href: '/', - 'aria-label': 'Mapbox', - 'data-test': 'logo-link' - }) - ); - } - }, { - key: 'renderMenuLinkList', - value: function renderMenuLinkList(menuData) { - if (!menuData.links || menuData.links.length === 0) return null; - return menuData.links.map(function (link, index) { - if (link.hideInFooter) return; - return React__default.createElement( - 'div', - { className: 'shell-block', key: index }, - React__default.createElement( - 'a', - { - href: link.to, - className: 'shell-txt-s shell-color-gray-dark shell-color-blue-on-hover' - }, - link.name - ) - ); - }); - } - }, { - key: 'renderMenuHighlightedLinkList', - value: function renderMenuHighlightedLinkList(menuData) { - if (!menuData.highlightedLinks || menuData.highlightedLinks.length === 0) return null; - var firstVisibleHighlightedLink = false; - return menuData.highlightedLinks.map(function (link, index) { - if (link.hideInFooter) return; - if (!firstVisibleHighlightedLink) { - firstVisibleHighlightedLink = true; - return React__default.createElement( - 'div', - { className: 'shell-block shell-mt24', key: index }, - React__default.createElement( - 'div', - { className: 'shell-inline shell-pt12 shell-border-t shell-border--gray-light' }, - React__default.createElement( - 'a', - { - className: 'shell-txt-s shell-color-gray-dark shell-color-blue-on-hover', - href: link.to - }, - link.name - ) - ) - ); - } - return React__default.createElement( - 'div', - { className: 'shell-inline-block shell-mt6', key: index }, - React__default.createElement( - 'a', - { - className: 'shell-txt-s shell-color-gray-dark shell-color-blue-on-hover', - href: link.to - }, - link.name - ) - ); - }); - } - }, { - key: 'renderMenus', - value: function renderMenus() { - var _this2 = this; - - var footerColumnItemsIds = ['productsMenu', 'useCaseMenu', 'resourcesMenu', 'companyMenu']; - return footerColumnItemsIds.map(function (columnId, index) { - var columnClasses = 'shell-footer-column shell-col shell-col--6 shell-flex-child shell-mt24 shell-mt0-mm'; - if (index === footerColumnItemsIds.length - 1) columnClasses += ' mb0-mm mb24'; - var columnData = columnId in navigationMenuData.headerMainMenus ? navigationMenuData.headerMainMenus[columnId] : navigationMenuData[columnId]; - return React__default.createElement( - 'div', - { key: index, className: columnClasses }, - React__default.createElement( - 'div', - { className: shellStyles.popupMenuNavHeading + ' shell-mb3' }, - columnData.name - ), - _this2.renderMenuLinkList(columnData), - _this2.renderMenuHighlightedLinkList(columnData) - ); - }); - } - }, { - key: 'renderLegalAndSocialMedia', - value: function renderLegalAndSocialMedia() { - return React__default.createElement( - 'div', - { - id: 'page-footer-legal-social', - className: 'shell-grid shell-txt-s shell-color-darken50 shell-py12 shell-py0-ml shell-mt42-ml' - }, - React__default.createElement(FooterLegalStrip, { className: 'shell-col shell-col--12 shell-col--6-mm shell-my12' }), - React__default.createElement(FooterSocialMediaStrip, { className: 'shell-col shell-col--12 shell-col--6-mm shell-my12 shell-footer-fr' }) - ); - } - }, { - key: 'render', - value: function render() { - return React__default.createElement( - 'footer', - { - id: 'page-footer', - className: 'shell-py12 shell-py48-ml', - 'data-swiftype-index': 'false' - }, - React__default.createElement( - 'div', - { className: 'limiter' }, - React__default.createElement( - 'div', - { - id: 'page-footer-nav', - className: 'shell-grid shell-mt24 shell-flex-parent-mm shell-flex-parent--space-between-main-mm' - }, - this.renderLogo(), - this.renderMenus() - ), - this.renderLegalAndSocialMedia() - ) - ); - } - }]); - return PageFooter; -}(React.Component); - -var DEFAULT_SOCIAL_IMAGE_URL = 'https://www.mapbox.com/static/social-media/social-1200x630.png'; -var DEFAULT_SOCIAL_IMAGE_THUMBNAIL_URL = 'https://www.mapbox.com/static/social-media/social-120x120.png'; - -var MetaTagger = function (_React$PureComponent) { - inherits(MetaTagger, _React$PureComponent); - - function MetaTagger() { - classCallCheck(this, MetaTagger); - return possibleConstructorReturn(this, (MetaTagger.__proto__ || Object.getPrototypeOf(MetaTagger)).apply(this, arguments)); - } - - createClass(MetaTagger, [{ - key: 'render', - value: function render() { - var props = this.props; - - var suffixedTitle = /^Mapbox/.test(props.title) ? props.title : props.title + ' | Mapbox'; - var preppedDescription = props.description.replace(/\s+/g, ' '); - var prodUrl = 'https://www.mapbox.com'; - if (props.pathname[0] !== '/') prodUrl += '/'; - prodUrl += props.pathname; - - var metaItems = [{ name: 'description', content: preppedDescription }]; - - metaItems.push({ name: 'twitter:title', content: props.title }, { property: 'og:title', content: props.title }, { name: 'twitter:description', content: preppedDescription }, { property: 'og:description', content: preppedDescription }, { property: 'og:url', content: prodUrl }, { property: 'og:type', content: 'website' }, { - class: 'swiftype', - name: 'title', - 'data-type': 'string', - content: props.title - }, { - class: 'swiftype', - name: 'excerpt', - 'data-type': 'string', - content: props.description - }, { name: 'twitter:image:alt', content: props.imageAlt }, { property: 'og:image', content: props.imageUrl }, { - class: 'swiftype', - name: 'image', - 'data-type': 'enum', - content: props.imageUrl - }, - // https://developers.google.com/web/updates/2014/11/Support-for-theme-color-in-Chrome-39-for-Android - { name: 'theme-color', content: '#4264fb' }); - - if (props.largeImage) { - metaItems.push({ name: 'twitter:card', content: 'summary_large_image' }, { name: 'twitter:image', content: props.imageUrl }); - } else { - metaItems.push({ name: 'twitter:card', content: 'summary' }, { name: 'twitter:image', content: props.imageUrlThumbnail }); - } - - return React__default.createElement(Helmet__default, { title: suffixedTitle, meta: metaItems }); - } - }]); - return MetaTagger; -}(React__default.PureComponent); - -MetaTagger.propTypes = { - title: PropTypes.string.isRequired, - description: PropTypes.string.isRequired, - pathname: PropTypes.string.isRequired, - imageUrl: PropTypes.string, - imageUrlThumbnail: PropTypes.string, - imageAlt: PropTypes.string, - largeImage: PropTypes.bool -}; - -MetaTagger.defaultProps = { - imageUrl: DEFAULT_SOCIAL_IMAGE_URL, - imageUrlThumbnail: DEFAULT_SOCIAL_IMAGE_THUMBNAIL_URL, - imageAlt: 'Mapbox', - largeImage: true -}; - -/* globals MapboxPageShell */ -var pageShellInitialized = false; -var lastUrl = void 0; - -var ReactPageShell = function (_React$Component) { - inherits(ReactPageShell, _React$Component); - - function ReactPageShell() { - classCallCheck(this, ReactPageShell); - return possibleConstructorReturn(this, (ReactPageShell.__proto__ || Object.getPrototypeOf(ReactPageShell)).apply(this, arguments)); - } - - createClass(ReactPageShell, [{ - key: 'componentDidMount', - value: function componentDidMount() { - if (!window.MapboxPageShell) throw new Error('MapboxPageShell not loaded'); - - if (!pageShellInitialized) { - this.initialize(); - } else { - MapboxPageShell.initialize(); - } - } - }, { - key: 'componentDidUpdate', - value: function componentDidUpdate() { - // Avoid reinitializing if we're actually on the same page. - var currentUrl = window.location.href; - if (currentUrl === lastUrl) return; - lastUrl = currentUrl; - MapboxPageShell.initialize(); - } - }, { - key: 'componentWillUnmount', - value: function componentWillUnmount() { - MapboxPageShell.removeNavigation(); - } - }, { - key: 'initialize', - value: function initialize() { - var _this2 = this; - - // On the dev-server, navigation elements weren't mounted when - // MapboxPageShell first initialized the nav. - MapboxPageShell.initialize(); - MapboxPageShell.afterUserCheck(function () { - if (_this2.props.onUser) { - _this2.props.onUser(MapboxPageShell.getUser(), MapboxPageShell.getUserPublicAccessToken()); - } - }); - pageShellInitialized = true; - } - }, { - key: 'render', - value: function render() { - var footer = void 0; - if (this.props.includeFooter) { - footer = React__default.createElement(PageFooter, null); - } - - var nonFooterClasses = 'shell-flex-child shell-flex-child--grow'; - if (this.props.nonFooterBgClass) { - nonFooterClasses += ' ' + this.props.nonFooterBgClass; - } - - var header = void 0; - if (this.props.includeHeader) { - header = React__default.createElement(PageHeader, { darkText: this.props.darkHeaderText }); - } - - return React__default.createElement( - 'div', - null, - React__default.createElement(BrowserCompatibilityWarning, null), - React__default.createElement( - 'div', - { - id: 'page-shell', - className: 'shell-flex-parent shell-flex-parent--column', - style: { minHeight: '100vh', overflowX: 'hidden' } - }, - React__default.createElement(PageHelmet, null), - React__default.createElement(MetaTagger, this.props.meta), - React__default.createElement( - 'div', - { className: nonFooterClasses }, - React__default.createElement( - 'div', - { className: 'shell-wrapper' }, - header - ), - React__default.createElement( - 'main', - { style: { zIndex: 0, position: 'relative', display: 'block' } }, - this.props.children - ) - ), - React__default.createElement( - 'div', - { className: 'shell-flex-child shell-wrapper' }, - footer - ) - ) - ); - } - }]); - return ReactPageShell; -}(React__default.Component); - -ReactPageShell.propTypes = { - meta: PropTypes.shape({ - title: PropTypes.string.isRequired, - description: PropTypes.string.isRequired, - pathname: PropTypes.string - }).isRequired, - onUser: PropTypes.func, - darkHeaderText: PropTypes.bool, - includeHeader: PropTypes.bool, - includeFooter: PropTypes.bool, - children: PropTypes.node, - nonFooterBgClass: PropTypes.string -}; - -ReactPageShell.defaultProps = { - darkHeaderText: false, - includeHeader: true, - includeFooter: true -}; - -module.exports = ReactPageShell; From 1fd98258530acee0ee62e1fc05e0cc4ab33820bc Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Wed, 9 Jan 2019 21:30:59 +1100 Subject: [PATCH 109/115] add mapbox-gl-utils to plugins (#7752) --- docs/pages/plugins.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/pages/plugins.js b/docs/pages/plugins.js index e069d009b00..67aa79eee23 100644 --- a/docs/pages/plugins.js +++ b/docs/pages/plugins.js @@ -138,6 +138,10 @@ const plugins = { "mapbox-choropleth": { "website": "https://github.com/stevage/mapbox-choropleth", "description": "create a choropleth layer from a CSV source and a geometry source" + }, + "mapbox-gl-utils": { + "website": "https://github.com/stevage/mapbox-gl-utils", + "description": "manage layers, sources and properties with syntactic sugar and convenience functions" } }, "Development Tools": { From b22d24fa01d7c8c592553c9c45e2b3ef1e2796c2 Mon Sep 17 00:00:00 2001 From: Heather Stenson Date: Thu, 10 Jan 2019 12:10:44 -0800 Subject: [PATCH 110/115] updates API docs links to new url structure (#7757) --- docs/components/quickstart.js | 2 +- docs/pages/example/marker-from-geocode.js | 2 +- src/ui/map.js | 2 +- src/util/ajax.js | 2 +- src/util/mapbox.js | 2 +- test/unit/util/ajax.test.js | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/docs/components/quickstart.js b/docs/components/quickstart.js index 53ff0d5057f..15bfaa98d5e 100644 --- a/docs/components/quickstart.js +++ b/docs/components/quickstart.js @@ -116,7 +116,7 @@ export default class extends React.Component {

To get started, you need to obtain an access token and a style URL. You can choose from one of our professionally designed styles or create + href='https://www.mapbox.com/api-documentation/maps/#styles'>professionally designed styles or create your own using Mapbox Studio.
diff --git a/docs/pages/example/marker-from-geocode.js b/docs/pages/example/marker-from-geocode.js index b11ca3deb10..5acb299356f 100644 --- a/docs/pages/example/marker-from-geocode.js +++ b/docs/pages/example/marker-from-geocode.js @@ -1,6 +1,6 @@ /*--- title: Add a marker using a place name -description: Add a [`Marker`](/mapbox-gl-js/api#marker) using a place name or address for its location using the [forward geocoder](https://www.mapbox.com/api-documentation/#geocoding) +description: Add a [`Marker`](/mapbox-gl-js/api#marker) using a place name or address for its location using the [forward geocoder](https://www.mapbox.com/api-documentation/search/#geocoding) tags: - controls-and-overlays pathname: /mapbox-gl-js/example/marker-from-geocode/ diff --git a/src/ui/map.js b/src/ui/map.js index 1c0e7d3af40..a50a5c138c4 100755 --- a/src/ui/map.js +++ b/src/ui/map.js @@ -167,7 +167,7 @@ const defaultOptions = { * * `mapbox://styles/mapbox/navigation-guidance-night-v2` * * Tilesets hosted with Mapbox can be style-optimized if you append `?optimize=true` to the end of your style URL, like `mapbox://styles/mapbox/streets-v9?optimize=true`. - * Learn more about style-optimized vector tiles in our [API documentation](https://www.mapbox.com/api-documentation/#retrieve-tiles). + * Learn more about style-optimized vector tiles in our [API documentation](https://www.mapbox.com/api-documentation/maps/#retrieve-tiles). * * @param {boolean} [options.hash=false] If `true`, the map's position (zoom, center latitude, center longitude, bearing, and pitch) will be synced with the hash fragment of the page's URL. * For example, `http://path/to/my/page.html#2.59/39.26/53.07/-24.1/60`. diff --git a/src/util/ajax.js b/src/util/ajax.js index 98c4ea6b931..f3caf20ae54 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.js @@ -55,7 +55,7 @@ class AJAXError extends Error { url: string; constructor(message: string, status: number, url: string) { if (status === 401 && isMapboxHTTPURL(url)) { - message += ': you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens'; + message += ': you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes'; } super(message); this.status = status; diff --git a/src/util/mapbox.js b/src/util/mapbox.js index 14b75347a4a..029bdc9d9d1 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.js @@ -13,7 +13,7 @@ import type { RequestParameters } from './ajax'; import type { Cancelable } from '../types/cancelable'; import type {TileJSON} from '../types/tilejson'; -const help = 'See https://www.mapbox.com/api-documentation/#access-tokens'; +const help = 'See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes'; const telemEventKey = 'mapbox.eventData'; type UrlObject = {| diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index 97c6f1ff2b6..8dad6a45b3c 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -83,7 +83,7 @@ test('ajax', (t) => { }); getJSON({ url:'api.mapbox.com' }, (error) => { t.equal(error.status, 401); - t.equal(error.message, "Unauthorized: you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens"); + t.equal(error.message, "Unauthorized: you may have provided an invalid Mapbox access token. See https://www.mapbox.com/api-documentation/#access-tokens-and-token-scopes"); t.end(); }); window.server.respond(); From 865564f7f57dfb21d90941992b80faa2049f02ad Mon Sep 17 00:00:00 2001 From: Katy DeCorah Date: Thu, 10 Jan 2019 15:50:33 -0500 Subject: [PATCH 111/115] [docs] Update page shell (#7760) --- vendor/docs-page-shell/react-page-shell.js | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/vendor/docs-page-shell/react-page-shell.js b/vendor/docs-page-shell/react-page-shell.js index 8b9ca59ffff..5b0afb048a6 100644 --- a/vendor/docs-page-shell/react-page-shell.js +++ b/vendor/docs-page-shell/react-page-shell.js @@ -283,7 +283,7 @@ var nonMobile = { to: '/vector-tiles/' }, { name: 'Maps APIs', - to: '/api-documentation/#maps' + to: '/api-documentation/maps/' }] }, navigation: { @@ -299,13 +299,13 @@ var nonMobile = { }, links: [{ name: 'Directions APIs', - to: '/api-documentation/#directions' + to: '/api-documentation/navigation/' }] }, search: { links: [{ name: 'Geocoding API', - to: '/api-documentation/#geocoding' + to: '/api-documentation/search/' }] }, help: { @@ -973,7 +973,6 @@ MetaTagger.defaultProps = { largeImage: true }; -var pageShellInitialized = false; var lastUrl; var ReactPageShell = @@ -991,12 +990,7 @@ function (_React$Component) { key: "componentDidMount", value: function componentDidMount() { if (!window.MapboxPageShell) throw new Error('MapboxPageShell not loaded'); - - if (!pageShellInitialized) { - this.initialize(); - } else { - MapboxPageShell.initialize(); - } + this.initialize(); } }, { key: "componentDidUpdate", @@ -1025,7 +1019,6 @@ function (_React$Component) { MapboxPageShell.loadUserMenu({ dark: _this.props.darkHeaderText }); - pageShellInitialized = true; }); } }, { From 1b058ae681531ca845ba6cffa271e19dcd71414e Mon Sep 17 00:00:00 2001 From: David Clark Date: Wed, 16 Jan 2019 15:14:33 -0700 Subject: [PATCH 112/115] First shot at new-domain staging --- .publisher.yml | 1 + batfish.config.js | 2 +- docs/components/page_shell.js | 2 + vendor/docs-page-shell/page-shell-script.js | 2 +- vendor/docs-page-shell/react-page-shell.js | 43 +++++++++++---------- 5 files changed, 27 insertions(+), 23 deletions(-) create mode 100644 .publisher.yml diff --git a/.publisher.yml b/.publisher.yml new file mode 100644 index 00000000000..0a5cede3610 --- /dev/null +++ b/.publisher.yml @@ -0,0 +1 @@ +subdomain: docs diff --git a/batfish.config.js b/batfish.config.js index 2fa1932b4fa..f287119eedf 100644 --- a/batfish.config.js +++ b/batfish.config.js @@ -4,7 +4,7 @@ const path = require('path'); module.exports = () => { const config = { siteBasePath: '/mapbox-gl-js', - siteOrigin: 'https://www.mapbox.com', + siteOrigin: 'https://docs.mapbox.com', pagesDirectory: `${__dirname}/docs/pages`, outputDirectory: path.join(__dirname, '_site'), stylesheets: [ diff --git a/docs/components/page_shell.js b/docs/components/page_shell.js index 0146dd74467..55187722092 100644 --- a/docs/components/page_shell.js +++ b/docs/components/page_shell.js @@ -1,5 +1,6 @@ import React from 'react'; import Helmet from 'react-helmet'; +import {prefixUrlAbsolute} from '@mapbox/batfish/modules/prefix-url'; import ReactPageShell from '../../vendor/docs-page-shell/react-page-shell.js'; // initialize analytics @@ -25,6 +26,7 @@ class PageShell extends React.Component { +
diff --git a/vendor/docs-page-shell/page-shell-script.js b/vendor/docs-page-shell/page-shell-script.js index e2bc3ed91f9..d77353feb0c 100644 --- a/vendor/docs-page-shell/page-shell-script.js +++ b/vendor/docs-page-shell/page-shell-script.js @@ -1,2 +1,2 @@ /*eslint-disable*/ -!function(){"use strict";var S,t="https://www.mapbox.com",i="https://122e4e-mapbox.global.ssl.fastly.net",s=640,L=[];function x(e){var t=e.triggerEl,n=e.pointerEl,o=e.onCrossMobileThreshhold,i=e.menuBodyContainerEl,a=e.menuBodyEl,r=e||B,c=function(){window.matchMedia("(min-width: ".concat(s,"px)")).matches?r({pointerEl:n,triggerEl:t,menuBodyContainerEl:i,menuBodyEl:a}):o&&o()};L.push(c),window.addEventListener("resize",c)}function B(e){var t=e.pointerEl,n=e.triggerEl.getBoundingClientRect();t.style.left=Math.round(n.left+n.width/2)+"px"}var a,r,I,M=function(o,i,a){var r,c,s,l,t=!1,u=!1,n={},d=0,m=0,v={sensitivity:7,interval:100,timeout:0,handleFocus:!1};function f(e){r=e.clientX,c=e.clientY}function e(e){return t=!0,m&&(m=clearTimeout(m)),o.removeEventListener("mousemove",f,!1),1!==d&&(s=e.clientX,l=e.clientY,o.addEventListener("mousemove",f,!1),m=setTimeout(function(){!function e(t,n){if(m&&(m=clearTimeout(m)),Math.abs(s-r)+Math.abs(l-c) Date: Thu, 17 Jan 2019 15:33:57 -0700 Subject: [PATCH 113/115] Bump Publisher From 0a5b8a5702f0e0d741610ee82880b6476615148e Mon Sep 17 00:00:00 2001 From: Katy DeCorah Date: Fri, 18 Jan 2019 15:34:55 -0500 Subject: [PATCH 114/115] [docs] use docs subdomain in examples (#7789) --- docs/pages/example/3d-extrusion-floorplan.html | 4 ++-- docs/pages/example/animate-images.html | 2 +- docs/pages/example/change-case-of-labels.html | 2 +- docs/pages/example/cluster.html | 4 ++-- docs/pages/example/data-driven-circle-colors.html | 2 +- docs/pages/example/data-driven-lines.html | 2 +- docs/pages/example/heatmap-layer.html | 2 +- docs/pages/example/hover-styles.html | 2 +- docs/pages/example/image-on-a-map.html | 2 +- docs/pages/example/live-update-feature.html | 2 +- docs/pages/example/restrict-bounds.js | 2 +- docs/pages/example/set-popup.html | 2 +- docs/pages/example/timeline-animation.html | 2 +- docs/pages/example/visualize-population-density.html | 2 +- docs/pages/plugins.js | 2 +- docs/pages/style-spec.js | 4 ++-- 16 files changed, 19 insertions(+), 19 deletions(-) diff --git a/docs/pages/example/3d-extrusion-floorplan.html b/docs/pages/example/3d-extrusion-floorplan.html index dcb96eeeec5..40e13c40649 100644 --- a/docs/pages/example/3d-extrusion-floorplan.html +++ b/docs/pages/example/3d-extrusion-floorplan.html @@ -17,11 +17,11 @@ // GeoJSON Data source used in vector tiles, documented at // https://gist.github.com/ryanbaumann/a7d970386ce59d11c16278b90dde094d 'type': 'geojson', - 'data': 'https://www.mapbox.com/mapbox-gl-js/assets/indoor-3d-map.geojson' + 'data': 'https://docs.mapbox.com/mapbox-gl-js/assets/indoor-3d-map.geojson' }, 'paint': { // See the Mapbox Style Specification for details on data expressions. - // https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions + // https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions // Get the fill-extrusion-color from the source 'color' property. 'fill-extrusion-color': ['get', 'color'], diff --git a/docs/pages/example/animate-images.html b/docs/pages/example/animate-images.html index e035015cdc6..68db16cd1d9 100644 --- a/docs/pages/example/animate-images.html +++ b/docs/pages/example/animate-images.html @@ -13,7 +13,7 @@ var currentImage = 0; function getPath() { - return "https://www.mapbox.com/mapbox-gl-js/assets/radar" + currentImage + ".gif"; + return "https://docs.mapbox.com/mapbox-gl-js/assets/radar" + currentImage + ".gif"; } map.on('load', function() { diff --git a/docs/pages/example/change-case-of-labels.html b/docs/pages/example/change-case-of-labels.html index be56972c7ff..8416890edd9 100644 --- a/docs/pages/example/change-case-of-labels.html +++ b/docs/pages/example/change-case-of-labels.html @@ -15,7 +15,7 @@ // data from opendata.cityofboise.org/ 'source': { 'type': 'geojson', - 'data': 'https://www.mapbox.com/mapbox-gl-js/assets/boise.geojson' + 'data': 'https://docs.mapbox.com/mapbox-gl-js/assets/boise.geojson' }, "layout": { diff --git a/docs/pages/example/cluster.html b/docs/pages/example/cluster.html index 7d69057e7c0..c02ccd4e4a7 100644 --- a/docs/pages/example/cluster.html +++ b/docs/pages/example/cluster.html @@ -16,7 +16,7 @@ type: "geojson", // Point to GeoJSON data. This example visualizes all M1.0+ earthquakes // from 12/22/15 to 1/21/16 as logged by USGS' Earthquake hazards program. - data: "https://www.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson", + data: "https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson", cluster: true, clusterMaxZoom: 14, // Max zoom to cluster points on clusterRadius: 50 // Radius of each cluster when clustering points (defaults to 50) @@ -28,7 +28,7 @@ source: "earthquakes", filter: ["has", "point_count"], paint: { - // Use step expressions (https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-step) + // Use step expressions (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-step) // with three steps to implement three types of circles: // * Blue, 20px circles when point count is less than 100 // * Yellow, 30px circles when point count is between 100 and 750 diff --git a/docs/pages/example/data-driven-circle-colors.html b/docs/pages/example/data-driven-circle-colors.html index bc220a7b37d..982fa136424 100644 --- a/docs/pages/example/data-driven-circle-colors.html +++ b/docs/pages/example/data-driven-circle-colors.html @@ -24,7 +24,7 @@ 'stops': [[12, 2], [22, 180]] }, // color circles by ethnicity, using a match expression - // https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-match + // https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-match 'circle-color': [ 'match', ['get', 'ethnicity'], diff --git a/docs/pages/example/data-driven-lines.html b/docs/pages/example/data-driven-lines.html index 1e926da9cf6..80f3f0200f1 100644 --- a/docs/pages/example/data-driven-lines.html +++ b/docs/pages/example/data-driven-lines.html @@ -72,7 +72,7 @@ }, 'paint': { 'line-width': 3, - // Use a get expression (https://www.mapbox.com/mapbox-gl-js/style-spec/#expressions-get) + // Use a get expression (https://docs.mapbox.com/mapbox-gl-js/style-spec/#expressions-get) // to set the line-color to a feature property value. 'line-color': ['get', 'color'] } diff --git a/docs/pages/example/heatmap-layer.html b/docs/pages/example/heatmap-layer.html index 1cc08eafe7e..b5abf5fbbd4 100644 --- a/docs/pages/example/heatmap-layer.html +++ b/docs/pages/example/heatmap-layer.html @@ -14,7 +14,7 @@ // Heatmap layers also work with a vector tile source. map.addSource('earthquakes', { "type": "geojson", - "data": "https://www.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson" + "data": "https://docs.mapbox.com/mapbox-gl-js/assets/earthquakes.geojson" }); map.addLayer({ diff --git a/docs/pages/example/hover-styles.html b/docs/pages/example/hover-styles.html index 75dd5492591..0fba8300faa 100644 --- a/docs/pages/example/hover-styles.html +++ b/docs/pages/example/hover-styles.html @@ -11,7 +11,7 @@ map.on('load', function () { map.addSource("states", { "type": "geojson", - "data": "https://www.mapbox.com/mapbox-gl-js/assets/us_states.geojson" + "data": "https://docs.mapbox.com/mapbox-gl-js/assets/us_states.geojson" }); // The feature-state dependent fill-opacity expression will render the hover effect diff --git a/docs/pages/example/image-on-a-map.html b/docs/pages/example/image-on-a-map.html index 74c9c79390c..c00aad98ee9 100644 --- a/docs/pages/example/image-on-a-map.html +++ b/docs/pages/example/image-on-a-map.html @@ -10,7 +10,7 @@ }, "overlay": { "type": "image", - "url": "https://www.mapbox.com/mapbox-gl-js/assets/radar.gif", + "url": "https://docs.mapbox.com/mapbox-gl-js/assets/radar.gif", "coordinates": [ [-80.425, 46.437], [-71.516, 46.437], diff --git a/docs/pages/example/live-update-feature.html b/docs/pages/example/live-update-feature.html index d188ca08fb9..ebd5a787f5b 100644 --- a/docs/pages/example/live-update-feature.html +++ b/docs/pages/example/live-update-feature.html @@ -12,7 +12,7 @@ // We use D3 to fetch the JSON here so that we can parse and use it separately // from GL JS's use in the added source. You can use any request method (library // or otherwise) that you want. - d3.json('https://www.mapbox.com/mapbox-gl-js/assets/hike.geojson', function(err, data) { + d3.json('https://docs.mapbox.com/mapbox-gl-js/assets/hike.geojson', function(err, data) { if (err) throw err; // save full coordinate list for later diff --git a/docs/pages/example/restrict-bounds.js b/docs/pages/example/restrict-bounds.js index 0c9872751ab..ed6c91dcbbd 100644 --- a/docs/pages/example/restrict-bounds.js +++ b/docs/pages/example/restrict-bounds.js @@ -1,7 +1,7 @@ /*--- title: Restrict map panning to an area description: >- - Prevent a map from being panned to a different place by setting [`maxBounds`](https://www.mapbox.com/mapbox-gl-js/api#map#setmaxbounds). + Prevent a map from being panned to a different place by setting [`maxBounds`](https://docs.mapbox.com/mapbox-gl-js/api#map#setmaxbounds). tags: - user-interaction pathname: /mapbox-gl-js/example/restrict-bounds/ diff --git a/docs/pages/example/set-popup.html b/docs/pages/example/set-popup.html index d4d4cd7a941..2f7f1805efc 100644 --- a/docs/pages/example/set-popup.html +++ b/docs/pages/example/set-popup.html @@ -1,7 +1,7 @@