diff options
author | Jakub Hampl <kopomir@gmail.com> | 2018-08-24 12:29:25 +0100 |
---|---|---|
committer | Jakub Hampl <kopomir@gmail.com> | 2018-08-24 12:29:25 +0100 |
commit | 2e9381479d484d383238493306421327623bc4a2 (patch) | |
tree | 56a58d4501f0618b1b4fa1164e909e06e0df3daf | |
parent | af8b5c077da700236667ccb3cdcd736774dd9e3b (diff) |
v0.48 compatibility, docs improvements, polish
-rw-r--r-- | examples/Example01.elm | 35 | ||||
-rw-r--r-- | generate-elm.js | 325 | ||||
-rw-r--r-- | package-lock.json | 2923 | ||||
-rw-r--r-- | package.json | 2 | ||||
-rw-r--r-- | src/Mapbox/Element.elm | 45 | ||||
-rw-r--r-- | src/Mapbox/Expression.elm | 191 | ||||
-rw-r--r-- | src/Mapbox/Helpers.elm | 11 | ||||
-rw-r--r-- | src/Mapbox/Layer.elm | 175 | ||||
-rw-r--r-- | src/Mapbox/Source.elm | 25 | ||||
-rw-r--r-- | src/Mapbox/Style.elm | 11 |
10 files changed, 605 insertions, 3138 deletions
diff --git a/examples/Example01.elm b/examples/Example01.elm index 91a5dee..6214223 100644 --- a/examples/Example01.elm +++ b/examples/Example01.elm @@ -36,7 +36,7 @@ type Msg update msg model = case msg of Hover { lngLat, renderedFeatures } -> - ( { model | position = lngLat }, Cmd.none ) + ( { model | position = lngLat, features = renderedFeatures }, Cmd.none ) Click { lngLat, renderedFeatures } -> ( { model | position = lngLat, features = renderedFeatures }, MapCommands.fitBounds [ Opt.linear True, Opt.maxZoom 10 ] ( LngLat.map (\a -> a - 0.2) lngLat, LngLat.map (\a -> a + 0.2) lngLat ) ) @@ -49,7 +49,7 @@ geojson = "features": [ { "type": "Feature", - "id": 0, + "id": 1, "properties": { "name": "Bermuda Triangle", "area": 1150180 @@ -71,6 +71,12 @@ geojson = """ |> Result.withDefault (Json.Encode.object []) +hoveredFeatures : List Json.Encode.Value -> MapboxAttr msg +hoveredFeatures = + List.map (\feat -> ( feat, [ ( "hover", Json.Encode.bool True ) ] )) + >> featureState + + view model = { title = "Mapbox Example" , body = @@ -82,6 +88,7 @@ view model = , onClick Click , id "my-map" , eventFeaturesLayers [ "changes" ] + , hoveredFeatures model.features ] (Style { transition = Style.defaultTransition @@ -114,9 +121,31 @@ view model = , Layer.fillColor (E.rgba 227 227 227 1) , Layer.fillOpacity (float 0.6) ] + , Layer.symbol "place-city-lg-n" + "composite" + [ Layer.sourceLayer "place_label" + , Layer.minzoom 1 + , Layer.maxzoom 14 + , Layer.filter <| + E.all + [ E.getProperty (str "scalerank") |> E.greaterThan (int 2) + , E.getProperty (str "type") |> E.isEqual (str "city") + ] + , Layer.textField <| + E.format + [ E.getProperty (str "name_en") + |> E.formatted + |> E.fontScaledBy (float 1.2) + , E.formatted (str "\n") + , E.getProperty (str "name") + |> E.formatted + |> E.fontScaledBy (float 0.8) + |> E.withFont (E.strings [ "DIN Offc Pro Medium" ]) + ] + ] , Layer.fill "changes" "changes" - [ Layer.fillOpacity (E.ifElse (E.toBool (E.featureState (str "hover"))) (float 1) (float 0.3)) + [ Layer.fillOpacity (E.ifElse (E.toBool (E.featureState (str "hover"))) (float 0.9) (float 0.1)) ] ] } diff --git a/generate-elm.js b/generate-elm.js index 1643428..7207f4e 100644 --- a/generate-elm.js +++ b/generate-elm.js @@ -5,39 +5,44 @@ function generateProperties(spec) { var docs = {}; var enums = {}; layouts.forEach(l => { - const layerType = titleCase(l.split('_')[1]) + const layerType = titleCase(l.split("_")[1]); docs[layerType] = []; codes[layerType] = []; Object.entries(spec[l]).forEach(([name, prop]) => { - if (name == 'visibility') return ''; - if (prop.type === 'enum') { - enums[name] = Object.keys(prop.values).join(' | '); + if (name == "visibility") return ""; + if (prop.type === "enum") { + enums[name] = Object.keys(prop.values).join(" | "); } - codes[layerType].push(generateElmProperty(name, prop, layerType, 'Layout')); + codes[layerType].push( + generateElmProperty(name, prop, layerType, "Layout") + ); docs[layerType].push(camelCase(name)); - }) - }) + }); + }); paints.forEach(l => { - const layerType = titleCase(l.split('_')[1]) + const layerType = titleCase(l.split("_")[1]); Object.entries(spec[l]).forEach(([name, prop]) => { - if (name == 'visibility') return ''; - if (prop.type === 'enum') { - enums[name] = Object.keys(prop.values).join(' | '); + if (name == "visibility") return ""; + if (prop.type === "enum") { + enums[name] = Object.keys(prop.values).join(" | "); } - codes[layerType].push(generateElmProperty(name, prop, layerType, 'Paint')) + codes[layerType].push( + generateElmProperty(name, prop, layerType, "Paint") + ); docs[layerType].push(camelCase(name)); - }) - }) - Object.values(docs).forEach(d => d.sort()) + }); + }); + Object.values(docs).forEach(d => d.sort()); Object.values(codes).forEach(d => d.sort()); - console.log(enums); return ` module Mapbox.Layer exposing ( Layer, SourceId, Background, Fill, Symbol, Line, Raster, Circle, FillExtrusion, Heatmap, Hillshade, LayerAttr, encode, background, fill, symbol, line, raster, circle, fillExtrusion, heatmap, hillshade, - metadata, source, sourceLayer, minzoom, maxzoom, filter, visible, - ${Object.values(docs).map(d => d.join(', ')).join(',\n ')}) + metadata, sourceLayer, minzoom, maxzoom, filter, visible, + ${Object.values(docs) + .map(d => d.join(", ")) + .join(",\n ")}) {-| Layers specify what is actually rendered on the map and are rendered in order. @@ -62,15 +67,19 @@ Paint properties are applied later in the rendering process. Changes to a paint ### General Attributes @docs LayerAttr -@docs metadata, source, sourceLayer, minzoom, maxzoom, filter, visible - -${Object.entries(docs).map(([section, docs]) => `### ${section} Attributes\n\n@docs ${docs.join(', ')}`).join('\n\n')} +@docs metadata, sourceLayer, minzoom, maxzoom, filter, visible + +${Object.entries(docs) + .map( + ([section, docs]) => + `### ${section} Attributes\n\n@docs ${docs.join(", ")}` + ) + .join("\n\n")} -} import Array exposing (Array) -import Json.Decode import Json.Encode as Encode exposing (Value) -import Mapbox.Expression as Expression exposing (Anchor, CameraExpression, Color, DataExpression, Expression, LineJoin) +import Mapbox.Expression as Expression exposing (Anchor, Auto, CameraExpression, Color, DataExpression, Expression, LineCap, LineJoin, Position, RasterResampling, SymbolPlacement, TextFit, TextJustify, TextTransform, FormattedText) {-| Represents a layer. -} type Layer @@ -121,9 +130,7 @@ encode (Layer value) = value - - -layerImpl tipe source id attrs = +layerImpl tipe id source attrs = [ ( "type", Encode.string tipe ) , ( "id", Encode.string id ) , ( "source", Encode.string source) @@ -137,16 +144,16 @@ encodeAttrs attrs = let { top, layout, paint } = List.foldl - (\\attr ({ top, layout, paint } as lists) -> + (\\attr lists -> case attr of Top key val -> - { lists | top = ( key, val ) :: top } + { lists | top = ( key, val ) :: lists.top } Paint key val -> - { lists | paint = ( key, val ) :: paint } + { lists | paint = ( key, val ) :: lists.paint } Layout key val -> - { lists | layout = ( key, val ) :: layout } + { lists | layout = ( key, val ) :: lists.layout } ) { top = [], layout = [], paint = [] } attrs @@ -155,7 +162,7 @@ encodeAttrs attrs = {-| The background color or pattern of the map. -} background : String -> List (LayerAttr Background) -> Layer -background tipe id attrs = +background id attrs = [ ( "type", Encode.string "background" ) , ( "id", Encode.string id ) ] @@ -244,116 +251,210 @@ visible : Expression CameraExpression Bool -> LayerAttr any visible vis = Layout "visibility" <| Expression.encode <| Expression.ifElse vis (Expression.str "visible") (Expression.str "none") -${Object.entries(codes).map(([section, codes]) => `-- ${section}\n\n${codes.join('\n')}`).join('\n\n')} -` +${Object.entries(codes) + .map(([section, codes]) => `-- ${section}\n\n${codes.join("\n")}`) + .join("\n\n")} +`; +} + +function codeSnippet(name, type) { + return "`" + camelCase(name, type) + "`"; } function requires(req) { - if (typeof req === 'string') { - return `Requires \`${camelCase(req)}\`.`; - } else if (req['!']) { - return `Disabled by \`${camelCase(req['!'])}\`.`; - } else if (req['<=']) { - return `Must be less than or equal to \`${camelCase(req['<='])}\`.`; + if (typeof req === "string") { + return `Requires ${codeSnippet(req)}.`; + } else if (req["!"]) { + return `Disabled by ${codeSnippet(req["!"])}.`; + } else if (req["<="]) { + return `Must be less than or equal to \`${camelCase(req["<="])}\`.`; } else { - const [name, value] = Object.entries(req)[0]; - if (Array.isArray(value)) { - return `Requires \`${camelCase(name)}\` to be ${ - value - .reduce((prev, curr) => [prev, ', or ', curr])}.`; - } else { - return `Requires \`${camelCase(name)}\` to be \`${value}\`.`; - } + const [name, value] = Object.entries(req)[0]; + if (Array.isArray(value)) { + return `Requires ${codeSnippet(name)} to be ${value.slice(1).reduce( + (prev, curr) => prev + ", or " + codeSnippet(curr), codeSnippet(value[0]) + )}.`; + } else { + return `Requires ${codeSnippet(name)} to be \`${value}\`.`; + } } } function generateElmProperty(name, prop, layerType, position) { - if (name == 'visibility') return '' - if (prop['property-type'] === 'constant') throw "Constant property type not supported"; + if (name == "visibility") return ""; + if (prop["property-type"] === "constant") + throw "Constant property type not supported"; const elmName = camelCase(name); - const exprKind = prop['sdk-support']['data-driven styling'] && prop['sdk-support']['data-driven styling'].js ? 'any' : 'CameraExpression'; + const exprKind = + prop["sdk-support"]["data-driven styling"] && + prop["sdk-support"]["data-driven styling"].js + ? "any" + : "CameraExpression"; const exprType = getElmType(prop); - let bounds = ''; - if ('minimum' in prop && 'maximum' in prop) { - bounds = `\n\nShould be between \`${prop.minimum}\` and \`${prop.maximum}\` inclusive. ` - } else if ('minimum' in prop) { - bounds = `\n\nShould be greater than or equal to \`${prop.minimum}\`. ` - } else if ('maximum' in prop) { - bounds = `\n\nShould be less than or equal to \`${prop.maximum}\`. ` + let bounds = ""; + if ("minimum" in prop && "maximum" in prop) { + bounds = `\n\nShould be between \`${prop.minimum}\` and \`${ + prop.maximum + }\` inclusive. `; + } else if ("minimum" in prop) { + bounds = `\n\nShould be greater than or equal to \`${prop.minimum}\`. `; + } else if ("maximum" in prop) { + bounds = `\n\nShould be less than or equal to \`${prop.maximum}\`. `; + } + let valueHelp = ""; + if (exprType == "(Anchor Never)" || exprType == "(Anchor Auto)") { + valueHelp = Object.entries(prop.values) + .map( + ([value, { doc }]) => + `\n- ${codeSnippet(value, exprType)}: ${docify(doc)}` + ) + .join(""); } return ` -{-| ${prop.doc.replace(/`(\w+\-.+?)`/g, str => '`' + camelCase(str.substr(1)))} ${position} property. ${bounds}${prop.units ? `\nUnits in ${prop.units}. ` : ''}${prop.default !== undefined ? 'Defaults to `' + prop.default + '`. ' : ''}${prop.requires ? prop.requires.map(requires).join(' ') : ''} +{-| ${docify(prop.doc, elmName)} ${position} property. ${bounds}${ + prop.units ? `\nUnits in ${prop.units}. ` : "" + }${prop.default !== undefined && elmName !== 'heatmapColor' && elmName !== 'textFont' ? "Defaults to `" + camelCase(prop.default.toString(), exprType) + "`. " : ""}${ + prop.requires ? prop.requires.map(requires).join(" ") : "" + }${valueHelp} -} ${elmName} : Expression ${exprKind} ${exprType} -> LayerAttr ${layerType} ${elmName} = - Expression.encode >> ${position} "${name}"` + Expression.encode >> ${position} "${name}"`; +} + +const enumMap = { + "map | viewport | auto": "(Anchor Auto)", + "map | viewport": "(Anchor Never)", + "left | center | right": "TextJustify", + "center | left | right | top | bottom | top-left | top-right | bottom-left | bottom-right": + "Position", + "none | width | height | both": "TextFit", + "butt | round | square": "LineCap", + "bevel | round | miter": "LineJoin", + "point | line | line-center": "SymbolPlacement", + "none | uppercase | lowercase": "TextTransform", + "linear | nearest": "RasterResampling" +}; + +const flatEnumMap = Object.assign(Object.entries(enumMap).reduce((res, [values, tipe]) => values.split(' | ').reduce((obj, value) => Object.assign({}, obj, {[value]: tipe}), res), {}), { + map: 'Anchor', + viewport: 'Anchor', + auto: "Anchor" +}); + +const reverseEnumMap = Object.entries(enumMap).reduce((res, [values, tipe]) => tipe ==="(Anchor Auto)" || tipe === "(Anchor Never)" ? res : Object.assign({}, res, {[tipe]: values.split(' | ')}), {}) + +console.error(reverseEnumMap) + +function docify(str, name) { + switch (name) { + case "lineGradient": + case "lineDasharray": + return str; + case "heatmapColor": + return `Defines the color of each pixel based on its density value in a heatmap. The value should be an Expression that uses \`heatmapDensity\` as input. Defaults to: + + E.heatmapDensity + |> E.interpolate E.Linear + [ (0.0, rgba 0 0 255 0) + , (0.1, rgba 65 105 225 1) + , (0.3, rgba 0 255 255 1) + , (0.5, rgba 0 255 0 1) + , (0.7, rgba 255 255 0 1) + , (1.0, rgba 255 0 0 1)]` + case "textField": + return `Value to use for a text label.`; + } + ///`(\w+\-.+?)`/g + return str.replace( + /`(.+?)`/g, + (str, match) => "`" + camelCase(match) + "`" + ) } -function getElmType({type, value, values}) { - switch(type) { - case 'number': - return 'Float'; - case 'boolean': +function getElmType({ type, value, values }) { + switch (type) { + case "number": + return "Float"; + case "boolean": return "Bool"; - case 'string': - return 'String'; - case 'color': - return 'Color'; - case 'array': - switch(value) { - case 'number': - return '(Array Float)'; - case 'string': - return '(Array String)'; - } - case 'enum': - switch(Object.keys(values).join(' | ')) { - case "map | viewport": - return 'Anchor'; - case "map | viewport | auto": - return 'AnchorAuto'; - case "center | left | right | top | bottom | top-left | top-right | bottom-left | bottom-right": - return 'Position'; - case 'none | width | height | both': - return 'TextFit'; - case 'butt | round | square': - return 'LineCap'; - case 'bevel | round | miter': - return 'LineJoin'; - case 'point | line': - return 'SymbolPlacement'; - case 'left | center | right': - return 'TextJustify'; - case 'none | uppercase | lowercase': - return 'TextTransform'; + case "string": + return "String"; + case "color": + return "Color"; + case "array": + switch (value) { + case "number": + return "(Array Float)"; + case "string": + return "(Array String)"; } + case "formatted": + return "FormattedText"; + case "enum": + const res = enumMap[Object.keys(values).join(" | ")]; + if (res) return res; } - throw `Unknown type ${type}` + throw `Unknown type ${type}, ${value}, ${values && Object.keys(values)}`; } function titleCase(str) { - return str.replace(/\-/, ' ').replace( - /\w\S*/g, - function(txt) { - return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); - } - ).replace(/\s/, ''); - } - -function camelCase(str) { - return str.replace(/(?:^\w|[A-Z]|\b\w|\-\w)/g, function(letter, index) { - return index == 0 ? letter.toLowerCase() : letter.toUpperCase(); - }).replace(/(?:\s|\-)+/g, ''); + return str + .replace(/\-/, " ") + .replace(/\w\S*/g, function(txt) { + return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase(); + }) + .replace(/\s/, ""); } +function camelCase(str, type) { + if (type && reverseEnumMap[type]) { + str = type + ' ' + str; + } else if (flatEnumMap[str]) { + str = flatEnumMap[str] + ' ' + str; + } else if (str === "rgba(0, 0, 0, 0)") { + return "rgba 0 0 0 0" + } + return str + .replace(/(?:^\w|[A-Z]|\b\w|\-\w)/g, function(letter, index) { + return index == 0 ? letter.toLowerCase() : letter.toUpperCase(); + }) + .replace(/(?:\s|\-)+/g, ""); +} function makeSignatures(name, constants) { return `{-| -} type ${name} = ${name} - ${constants.split(' | ').map(c => ` + ${constants + .split(" | ") + .map( + c => ` {-| -} -${camelCase(name + ' ' + c)} : Expression exprType ${name} -${camelCase(name + ' ' + c)} = Expression (Json.Encode.string "${c}") -`).join('\n')}` +${camelCase(name + " " + c)} : Expression exprType ${name} +${camelCase(name + " " + c)} = Expression (Json.Encode.string "${c}") +` + ) + .join("\n")}`; } + +/// --- NODEJS STUFF + +var stdin = process.stdin, + stdout = process.stdout, + inputChunks = []; + +stdin.resume(); +stdin.setEncoding("utf8"); + +stdin.on("data", function(chunk) { + inputChunks.push(chunk); +}); + +stdin.on("end", function() { + var inputJSON = inputChunks.join(""), + parsedData = JSON.parse(inputJSON), + output = generateProperties(parsedData); + stdout.write(output); + stdout.write("\n"); +}); diff --git a/package-lock.json b/package-lock.json index d8240b4..2ceaa05 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "elm-mapbox", - "version": "1.0.0", + "version": "1.0.0-rc1", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -12,10 +12,15 @@ "wgs84": "0.0.0" } }, + "@mapbox/geojson-types": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz", + "integrity": "sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw==" + }, "@mapbox/jsonlint-lines-primitives": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.1.tgz", - "integrity": "sha512-LGegvJq+ks4UFnEAvtAhygFRZxaNg2vw7PsvLOAXY8ziJLv5aFDSdHDEMJA/Q8PG5dNhMioUvo0kNqb7U5dPoQ==" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" }, "@mapbox/mapbox-gl-supported": { "version": "1.4.0", @@ -104,14 +109,6 @@ "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.2.1.tgz", "integrity": "sha1-vgiVmQl7dKXJxKhKDNvNtivYeu8=" }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "1.0.3" - } - }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -177,9 +174,9 @@ "integrity": "sha1-kbx0sR6kBbyRa8aqkI+q+ltKrEs=" }, "buffer-from": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.0.tgz", - "integrity": "sha512-c5mRlguI/Pe2dSZmpER62rSCu0ryKmWddzRYsuXc50U2/g8jMOulc31VZMa4mYx31U5xsmSOpDCgH88Vl9cDGQ==" + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "builtin-modules": { "version": "2.0.0", @@ -227,7 +224,7 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "requires": { - "buffer-from": "1.1.0", + "buffer-from": "1.1.1", "inherits": "2.0.3", "readable-stream": "2.3.6", "typedarray": "0.0.6" @@ -328,14 +325,6 @@ "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.2.0.tgz", "integrity": "sha1-EChTPSwcNj90pnlv9X7AUg3tK+E=" }, - "extend-shallow": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", - "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", - "requires": { - "is-extendable": "0.1.1" - } - }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", @@ -424,17 +413,14 @@ } }, "geojson-vt": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.1.4.tgz", - "integrity": "sha512-aDcwFnYlLvUoLEZSVOjI3SPAkoA3ENNprsnYkJAp7C/1Phk+kuwp8spDF6HGYFPg6RqpXhlmY9rxg4z/0DPL1g==" + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.0.tgz", + "integrity": "sha512-qk7sEv7dMfuGzflwClsgtO1fWPut/TqCInWEEUJc/Ofn4tmqBGznnPv3eUdxtwMkulMaAwSL3osHiyN03XJd/w==" }, "gl-matrix": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.7.0.tgz", - "integrity": "sha512-3cq5b2aPfSkcBG48IlrG8ILvFm1BE8RFdE82anKSlTYaHEVXNPGB+ScGbV22k+23sbmVZr+vRuIni4LKHyU3OQ==", - "requires": { - "npm": "6.2.0" - } + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-2.7.1.tgz", + "integrity": "sha512-22I6q7aO2oKNahNV0+9JavVNUhQXRTvR5jP2s8U1l93TkjcQe8RK6MeMYpM7+66R0sCVUgSdO97BL439vePyzQ==" }, "glob-base": { "version": "0.3.0", @@ -455,24 +441,6 @@ "is-glob": "2.0.1" } }, - "gray-matter": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-3.1.1.tgz", - "integrity": "sha512-nZ1qjLmayEv0/wt3sHig7I0s3/sJO0dkAaKYQ5YAOApUtYEOonXSFdWvL1khvnZMTvov4UufkqlFsilPnejEXA==", - "requires": { - "extend-shallow": "2.0.1", - "js-yaml": "3.12.0", - "kind-of": "5.1.0", - "strip-bom-string": "1.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, "grid-index": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.0.0.tgz", @@ -526,7 +494,8 @@ "is-extendable": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=" + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true }, "is-extglob": { "version": "1.0.0", @@ -584,22 +553,6 @@ "isarray": "1.0.0" } }, - "js-yaml": { - "version": "3.12.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", - "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", - "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" - }, - "dependencies": { - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" - } - } - }, "kdbush": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-2.0.1.tgz", @@ -639,11 +592,12 @@ } }, "mapbox-gl": { - "version": "0.47.0", - "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.47.0.tgz", - "integrity": "sha512-y1AlNYMAKaqEtaqni0zOMYj9gTc1gZ0lqLkxXK9iFg5+ZBITc5DL9AcrXhpEXNxUzXKFa7dZkSULyNaqXFQ8yQ==", + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.48.0.tgz", + "integrity": "sha512-ck50tWMVkcxJzo43I9veqaox5xJBkx7h0EzS393DGGFFWs6IEhEGLvpybwTtw2if2V66tT2S02sYZy2zrmpJ9g==", "requires": { - "@mapbox/jsonlint-lines-primitives": "2.0.1", + "@mapbox/geojson-types": "1.0.2", + "@mapbox/jsonlint-lines-primitives": "2.0.2", "@mapbox/mapbox-gl-supported": "1.4.0", "@mapbox/point-geometry": "0.1.0", "@mapbox/shelf-pack": "3.2.0", @@ -655,18 +609,14 @@ "csscolorparser": "1.0.3", "earcut": "2.1.3", "geojson-rewind": "0.3.1", - "geojson-vt": "3.1.4", - "gl-matrix": "2.7.0", - "gray-matter": "3.1.1", + "geojson-vt": "3.2.0", + "gl-matrix": "2.7.1", "grid-index": "1.0.0", "minimist": "0.0.8", "pbf": "3.1.0", "quickselect": "1.1.1", "rw": "1.3.3", - "shuffle-seed": "1.1.6", - "sort-object": "0.3.2", - "supercluster": "4.0.1", - "through2": "2.0.3", + "supercluster": "4.1.1", "tinyqueue": "1.2.3", "vt-pbf": "3.1.1" }, @@ -734,2757 +684,6 @@ "remove-trailing-separator": "1.1.0" } }, - "npm": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-6.2.0.tgz", - "integrity": "sha512-GnlNsOnxwVJX4WSfyQY0gY3LnUX2cc46XU0eu1g+WSuZgDRUGmw8tuptitJu6byp0RWGT8ZEAKajblwdhQHN8A==", - "requires": { - "JSONStream": "1.3.3", - "abbrev": "1.1.1", - "ansicolors": "0.3.2", - "ansistyles": "0.1.3", - "aproba": "1.2.0", - "archy": "1.0.0", - "bin-links": "1.1.2", - "bluebird": "3.5.1", - "byte-size": "4.0.3", - "cacache": "11.0.2", - "call-limit": "1.1.0", - "chownr": "1.0.1", - "cli-columns": "3.1.2", - "cli-table3": "0.5.0", - "cmd-shim": "2.0.2", - "columnify": "1.5.4", - "config-chain": "1.1.11", - "debuglog": "1.0.1", - "detect-indent": "5.0.0", - "detect-newline": "2.1.0", - "dezalgo": "1.0.3", - "editor": "1.0.0", - "figgy-pudding": "3.1.0", - "find-npm-prefix": "1.0.2", - "fs-vacuum": "1.2.10", - "fs-write-stream-atomic": "1.0.10", - "gentle-fs": "2.0.1", - "glob": "7.1.2", - "graceful-fs": "4.1.11", - "has-unicode": "2.0.1", - "hosted-git-info": "2.6.0", - "iferr": "1.0.0", - "imurmurhash": "0.1.4", - "inflight": "1.0.6", - "inherits": "2.0.3", - "ini": "1.3.5", - "init-package-json": "1.10.3", - "is-cidr": "2.0.6", - "json-parse-better-errors": "1.0.2", - "lazy-property": "1.0.0", - "libcipm": "2.0.0", - "libnpmhook": "4.0.1", - "libnpx": "10.2.0", - "lock-verify": "2.0.2", - "lockfile": "1.0.4", - "lodash._baseindexof": "3.1.0", - "lodash._baseuniq": "4.6.0", - "lodash._bindcallback": "3.0.1", - "lodash._cacheindexof": "3.0.2", - "lodash._createcache": "3.1.2", - "lodash._getnative": "3.9.1", - "lodash.clonedeep": "4.5.0", - "lodash.restparam": "3.6.1", - "lodash.union": "4.6.0", - "lodash.uniq": "4.5.0", - "lodash.without": "4.4.0", - "lru-cache": "4.1.3", - "meant": "1.0.1", - "mississippi": "3.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "node-gyp": "3.7.0", - "nopt": "4.0.1", - "normalize-package-data": "2.4.0", - "npm-audit-report": "1.3.1", - "npm-cache-filename": "1.0.2", - "npm-install-checks": "3.0.0", - "npm-lifecycle": "2.0.3", - "npm-package-arg": "6.1.0", - "npm-packlist": "1.1.10", - "npm-pick-manifest": "2.1.0", - "npm-profile": "3.0.2", - "npm-registry-client": "8.5.1", - "npm-registry-fetch": "1.1.0", - "npm-user-validate": "1.0.0", - "npmlog": "4.1.2", - "once": "1.4.0", - "opener": "1.4.3", - "osenv": "0.1.5", - "pacote": "8.1.6", - "path-is-inside": "1.0.2", - "promise-inflight": "1.0.1", - "qrcode-terminal": "0.12.0", - "query-string": "6.1.0", - "qw": "1.0.1", - "read": "1.0.7", - "read-cmd-shim": "1.0.1", - "read-installed": "4.0.3", - "read-package-json": "2.0.13", - "read-package-tree": "5.2.1", - "readable-stream": "2.3.6", - "readdir-scoped-modules": "1.0.2", - "request": "2.81.0", - "retry": "0.12.0", - "rimraf": "2.6.2", - "safe-buffer": "5.1.2", - "semver": "5.5.0", - "sha": "2.0.1", - "slide": "1.1.6", - "sorted-object": "2.0.1", - "sorted-union-stream": "2.1.3", - "ssri": "6.0.0", - "tar": "4.4.4", - "text-table": "0.2.0", - "tiny-relative-date": "1.3.0", - "uid-number": "0.0.6", - "umask": "1.1.0", - "unique-filename": "1.1.0", - "unpipe": "1.0.0", - "update-notifier": "2.5.0", - "uuid": "3.3.2", - "validate-npm-package-license": "3.0.3", - "validate-npm-package-name": "3.0.0", - "which": "1.3.1", - "worker-farm": "1.6.0", - "wrappy": "1.0.2", - "write-file-atomic": "2.3.0" - }, - "dependencies": { - "JSONStream": { - "version": "1.3.3", - "bundled": true, - "requires": { - "jsonparse": "1.3.1", - "through": "2.3.8" - } - }, - "abbrev": { - "version": "1.1.1", - "bundled": true - }, - "agent-base": { - "version": "4.2.0", - "bundled": true, - "requires": { - "es6-promisify": "5.0.0" - } - }, - "agentkeepalive": { - "version": "3.4.1", - "bundled": true, - "requires": { - "humanize-ms": "1.2.1" - } - }, - "ansi-align": { - "version": "2.0.0", - "bundled": true, - "requires": { - "string-width": "2.1.1" - } - }, - "ansi-regex": { - "version": "2.1.1", - "bundled": true - }, - "ansi-styles": { - "version": "3.2.1", - "bundled": true, - "requires": { - "color-convert": "1.9.1" - } - }, - "ansicolors": { - "version": "0.3.2", - "bundled": true - }, - "ansistyles": { - "version": "0.1.3", - "bundled": true - }, - "aproba": { - "version": "1.2.0", - "bundled": true - }, - "archy": { - "version": "1.0.0", - "bundled": true - }, - "are-we-there-yet": { - "version": "1.1.4", - "bundled": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "asap": { - "version": "2.0.6", - "bundled": true - }, - "asn1": { - "version": "0.2.3", - "bundled": true - }, - "assert-plus": { - "version": "0.2.0", - "bundled": true - }, - "asynckit": { - "version": "0.4.0", - "bundled": true - }, - "aws-sign2": { - "version": "0.6.0", - "bundled": true - }, - "aws4": { - "version": "1.7.0", - "bundled": true - }, - "balanced-match": { - "version": "1.0.0", - "bundled": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "bundled": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, - "bin-links": { - "version": "1.1.2", - "bundled": true, - "requires": { - "bluebird": "3.5.1", - "cmd-shim": "2.0.2", - "gentle-fs": "2.0.1", - "graceful-fs": "4.1.11", - "write-file-atomic": "2.3.0" - } - }, - "block-stream": { - "version": "0.0.9", - "bundled": true, - "requires": { - "inherits": "2.0.3" - } - }, - "bluebird": { - "version": "3.5.1", - "bundled": true - }, - "boom": { - "version": "2.10.1", - "bundled": true, - "requires": { - "hoek": "2.16.3" |