{"version":3,"file":"index.es.js","sources":["../../../node_modules/json-stringify-pretty-compact/index.js","../format.js","../../../node_modules/url/node_modules/punycode/punycode.js","../../../node_modules/url/util.js","../../../node_modules/querystring/decode.js","../../../node_modules/querystring/encode.js","../../../node_modules/querystring/index.js","../../../node_modules/url/url.js","../visit.js","../migrate/v8.js","../util/extend.js","../expression/parsing_error.js","../expression/scope.js","../expression/types.js","../../../node_modules/csscolorparser/csscolorparser.js","../util/color.js","../expression/types/collator.js","../expression/types/formatted.js","../expression/types/resolved_image.js","../expression/values.js","../expression/definitions/literal.js","../expression/runtime_error.js","../expression/definitions/assertion.js","../expression/definitions/format.js","../expression/definitions/image.js","../expression/definitions/coercion.js","../expression/evaluation_context.js","../expression/compound_expression.js","../expression/definitions/collator.js","../expression/definitions/within.js","../expression/is_constant.js","../expression/definitions/var.js","../expression/parsing_context.js","../expression/stops.js","../expression/definitions/step.js","../../../node_modules/@mapbox/unitbezier/index.js","../util/interpolate.js","../util/color_spaces.js","../expression/definitions/interpolate.js","../expression/definitions/coalesce.js","../expression/definitions/let.js","../expression/definitions/at.js","../expression/definitions/in.js","../expression/definitions/index_of.js","../expression/definitions/match.js","../expression/definitions/case.js","../expression/definitions/slice.js","../expression/definitions/comparison.js","../expression/definitions/number_format.js","../expression/definitions/length.js","../expression/definitions/index.js","../util/result.js","../util/properties.js","../util/get_type.js","../function/index.js","../expression/index.js","../function/convert.js","../feature_filter/index.js","../feature_filter/convert.js","../migrate/expressions.js","../migrate.js","../composite.js","../util/ref_properties.js","../deref.js","../util/deep_equal.js","../diff.js","../error/validation_error.js","../error/parsing_error.js","../validate/validate_constants.js","../util/unbundle_jsonlint.js","../validate/validate_object.js","../validate/validate_array.js","../validate/validate_number.js","../validate/validate_function.js","../validate/validate_expression.js","../validate/validate_boolean.js","../validate/validate_color.js","../validate/validate_enum.js","../validate/validate_filter.js","../validate/validate_property.js","../validate/validate_paint_property.js","../validate/validate_layout_property.js","../validate/validate_layer.js","../validate/validate_string.js","../validate/validate_source.js","../validate/validate_light.js","../validate/validate_formatted.js","../validate/validate_image.js","../validate/validate.js","../validate/validate_glyphs_url.js","../validate_style.min.js","../../../node_modules/@mapbox/jsonlint-lines-primitives/lib/jsonlint.js","../read_style.js","../validate_style.js","../validate_mapbox_api_supported.js","../style-spec.js"],"sourcesContent":["\"use strict\";\n\n// Note: This regex matches even invalid JSON strings, but since we’re\n// working on the output of `JSON.stringify` we know that only valid strings\n// are present (unless the user supplied a weird `options.indent` but in\n// that case we don’t care since the output would be invalid anyway).\nvar stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nmodule.exports = function stringify(passedObj, options) {\n var indent, maxLength, replacer;\n\n options = options || {};\n indent = JSON.stringify(\n [1],\n undefined,\n options.indent === undefined ? 2 : options.indent\n ).slice(2, -3);\n maxLength =\n indent === \"\"\n ? Infinity\n : options.maxLength === undefined\n ? 80\n : options.maxLength;\n replacer = options.replacer;\n\n return (function _stringify(obj, currentIndent, reserved) {\n // prettier-ignore\n var end, index, items, key, keyPart, keys, length, nextIndent, prettified, start, string, value;\n\n if (obj && typeof obj.toJSON === \"function\") {\n obj = obj.toJSON();\n }\n\n string = JSON.stringify(obj, replacer);\n\n if (string === undefined) {\n return string;\n }\n\n length = maxLength - currentIndent.length - reserved;\n\n if (string.length <= length) {\n prettified = string.replace(stringOrChar, function(match, stringLiteral) {\n return stringLiteral || match + \" \";\n });\n if (prettified.length <= length) {\n return prettified;\n }\n }\n\n if (replacer != null) {\n obj = JSON.parse(string);\n replacer = undefined;\n }\n\n if (typeof obj === \"object\" && obj !== null) {\n nextIndent = currentIndent + indent;\n items = [];\n index = 0;\n\n if (Array.isArray(obj)) {\n start = \"[\";\n end = \"]\";\n length = obj.length;\n for (; index < length; index++) {\n items.push(\n _stringify(obj[index], nextIndent, index === length - 1 ? 0 : 1) ||\n \"null\"\n );\n }\n } else {\n start = \"{\";\n end = \"}\";\n keys = Object.keys(obj);\n length = keys.length;\n for (; index < length; index++) {\n key = keys[index];\n keyPart = JSON.stringify(key) + \": \";\n value = _stringify(\n obj[key],\n nextIndent,\n keyPart.length + (index === length - 1 ? 0 : 1)\n );\n if (value !== undefined) {\n items.push(keyPart + value);\n }\n }\n }\n\n if (items.length > 0) {\n return [start, indent + items.join(\",\\n\" + nextIndent), end].join(\n \"\\n\" + currentIndent\n );\n }\n }\n\n return string;\n })(passedObj, \"\", 0);\n};\n","\nimport reference from './reference/latest.js';\nimport stringifyPretty from 'json-stringify-pretty-compact';\n\nfunction sortKeysBy(obj, reference) {\n const result = {};\n for (const key in reference) {\n if (obj[key] !== undefined) {\n result[key] = obj[key];\n }\n }\n for (const key in obj) {\n if (result[key] === undefined) {\n result[key] = obj[key];\n }\n }\n return result;\n}\n\n/**\n * Format a Mapbox GL Style. Returns a stringified style with its keys\n * sorted in the same order as the reference style.\n *\n * The optional `space` argument is passed to\n * [`JSON.stringify`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify)\n * to generate formatted output.\n *\n * If `space` is unspecified, a default of `2` spaces will be used.\n *\n * @private\n * @param {Object} style a Mapbox GL Style\n * @param {number} [space] space argument to pass to `JSON.stringify`\n * @returns {string} stringified formatted JSON\n * @example\n * var fs = require('fs');\n * var format = require('mapbox-gl-style-spec').format;\n * var style = fs.readFileSync('./source.json', 'utf8');\n * fs.writeFileSync('./dest.json', format(style));\n * fs.writeFileSync('./dest.min.json', format(style, 0));\n */\nfunction format(style, space = 2) {\n style = sortKeysBy(style, reference.$root);\n\n if (style.layers) {\n style.layers = style.layers.map((layer) => sortKeysBy(layer, reference.layer));\n }\n\n return stringifyPretty(style, {indent: space});\n}\n\nexport default format;\n","/*! https://mths.be/punycode v1.3.2 by @mathias */\n;(function(root) {\n\n\t/** Detect free variables */\n\tvar freeExports = typeof exports == 'object' && exports &&\n\t\t!exports.nodeType && exports;\n\tvar freeModule = typeof module == 'object' && module &&\n\t\t!module.nodeType && module;\n\tvar freeGlobal = typeof global == 'object' && global;\n\tif (\n\t\tfreeGlobal.global === freeGlobal ||\n\t\tfreeGlobal.window === freeGlobal ||\n\t\tfreeGlobal.self === freeGlobal\n\t) {\n\t\troot = freeGlobal;\n\t}\n\n\t/**\n\t * The `punycode` object.\n\t * @name punycode\n\t * @type Object\n\t */\n\tvar punycode,\n\n\t/** Highest positive signed 32-bit float value */\n\tmaxInt = 2147483647, // aka. 0x7FFFFFFF or 2^31-1\n\n\t/** Bootstring parameters */\n\tbase = 36,\n\ttMin = 1,\n\ttMax = 26,\n\tskew = 38,\n\tdamp = 700,\n\tinitialBias = 72,\n\tinitialN = 128, // 0x80\n\tdelimiter = '-', // '\\x2D'\n\n\t/** Regular expressions */\n\tregexPunycode = /^xn--/,\n\tregexNonASCII = /[^\\x20-\\x7E]/, // unprintable ASCII chars + non-ASCII chars\n\tregexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g, // RFC 3490 separators\n\n\t/** Error messages */\n\terrors = {\n\t\t'overflow': 'Overflow: input needs wider integers to process',\n\t\t'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n\t\t'invalid-input': 'Invalid input'\n\t},\n\n\t/** Convenience shortcuts */\n\tbaseMinusTMin = base - tMin,\n\tfloor = Math.floor,\n\tstringFromCharCode = String.fromCharCode,\n\n\t/** Temporary variable */\n\tkey;\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/**\n\t * A generic error utility function.\n\t * @private\n\t * @param {String} type The error type.\n\t * @returns {Error} Throws a `RangeError` with the applicable error message.\n\t */\n\tfunction error(type) {\n\t\tthrow RangeError(errors[type]);\n\t}\n\n\t/**\n\t * A generic `Array#map` utility function.\n\t * @private\n\t * @param {Array} array The array to iterate over.\n\t * @param {Function} callback The function that gets called for every array\n\t * item.\n\t * @returns {Array} A new array of values returned by the callback function.\n\t */\n\tfunction map(array, fn) {\n\t\tvar length = array.length;\n\t\tvar result = [];\n\t\twhile (length--) {\n\t\t\tresult[length] = fn(array[length]);\n\t\t}\n\t\treturn result;\n\t}\n\n\t/**\n\t * A simple `Array#map`-like wrapper to work with domain name strings or email\n\t * addresses.\n\t * @private\n\t * @param {String} domain The domain name or email address.\n\t * @param {Function} callback The function that gets called for every\n\t * character.\n\t * @returns {Array} A new string of characters returned by the callback\n\t * function.\n\t */\n\tfunction mapDomain(string, fn) {\n\t\tvar parts = string.split('@');\n\t\tvar result = '';\n\t\tif (parts.length > 1) {\n\t\t\t// In email addresses, only the domain name should be punycoded. Leave\n\t\t\t// the local part (i.e. everything up to `@`) intact.\n\t\t\tresult = parts[0] + '@';\n\t\t\tstring = parts[1];\n\t\t}\n\t\t// Avoid `split(regex)` for IE8 compatibility. See #17.\n\t\tstring = string.replace(regexSeparators, '\\x2E');\n\t\tvar labels = string.split('.');\n\t\tvar encoded = map(labels, fn).join('.');\n\t\treturn result + encoded;\n\t}\n\n\t/**\n\t * Creates an array containing the numeric code points of each Unicode\n\t * character in the string. While JavaScript uses UCS-2 internally,\n\t * this function will convert a pair of surrogate halves (each of which\n\t * UCS-2 exposes as separate characters) into a single code point,\n\t * matching UTF-16.\n\t * @see `punycode.ucs2.encode`\n\t * @see \n\t * @memberOf punycode.ucs2\n\t * @name decode\n\t * @param {String} string The Unicode input string (UCS-2).\n\t * @returns {Array} The new array of code points.\n\t */\n\tfunction ucs2decode(string) {\n\t\tvar output = [],\n\t\t counter = 0,\n\t\t length = string.length,\n\t\t value,\n\t\t extra;\n\t\twhile (counter < length) {\n\t\t\tvalue = string.charCodeAt(counter++);\n\t\t\tif (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n\t\t\t\t// high surrogate, and there is a next character\n\t\t\t\textra = string.charCodeAt(counter++);\n\t\t\t\tif ((extra & 0xFC00) == 0xDC00) { // low surrogate\n\t\t\t\t\toutput.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n\t\t\t\t} else {\n\t\t\t\t\t// unmatched surrogate; only append this code unit, in case the next\n\t\t\t\t\t// code unit is the high surrogate of a surrogate pair\n\t\t\t\t\toutput.push(value);\n\t\t\t\t\tcounter--;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\toutput.push(value);\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t}\n\n\t/**\n\t * Creates a string based on an array of numeric code points.\n\t * @see `punycode.ucs2.decode`\n\t * @memberOf punycode.ucs2\n\t * @name encode\n\t * @param {Array} codePoints The array of numeric code points.\n\t * @returns {String} The new Unicode string (UCS-2).\n\t */\n\tfunction ucs2encode(array) {\n\t\treturn map(array, function(value) {\n\t\t\tvar output = '';\n\t\t\tif (value > 0xFFFF) {\n\t\t\t\tvalue -= 0x10000;\n\t\t\t\toutput += stringFromCharCode(value >>> 10 & 0x3FF | 0xD800);\n\t\t\t\tvalue = 0xDC00 | value & 0x3FF;\n\t\t\t}\n\t\t\toutput += stringFromCharCode(value);\n\t\t\treturn output;\n\t\t}).join('');\n\t}\n\n\t/**\n\t * Converts a basic code point into a digit/integer.\n\t * @see `digitToBasic()`\n\t * @private\n\t * @param {Number} codePoint The basic numeric code point value.\n\t * @returns {Number} The numeric value of a basic code point (for use in\n\t * representing integers) in the range `0` to `base - 1`, or `base` if\n\t * the code point does not represent a value.\n\t */\n\tfunction basicToDigit(codePoint) {\n\t\tif (codePoint - 48 < 10) {\n\t\t\treturn codePoint - 22;\n\t\t}\n\t\tif (codePoint - 65 < 26) {\n\t\t\treturn codePoint - 65;\n\t\t}\n\t\tif (codePoint - 97 < 26) {\n\t\t\treturn codePoint - 97;\n\t\t}\n\t\treturn base;\n\t}\n\n\t/**\n\t * Converts a digit/integer into a basic code point.\n\t * @see `basicToDigit()`\n\t * @private\n\t * @param {Number} digit The numeric value of a basic code point.\n\t * @returns {Number} The basic code point whose value (when used for\n\t * representing integers) is `digit`, which needs to be in the range\n\t * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n\t * used; else, the lowercase form is used. The behavior is undefined\n\t * if `flag` is non-zero and `digit` has no uppercase form.\n\t */\n\tfunction digitToBasic(digit, flag) {\n\t\t// 0..25 map to ASCII a..z or A..Z\n\t\t// 26..35 map to ASCII 0..9\n\t\treturn digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);\n\t}\n\n\t/**\n\t * Bias adaptation function as per section 3.4 of RFC 3492.\n\t * http://tools.ietf.org/html/rfc3492#section-3.4\n\t * @private\n\t */\n\tfunction adapt(delta, numPoints, firstTime) {\n\t\tvar k = 0;\n\t\tdelta = firstTime ? floor(delta / damp) : delta >> 1;\n\t\tdelta += floor(delta / numPoints);\n\t\tfor (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n\t\t\tdelta = floor(delta / baseMinusTMin);\n\t\t}\n\t\treturn floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n\t}\n\n\t/**\n\t * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n\t * symbols.\n\t * @memberOf punycode\n\t * @param {String} input The Punycode string of ASCII-only symbols.\n\t * @returns {String} The resulting string of Unicode symbols.\n\t */\n\tfunction decode(input) {\n\t\t// Don't use UCS-2\n\t\tvar output = [],\n\t\t inputLength = input.length,\n\t\t out,\n\t\t i = 0,\n\t\t n = initialN,\n\t\t bias = initialBias,\n\t\t basic,\n\t\t j,\n\t\t index,\n\t\t oldi,\n\t\t w,\n\t\t k,\n\t\t digit,\n\t\t t,\n\t\t /** Cached calculation results */\n\t\t baseMinusT;\n\n\t\t// Handle the basic code points: let `basic` be the number of input code\n\t\t// points before the last delimiter, or `0` if there is none, then copy\n\t\t// the first basic code points to the output.\n\n\t\tbasic = input.lastIndexOf(delimiter);\n\t\tif (basic < 0) {\n\t\t\tbasic = 0;\n\t\t}\n\n\t\tfor (j = 0; j < basic; ++j) {\n\t\t\t// if it's not a basic code point\n\t\t\tif (input.charCodeAt(j) >= 0x80) {\n\t\t\t\terror('not-basic');\n\t\t\t}\n\t\t\toutput.push(input.charCodeAt(j));\n\t\t}\n\n\t\t// Main decoding loop: start just after the last delimiter if any basic code\n\t\t// points were copied; start at the beginning otherwise.\n\n\t\tfor (index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n\n\t\t\t// `index` is the index of the next character to be consumed.\n\t\t\t// Decode a generalized variable-length integer into `delta`,\n\t\t\t// which gets added to `i`. The overflow checking is easier\n\t\t\t// if we increase `i` as we go, then subtract off its starting\n\t\t\t// value at the end to obtain `delta`.\n\t\t\tfor (oldi = i, w = 1, k = base; /* no condition */; k += base) {\n\n\t\t\t\tif (index >= inputLength) {\n\t\t\t\t\terror('invalid-input');\n\t\t\t\t}\n\n\t\t\t\tdigit = basicToDigit(input.charCodeAt(index++));\n\n\t\t\t\tif (digit >= base || digit > floor((maxInt - i) / w)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\ti += digit * w;\n\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\n\t\t\t\tif (digit < t) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tbaseMinusT = base - t;\n\t\t\t\tif (w > floor(maxInt / baseMinusT)) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tw *= baseMinusT;\n\n\t\t\t}\n\n\t\t\tout = output.length + 1;\n\t\t\tbias = adapt(i - oldi, out, oldi == 0);\n\n\t\t\t// `i` was supposed to wrap around from `out` to `0`,\n\t\t\t// incrementing `n` each time, so we'll fix that now:\n\t\t\tif (floor(i / out) > maxInt - n) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tn += floor(i / out);\n\t\t\ti %= out;\n\n\t\t\t// Insert `n` at position `i` of the output\n\t\t\toutput.splice(i++, 0, n);\n\n\t\t}\n\n\t\treturn ucs2encode(output);\n\t}\n\n\t/**\n\t * Converts a string of Unicode symbols (e.g. a domain name label) to a\n\t * Punycode string of ASCII-only symbols.\n\t * @memberOf punycode\n\t * @param {String} input The string of Unicode symbols.\n\t * @returns {String} The resulting Punycode string of ASCII-only symbols.\n\t */\n\tfunction encode(input) {\n\t\tvar n,\n\t\t delta,\n\t\t handledCPCount,\n\t\t basicLength,\n\t\t bias,\n\t\t j,\n\t\t m,\n\t\t q,\n\t\t k,\n\t\t t,\n\t\t currentValue,\n\t\t output = [],\n\t\t /** `inputLength` will hold the number of code points in `input`. */\n\t\t inputLength,\n\t\t /** Cached calculation results */\n\t\t handledCPCountPlusOne,\n\t\t baseMinusT,\n\t\t qMinusT;\n\n\t\t// Convert the input in UCS-2 to Unicode\n\t\tinput = ucs2decode(input);\n\n\t\t// Cache the length\n\t\tinputLength = input.length;\n\n\t\t// Initialize the state\n\t\tn = initialN;\n\t\tdelta = 0;\n\t\tbias = initialBias;\n\n\t\t// Handle the basic code points\n\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\tcurrentValue = input[j];\n\t\t\tif (currentValue < 0x80) {\n\t\t\t\toutput.push(stringFromCharCode(currentValue));\n\t\t\t}\n\t\t}\n\n\t\thandledCPCount = basicLength = output.length;\n\n\t\t// `handledCPCount` is the number of code points that have been handled;\n\t\t// `basicLength` is the number of basic code points.\n\n\t\t// Finish the basic string - if it is not empty - with a delimiter\n\t\tif (basicLength) {\n\t\t\toutput.push(delimiter);\n\t\t}\n\n\t\t// Main encoding loop:\n\t\twhile (handledCPCount < inputLength) {\n\n\t\t\t// All non-basic code points < n have been handled already. Find the next\n\t\t\t// larger one:\n\t\t\tfor (m = maxInt, j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\t\t\t\tif (currentValue >= n && currentValue < m) {\n\t\t\t\t\tm = currentValue;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Increase `delta` enough to advance the decoder's state to ,\n\t\t\t// but guard against overflow\n\t\t\thandledCPCountPlusOne = handledCPCount + 1;\n\t\t\tif (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n\t\t\t\terror('overflow');\n\t\t\t}\n\n\t\t\tdelta += (m - n) * handledCPCountPlusOne;\n\t\t\tn = m;\n\n\t\t\tfor (j = 0; j < inputLength; ++j) {\n\t\t\t\tcurrentValue = input[j];\n\n\t\t\t\tif (currentValue < n && ++delta > maxInt) {\n\t\t\t\t\terror('overflow');\n\t\t\t\t}\n\n\t\t\t\tif (currentValue == n) {\n\t\t\t\t\t// Represent delta as a generalized variable-length integer\n\t\t\t\t\tfor (q = delta, k = base; /* no condition */; k += base) {\n\t\t\t\t\t\tt = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n\t\t\t\t\t\tif (q < t) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tqMinusT = q - t;\n\t\t\t\t\t\tbaseMinusT = base - t;\n\t\t\t\t\t\toutput.push(\n\t\t\t\t\t\t\tstringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0))\n\t\t\t\t\t\t);\n\t\t\t\t\t\tq = floor(qMinusT / baseMinusT);\n\t\t\t\t\t}\n\n\t\t\t\t\toutput.push(stringFromCharCode(digitToBasic(q, 0)));\n\t\t\t\t\tbias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);\n\t\t\t\t\tdelta = 0;\n\t\t\t\t\t++handledCPCount;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t++delta;\n\t\t\t++n;\n\n\t\t}\n\t\treturn output.join('');\n\t}\n\n\t/**\n\t * Converts a Punycode string representing a domain name or an email address\n\t * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n\t * it doesn't matter if you call it on a string that has already been\n\t * converted to Unicode.\n\t * @memberOf punycode\n\t * @param {String} input The Punycoded domain name or email address to\n\t * convert to Unicode.\n\t * @returns {String} The Unicode representation of the given Punycode\n\t * string.\n\t */\n\tfunction toUnicode(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexPunycode.test(string)\n\t\t\t\t? decode(string.slice(4).toLowerCase())\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/**\n\t * Converts a Unicode string representing a domain name or an email address to\n\t * Punycode. Only the non-ASCII parts of the domain name will be converted,\n\t * i.e. it doesn't matter if you call it with a domain that's already in\n\t * ASCII.\n\t * @memberOf punycode\n\t * @param {String} input The domain name or email address to convert, as a\n\t * Unicode string.\n\t * @returns {String} The Punycode representation of the given domain name or\n\t * email address.\n\t */\n\tfunction toASCII(input) {\n\t\treturn mapDomain(input, function(string) {\n\t\t\treturn regexNonASCII.test(string)\n\t\t\t\t? 'xn--' + encode(string)\n\t\t\t\t: string;\n\t\t});\n\t}\n\n\t/*--------------------------------------------------------------------------*/\n\n\t/** Define the public API */\n\tpunycode = {\n\t\t/**\n\t\t * A string representing the current Punycode.js version number.\n\t\t * @memberOf punycode\n\t\t * @type String\n\t\t */\n\t\t'version': '1.3.2',\n\t\t/**\n\t\t * An object of methods to convert from JavaScript's internal character\n\t\t * representation (UCS-2) to Unicode code points, and back.\n\t\t * @see \n\t\t * @memberOf punycode\n\t\t * @type Object\n\t\t */\n\t\t'ucs2': {\n\t\t\t'decode': ucs2decode,\n\t\t\t'encode': ucs2encode\n\t\t},\n\t\t'decode': decode,\n\t\t'encode': encode,\n\t\t'toASCII': toASCII,\n\t\t'toUnicode': toUnicode\n\t};\n\n\t/** Expose `punycode` */\n\t// Some AMD build optimizers, like r.js, check for specific condition patterns\n\t// like the following:\n\tif (\n\t\ttypeof define == 'function' &&\n\t\ttypeof define.amd == 'object' &&\n\t\tdefine.amd\n\t) {\n\t\tdefine('punycode', function() {\n\t\t\treturn punycode;\n\t\t});\n\t} else if (freeExports && freeModule) {\n\t\tif (module.exports == freeExports) { // in Node.js or RingoJS v0.8.0+\n\t\t\tfreeModule.exports = punycode;\n\t\t} else { // in Narwhal or RingoJS v0.7.0-\n\t\t\tfor (key in punycode) {\n\t\t\t\tpunycode.hasOwnProperty(key) && (freeExports[key] = punycode[key]);\n\t\t\t}\n\t\t}\n\t} else { // in Rhino or a web browser\n\t\troot.punycode = punycode;\n\t}\n\n}(this));\n","'use strict';\n\nmodule.exports = {\n isString: function(arg) {\n return typeof(arg) === 'string';\n },\n isObject: function(arg) {\n return typeof(arg) === 'object' && arg !== null;\n },\n isNull: function(arg) {\n return arg === null;\n },\n isNullOrUndefined: function(arg) {\n return arg == null;\n }\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\n// If obj.hasOwnProperty has been overridden, then calling\n// obj.hasOwnProperty(prop) will break.\n// See: https://github.com/joyent/node/issues/1707\nfunction hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nmodule.exports = function(qs, sep, eq, options) {\n sep = sep || '&';\n eq = eq || '=';\n var obj = {};\n\n if (typeof qs !== 'string' || qs.length === 0) {\n return obj;\n }\n\n var regexp = /\\+/g;\n qs = qs.split(sep);\n\n var maxKeys = 1000;\n if (options && typeof options.maxKeys === 'number') {\n maxKeys = options.maxKeys;\n }\n\n var len = qs.length;\n // maxKeys <= 0 means that we should not limit keys count\n if (maxKeys > 0 && len > maxKeys) {\n len = maxKeys;\n }\n\n for (var i = 0; i < len; ++i) {\n var x = qs[i].replace(regexp, '%20'),\n idx = x.indexOf(eq),\n kstr, vstr, k, v;\n\n if (idx >= 0) {\n kstr = x.substr(0, idx);\n vstr = x.substr(idx + 1);\n } else {\n kstr = x;\n vstr = '';\n }\n\n k = decodeURIComponent(kstr);\n v = decodeURIComponent(vstr);\n\n if (!hasOwnProperty(obj, k)) {\n obj[k] = v;\n } else if (Array.isArray(obj[k])) {\n obj[k].push(v);\n } else {\n obj[k] = [obj[k], v];\n }\n }\n\n return obj;\n};\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar stringifyPrimitive = function(v) {\n switch (typeof v) {\n case 'string':\n return v;\n\n case 'boolean':\n return v ? 'true' : 'false';\n\n case 'number':\n return isFinite(v) ? v : '';\n\n default:\n return '';\n }\n};\n\nmodule.exports = function(obj, sep, eq, name) {\n sep = sep || '&';\n eq = eq || '=';\n if (obj === null) {\n obj = undefined;\n }\n\n if (typeof obj === 'object') {\n return Object.keys(obj).map(function(k) {\n var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;\n if (Array.isArray(obj[k])) {\n return obj[k].map(function(v) {\n return ks + encodeURIComponent(stringifyPrimitive(v));\n }).join(sep);\n } else {\n return ks + encodeURIComponent(stringifyPrimitive(obj[k]));\n }\n }).join(sep);\n\n }\n\n if (!name) return '';\n return encodeURIComponent(stringifyPrimitive(name)) + eq +\n encodeURIComponent(stringifyPrimitive(obj));\n};\n","'use strict';\n\nexports.decode = exports.parse = require('./decode');\nexports.encode = exports.stringify = require('./encode');\n","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n'use strict';\n\nvar punycode = require('punycode');\nvar util = require('./util');\n\nexports.parse = urlParse;\nexports.resolve = urlResolve;\nexports.resolveObject = urlResolveObject;\nexports.format = urlFormat;\n\nexports.Url = Url;\n\nfunction Url() {\n this.protocol = null;\n this.slashes = null;\n this.auth = null;\n this.host = null;\n this.port = null;\n this.hostname = null;\n this.hash = null;\n this.search = null;\n this.query = null;\n this.pathname = null;\n this.path = null;\n this.href = null;\n}\n\n// Reference: RFC 3986, RFC 1808, RFC 2396\n\n// define these here so at least they only have to be\n// compiled once on the first module load.\nvar protocolPattern = /^([a-z0-9.+-]+:)/i,\n portPattern = /:[0-9]*$/,\n\n // Special case for a simple path URL\n simplePathPattern = /^(\\/\\/?(?!\\/)[^\\?\\s]*)(\\?[^\\s]*)?$/,\n\n // RFC 2396: characters reserved for delimiting URLs.\n // We actually just auto-escape these.\n delims = ['<', '>', '\"', '`', ' ', '\\r', '\\n', '\\t'],\n\n // RFC 2396: characters not allowed for various reasons.\n unwise = ['{', '}', '|', '\\\\', '^', '`'].concat(delims),\n\n // Allowed by RFCs, but cause of XSS attacks. Always escape these.\n autoEscape = ['\\''].concat(unwise),\n // Characters that are never ever allowed in a hostname.\n // Note that any invalid chars are also handled, but these\n // are the ones that are *expected* to be seen, so we fast-path\n // them.\n nonHostChars = ['%', '/', '?', ';', '#'].concat(autoEscape),\n hostEndingChars = ['/', '?', '#'],\n hostnameMaxLen = 255,\n hostnamePartPattern = /^[+a-z0-9A-Z_-]{0,63}$/,\n hostnamePartStart = /^([+a-z0-9A-Z_-]{0,63})(.*)$/,\n // protocols that can allow \"unsafe\" and \"unwise\" chars.\n unsafeProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that never have a hostname.\n hostlessProtocol = {\n 'javascript': true,\n 'javascript:': true\n },\n // protocols that always contain a // bit.\n slashedProtocol = {\n 'http': true,\n 'https': true,\n 'ftp': true,\n 'gopher': true,\n 'file': true,\n 'http:': true,\n 'https:': true,\n 'ftp:': true,\n 'gopher:': true,\n 'file:': true\n },\n querystring = require('querystring');\n\nfunction urlParse(url, parseQueryString, slashesDenoteHost) {\n if (url && util.isObject(url) && url instanceof Url) return url;\n\n var u = new Url;\n u.parse(url, parseQueryString, slashesDenoteHost);\n return u;\n}\n\nUrl.prototype.parse = function(url, parseQueryString, slashesDenoteHost) {\n if (!util.isString(url)) {\n throw new TypeError(\"Parameter 'url' must be a string, not \" + typeof url);\n }\n\n // Copy chrome, IE, opera backslash-handling behavior.\n // Back slashes before the query string get converted to forward slashes\n // See: https://code.google.com/p/chromium/issues/detail?id=25916\n var queryIndex = url.indexOf('?'),\n splitter =\n (queryIndex !== -1 && queryIndex < url.indexOf('#')) ? '?' : '#',\n uSplit = url.split(splitter),\n slashRegex = /\\\\/g;\n uSplit[0] = uSplit[0].replace(slashRegex, '/');\n url = uSplit.join(splitter);\n\n var rest = url;\n\n // trim before proceeding.\n // This is to support parse stuff like \" http://foo.com \\n\"\n rest = rest.trim();\n\n if (!slashesDenoteHost && url.split('#').length === 1) {\n // Try fast path regexp\n var simplePath = simplePathPattern.exec(rest);\n if (simplePath) {\n this.path = rest;\n this.href = rest;\n this.pathname = simplePath[1];\n if (simplePath[2]) {\n this.search = simplePath[2];\n if (parseQueryString) {\n this.query = querystring.parse(this.search.substr(1));\n } else {\n this.query = this.search.substr(1);\n }\n } else if (parseQueryString) {\n this.search = '';\n this.query = {};\n }\n return this;\n }\n }\n\n var proto = protocolPattern.exec(rest);\n if (proto) {\n proto = proto[0];\n var lowerProto = proto.toLowerCase();\n this.protocol = lowerProto;\n rest = rest.substr(proto.length);\n }\n\n // figure out if it's got a host\n // user@server is *always* interpreted as a hostname, and url\n // resolution will treat //foo/bar as host=foo,path=bar because that's\n // how the browser resolves relative URLs.\n if (slashesDenoteHost || proto || rest.match(/^\\/\\/[^@\\/]+@[^@\\/]+/)) {\n var slashes = rest.substr(0, 2) === '//';\n if (slashes && !(proto && hostlessProtocol[proto])) {\n rest = rest.substr(2);\n this.slashes = true;\n }\n }\n\n if (!hostlessProtocol[proto] &&\n (slashes || (proto && !slashedProtocol[proto]))) {\n\n // there's a hostname.\n // the first instance of /, ?, ;, or # ends the host.\n //\n // If there is an @ in the hostname, then non-host chars *are* allowed\n // to the left of the last @ sign, unless some host-ending character\n // comes *before* the @-sign.\n // URLs are obnoxious.\n //\n // ex:\n // http://a@b@c/ => user:a@b host:c\n // http://a@b?@c => user:a host:c path:/?@c\n\n // v0.12 TODO(isaacs): This is not quite how Chrome does things.\n // Review our test case against browsers more comprehensively.\n\n // find the first instance of any hostEndingChars\n var hostEnd = -1;\n for (var i = 0; i < hostEndingChars.length; i++) {\n var hec = rest.indexOf(hostEndingChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n\n // at this point, either we have an explicit point where the\n // auth portion cannot go past, or the last @ char is the decider.\n var auth, atSign;\n if (hostEnd === -1) {\n // atSign can be anywhere.\n atSign = rest.lastIndexOf('@');\n } else {\n // atSign must be in auth portion.\n // http://a@b/c@d => host:b auth:a path:/c@d\n atSign = rest.lastIndexOf('@', hostEnd);\n }\n\n // Now we have a portion which is definitely the auth.\n // Pull that off.\n if (atSign !== -1) {\n auth = rest.slice(0, atSign);\n rest = rest.slice(atSign + 1);\n this.auth = decodeURIComponent(auth);\n }\n\n // the host is the remaining to the left of the first non-host char\n hostEnd = -1;\n for (var i = 0; i < nonHostChars.length; i++) {\n var hec = rest.indexOf(nonHostChars[i]);\n if (hec !== -1 && (hostEnd === -1 || hec < hostEnd))\n hostEnd = hec;\n }\n // if we still have not hit it, then the entire thing is a host.\n if (hostEnd === -1)\n hostEnd = rest.length;\n\n this.host = rest.slice(0, hostEnd);\n rest = rest.slice(hostEnd);\n\n // pull out port.\n this.parseHost();\n\n // we've indicated that there is a hostname,\n // so even if it's empty, it has to be present.\n this.hostname = this.hostname || '';\n\n // if hostname begins with [ and ends with ]\n // assume that it's an IPv6 address.\n var ipv6Hostname = this.hostname[0] === '[' &&\n this.hostname[this.hostname.length - 1] === ']';\n\n // validate a little.\n if (!ipv6Hostname) {\n var hostparts = this.hostname.split(/\\./);\n for (var i = 0, l = hostparts.length; i < l; i++) {\n var part = hostparts[i];\n if (!part) continue;\n if (!part.match(hostnamePartPattern)) {\n var newpart = '';\n for (var j = 0, k = part.length; j < k; j++) {\n if (part.charCodeAt(j) > 127) {\n // we replace non-ASCII char with a temporary placeholder\n // we need this to make sure size of hostname is not\n // broken by replacing non-ASCII by nothing\n newpart += 'x';\n } else {\n newpart += part[j];\n }\n }\n // we test again with ASCII char only\n if (!newpart.match(hostnamePartPattern)) {\n var validParts = hostparts.slice(0, i);\n var notHost = hostparts.slice(i + 1);\n var bit = part.match(hostnamePartStart);\n if (bit) {\n validParts.push(bit[1]);\n notHost.unshift(bit[2]);\n }\n if (notHost.length) {\n rest = '/' + notHost.join('.') + rest;\n }\n this.hostname = validParts.join('.');\n break;\n }\n }\n }\n }\n\n if (this.hostname.length > hostnameMaxLen) {\n this.hostname = '';\n } else {\n // hostnames are always lower case.\n this.hostname = this.hostname.toLowerCase();\n }\n\n if (!ipv6Hostname) {\n // IDNA Support: Returns a punycoded representation of \"domain\".\n // It only converts parts of the domain name that\n // have non-ASCII characters, i.e. it doesn't matter if\n // you call it with a domain that already is ASCII-only.\n this.hostname = punycode.toASCII(this.hostname);\n }\n\n var p = this.port ? ':' + this.port : '';\n var h = this.hostname || '';\n this.host = h + p;\n this.href += this.host;\n\n // strip [ and ] from the hostname\n // the host field still retains them, though\n if (ipv6Hostname) {\n this.hostname = this.hostname.substr(1, this.hostname.length - 2);\n if (rest[0] !== '/') {\n rest = '/' + rest;\n }\n }\n }\n\n // now rest is set to the post-host stuff.\n // chop off any delim chars.\n if (!unsafeProtocol[lowerProto]) {\n\n // First, make 100% sure that any \"autoEscape\" chars get\n // escaped, even if encodeURIComponent doesn't think they\n // need to be.\n for (var i = 0, l = autoEscape.length; i < l; i++) {\n var ae = autoEscape[i];\n if (rest.indexOf(ae) === -1)\n continue;\n var esc = encodeURIComponent(ae);\n if (esc === ae) {\n esc = escape(ae);\n }\n rest = rest.split(ae).join(esc);\n }\n }\n\n\n // chop off from the tail first.\n var hash = rest.indexOf('#');\n if (hash !== -1) {\n // got a fragment string.\n this.hash = rest.substr(hash);\n rest = rest.slice(0, hash);\n }\n var qm = rest.indexOf('?');\n if (qm !== -1) {\n this.search = rest.substr(qm);\n this.query = rest.substr(qm + 1);\n if (parseQueryString) {\n this.query = querystring.parse(this.query);\n }\n rest = rest.slice(0, qm);\n } else if (parseQueryString) {\n // no query string, but parseQueryString still requested\n this.search = '';\n this.query = {};\n }\n if (rest) this.pathname = rest;\n if (slashedProtocol[lowerProto] &&\n this.hostname && !this.pathname) {\n this.pathname = '/';\n }\n\n //to support http.request\n if (this.pathname || this.search) {\n var p = this.pathname || '';\n var s = this.search || '';\n this.path = p + s;\n }\n\n // finally, reconstruct the href based on what has been validated.\n this.href = this.format();\n return this;\n};\n\n// format a parsed object into a url string\nfunction urlFormat(obj) {\n // ensure it's an object, and not a string url.\n // If it's an obj, this is a no-op.\n // this way, you can call url_format() on strings\n // to clean up potentially wonky urls.\n if (util.isString(obj)) obj = urlParse(obj);\n if (!(obj instanceof Url)) return Url.prototype.format.call(obj);\n return obj.format();\n}\n\nUrl.prototype.format = function() {\n var auth = this.auth || '';\n if (auth) {\n auth = encodeURIComponent(auth);\n auth = auth.replace(/%3A/i, ':');\n auth += '@';\n }\n\n var protocol = this.protocol || '',\n pathname = this.pathname || '',\n hash = this.hash || '',\n host = false,\n query = '';\n\n if (this.host) {\n host = auth + this.host;\n } else if (this.hostname) {\n host = auth + (this.hostname.indexOf(':') === -1 ?\n this.hostname :\n '[' + this.hostname + ']');\n if (this.port) {\n host += ':' + this.port;\n }\n }\n\n if (this.query &&\n util.isObject(this.query) &&\n Object.keys(this.query).length) {\n query = querystring.stringify(this.query);\n }\n\n var search = this.search || (query && ('?' + query)) || '';\n\n if (protocol && protocol.substr(-1) !== ':') protocol += ':';\n\n // only the slashedProtocols get the //. Not mailto:, xmpp:, etc.\n // unless they had them to begin with.\n if (this.slashes ||\n (!protocol || slashedProtocol[protocol]) && host !== false) {\n host = '//' + (host || '');\n if (pathname && pathname.charAt(0) !== '/') pathname = '/' + pathname;\n } else if (!host) {\n host = '';\n }\n\n if (hash && hash.charAt(0) !== '#') hash = '#' + hash;\n if (search && search.charAt(0) !== '?') search = '?' + search;\n\n pathname = pathname.replace(/[?#]/g, function(match) {\n return encodeURIComponent(match);\n });\n search = search.replace('#', '%23');\n\n return protocol + host + pathname + search + hash;\n};\n\nfunction urlResolve(source, relative) {\n return urlParse(source, false, true).resolve(relative);\n}\n\nUrl.prototype.resolve = function(relative) {\n return this.resolveObject(urlParse(relative, false, true)).format();\n};\n\nfunction urlResolveObject(source, relative) {\n if (!source) return relative;\n return urlParse(source, false, true).resolveObject(relative);\n}\n\nUrl.prototype.resolveObject = function(relative) {\n if (util.isString(relative)) {\n var rel = new Url();\n rel.parse(relative, false, true);\n relative = rel;\n }\n\n var result = new Url();\n var tkeys = Object.keys(this);\n for (var tk = 0; tk < tkeys.length; tk++) {\n var tkey = tkeys[tk];\n result[tkey] = this[tkey];\n }\n\n // hash is always overridden, no matter what.\n // even href=\"\" will remove it.\n result.hash = relative.hash;\n\n // if the relative url is empty, then there's nothing left to do here.\n if (relative.href === '') {\n result.href = result.format();\n return result;\n }\n\n // hrefs like //foo/bar always cut to the protocol.\n if (relative.slashes && !relative.protocol) {\n // take everything except the protocol from relative\n var rkeys = Object.keys(relative);\n for (var rk = 0; rk < rkeys.length; rk++) {\n var rkey = rkeys[rk];\n if (rkey !== 'protocol')\n result[rkey] = relative[rkey];\n }\n\n //urlParse appends trailing / to urls like http://www.example.com\n if (slashedProtocol[result.protocol] &&\n result.hostname && !result.pathname) {\n result.path = result.pathname = '/';\n }\n\n result.href = result.format();\n return result;\n }\n\n if (relative.protocol && relative.protocol !== result.protocol) {\n // if it's a known url protocol, then changing\n // the protocol does weird things\n // first, if it's not file:, then we MUST have a host,\n // and if there was a path\n // to begin with, then we MUST have a path.\n // if it is file:, then the host is dropped,\n // because that's known to be hostless.\n // anything else is assumed to be absolute.\n if (!slashedProtocol[relative.protocol]) {\n var keys = Object.keys(relative);\n for (var v = 0; v < keys.length; v++) {\n var k = keys[v];\n result[k] = relative[k];\n }\n result.href = result.format();\n return result;\n }\n\n result.protocol = relative.protocol;\n if (!relative.host && !hostlessProtocol[relative.protocol]) {\n var relPath = (relative.pathname || '').split('/');\n while (relPath.length && !(relative.host = relPath.shift()));\n if (!relative.host) relative.host = '';\n if (!relative.hostname) relative.hostname = '';\n if (relPath[0] !== '') relPath.unshift('');\n if (relPath.length < 2) relPath.unshift('');\n result.pathname = relPath.join('/');\n } else {\n result.pathname = relative.pathname;\n }\n result.search = relative.search;\n result.query = relative.query;\n result.host = relative.host || '';\n result.auth = relative.auth;\n result.hostname = relative.hostname || relative.host;\n result.port = relative.port;\n // to support http.request\n if (result.pathname || result.search) {\n var p = result.pathname || '';\n var s = result.search || '';\n result.path = p + s;\n }\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n }\n\n var isSourceAbs = (result.pathname && result.pathname.charAt(0) === '/'),\n isRelAbs = (\n relative.host ||\n relative.pathname && relative.pathname.charAt(0) === '/'\n ),\n mustEndAbs = (isRelAbs || isSourceAbs ||\n (result.host && relative.pathname)),\n removeAllDots = mustEndAbs,\n srcPath = result.pathname && result.pathname.split('/') || [],\n relPath = relative.pathname && relative.pathname.split('/') || [],\n psychotic = result.protocol && !slashedProtocol[result.protocol];\n\n // if the url is a non-slashed url, then relative\n // links like ../.. should be able\n // to crawl up to the hostname, as well. This is strange.\n // result.protocol has already been set by now.\n // Later on, put the first path part into the host field.\n if (psychotic) {\n result.hostname = '';\n result.port = null;\n if (result.host) {\n if (srcPath[0] === '') srcPath[0] = result.host;\n else srcPath.unshift(result.host);\n }\n result.host = '';\n if (relative.protocol) {\n relative.hostname = null;\n relative.port = null;\n if (relative.host) {\n if (relPath[0] === '') relPath[0] = relative.host;\n else relPath.unshift(relative.host);\n }\n relative.host = null;\n }\n mustEndAbs = mustEndAbs && (relPath[0] === '' || srcPath[0] === '');\n }\n\n if (isRelAbs) {\n // it's absolute.\n result.host = (relative.host || relative.host === '') ?\n relative.host : result.host;\n result.hostname = (relative.hostname || relative.hostname === '') ?\n relative.hostname : result.hostname;\n result.search = relative.search;\n result.query = relative.query;\n srcPath = relPath;\n // fall through to the dot-handling below.\n } else if (relPath.length) {\n // it's relative\n // throw away the existing file, and take the new path instead.\n if (!srcPath) srcPath = [];\n srcPath.pop();\n srcPath = srcPath.concat(relPath);\n result.search = relative.search;\n result.query = relative.query;\n } else if (!util.isNullOrUndefined(relative.search)) {\n // just pull out the search.\n // like href='?foo'.\n // Put this after the other two cases because it simplifies the booleans\n if (psychotic) {\n result.hostname = result.host = srcPath.shift();\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n result.search = relative.search;\n result.query = relative.query;\n //to support http.request\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.href = result.format();\n return result;\n }\n\n if (!srcPath.length) {\n // no path at all. easy.\n // we've already handled the other stuff above.\n result.pathname = null;\n //to support http.request\n if (result.search) {\n result.path = '/' + result.search;\n } else {\n result.path = null;\n }\n result.href = result.format();\n return result;\n }\n\n // if a url ENDs in . or .., then it must get a trailing slash.\n // however, if it ends in anything else non-slashy,\n // then it must NOT get a trailing slash.\n var last = srcPath.slice(-1)[0];\n var hasTrailingSlash = (\n (result.host || relative.host || srcPath.length > 1) &&\n (last === '.' || last === '..') || last === '');\n\n // strip single dots, resolve double dots to parent dir\n // if the path tries to go above the root, `up` ends up > 0\n var up = 0;\n for (var i = srcPath.length; i >= 0; i--) {\n last = srcPath[i];\n if (last === '.') {\n srcPath.splice(i, 1);\n } else if (last === '..') {\n srcPath.splice(i, 1);\n up++;\n } else if (up) {\n srcPath.splice(i, 1);\n up--;\n }\n }\n\n // if the path is allowed to go above the root, restore leading ..s\n if (!mustEndAbs && !removeAllDots) {\n for (; up--; up) {\n srcPath.unshift('..');\n }\n }\n\n if (mustEndAbs && srcPath[0] !== '' &&\n (!srcPath[0] || srcPath[0].charAt(0) !== '/')) {\n srcPath.unshift('');\n }\n\n if (hasTrailingSlash && (srcPath.join('/').substr(-1) !== '/')) {\n srcPath.push('');\n }\n\n var isAbsolute = srcPath[0] === '' ||\n (srcPath[0] && srcPath[0].charAt(0) === '/');\n\n // put the host back\n if (psychotic) {\n result.hostname = result.host = isAbsolute ? '' :\n srcPath.length ? srcPath.shift() : '';\n //occationaly the auth can get stuck only in host\n //this especially happens in cases like\n //url.resolveObject('mailto:local1@domain1', 'local2@domain2')\n var authInHost = result.host && result.host.indexOf('@') > 0 ?\n result.host.split('@') : false;\n if (authInHost) {\n result.auth = authInHost.shift();\n result.host = result.hostname = authInHost.shift();\n }\n }\n\n mustEndAbs = mustEndAbs || (result.host && srcPath.length);\n\n if (mustEndAbs && !isAbsolute) {\n srcPath.unshift('');\n }\n\n if (!srcPath.length) {\n result.pathname = null;\n result.path = null;\n } else {\n result.pathname = srcPath.join('/');\n }\n\n //to support request.http\n if (!util.isNull(result.pathname) || !util.isNull(result.search)) {\n result.path = (result.pathname ? result.pathname : '') +\n (result.search ? result.search : '');\n }\n result.auth = relative.auth || result.auth;\n result.slashes = result.slashes || relative.slashes;\n result.href = result.format();\n return result;\n};\n\nUrl.prototype.parseHost = function() {\n var host = this.host;\n var port = portPattern.exec(host);\n if (port) {\n port = port[0];\n if (port !== ':') {\n this.port = port.substr(1);\n }\n host = host.substr(0, host.length - port.length);\n }\n if (host) this.hostname = host;\n};\n","// @flow\n\nimport Reference from './reference/v8.json';\nimport type {StylePropertySpecification} from './style-spec';\nimport type {\n StyleSpecification,\n SourceSpecification,\n LayerSpecification,\n PropertyValueSpecification,\n DataDrivenPropertyValueSpecification\n} from './types';\n\nfunction getPropertyReference(propertyName): StylePropertySpecification {\n for (let i = 0; i < Reference.layout.length; i++) {\n for (const key in Reference[Reference.layout[i]]) {\n if (key === propertyName) return (Reference[Reference.layout[i]][key]: any);\n }\n }\n for (let i = 0; i < Reference.paint.length; i++) {\n for (const key in Reference[Reference.paint[i]]) {\n if (key === propertyName) return (Reference[Reference.paint[i]][key]: any);\n }\n }\n\n return (null: any);\n}\n\nexport function eachSource(style: StyleSpecification, callback: (_: SourceSpecification) => void) {\n for (const k in style.sources) {\n callback(style.sources[k]);\n }\n}\n\nexport function eachLayer(style: StyleSpecification, callback: (_: LayerSpecification) => void) {\n for (const layer of style.layers) {\n callback(layer);\n }\n}\n\ntype PropertyCallback = ({\n path: [string, 'paint' | 'layout', string], // [layerid, paint/layout, property key]\n key: string,\n value: PropertyValueSpecification | DataDrivenPropertyValueSpecification,\n reference: StylePropertySpecification,\n set: (PropertyValueSpecification | DataDrivenPropertyValueSpecification) => void\n}) => void;\n\nexport function eachProperty(\n style: StyleSpecification,\n options: {paint?: boolean, layout?: boolean},\n callback: PropertyCallback\n) {\n function inner(layer, propertyType: 'paint' | 'layout') {\n const properties = (layer[propertyType]: any);\n if (!properties) return;\n Object.keys(properties).forEach((key) => {\n callback({\n path: [layer.id, propertyType, key],\n key,\n value: properties[key],\n reference: getPropertyReference(key),\n set(x) {\n properties[key] = x;\n }\n });\n });\n }\n\n eachLayer(style, (layer) => {\n if (options.paint) {\n inner(layer, 'paint');\n }\n if (options.layout) {\n inner(layer, 'layout');\n }\n });\n}\n","\nimport URL from 'url';\nimport {eachSource, eachLayer, eachProperty} from '../visit';\n\nfunction eachLayout(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('layout') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction eachPaint(layer, callback) {\n for (const k in layer) {\n if (k.indexOf('paint') === 0) {\n callback(layer[k], k);\n }\n }\n}\n\nfunction resolveConstant(style, value) {\n if (typeof value === 'string' && value[0] === '@') {\n return resolveConstant(style, style.constants[value]);\n } else {\n return value;\n }\n}\n\nfunction isFunction(value) {\n return Array.isArray(value.stops);\n}\n\nfunction renameProperty(obj, from, to) {\n obj[to] = obj[from]; delete obj[from];\n}\n\nexport default function(style) {\n style.version = 8;\n\n // Rename properties, reverse coordinates in source and layers\n eachSource(style, (source) => {\n if (source.type === 'video' && source.url !== undefined) {\n renameProperty(source, 'url', 'urls');\n }\n if (source.type === 'video') {\n source.coordinates.forEach((coord) => {\n return coord.reverse();\n });\n }\n });\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['symbol-min-distance'] !== undefined) {\n renameProperty(layout, 'symbol-min-distance', 'symbol-spacing');\n }\n });\n\n eachPaint(layer, (paint) => {\n if (paint['background-image'] !== undefined) {\n renameProperty(paint, 'background-image', 'background-pattern');\n }\n if (paint['line-image'] !== undefined) {\n renameProperty(paint, 'line-image', 'line-pattern');\n }\n if (paint['fill-image'] !== undefined) {\n renameProperty(paint, 'fill-image', 'fill-pattern');\n }\n });\n });\n\n // Inline Constants\n eachProperty(style, {paint: true, layout: true}, (property) => {\n const value = resolveConstant(style, property.value);\n\n if (isFunction(value)) {\n value.stops.forEach((stop) => {\n stop[1] = resolveConstant(style, stop[1]);\n });\n }\n\n property.set(value);\n });\n delete style.constants;\n\n eachLayer(style, (layer) => {\n // get rid of text-max-size, icon-max-size\n // turn text-size, icon-size into layout properties\n // https://github.com/mapbox/mapbox-gl-style-spec/issues/255\n\n eachLayout(layer, (layout) => {\n delete layout['text-max-size'];\n delete layout['icon-max-size'];\n });\n\n eachPaint(layer, (paint) => {\n if (paint['text-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['text-size'] = paint['text-size'];\n delete paint['text-size'];\n }\n\n if (paint['icon-size']) {\n if (!layer.layout) layer.layout = {};\n layer.layout['icon-size'] = paint['icon-size'];\n delete paint['icon-size'];\n }\n });\n });\n\n function migrateFontstackURL(input) {\n const inputParsed = URL.parse(input);\n const inputPathnameParts = inputParsed.pathname.split('/');\n\n if (inputParsed.protocol !== 'mapbox:') {\n return input;\n\n } else if (inputParsed.hostname === 'fontstack') {\n assert(decodeURI(inputParsed.pathname) === '/{fontstack}/{range}.pbf');\n return 'mapbox://fonts/mapbox/{fontstack}/{range}.pbf';\n\n } else if (inputParsed.hostname === 'fonts') {\n assert(inputPathnameParts[1] === 'v1');\n assert(decodeURI(inputPathnameParts[3]) === '{fontstack}');\n assert(decodeURI(inputPathnameParts[4]) === '{range}.pbf');\n return `mapbox://fonts/${inputPathnameParts[2]}/{fontstack}/{range}.pbf`;\n\n } else {\n assert(false);\n }\n\n function assert(predicate) {\n if (!predicate) {\n throw new Error(`Invalid font url: \"${input}\"`);\n }\n }\n }\n\n if (style.glyphs) {\n style.glyphs = migrateFontstackURL(style.glyphs);\n }\n\n function migrateFontStack(font) {\n function splitAndTrim(string) {\n return string.split(',').map((s) => {\n return s.trim();\n });\n }\n\n if (Array.isArray(font)) {\n // Assume it's a previously migrated font-array.\n return font;\n\n } else if (typeof font === 'string') {\n return splitAndTrim(font);\n\n } else if (typeof font === 'object') {\n font.stops.forEach((stop) => {\n stop[1] = splitAndTrim(stop[1]);\n });\n return font;\n\n } else {\n throw new Error(\"unexpected font value\");\n }\n }\n\n eachLayer(style, (layer) => {\n eachLayout(layer, (layout) => {\n if (layout['text-font']) {\n layout['text-font'] = migrateFontStack(layout['text-font']);\n }\n });\n });\n\n // Reverse order of symbol layers. This is an imperfect migration.\n //\n // The order of a symbol layer in the layers list affects two things:\n // - how it is drawn relative to other layers (like oneway arrows below bridges)\n // - the placement priority compared to other layers\n //\n // It's impossible to reverse the placement priority without breaking the draw order\n // in some cases. This migration only reverses the order of symbol layers that\n // are above all other types of layers.\n //\n // Symbol layers that are at the top of the map preserve their priority.\n // Symbol layers that are below another type (line, fill) of layer preserve their draw order.\n\n let firstSymbolLayer = 0;\n for (let i = style.layers.length - 1; i >= 0; i--) {\n const layer = style.layers[i];\n if (layer.type !== 'symbol') {\n firstSymbolLayer = i + 1;\n break;\n }\n }\n\n const symbolLayers = style.layers.splice(firstSymbolLayer);\n symbolLayers.reverse();\n style.layers = style.layers.concat(symbolLayers);\n\n return style;\n}\n","// @flow\n\nexport default function (output: any, ...inputs: Array) {\n for (const input of inputs) {\n for (const k in input) {\n output[k] = input[k];\n }\n }\n return output;\n}\n","// @flow\n\nclass ParsingError extends Error {\n key: string;\n message: string;\n constructor(key: string, message: string) {\n super(message);\n this.message = message;\n this.key = key;\n }\n}\n\nexport default ParsingError;\n","// @flow\n\nimport type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nclass Scope {\n parent: ?Scope;\n bindings: {[_: string]: Expression};\n constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) {\n this.parent = parent;\n this.bindings = {};\n for (const [name, expression] of bindings) {\n this.bindings[name] = expression;\n }\n }\n\n concat(bindings: Array<[string, Expression]>) {\n return new Scope(this, bindings);\n }\n\n get(name: string): Expression {\n if (this.bindings[name]) { return this.bindings[name]; }\n if (this.parent) { return this.parent.get(name); }\n throw new Error(`${name} not found in scope.`);\n }\n\n has(name: string): boolean {\n if (this.bindings[name]) return true;\n return this.parent ? this.parent.has(name) : false;\n }\n}\n\nexport default Scope;\n","// @flow\n\nexport type NullTypeT = { kind: 'null' };\nexport type NumberTypeT = { kind: 'number' };\nexport type StringTypeT = { kind: 'string' };\nexport type BooleanTypeT = { kind: 'boolean' };\nexport type ColorTypeT = { kind: 'color' };\nexport type ObjectTypeT = { kind: 'object' };\nexport type ValueTypeT = { kind: 'value' };\nexport type ErrorTypeT = { kind: 'error' };\nexport type CollatorTypeT = { kind: 'collator' };\nexport type FormattedTypeT = { kind: 'formatted' };\nexport type ResolvedImageTypeT = { kind: 'resolvedImage' };\n\nexport type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite';\n\nexport type Type =\n NullTypeT |\n NumberTypeT |\n StringTypeT |\n BooleanTypeT |\n ColorTypeT |\n ObjectTypeT |\n ValueTypeT |\n ArrayType | // eslint-disable-line no-use-before-define\n ErrorTypeT |\n CollatorTypeT |\n FormattedTypeT |\n ResolvedImageTypeT\n\nexport type ArrayType = {\n kind: 'array',\n itemType: Type,\n N: ?number\n}\n\nexport type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object'\n\nexport const NullType = {kind: 'null'};\nexport const NumberType = {kind: 'number'};\nexport const StringType = {kind: 'string'};\nexport const BooleanType = {kind: 'boolean'};\nexport const ColorType = {kind: 'color'};\nexport const ObjectType = {kind: 'object'};\nexport const ValueType = {kind: 'value'};\nexport const ErrorType = {kind: 'error'};\nexport const CollatorType = {kind: 'collator'};\nexport const FormattedType = {kind: 'formatted'};\nexport const ResolvedImageType = {kind: 'resolvedImage'};\n\nexport function array(itemType: Type, N: ?number): ArrayType {\n return {\n kind: 'array',\n itemType,\n N\n };\n}\n\nexport function toString(type: Type): string {\n if (type.kind === 'array') {\n const itemType = toString(type.itemType);\n return typeof type.N === 'number' ?\n `array<${itemType}, ${type.N}>` :\n type.itemType.kind === 'value' ? 'array' : `array<${itemType}>`;\n } else {\n return type.kind;\n }\n}\n\nconst valueMemberTypes = [\n NullType,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n FormattedType,\n ObjectType,\n array(ValueType),\n ResolvedImageType\n];\n\n/**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message.\n * @private\n */\nexport function checkSubtype(expected: Type, t: Type): ?string {\n if (t.kind === 'error') {\n // Error is a subtype of every type\n return null;\n } else if (expected.kind === 'array') {\n if (t.kind === 'array' &&\n ((t.N === 0 && t.itemType.kind === 'value') || !checkSubtype(expected.itemType, t.itemType)) &&\n (typeof expected.N !== 'number' || expected.N === t.N)) {\n return null;\n }\n } else if (expected.kind === t.kind) {\n return null;\n } else if (expected.kind === 'value') {\n for (const memberType of valueMemberTypes) {\n if (!checkSubtype(memberType, t)) {\n return null;\n }\n }\n }\n\n return `Expected ${toString(expected)} but found ${toString(t)} instead.`;\n}\n\nexport function isValidType(provided: Type, allowedTypes: Array): boolean {\n return allowedTypes.some(t => t.kind === provided.kind);\n}\n\nexport function isValidNativeType(provided: any, allowedTypes: Array): boolean {\n return allowedTypes.some(t => {\n if (t === 'null') {\n return provided === null;\n } else if (t === 'array') {\n return Array.isArray(provided);\n } else if (t === 'object') {\n return provided && !Array.isArray(provided) && typeof provided === 'object';\n } else {\n return t === typeof provided;\n }\n });\n}\n","// (c) Dean McNamee , 2012.\n//\n// https://github.com/deanm/css-color-parser-js\n//\n// Permission is hereby granted, free of charge, to any person obtaining a copy\n// of this software and associated documentation files (the \"Software\"), to\n// deal in the Software without restriction, including without limitation the\n// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n// sell copies of the Software, and to permit persons to whom the Software is\n// furnished to do so, subject to the following conditions:\n//\n// The above copyright notice and this permission notice shall be included in\n// all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n// IN THE SOFTWARE.\n\n// http://www.w3.org/TR/css3-color/\nvar kCSSColorTable = {\n \"transparent\": [0,0,0,0], \"aliceblue\": [240,248,255,1],\n \"antiquewhite\": [250,235,215,1], \"aqua\": [0,255,255,1],\n \"aquamarine\": [127,255,212,1], \"azure\": [240,255,255,1],\n \"beige\": [245,245,220,1], \"bisque\": [255,228,196,1],\n \"black\": [0,0,0,1], \"blanchedalmond\": [255,235,205,1],\n \"blue\": [0,0,255,1], \"blueviolet\": [138,43,226,1],\n \"brown\": [165,42,42,1], \"burlywood\": [222,184,135,1],\n \"cadetblue\": [95,158,160,1], \"chartreuse\": [127,255,0,1],\n \"chocolate\": [210,105,30,1], \"coral\": [255,127,80,1],\n \"cornflowerblue\": [100,149,237,1], \"cornsilk\": [255,248,220,1],\n \"crimson\": [220,20,60,1], \"cyan\": [0,255,255,1],\n \"darkblue\": [0,0,139,1], \"darkcyan\": [0,139,139,1],\n \"darkgoldenrod\": [184,134,11,1], \"darkgray\": [169,169,169,1],\n \"darkgreen\": [0,100,0,1], \"darkgrey\": [169,169,169,1],\n \"darkkhaki\": [189,183,107,1], \"darkmagenta\": [139,0,139,1],\n \"darkolivegreen\": [85,107,47,1], \"darkorange\": [255,140,0,1],\n \"darkorchid\": [153,50,204,1], \"darkred\": [139,0,0,1],\n \"darksalmon\": [233,150,122,1], \"darkseagreen\": [143,188,143,1],\n \"darkslateblue\": [72,61,139,1], \"darkslategray\": [47,79,79,1],\n \"darkslategrey\": [47,79,79,1], \"darkturquoise\": [0,206,209,1],\n \"darkviolet\": [148,0,211,1], \"deeppink\": [255,20,147,1],\n \"deepskyblue\": [0,191,255,1], \"dimgray\": [105,105,105,1],\n \"dimgrey\": [105,105,105,1], \"dodgerblue\": [30,144,255,1],\n \"firebrick\": [178,34,34,1], \"floralwhite\": [255,250,240,1],\n \"forestgreen\": [34,139,34,1], \"fuchsia\": [255,0,255,1],\n \"gainsboro\": [220,220,220,1], \"ghostwhite\": [248,248,255,1],\n \"gold\": [255,215,0,1], \"goldenrod\": [218,165,32,1],\n \"gray\": [128,128,128,1], \"green\": [0,128,0,1],\n \"greenyellow\": [173,255,47,1], \"grey\": [128,128,128,1],\n \"honeydew\": [240,255,240,1], \"hotpink\": [255,105,180,1],\n \"indianred\": [205,92,92,1], \"indigo\": [75,0,130,1],\n \"ivory\": [255,255,240,1], \"khaki\": [240,230,140,1],\n \"lavender\": [230,230,250,1], \"lavenderblush\": [255,240,245,1],\n \"lawngreen\": [124,252,0,1], \"lemonchiffon\": [255,250,205,1],\n \"lightblue\": [173,216,230,1], \"lightcoral\": [240,128,128,1],\n \"lightcyan\": [224,255,255,1], \"lightgoldenrodyellow\": [250,250,210,1],\n \"lightgray\": [211,211,211,1], \"lightgreen\": [144,238,144,1],\n \"lightgrey\": [211,211,211,1], \"lightpink\": [255,182,193,1],\n \"lightsalmon\": [255,160,122,1], \"lightseagreen\": [32,178,170,1],\n \"lightskyblue\": [135,206,250,1], \"lightslategray\": [119,136,153,1],\n \"lightslategrey\": [119,136,153,1], \"lightsteelblue\": [176,196,222,1],\n \"lightyellow\": [255,255,224,1], \"lime\": [0,255,0,1],\n \"limegreen\": [50,205,50,1], \"linen\": [250,240,230,1],\n \"magenta\": [255,0,255,1], \"maroon\": [128,0,0,1],\n \"mediumaquamarine\": [102,205,170,1], \"mediumblue\": [0,0,205,1],\n \"mediumorchid\": [186,85,211,1], \"mediumpurple\": [147,112,219,1],\n \"mediumseagreen\": [60,179,113,1], \"mediumslateblue\": [123,104,238,1],\n \"mediumspringgreen\": [0,250,154,1], \"mediumturquoise\": [72,209,204,1],\n \"mediumvioletred\": [199,21,133,1], \"midnightblue\": [25,25,112,1],\n \"mintcream\": [245,255,250,1], \"mistyrose\": [255,228,225,1],\n \"moccasin\": [255,228,181,1], \"navajowhite\": [255,222,173,1],\n \"navy\": [0,0,128,1], \"oldlace\": [253,245,230,1],\n \"olive\": [128,128,0,1], \"olivedrab\": [107,142,35,1],\n \"orange\": [255,165,0,1], \"orangered\": [255,69,0,1],\n \"orchid\": [218,112,214,1], \"palegoldenrod\": [238,232,170,1],\n \"palegreen\": [152,251,152,1], \"paleturquoise\": [175,238,238,1],\n \"palevioletred\": [219,112,147,1], \"papayawhip\": [255,239,213,1],\n \"peachpuff\": [255,218,185,1], \"peru\": [205,133,63,1],\n \"pink\": [255,192,203,1], \"plum\": [221,160,221,1],\n \"powderblue\": [176,224,230,1], \"purple\": [128,0,128,1],\n \"rebeccapurple\": [102,51,153,1],\n \"red\": [255,0,0,1], \"rosybrown\": [188,143,143,1],\n \"royalblue\": [65,105,225,1], \"saddlebrown\": [139,69,19,1],\n \"salmon\": [250,128,114,1], \"sandybrown\": [244,164,96,1],\n \"seagreen\": [46,139,87,1], \"seashell\": [255,245,238,1],\n \"sienna\": [160,82,45,1], \"silver\": [192,192,192,1],\n \"skyblue\": [135,206,235,1], \"slateblue\": [106,90,205,1],\n \"slategray\": [112,128,144,1], \"slategrey\": [112,128,144,1],\n \"snow\": [255,250,250,1], \"springgreen\": [0,255,127,1],\n \"steelblue\": [70,130,180,1], \"tan\": [210,180,140,1],\n \"teal\": [0,128,128,1], \"thistle\": [216,191,216,1],\n \"tomato\": [255,99,71,1], \"turquoise\": [64,224,208,1],\n \"violet\": [238,130,238,1], \"wheat\": [245,222,179,1],\n \"white\": [255,255,255,1], \"whitesmoke\": [245,245,245,1],\n \"yellow\": [255,255,0,1], \"yellowgreen\": [154,205,50,1]}\n\nfunction clamp_css_byte(i) { // Clamp to integer 0 .. 255.\n i = Math.round(i); // Seems to be what Chrome does (vs truncation).\n return i < 0 ? 0 : i > 255 ? 255 : i;\n}\n\nfunction clamp_css_float(f) { // Clamp to float 0.0 .. 1.0.\n return f < 0 ? 0 : f > 1 ? 1 : f;\n}\n\nfunction parse_css_int(str) { // int or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_byte(parseFloat(str) / 100 * 255);\n return clamp_css_byte(parseInt(str));\n}\n\nfunction parse_css_float(str) { // float or percentage.\n if (str[str.length - 1] === '%')\n return clamp_css_float(parseFloat(str) / 100);\n return clamp_css_float(parseFloat(str));\n}\n\nfunction css_hue_to_rgb(m1, m2, h) {\n if (h < 0) h += 1;\n else if (h > 1) h -= 1;\n\n if (h * 6 < 1) return m1 + (m2 - m1) * h * 6;\n if (h * 2 < 1) return m2;\n if (h * 3 < 2) return m1 + (m2 - m1) * (2/3 - h) * 6;\n return m1;\n}\n\nfunction parseCSSColor(css_str) {\n // Remove all whitespace, not compliant, but should just be more accepting.\n var str = css_str.replace(/ /g, '').toLowerCase();\n\n // Color keywords (and transparent) lookup.\n if (str in kCSSColorTable) return kCSSColorTable[str].slice(); // dup.\n\n // #abc and #abc123 syntax.\n if (str[0] === '#') {\n if (str.length === 4) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xfff)) return null; // Covers NaN.\n return [((iv & 0xf00) >> 4) | ((iv & 0xf00) >> 8),\n (iv & 0xf0) | ((iv & 0xf0) >> 4),\n (iv & 0xf) | ((iv & 0xf) << 4),\n 1];\n } else if (str.length === 7) {\n var iv = parseInt(str.substr(1), 16); // TODO(deanm): Stricter parsing.\n if (!(iv >= 0 && iv <= 0xffffff)) return null; // Covers NaN.\n return [(iv & 0xff0000) >> 16,\n (iv & 0xff00) >> 8,\n iv & 0xff,\n 1];\n }\n\n return null;\n }\n\n var op = str.indexOf('('), ep = str.indexOf(')');\n if (op !== -1 && ep + 1 === str.length) {\n var fname = str.substr(0, op);\n var params = str.substr(op+1, ep-(op+1)).split(',');\n var alpha = 1; // To allow case fallthrough.\n switch (fname) {\n case 'rgba':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'rgb':\n if (params.length !== 3) return null;\n return [parse_css_int(params[0]),\n parse_css_int(params[1]),\n parse_css_int(params[2]),\n alpha];\n case 'hsla':\n if (params.length !== 4) return null;\n alpha = parse_css_float(params.pop());\n // Fall through.\n case 'hsl':\n if (params.length !== 3) return null;\n var h = (((parseFloat(params[0]) % 360) + 360) % 360) / 360; // 0 .. 1\n // NOTE(deanm): According to the CSS spec s/l should only be\n // percentages, but we don't bother and let float or percentage.\n var s = parse_css_float(params[1]);\n var l = parse_css_float(params[2]);\n var m2 = l <= 0.5 ? l * (s + 1) : l + s - l * s;\n var m1 = l * 2 - m2;\n return [clamp_css_byte(css_hue_to_rgb(m1, m2, h+1/3) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h) * 255),\n clamp_css_byte(css_hue_to_rgb(m1, m2, h-1/3) * 255),\n alpha];\n default:\n return null;\n }\n }\n\n return null;\n}\n\ntry { exports.parseCSSColor = parseCSSColor } catch(e) { }\n","// @flow\n\nimport {parseCSSColor} from 'csscolorparser';\n\n/**\n * An RGBA color value. Create instances from color strings using the static\n * method `Color.parse`. The constructor accepts RGB channel values in the range\n * `[0, 1]`, premultiplied by A.\n *\n * @param {number} r The red channel.\n * @param {number} g The green channel.\n * @param {number} b The blue channel.\n * @param {number} a The alpha channel.\n * @private\n */\nclass Color {\n r: number;\n g: number;\n b: number;\n a: number;\n\n constructor(r: number, g: number, b: number, a: number = 1) {\n this.r = r;\n this.g = g;\n this.b = b;\n this.a = a;\n }\n\n static black: Color;\n static white: Color;\n static transparent: Color;\n static red: Color;\n\n /**\n * Parses valid CSS color strings and returns a `Color` instance.\n * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n */\n static parse(input?: string | Color | null): Color | void {\n if (!input) {\n return undefined;\n }\n\n if (input instanceof Color) {\n return input;\n }\n\n if (typeof input !== 'string') {\n return undefined;\n }\n\n const rgba = parseCSSColor(input);\n if (!rgba) {\n return undefined;\n }\n\n return new Color(\n rgba[0] / 255 * rgba[3],\n rgba[1] / 255 * rgba[3],\n rgba[2] / 255 * rgba[3],\n rgba[3]\n );\n }\n\n /**\n * Returns an RGBA string representing the color value.\n *\n * @returns An RGBA string.\n * @example\n * var purple = new Color.parse('purple');\n * purple.toString; // = \"rgba(128,0,128,1)\"\n * var translucentGreen = new Color.parse('rgba(26, 207, 26, .73)');\n * translucentGreen.toString(); // = \"rgba(26,207,26,0.73)\"\n */\n toString(): string {\n const [r, g, b, a] = this.toArray();\n return `rgba(${Math.round(r)},${Math.round(g)},${Math.round(b)},${a})`;\n }\n\n toArray(): [number, number, number, number] {\n const {r, g, b, a} = this;\n return a === 0 ? [0, 0, 0, 0] : [\n r * 255 / a,\n g * 255 / a,\n b * 255 / a,\n a\n ];\n }\n}\n\nColor.black = new Color(0, 0, 0, 1);\nColor.white = new Color(1, 1, 1, 1);\nColor.transparent = new Color(0, 0, 0, 0);\nColor.red = new Color(1, 0, 0, 1);\n\nexport default Color;\n","// @flow\n\n// Flow type declarations for Intl cribbed from\n// https://github.com/facebook/flow/issues/1270\n\ndeclare var Intl: {\n Collator: Class\n};\n\ndeclare class Intl$Collator {\n constructor (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n static (\n locales?: string | string[],\n options?: CollatorOptions\n ): Intl$Collator;\n\n compare (a: string, b: string): number;\n\n resolvedOptions(): any;\n}\n\ntype CollatorOptions = {\n localeMatcher?: 'lookup' | 'best fit',\n usage?: 'sort' | 'search',\n sensitivity?: 'base' | 'accent' | 'case' | 'variant',\n ignorePunctuation?: boolean,\n numeric?: boolean,\n caseFirst?: 'upper' | 'lower' | 'false'\n}\n\nexport default class Collator {\n locale: string | null;\n sensitivity: 'base' | 'accent' | 'case' | 'variant';\n collator: Intl$Collator;\n\n constructor(caseSensitive: boolean, diacriticSensitive: boolean, locale: string | null) {\n if (caseSensitive)\n this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n else\n this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n\n this.locale = locale;\n this.collator = new Intl.Collator(this.locale ? this.locale : [],\n {sensitivity: this.sensitivity, usage: 'search'});\n }\n\n compare(lhs: string, rhs: string): number {\n return this.collator.compare(lhs, rhs);\n }\n\n resolvedLocale(): string {\n // We create a Collator without \"usage: search\" because we don't want\n // the search options encoded in our result (e.g. \"en-u-co-search\")\n return new Intl.Collator(this.locale ? this.locale : [])\n .resolvedOptions().locale;\n }\n}\n","// @flow\nimport type Color from '../../util/color';\nimport type ResolvedImage from '../types/resolved_image';\n\nexport class FormattedSection {\n text: string;\n image: ResolvedImage | null;\n scale: number | null;\n fontStack: string | null;\n textColor: Color | null;\n\n constructor(text: string, image: ResolvedImage | null, scale: number | null, fontStack: string | null, textColor: Color | null) {\n this.text = text;\n this.image = image;\n this.scale = scale;\n this.fontStack = fontStack;\n this.textColor = textColor;\n }\n}\n\nexport default class Formatted {\n sections: Array;\n\n constructor(sections: Array) {\n this.sections = sections;\n }\n\n static fromString(unformatted: string): Formatted {\n return new Formatted([new FormattedSection(unformatted, null, null, null, null)]);\n }\n\n isEmpty(): boolean {\n if (this.sections.length === 0) return true;\n return !this.sections.some(section => section.text.length !== 0 ||\n (section.image && section.image.name.length !== 0));\n }\n\n static factory(text: Formatted | string): Formatted {\n if (text instanceof Formatted) {\n return text;\n } else {\n return Formatted.fromString(text);\n }\n }\n\n toString(): string {\n if (this.sections.length === 0) return '';\n return this.sections.map(section => section.text).join('');\n }\n\n serialize(): Array {\n const serialized: Array = [\"format\"];\n for (const section of this.sections) {\n if (section.image) {\n serialized.push([\"image\", section.image.name]);\n continue;\n }\n serialized.push(section.text);\n const options: { [key: string]: mixed } = {};\n if (section.fontStack) {\n options[\"text-font\"] = [\"literal\", section.fontStack.split(',')];\n }\n if (section.scale) {\n options[\"font-scale\"] = section.scale;\n }\n if (section.textColor) {\n options[\"text-color\"] = ([\"rgba\"]: Array).concat(section.textColor.toArray());\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nexport type ResolvedImageOptions = {\n name: string,\n available: boolean\n};\n\nexport default class ResolvedImage {\n name: string;\n available: boolean;\n\n constructor(options: ResolvedImageOptions) {\n this.name = options.name;\n this.available = options.available;\n }\n\n toString(): string {\n return this.name;\n }\n\n static fromString(name: string): ResolvedImage | null {\n if (!name) return null; // treat empty values as no image\n return new ResolvedImage({name, available: false});\n }\n\n serialize(): Array {\n return [\"image\", this.name];\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport Color from '../util/color';\nimport Collator from './types/collator';\nimport Formatted from './types/formatted';\nimport ResolvedImage from './types/resolved_image';\nimport {NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, ValueType, CollatorType, FormattedType, ResolvedImageType, array} from './types';\n\nimport type {Type} from './types';\n\nexport function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): string | null {\n if (!(\n typeof r === 'number' && r >= 0 && r <= 255 &&\n typeof g === 'number' && g >= 0 && g <= 255 &&\n typeof b === 'number' && b >= 0 && b <= 255\n )) {\n const value = typeof a === 'number' ? [r, g, b, a] : [r, g, b];\n return `Invalid rgba value [${value.join(', ')}]: 'r', 'g', and 'b' must be between 0 and 255.`;\n }\n\n if (!(\n typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1)\n )) {\n return `Invalid rgba value [${[r, g, b, a].join(', ')}]: 'a' must be between 0 and 1.`;\n }\n\n return null;\n}\n\nexport type Value = null | string | boolean | number | Color | Collator | Formatted | ResolvedImage | $ReadOnlyArray | { +[string]: Value }\n\nexport function isValue(mixed: mixed): boolean {\n if (mixed === null) {\n return true;\n } else if (typeof mixed === 'string') {\n return true;\n } else if (typeof mixed === 'boolean') {\n return true;\n } else if (typeof mixed === 'number') {\n return true;\n } else if (mixed instanceof Color) {\n return true;\n } else if (mixed instanceof Collator) {\n return true;\n } else if (mixed instanceof Formatted) {\n return true;\n } else if (mixed instanceof ResolvedImage) {\n return true;\n } else if (Array.isArray(mixed)) {\n for (const item of mixed) {\n if (!isValue(item)) {\n return false;\n }\n }\n return true;\n } else if (typeof mixed === 'object') {\n for (const key in mixed) {\n if (!isValue(mixed[key])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n}\n\nexport function typeOf(value: Value): Type {\n if (value === null) {\n return NullType;\n } else if (typeof value === 'string') {\n return StringType;\n } else if (typeof value === 'boolean') {\n return BooleanType;\n } else if (typeof value === 'number') {\n return NumberType;\n } else if (value instanceof Color) {\n return ColorType;\n } else if (value instanceof Collator) {\n return CollatorType;\n } else if (value instanceof Formatted) {\n return FormattedType;\n } else if (value instanceof ResolvedImage) {\n return ResolvedImageType;\n } else if (Array.isArray(value)) {\n const length = value.length;\n let itemType: Type | typeof undefined;\n\n for (const item of value) {\n const t = typeOf(item);\n if (!itemType) {\n itemType = t;\n } else if (itemType === t) {\n continue;\n } else {\n itemType = ValueType;\n break;\n }\n }\n\n return array(itemType || ValueType, length);\n } else {\n assert(typeof value === 'object');\n return ObjectType;\n }\n}\n\nexport function toString(value: Value) {\n const type = typeof value;\n if (value === null) {\n return '';\n } else if (type === 'string' || type === 'number' || type === 'boolean') {\n return String(value);\n } else if (value instanceof Color || value instanceof Formatted || value instanceof ResolvedImage) {\n return value.toString();\n } else {\n return JSON.stringify(value);\n }\n}\n\nexport {Color, Collator};\n","// @flow\n\nimport assert from 'assert';\nimport {isValue, typeOf, Color} from '../values';\nimport Formatted from '../types/formatted';\n\nimport type {Type} from '../types';\nimport type {Value} from '../values';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\n\nclass Literal implements Expression {\n type: Type;\n value: Value;\n\n constructor(type: Type, value: Value) {\n this.type = type;\n this.value = value;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n\n if (!isValue(args[1]))\n return context.error(`invalid value`);\n\n const value = (args[1]: any);\n let type = typeOf(value);\n\n // special case: infer the item type if possible for zero-length arrays\n const expected = context.expectedType;\n if (\n type.kind === 'array' &&\n type.N === 0 &&\n expected &&\n expected.kind === 'array' &&\n (typeof expected.N !== 'number' || expected.N === 0)\n ) {\n type = expected;\n }\n\n return new Literal(type, value);\n }\n\n evaluate() {\n return this.value;\n }\n\n eachChild() {}\n\n outputDefined() {\n return true;\n }\n\n serialize(): Array {\n if (this.type.kind === 'array' || this.type.kind === 'object') {\n return [\"literal\", this.value];\n } else if (this.value instanceof Color) {\n // Constant-folding can generate Literal expressions that you\n // couldn't actually generate with a \"literal\" expression,\n // so we have to implement an equivalent serialization here\n return [\"rgba\"].concat(this.value.toArray());\n } else if (this.value instanceof Formatted) {\n // Same as Color\n return this.value.serialize();\n } else {\n assert(this.value === null ||\n typeof this.value === 'string' ||\n typeof this.value === 'number' ||\n typeof this.value === 'boolean');\n return (this.value: any);\n }\n }\n}\n\nexport default Literal;\n","// @flow\n\nclass RuntimeError {\n name: string;\n message: string;\n\n constructor(message: string) {\n this.name = 'ExpressionEvaluationError';\n this.message = message;\n }\n\n toJSON() {\n return this.message;\n }\n}\n\nexport default RuntimeError;\n","// @flow\n\nimport assert from 'assert';\n\nimport {\n ObjectType,\n ValueType,\n StringType,\n NumberType,\n BooleanType,\n checkSubtype,\n toString,\n array\n} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nconst types = {\n string: StringType,\n number: NumberType,\n boolean: BooleanType,\n object: ObjectType\n};\n\nclass Assertion implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n let i = 1;\n let type;\n\n const name: string = (args[0]: any);\n if (name === 'array') {\n let itemType;\n if (args.length > 2) {\n const type = args[1];\n if (typeof type !== 'string' || !(type in types) || type === 'object')\n return context.error('The item type argument of \"array\" must be one of string, number, boolean', 1);\n itemType = types[type];\n i++;\n } else {\n itemType = ValueType;\n }\n\n let N;\n if (args.length > 3) {\n if (args[2] !== null &&\n (typeof args[2] !== 'number' ||\n args[2] < 0 ||\n args[2] !== Math.floor(args[2]))\n ) {\n return context.error('The length argument to \"array\" must be a positive integer literal', 2);\n }\n N = args[2];\n i++;\n }\n\n type = array(itemType, N);\n } else {\n assert(types[name], name);\n type = types[name];\n }\n\n const parsed = [];\n for (; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Assertion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (let i = 0; i < this.args.length; i++) {\n const value = this.args[i].evaluate(ctx);\n const error = checkSubtype(this.type, typeOf(value));\n if (!error) {\n return value;\n } else if (i === this.args.length - 1) {\n throw new RuntimeError(`Expected value to be of type ${toString(this.type)}, but found ${toString(typeOf(value))} instead.`);\n }\n }\n\n assert(false);\n return null;\n }\n\n eachChild(fn: (_: Expression) => void) {\n this.args.forEach(fn);\n }\n\n outputDefined(): boolean {\n return this.args.every(arg => arg.outputDefined());\n }\n\n serialize(): Array {\n const type = this.type;\n const serialized = [type.kind];\n if (type.kind === 'array') {\n const itemType = type.itemType;\n if (itemType.kind === 'string' ||\n itemType.kind === 'number' ||\n itemType.kind === 'boolean') {\n serialized.push(itemType.kind);\n const N = type.N;\n if (typeof N === 'number' || this.args.length > 1) {\n serialized.push(N);\n }\n }\n }\n return serialized.concat(this.args.map(arg => arg.serialize()));\n }\n}\n\nexport default Assertion;\n","// @flow\n\nimport {NumberType, ValueType, FormattedType, array, StringType, ColorType, ResolvedImageType} from '../types';\nimport Formatted, {FormattedSection} from '../types/formatted';\nimport {toString, typeOf} from '../values';\n\nimport type {Expression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\ntype FormattedSectionExpression = {\n // Content of a section may be Image expression or other\n // type of expression that is coercable to 'string'.\n content: Expression,\n scale: Expression | null;\n font: Expression | null;\n textColor: Expression | null;\n}\n\nexport default class FormatExpression implements Expression {\n type: Type;\n sections: Array;\n\n constructor(sections: Array) {\n this.type = FormattedType;\n this.sections = sections;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length < 2) {\n return context.error(`Expected at least one argument.`);\n }\n\n const firstArg = args[1];\n if (!Array.isArray(firstArg) && typeof firstArg === 'object') {\n return context.error(`First argument must be an image or text section.`);\n }\n\n const sections: Array = [];\n let nextTokenMayBeObject = false;\n for (let i = 1; i <= args.length - 1; ++i) {\n const arg = (args[i]: any);\n\n if (nextTokenMayBeObject && typeof arg === \"object\" && !Array.isArray(arg)) {\n nextTokenMayBeObject = false;\n\n let scale = null;\n if (arg['font-scale']) {\n scale = context.parse(arg['font-scale'], 1, NumberType);\n if (!scale) return null;\n }\n\n let font = null;\n if (arg['text-font']) {\n font = context.parse(arg['text-font'], 1, array(StringType));\n if (!font) return null;\n }\n\n let textColor = null;\n if (arg['text-color']) {\n textColor = context.parse(arg['text-color'], 1, ColorType);\n if (!textColor) return null;\n }\n\n const lastExpression = sections[sections.length - 1];\n lastExpression.scale = scale;\n lastExpression.font = font;\n lastExpression.textColor = textColor;\n } else {\n const content = context.parse(args[i], 1, ValueType);\n if (!content) return null;\n\n const kind = content.type.kind;\n if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage')\n return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`);\n\n nextTokenMayBeObject = true;\n sections.push({content, scale: null, font: null, textColor: null});\n }\n }\n\n return new FormatExpression(sections);\n }\n\n evaluate(ctx: EvaluationContext) {\n const evaluateSection = section => {\n const evaluatedContent = section.content.evaluate(ctx);\n if (typeOf(evaluatedContent) === ResolvedImageType) {\n return new FormattedSection('', evaluatedContent, null, null, null);\n }\n\n return new FormattedSection(\n toString(evaluatedContent),\n null,\n section.scale ? section.scale.evaluate(ctx) : null,\n section.font ? section.font.evaluate(ctx).join(',') : null,\n section.textColor ? section.textColor.evaluate(ctx) : null\n );\n };\n\n return new Formatted(this.sections.map(evaluateSection));\n }\n\n eachChild(fn: (_: Expression) => void) {\n for (const section of this.sections) {\n fn(section.content);\n if (section.scale) {\n fn(section.scale);\n }\n if (section.font) {\n fn(section.font);\n }\n if (section.textColor) {\n fn(section.textColor);\n }\n }\n }\n\n outputDefined() {\n // Technically the combinatoric set of all children\n // Usually, this.text will be undefined anyway\n return false;\n }\n\n serialize() {\n const serialized = [\"format\"];\n for (const section of this.sections) {\n serialized.push(section.content.serialize());\n const options = {};\n if (section.scale) {\n options['font-scale'] = section.scale.serialize();\n }\n if (section.font) {\n options['text-font'] = section.font.serialize();\n }\n if (section.textColor) {\n options['text-color'] = section.textColor.serialize();\n }\n serialized.push(options);\n }\n return serialized;\n }\n}\n","// @flow\n\nimport {ResolvedImageType, StringType} from '../types';\nimport ResolvedImage from '../types/resolved_image';\n\nimport type {Expression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\nexport default class ImageExpression implements Expression {\n type: Type;\n input: Expression;\n\n constructor(input: Expression) {\n this.type = ResolvedImageType;\n this.input = input;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length !== 2) {\n return context.error(`Expected two arguments.`);\n }\n\n const name = context.parse(args[1], 1, StringType);\n if (!name) return context.error(`No image name provided.`);\n\n return new ImageExpression(name);\n }\n\n evaluate(ctx: EvaluationContext) {\n const evaluatedImageName = this.input.evaluate(ctx);\n\n const value = ResolvedImage.fromString(evaluatedImageName);\n if (value && ctx.availableImages) value.available = ctx.availableImages.indexOf(evaluatedImageName) > -1;\n\n return value;\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n }\n\n outputDefined() {\n // The output of image is determined by the list of available images in the evaluation context\n return false;\n }\n\n serialize() {\n return [\"image\", this.input.serialize()];\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport {BooleanType, ColorType, NumberType, StringType, ValueType} from '../types';\nimport {Color, toString as valueToString, validateRGBA} from '../values';\nimport RuntimeError from '../runtime_error';\nimport Formatted from '../types/formatted';\nimport FormatExpression from '../definitions/format';\nimport ImageExpression from '../definitions/image';\nimport ResolvedImage from '../types/resolved_image';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nconst types = {\n 'to-boolean': BooleanType,\n 'to-color': ColorType,\n 'to-number': NumberType,\n 'to-string': StringType\n};\n\n/**\n * Special form for error-coalescing coercion expressions \"to-number\",\n * \"to-color\". Since these coercions can fail at runtime, they accept multiple\n * arguments, only evaluating one at a time until one succeeds.\n *\n * @private\n */\nclass Coercion implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length < 2)\n return context.error(`Expected at least one argument.`);\n\n const name: string = (args[0]: any);\n assert(types[name], name);\n\n if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const type = types[name];\n\n const parsed = [];\n for (let i = 1; i < args.length; i++) {\n const input = context.parse(args[i], i, ValueType);\n if (!input) return null;\n parsed.push(input);\n }\n\n return new Coercion(type, parsed);\n }\n\n evaluate(ctx: EvaluationContext) {\n if (this.type.kind === 'boolean') {\n return Boolean(this.args[0].evaluate(ctx));\n } else if (this.type.kind === 'color') {\n let input;\n let error;\n for (const arg of this.args) {\n input = arg.evaluate(ctx);\n error = null;\n if (input instanceof Color) {\n return input;\n } else if (typeof input === 'string') {\n const c = ctx.parseColor(input);\n if (c) return c;\n } else if (Array.isArray(input)) {\n if (input.length < 3 || input.length > 4) {\n error = `Invalid rbga value ${JSON.stringify(input)}: expected an array containing either three or four numeric values.`;\n } else {\n error = validateRGBA(input[0], input[1], input[2], input[3]);\n }\n if (!error) {\n return new Color((input[0]: any) / 255, (input[1]: any) / 255, (input[2]: any) / 255, (input[3]: any));\n }\n }\n }\n throw new RuntimeError(error || `Could not parse color from value '${typeof input === 'string' ? input : String(JSON.stringify(input))}'`);\n } else if (this.type.kind === 'number') {\n let value = null;\n for (const arg of this.args) {\n value = arg.evaluate(ctx);\n if (value === null) return 0;\n const num = Number(value);\n if (isNaN(num)) continue;\n return num;\n }\n throw new RuntimeError(`Could not convert ${JSON.stringify(value)} to number.`);\n } else if (this.type.kind === 'formatted') {\n // There is no explicit 'to-formatted' but this coercion can be implicitly\n // created by properties that expect the 'formatted' type.\n return Formatted.fromString(valueToString(this.args[0].evaluate(ctx)));\n } else if (this.type.kind === 'resolvedImage') {\n return ResolvedImage.fromString(valueToString(this.args[0].evaluate(ctx)));\n } else {\n return valueToString(this.args[0].evaluate(ctx));\n }\n }\n\n eachChild(fn: (_: Expression) => void) {\n this.args.forEach(fn);\n }\n\n outputDefined(): boolean {\n return this.args.every(arg => arg.outputDefined());\n }\n\n serialize() {\n if (this.type.kind === 'formatted') {\n return new FormatExpression([{content: this.args[0], scale: null, font: null, textColor: null}]).serialize();\n }\n\n if (this.type.kind === 'resolvedImage') {\n return new ImageExpression(this.args[0]).serialize();\n }\n\n const serialized = [`to-${this.type.kind}`];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coercion;\n","// @flow\n\nimport {Color} from './values';\nimport type {FormattedSection} from './types/formatted';\nimport type {GlobalProperties, Feature, FeatureState} from './index';\nimport type {CanonicalTileID} from '../../source/tile_id';\n\nconst geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nclass EvaluationContext {\n globals: GlobalProperties;\n feature: ?Feature;\n featureState: ?FeatureState;\n formattedSection: ?FormattedSection;\n availableImages: ?Array;\n canonical: ?CanonicalTileID;\n\n _parseColorCache: {[_: string]: ?Color};\n\n constructor() {\n this.globals = (null: any);\n this.feature = null;\n this.featureState = null;\n this.formattedSection = null;\n this._parseColorCache = {};\n this.availableImages = null;\n this.canonical = null;\n }\n\n id() {\n return this.feature && 'id' in this.feature ? this.feature.id : null;\n }\n\n geometryType() {\n return this.feature ? typeof this.feature.type === 'number' ? geometryTypes[this.feature.type] : this.feature.type : null;\n }\n\n geometry() {\n return this.feature && 'geometry' in this.feature ? this.feature.geometry : null;\n }\n\n canonicalID() {\n return this.canonical;\n }\n\n properties() {\n return this.feature && this.feature.properties || {};\n }\n\n parseColor(input: string): ?Color {\n let cached = this._parseColorCache[input];\n if (!cached) {\n cached = this._parseColorCache[input] = Color.parse(input);\n }\n return cached;\n }\n}\n\nexport default EvaluationContext;\n","// @flow\n\nimport {toString} from './types';\n\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport assert from 'assert';\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Type} from './types';\nimport type {Value} from './values';\n\nexport type Varargs = {| type: Type |};\ntype Signature = Array | Varargs;\ntype Evaluate = (EvaluationContext, Array) => Value;\ntype Definition = [Type, Signature, Evaluate] |\n {|type: Type, overloads: Array<[Signature, Evaluate]>|};\n\nclass CompoundExpression implements Expression {\n name: string;\n type: Type;\n _evaluate: Evaluate;\n args: Array;\n\n static definitions: {[_: string]: Definition };\n\n constructor(name: string, type: Type, evaluate: Evaluate, args: Array) {\n this.name = name;\n this.type = type;\n this._evaluate = evaluate;\n this.args = args;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this._evaluate(ctx, this.args);\n }\n\n eachChild(fn: (_: Expression) => void) {\n this.args.forEach(fn);\n }\n\n outputDefined() {\n return false;\n }\n\n serialize(): Array {\n return [this.name].concat(this.args.map(arg => arg.serialize()));\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n const op: string = (args[0]: any);\n const definition = CompoundExpression.definitions[op];\n if (!definition) {\n return context.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n }\n\n // Now check argument types against each signature\n const type = Array.isArray(definition) ?\n definition[0] : definition.type;\n\n const availableOverloads = Array.isArray(definition) ?\n [[definition[1], definition[2]]] :\n definition.overloads;\n\n const overloads = availableOverloads.filter(([signature]) => (\n !Array.isArray(signature) || // varags\n signature.length === args.length - 1 // correct param count\n ));\n\n let signatureContext: ParsingContext = (null: any);\n\n for (const [params, evaluate] of overloads) {\n // Use a fresh context for each attempted signature so that, if\n // we eventually succeed, we haven't polluted `context.errors`.\n signatureContext = new ParsingContext(context.registry, context.path, null, context.scope);\n\n // First parse all the args, potentially coercing to the\n // types expected by this overload.\n const parsedArgs: Array = [];\n let argParseFailed = false;\n for (let i = 1; i < args.length; i++) {\n const arg = args[i];\n const expectedType = Array.isArray(params) ?\n params[i - 1] :\n params.type;\n\n const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType);\n if (!parsed) {\n argParseFailed = true;\n break;\n }\n parsedArgs.push(parsed);\n }\n if (argParseFailed) {\n // Couldn't coerce args of this overload to expected type, move\n // on to next one.\n continue;\n }\n\n if (Array.isArray(params)) {\n if (params.length !== parsedArgs.length) {\n signatureContext.error(`Expected ${params.length} arguments, but found ${parsedArgs.length} instead.`);\n continue;\n }\n }\n\n for (let i = 0; i < parsedArgs.length; i++) {\n const expected = Array.isArray(params) ? params[i] : params.type;\n const arg = parsedArgs[i];\n signatureContext.concat(i + 1).checkSubtype(expected, arg.type);\n }\n\n if (signatureContext.errors.length === 0) {\n return new CompoundExpression(op, type, evaluate, parsedArgs);\n }\n }\n\n assert(!signatureContext || signatureContext.errors.length > 0);\n\n if (overloads.length === 1) {\n context.errors.push(...signatureContext.errors);\n } else {\n const expected = overloads.length ? overloads : availableOverloads;\n const signatures = expected\n .map(([params]) => stringifySignature(params))\n .join(' | ');\n\n const actualTypes = [];\n // For error message, re-parse arguments without trying to\n // apply any coercions\n for (let i = 1; i < args.length; i++) {\n const parsed = context.parse(args[i], 1 + actualTypes.length);\n if (!parsed) return null;\n actualTypes.push(toString(parsed.type));\n }\n context.error(`Expected arguments of type ${signatures}, but found (${actualTypes.join(', ')}) instead.`);\n }\n\n return null;\n }\n\n static register(\n registry: ExpressionRegistry,\n definitions: {[_: string]: Definition }\n ) {\n assert(!CompoundExpression.definitions);\n CompoundExpression.definitions = definitions;\n for (const name in definitions) {\n registry[name] = CompoundExpression;\n }\n }\n}\n\nfunction stringifySignature(signature: Signature): string {\n if (Array.isArray(signature)) {\n return `(${signature.map(toString).join(', ')})`;\n } else {\n return `(${toString(signature.type)}...)`;\n }\n}\n\nexport default CompoundExpression;\n","// @flow\n\nimport {StringType, BooleanType, CollatorType} from '../types';\nimport Collator from '../types/collator';\n\nimport type {Expression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\nexport default class CollatorExpression implements Expression {\n type: Type;\n caseSensitive: Expression;\n diacriticSensitive: Expression;\n locale: Expression | null;\n\n constructor(caseSensitive: Expression, diacriticSensitive: Expression, locale: Expression | null) {\n this.type = CollatorType;\n this.locale = locale;\n this.caseSensitive = caseSensitive;\n this.diacriticSensitive = diacriticSensitive;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length !== 2)\n return context.error(`Expected one argument.`);\n\n const options = (args[1]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`Collator options argument must be an object.`);\n\n const caseSensitive = context.parse(\n options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType);\n if (!caseSensitive) return null;\n\n const diacriticSensitive = context.parse(\n options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'], 1, BooleanType);\n if (!diacriticSensitive) return null;\n\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale) return null;\n }\n\n return new CollatorExpression(caseSensitive, diacriticSensitive, locale);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Collator(this.caseSensitive.evaluate(ctx), this.diacriticSensitive.evaluate(ctx), this.locale ? this.locale.evaluate(ctx) : null);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.caseSensitive);\n fn(this.diacriticSensitive);\n if (this.locale) {\n fn(this.locale);\n }\n }\n\n outputDefined() {\n // Technically the set of possible outputs is the combinatoric set of Collators produced\n // by all possible outputs of locale/caseSensitive/diacriticSensitive\n // But for the primary use of Collators in comparison operators, we ignore the Collator's\n // possible outputs anyway, so we can get away with leaving this false for now.\n return false;\n }\n\n serialize() {\n const options = {};\n options['case-sensitive'] = this.caseSensitive.serialize();\n options['diacritic-sensitive'] = this.diacriticSensitive.serialize();\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n return [\"collator\", options];\n }\n}\n","// @flow\n\nimport {isValue} from '../values';\nimport type {Type} from '../types';\nimport {BooleanType} from '../types';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {GeoJSON, GeoJSONPolygon, GeoJSONMultiPolygon} from '@mapbox/geojson-types';\nimport Point from '@mapbox/point-geometry';\nimport type {CanonicalTileID} from '../../../source/tile_id';\n\ntype GeoJSONPolygons =| GeoJSONPolygon | GeoJSONMultiPolygon;\n\n// minX, minY, maxX, maxY\ntype BBox = [number, number, number, number];\nconst EXTENT = 8192;\n\nfunction updateBBox(bbox: BBox, coord: Point) {\n bbox[0] = Math.min(bbox[0], coord[0]);\n bbox[1] = Math.min(bbox[1], coord[1]);\n bbox[2] = Math.max(bbox[2], coord[0]);\n bbox[3] = Math.max(bbox[3], coord[1]);\n}\n\nfunction mercatorXfromLng(lng: number) {\n return (180 + lng) / 360;\n}\n\nfunction mercatorYfromLat(lat: number) {\n return (180 - (180 / Math.PI * Math.log(Math.tan(Math.PI / 4 + lat * Math.PI / 360)))) / 360;\n}\n\nfunction boxWithinBox(bbox1: BBox, bbox2: BBox) {\n if (bbox1[0] <= bbox2[0]) return false;\n if (bbox1[2] >= bbox2[2]) return false;\n if (bbox1[1] <= bbox2[1]) return false;\n if (bbox1[3] >= bbox2[3]) return false;\n return true;\n}\n\nfunction getTileCoordinates(p, canonical: CanonicalTileID) {\n const x = mercatorXfromLng(p[0]);\n const y = mercatorYfromLat(p[1]);\n const tilesAtZoom = Math.pow(2, canonical.z);\n return [Math.round(x * tilesAtZoom * EXTENT), Math.round(y * tilesAtZoom * EXTENT)];\n}\n\nfunction onBoundary(p, p1, p2) {\n const x1 = p[0] - p1[0];\n const y1 = p[1] - p1[1];\n const x2 = p[0] - p2[0];\n const y2 = p[1] - p2[1];\n return (x1 * y2 - x2 * y1 === 0) && (x1 * x2 <= 0) && (y1 * y2 <= 0);\n}\n\nfunction rayIntersect(p, p1, p2) {\n return ((p1[1] > p[1]) !== (p2[1] > p[1])) && (p[0] < (p2[0] - p1[0]) * (p[1] - p1[1]) / (p2[1] - p1[1]) + p1[0]);\n}\n\n// ray casting algorithm for detecting if point is in polygon\nfunction pointWithinPolygon(point, rings) {\n let inside = false;\n for (let i = 0, len = rings.length; i < len; i++) {\n const ring = rings[i];\n for (let j = 0, len2 = ring.length; j < len2 - 1; j++) {\n if (onBoundary(point, ring[j], ring[j + 1])) return false;\n if (rayIntersect(point, ring[j], ring[j + 1])) inside = !inside;\n }\n }\n return inside;\n}\n\nfunction pointWithinPolygons(point, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (pointWithinPolygon(point, polygons[i])) return true;\n }\n return false;\n}\n\nfunction perp(v1, v2) {\n return (v1[0] * v2[1] - v1[1] * v2[0]);\n}\n\n// check if p1 and p2 are in different sides of line segment q1->q2\nfunction twoSided(p1, p2, q1, q2) {\n // q1->p1 (x1, y1), q1->p2 (x2, y2), q1->q2 (x3, y3)\n const x1 = p1[0] - q1[0];\n const y1 = p1[1] - q1[1];\n const x2 = p2[0] - q1[0];\n const y2 = p2[1] - q1[1];\n const x3 = q2[0] - q1[0];\n const y3 = q2[1] - q1[1];\n const det1 = (x1 * y3 - x3 * y1);\n const det2 = (x2 * y3 - x3 * y2);\n if ((det1 > 0 && det2 < 0) || (det1 < 0 && det2 > 0)) return true;\n return false;\n}\n// a, b are end points for line segment1, c and d are end points for line segment2\nfunction lineIntersectLine(a, b, c, d) {\n // check if two segments are parallel or not\n // precondition is end point a, b is inside polygon, if line a->b is\n // parallel to polygon edge c->d, then a->b won't intersect with c->d\n const vectorP = [b[0] - a[0], b[1] - a[1]];\n const vectorQ = [d[0] - c[0], d[1] - c[1]];\n if (perp(vectorQ, vectorP) === 0) return false;\n\n // If lines are intersecting with each other, the relative location should be:\n // a and b lie in different sides of segment c->d\n // c and d lie in different sides of segment a->b\n if (twoSided(a, b, c, d) && twoSided(c, d, a, b)) return true;\n return false;\n}\n\nfunction lineIntersectPolygon(p1, p2, polygon) {\n for (const ring of polygon) {\n // loop through every edge of the ring\n for (let j = 0; j < ring.length - 1; ++j) {\n if (lineIntersectLine(p1, p2, ring[j], ring[j + 1])) {\n return true;\n }\n }\n }\n return false;\n}\n\nfunction lineStringWithinPolygon(line, polygon) {\n // First, check if geometry points of line segments are all inside polygon\n for (let i = 0; i < line.length; ++i) {\n if (!pointWithinPolygon(line[i], polygon)) {\n return false;\n }\n }\n\n // Second, check if there is line segment intersecting polygon edge\n for (let i = 0; i < line.length - 1; ++i) {\n if (lineIntersectPolygon(line[i], line[i + 1], polygon)) {\n return false;\n }\n }\n return true;\n}\n\nfunction lineStringWithinPolygons(line, polygons) {\n for (let i = 0; i < polygons.length; i++) {\n if (lineStringWithinPolygon(line, polygons[i])) return true;\n }\n return false;\n}\n\nfunction getTilePolygon(coordinates, bbox, canonical) {\n const polygon = [];\n for (let i = 0; i < coordinates.length; i++) {\n const ring = [];\n for (let j = 0; j < coordinates[i].length; j++) {\n const coord = getTileCoordinates(coordinates[i][j], canonical);\n updateBBox(bbox, coord);\n ring.push(coord);\n }\n polygon.push(ring);\n }\n return polygon;\n}\n\nfunction getTilePolygons(coordinates, bbox, canonical) {\n const polygons = [];\n for (let i = 0; i < coordinates.length; i++) {\n const polygon = getTilePolygon(coordinates[i], bbox, canonical);\n polygons.push(polygon);\n }\n return polygons;\n}\n\nfunction updatePoint(p, bbox, polyBBox, worldSize) {\n if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n const halfWorldSize = worldSize * 0.5;\n let shift = (p[0] - polyBBox[0] > halfWorldSize) ? -worldSize : (polyBBox[0] - p[0] > halfWorldSize) ? worldSize : 0;\n if (shift === 0) {\n shift = (p[0] - polyBBox[2] > halfWorldSize) ? -worldSize : (polyBBox[2] - p[0] > halfWorldSize) ? worldSize : 0;\n }\n p[0] += shift;\n }\n updateBBox(bbox, p);\n}\n\nfunction resetBBox(bbox) {\n bbox[0] = bbox[1] = Infinity;\n bbox[2] = bbox[3] = -Infinity;\n}\n\nfunction getTilePoints(geometry, pointBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n const tilePoints = [];\n for (const points of geometry) {\n for (const point of points) {\n const p = [point.x + shifts[0], point.y + shifts[1]];\n updatePoint(p, pointBBox, polyBBox, worldSize);\n tilePoints.push(p);\n }\n }\n return tilePoints;\n}\n\nfunction getTileLines(geometry, lineBBox, polyBBox, canonical) {\n const worldSize = Math.pow(2, canonical.z) * EXTENT;\n const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n const tileLines = [];\n for (const line of geometry) {\n const tileLine = [];\n for (const point of line) {\n const p = [point.x + shifts[0], point.y + shifts[1]];\n updateBBox(lineBBox, p);\n tileLine.push(p);\n }\n tileLines.push(tileLine);\n }\n if (lineBBox[2] - lineBBox[0] <= worldSize / 2) {\n resetBBox(lineBBox);\n for (const line of tileLines) {\n for (const p of line) {\n updatePoint(p, lineBBox, polyBBox, worldSize);\n }\n }\n }\n return tileLines;\n}\n\nfunction pointsWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons) {\n const pointBBox = [Infinity, Infinity, -Infinity, -Infinity];\n const polyBBox = [Infinity, Infinity, -Infinity, -Infinity];\n\n const canonical = ctx.canonicalID();\n\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox)) return false;\n\n for (const point of tilePoints) {\n if (!pointWithinPolygon(point, tilePolygon)) return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tilePoints = getTilePoints(ctx.geometry(), pointBBox, polyBBox, canonical);\n if (!boxWithinBox(pointBBox, polyBBox)) return false;\n\n for (const point of tilePoints) {\n if (!pointWithinPolygons(point, tilePolygons)) return false;\n }\n }\n\n return true;\n}\n\nfunction linesWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons) {\n const lineBBox = [Infinity, Infinity, -Infinity, -Infinity];\n const polyBBox = [Infinity, Infinity, -Infinity, -Infinity];\n\n const canonical = ctx.canonicalID();\n\n if (polygonGeometry.type === 'Polygon') {\n const tilePolygon = getTilePolygon(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox)) return false;\n\n for (const line of tileLines) {\n if (!lineStringWithinPolygon(line, tilePolygon)) return false;\n }\n }\n if (polygonGeometry.type === 'MultiPolygon') {\n const tilePolygons = getTilePolygons(polygonGeometry.coordinates, polyBBox, canonical);\n const tileLines = getTileLines(ctx.geometry(), lineBBox, polyBBox, canonical);\n if (!boxWithinBox(lineBBox, polyBBox)) return false;\n\n for (const line of tileLines) {\n if (!lineStringWithinPolygons(line, tilePolygons)) return false;\n }\n }\n return true;\n}\n\nclass Within implements Expression {\n type: Type;\n geojson: GeoJSON\n geometries: GeoJSONPolygons;\n\n constructor(geojson: GeoJSON, geometries: GeoJSONPolygons) {\n this.type = BooleanType;\n this.geojson = geojson;\n this.geometries = geometries;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`'within' expression requires exactly one argument, but found ${args.length - 1} instead.`);\n if (isValue(args[1])) {\n const geojson = (args[1]: Object);\n if (geojson.type === 'FeatureCollection') {\n for (let i = 0; i < geojson.features.length; ++i) {\n const type = geojson.features[i].geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.features[i].geometry);\n }\n }\n } else if (geojson.type === 'Feature') {\n const type = geojson.geometry.type;\n if (type === 'Polygon' || type === 'MultiPolygon') {\n return new Within(geojson, geojson.geometry);\n }\n } else if (geojson.type === 'Polygon' || geojson.type === 'MultiPolygon') {\n return new Within(geojson, geojson);\n }\n }\n return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`);\n }\n\n evaluate(ctx: EvaluationContext) {\n if (ctx.geometry() != null && ctx.canonicalID() != null) {\n if (ctx.geometryType() === 'Point') {\n return pointsWithinPolygons(ctx, this.geometries);\n } else if (ctx.geometryType() === 'LineString') {\n return linesWithinPolygons(ctx, this.geometries);\n }\n }\n return false;\n }\n\n eachChild() {}\n\n outputDefined(): boolean {\n return true;\n }\n\n serialize(): Array {\n return [\"within\", this.geojson];\n }\n\n}\n\nexport default Within;\n","// @flow\n\nimport CompoundExpression from './compound_expression';\nimport Within from './definitions/within';\nimport type {Expression} from './expression.js';\n\nfunction isFeatureConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'get' && e.args.length === 1) {\n return false;\n } else if (e.name === 'feature-state') {\n return false;\n } else if (e.name === 'has' && e.args.length === 1) {\n return false;\n } else if (\n e.name === 'properties' ||\n e.name === 'geometry-type' ||\n e.name === 'id'\n ) {\n return false;\n } else if (/^filter-/.test(e.name)) {\n return false;\n }\n }\n\n if (e instanceof Within) {\n return false;\n }\n\n let result = true;\n e.eachChild(arg => {\n if (result && !isFeatureConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isStateConstant(e: Expression) {\n if (e instanceof CompoundExpression) {\n if (e.name === 'feature-state') {\n return false;\n }\n }\n let result = true;\n e.eachChild(arg => {\n if (result && !isStateConstant(arg)) { result = false; }\n });\n return result;\n}\n\nfunction isGlobalPropertyConstant(e: Expression, properties: Array) {\n if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) { return false; }\n let result = true;\n e.eachChild((arg) => {\n if (result && !isGlobalPropertyConstant(arg, properties)) { result = false; }\n });\n return result;\n}\n\nexport {isFeatureConstant, isGlobalPropertyConstant, isStateConstant};\n","// @flow\n\nimport type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Var implements Expression {\n type: Type;\n name: string;\n boundExpression: Expression;\n\n constructor(name: string, boundExpression: Expression) {\n this.type = boundExpression.type;\n this.name = name;\n this.boundExpression = boundExpression;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 2 || typeof args[1] !== 'string')\n return context.error(`'var' expression requires exactly one string literal argument.`);\n\n const name = args[1];\n if (!context.scope.has(name)) {\n return context.error(`Unknown variable \"${name}\". Make sure \"${name}\" has been bound in an enclosing \"let\" expression before using it.`, 1);\n }\n\n return new Var(name, context.scope.get(name));\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.boundExpression.evaluate(ctx);\n }\n\n eachChild() {}\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n return [\"var\", this.name];\n }\n}\n\nexport default Var;\n","// @flow\n\nimport Scope from './scope';\nimport {checkSubtype} from './types';\nimport ParsingError from './parsing_error';\nimport Literal from './definitions/literal';\nimport Assertion from './definitions/assertion';\nimport Coercion from './definitions/coercion';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport CollatorExpression from './definitions/collator';\nimport Within from './definitions/within';\nimport {isGlobalPropertyConstant, isFeatureConstant} from './is_constant';\nimport Var from './definitions/var';\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Type} from './types';\n\n/**\n * State associated parsing at a given point in an expression tree.\n * @private\n */\nclass ParsingContext {\n registry: ExpressionRegistry;\n path: Array;\n key: string;\n scope: Scope;\n errors: Array;\n\n // The expected type of this expression. Provided only to allow Expression\n // implementations to infer argument types: Expression#parse() need not\n // check that the output type of the parsed expression matches\n // `expectedType`.\n expectedType: ?Type;\n\n constructor(\n registry: ExpressionRegistry,\n path: Array = [],\n expectedType: ?Type,\n scope: Scope = new Scope(),\n errors: Array = []\n ) {\n this.registry = registry;\n this.path = path;\n this.key = path.map(part => `[${part}]`).join('');\n this.scope = scope;\n this.errors = errors;\n this.expectedType = expectedType;\n }\n\n /**\n * @param expr the JSON expression to parse\n * @param index the optional argument index if this expression is an argument of a parent expression that's being parsed\n * @param options\n * @param options.omitTypeAnnotations set true to omit inferred type annotations. Caller beware: with this option set, the parsed expression's type will NOT satisfy `expectedType` if it would normally be wrapped in an inferred annotation.\n * @private\n */\n parse(\n expr: mixed,\n index?: number,\n expectedType?: ?Type,\n bindings?: Array<[string, Expression]>,\n options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'} = {}\n ): ?Expression {\n if (index) {\n return this.concat(index, expectedType, bindings)._parse(expr, options);\n }\n return this._parse(expr, options);\n }\n\n _parse(expr: mixed, options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'}): ?Expression {\n if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') {\n expr = ['literal', expr];\n }\n\n function annotate(parsed, type, typeAnnotation: 'assert' | 'coerce' | 'omit') {\n if (typeAnnotation === 'assert') {\n return new Assertion(type, [parsed]);\n } else if (typeAnnotation === 'coerce') {\n return new Coercion(type, [parsed]);\n } else {\n return parsed;\n }\n }\n\n if (Array.isArray(expr)) {\n if (expr.length === 0) {\n return this.error(`Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].`);\n }\n\n const op = expr[0];\n if (typeof op !== 'string') {\n this.error(`Expression name must be a string, but found ${typeof op} instead. If you wanted a literal array, use [\"literal\", [...]].`, 0);\n return null;\n }\n\n const Expr = this.registry[op];\n if (Expr) {\n let parsed = Expr.parse(expr, this);\n if (!parsed) return null;\n\n if (this.expectedType) {\n const expected = this.expectedType;\n const actual = parsed.type;\n\n // When we expect a number, string, boolean, or array but have a value, wrap it in an assertion.\n // When we expect a color or formatted string, but have a string or value, wrap it in a coercion.\n // Otherwise, we do static type-checking.\n //\n // These behaviors are overridable for:\n // * The \"coalesce\" operator, which needs to omit type annotations.\n // * String-valued properties (e.g. `text-field`), where coercion is more convenient than assertion.\n //\n if ((expected.kind === 'string' || expected.kind === 'number' || expected.kind === 'boolean' || expected.kind === 'object' || expected.kind === 'array') && actual.kind === 'value') {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n } else if ((expected.kind === 'color' || expected.kind === 'formatted' || expected.kind === 'resolvedImage') && (actual.kind === 'value' || actual.kind === 'string')) {\n parsed = annotate(parsed, expected, options.typeAnnotation || 'coerce');\n } else if (this.checkSubtype(expected, actual)) {\n return null;\n }\n }\n\n // If an expression's arguments are all literals, we can evaluate\n // it immediately and replace it with a literal value in the\n // parsed/compiled result. Expressions that expect an image should\n // not be resolved here so we can later get the available images.\n if (!(parsed instanceof Literal) && (parsed.type.kind !== 'resolvedImage') && isConstant(parsed)) {\n const ec = new EvaluationContext();\n try {\n parsed = new Literal(parsed.type, parsed.evaluate(ec));\n } catch (e) {\n this.error(e.message);\n return null;\n }\n }\n\n return parsed;\n }\n\n return this.error(`Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`, 0);\n } else if (typeof expr === 'undefined') {\n return this.error(`'undefined' value invalid. Use null instead.`);\n } else if (typeof expr === 'object') {\n return this.error(`Bare objects invalid. Use [\"literal\", {...}] instead.`);\n } else {\n return this.error(`Expected an array, but found ${typeof expr} instead.`);\n }\n }\n\n /**\n * Returns a copy of this context suitable for parsing the subexpression at\n * index `index`, optionally appending to 'let' binding map.\n *\n * Note that `errors` property, intended for collecting errors while\n * parsing, is copied by reference rather than cloned.\n * @private\n */\n concat(index: number, expectedType?: ?Type, bindings?: Array<[string, Expression]>) {\n const path = typeof index === 'number' ? this.path.concat(index) : this.path;\n const scope = bindings ? this.scope.concat(bindings) : this.scope;\n return new ParsingContext(\n this.registry,\n path,\n expectedType || null,\n scope,\n this.errors\n );\n }\n\n /**\n * Push a parsing (or type checking) error into the `this.errors`\n * @param error The message\n * @param keys Optionally specify the source of the error at a child\n * of the current expression at `this.key`.\n * @private\n */\n error(error: string, ...keys: Array) {\n const key = `${this.key}${keys.map(k => `[${k}]`).join('')}`;\n this.errors.push(new ParsingError(key, error));\n }\n\n /**\n * Returns null if `t` is a subtype of `expected`; otherwise returns an\n * error message and also pushes it to `this.errors`.\n */\n checkSubtype(expected: Type, t: Type): ?string {\n const error = checkSubtype(expected, t);\n if (error) this.error(error);\n return error;\n }\n}\n\nexport default ParsingContext;\n\nfunction isConstant(expression: Expression) {\n if (expression instanceof Var) {\n return isConstant(expression.boundExpression);\n } else if (expression instanceof CompoundExpression && expression.name === 'error') {\n return false;\n } else if (expression instanceof CollatorExpression) {\n // Although the results of a Collator expression with fixed arguments\n // generally shouldn't change between executions, we can't serialize them\n // as constant expressions because results change based on environment.\n return false;\n } else if (expression instanceof Within) {\n return false;\n }\n\n const isTypeAnnotation = expression instanceof Coercion ||\n expression instanceof Assertion;\n\n let childrenConstant = true;\n expression.eachChild(child => {\n // We can _almost_ assume that if `expressions` children are constant,\n // they would already have been evaluated to Literal values when they\n // were parsed. Type annotations are the exception, because they might\n // have been inferred and added after a child was parsed.\n\n // So we recurse into isConstant() for the children of type annotations,\n // but otherwise simply check whether they are Literals.\n if (isTypeAnnotation) {\n childrenConstant = childrenConstant && isConstant(child);\n } else {\n childrenConstant = childrenConstant && child instanceof Literal;\n }\n });\n if (!childrenConstant) {\n return false;\n }\n\n return isFeatureConstant(expression) &&\n isGlobalPropertyConstant(expression, ['zoom', 'heatmap-density', 'line-progress', 'accumulated', 'is-supported-script']);\n}\n","// @flow\n\nimport RuntimeError from './runtime_error';\n\nimport type {Expression} from './expression';\n\nexport type Stops = Array<[number, Expression]>;\n\n/**\n * Returns the index of the last stop <= input, or 0 if it doesn't exist.\n * @private\n */\nexport function findStopLessThanOrEqualTo(stops: Array, input: number) {\n const lastIndex = stops.length - 1;\n let lowerIndex = 0;\n let upperIndex = lastIndex;\n let currentIndex = 0;\n let currentValue, nextValue;\n\n while (lowerIndex <= upperIndex) {\n currentIndex = Math.floor((lowerIndex + upperIndex) / 2);\n currentValue = stops[currentIndex];\n nextValue = stops[currentIndex + 1];\n\n if (currentValue <= input) {\n if (currentIndex === lastIndex || input < nextValue) { // Search complete\n return currentIndex;\n }\n\n lowerIndex = currentIndex + 1;\n } else if (currentValue > input) {\n upperIndex = currentIndex - 1;\n } else {\n throw new RuntimeError('Input is not a number.');\n }\n }\n\n return 0;\n}\n","// @flow\n\nimport {NumberType} from '../types';\n\nimport {findStopLessThanOrEqualTo} from '../stops';\n\nimport type {Stops} from '../stops';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Step implements Expression {\n type: Type;\n\n input: Expression;\n labels: Array;\n outputs: Array;\n\n constructor(type: Type, input: Expression, stops: Stops) {\n this.type = type;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n const input = context.parse(args[1], 1, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n for (let i = 1; i < args.length; i += 2) {\n const label = i === 1 ? -Infinity : args[i];\n const value = args[i + 1];\n\n const labelKey = i;\n const valueKey = i + 1;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n return new Step(outputType, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n return outputs[index].evaluate(ctx);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n outputDefined(): boolean {\n return this.outputs.every(out => out.outputDefined());\n }\n\n serialize() {\n const serialized = [\"step\", this.input.serialize()];\n for (let i = 0; i < this.labels.length; i++) {\n if (i > 0) {\n serialized.push(this.labels[i]);\n }\n serialized.push(this.outputs[i].serialize());\n }\n return serialized;\n }\n}\n\nexport default Step;\n","/*\n * Copyright (C) 2008 Apple Inc. All Rights Reserved.\n *\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions\n * are met:\n * 1. Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * 2. Redistributions in binary form must reproduce the above copyright\n * notice, this list of conditions and the following disclaimer in the\n * documentation and/or other materials provided with the distribution.\n *\n * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR\n * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n *\n * Ported from Webkit\n * http://svn.webkit.org/repository/webkit/trunk/Source/WebCore/platform/graphics/UnitBezier.h\n */\n\nmodule.exports = UnitBezier;\n\nfunction UnitBezier(p1x, p1y, p2x, p2y) {\n // Calculate the polynomial coefficients, implicit first and last control points are (0,0) and (1,1).\n this.cx = 3.0 * p1x;\n this.bx = 3.0 * (p2x - p1x) - this.cx;\n this.ax = 1.0 - this.cx - this.bx;\n\n this.cy = 3.0 * p1y;\n this.by = 3.0 * (p2y - p1y) - this.cy;\n this.ay = 1.0 - this.cy - this.by;\n\n this.p1x = p1x;\n this.p1y = p2y;\n this.p2x = p2x;\n this.p2y = p2y;\n}\n\nUnitBezier.prototype.sampleCurveX = function(t) {\n // `ax t^3 + bx t^2 + cx t' expanded using Horner's rule.\n return ((this.ax * t + this.bx) * t + this.cx) * t;\n};\n\nUnitBezier.prototype.sampleCurveY = function(t) {\n return ((this.ay * t + this.by) * t + this.cy) * t;\n};\n\nUnitBezier.prototype.sampleCurveDerivativeX = function(t) {\n return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;\n};\n\nUnitBezier.prototype.solveCurveX = function(x, epsilon) {\n if (typeof epsilon === 'undefined') epsilon = 1e-6;\n\n var t0, t1, t2, x2, i;\n\n // First try a few iterations of Newton's method -- normally very fast.\n for (t2 = x, i = 0; i < 8; i++) {\n\n x2 = this.sampleCurveX(t2) - x;\n if (Math.abs(x2) < epsilon) return t2;\n\n var d2 = this.sampleCurveDerivativeX(t2);\n if (Math.abs(d2) < 1e-6) break;\n\n t2 = t2 - x2 / d2;\n }\n\n // Fall back to the bisection method for reliability.\n t0 = 0.0;\n t1 = 1.0;\n t2 = x;\n\n if (t2 < t0) return t0;\n if (t2 > t1) return t1;\n\n while (t0 < t1) {\n\n x2 = this.sampleCurveX(t2);\n if (Math.abs(x2 - x) < epsilon) return t2;\n\n if (x > x2) {\n t0 = t2;\n } else {\n t1 = t2;\n }\n\n t2 = (t1 - t0) * 0.5 + t0;\n }\n\n // Failure.\n return t2;\n};\n\nUnitBezier.prototype.solve = function(x, epsilon) {\n return this.sampleCurveY(this.solveCurveX(x, epsilon));\n};\n","// @flow\n\nimport Color from './color';\n\nexport function number(a: number, b: number, t: number) {\n return (a * (1 - t)) + (b * t);\n}\n\nexport function color(from: Color, to: Color, t: number) {\n return new Color(\n number(from.r, to.r, t),\n number(from.g, to.g, t),\n number(from.b, to.b, t),\n number(from.a, to.a, t)\n );\n}\n\nexport function array(from: Array, to: Array, t: number): Array {\n return from.map((d, i) => {\n return number(d, to[i], t);\n });\n}\n","// @flow\n\nimport Color from './color';\n\nimport {number as interpolateNumber} from './interpolate';\n\ntype LABColor = {\n l: number,\n a: number,\n b: number,\n alpha: number\n};\n\ntype HCLColor = {\n h: number,\n c: number,\n l: number,\n alpha: number\n};\n\n// Constants\nconst Xn = 0.950470, // D65 standard referent\n Yn = 1,\n Zn = 1.088830,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1,\n deg2rad = Math.PI / 180,\n rad2deg = 180 / Math.PI;\n\n// Utilities\nfunction xyz2lab(t: number) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t: number) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction xyz2rgb(x: number) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2xyz(x: number) {\n x /= 255;\n return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\n// LAB\nfunction rgbToLab(rgbColor: Color): LABColor {\n const b = rgb2xyz(rgbColor.r),\n a = rgb2xyz(rgbColor.g),\n l = rgb2xyz(rgbColor.b),\n x = xyz2lab((0.4124564 * b + 0.3575761 * a + 0.1804375 * l) / Xn),\n y = xyz2lab((0.2126729 * b + 0.7151522 * a + 0.0721750 * l) / Yn),\n z = xyz2lab((0.0193339 * b + 0.1191920 * a + 0.9503041 * l) / Zn);\n\n return {\n l: 116 * y - 16,\n a: 500 * (x - y),\n b: 200 * (y - z),\n alpha: rgbColor.a\n };\n}\n\nfunction labToRgb(labColor: LABColor): Color {\n let y = (labColor.l + 16) / 116,\n x = isNaN(labColor.a) ? y : y + labColor.a / 500,\n z = isNaN(labColor.b) ? y : y - labColor.b / 200;\n y = Yn * lab2xyz(y);\n x = Xn * lab2xyz(x);\n z = Zn * lab2xyz(z);\n return new Color(\n xyz2rgb(3.2404542 * x - 1.5371385 * y - 0.4985314 * z), // D65 -> sRGB\n xyz2rgb(-0.9692660 * x + 1.8760108 * y + 0.0415560 * z),\n xyz2rgb(0.0556434 * x - 0.2040259 * y + 1.0572252 * z),\n labColor.alpha\n );\n}\n\nfunction interpolateLab(from: LABColor, to: LABColor, t: number) {\n return {\n l: interpolateNumber(from.l, to.l, t),\n a: interpolateNumber(from.a, to.a, t),\n b: interpolateNumber(from.b, to.b, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\n// HCL\nfunction rgbToHcl(rgbColor: Color): HCLColor {\n const {l, a, b} = rgbToLab(rgbColor);\n const h = Math.atan2(b, a) * rad2deg;\n return {\n h: h < 0 ? h + 360 : h,\n c: Math.sqrt(a * a + b * b),\n l,\n alpha: rgbColor.a\n };\n}\n\nfunction hclToRgb(hclColor: HCLColor): Color {\n const h = hclColor.h * deg2rad,\n c = hclColor.c,\n l = hclColor.l;\n return labToRgb({\n l,\n a: Math.cos(h) * c,\n b: Math.sin(h) * c,\n alpha: hclColor.alpha\n });\n}\n\nfunction interpolateHue(a: number, b: number, t: number) {\n const d = b - a;\n return a + t * (d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d);\n}\n\nfunction interpolateHcl(from: HCLColor, to: HCLColor, t: number) {\n return {\n h: interpolateHue(from.h, to.h, t),\n c: interpolateNumber(from.c, to.c, t),\n l: interpolateNumber(from.l, to.l, t),\n alpha: interpolateNumber(from.alpha, to.alpha, t)\n };\n}\n\nexport const lab = {\n forward: rgbToLab,\n reverse: labToRgb,\n interpolate: interpolateLab\n};\n\nexport const hcl = {\n forward: rgbToHcl,\n reverse: hclToRgb,\n interpolate: interpolateHcl\n};\n","// @flow\n\nimport UnitBezier from '@mapbox/unitbezier';\n\nimport * as interpolate from '../../util/interpolate';\nimport {toString, NumberType, ColorType} from '../types';\nimport {findStopLessThanOrEqualTo} from '../stops';\nimport {hcl, lab} from '../../util/color_spaces';\n\nimport type {Stops} from '../stops';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nexport type InterpolationType =\n { name: 'linear' } |\n { name: 'exponential', base: number } |\n { name: 'cubic-bezier', controlPoints: [number, number, number, number] };\n\nclass Interpolate implements Expression {\n type: Type;\n\n operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab';\n interpolation: InterpolationType;\n input: Expression;\n labels: Array;\n outputs: Array;\n\n constructor(type: Type, operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab', interpolation: InterpolationType, input: Expression, stops: Stops) {\n this.type = type;\n this.operator = operator;\n this.interpolation = interpolation;\n this.input = input;\n\n this.labels = [];\n this.outputs = [];\n for (const [label, expression] of stops) {\n this.labels.push(label);\n this.outputs.push(expression);\n }\n }\n\n static interpolationFactor(interpolation: InterpolationType, input: number, lower: number, upper: number) {\n let t = 0;\n if (interpolation.name === 'exponential') {\n t = exponentialInterpolation(input, interpolation.base, lower, upper);\n } else if (interpolation.name === 'linear') {\n t = exponentialInterpolation(input, 1, lower, upper);\n } else if (interpolation.name === 'cubic-bezier') {\n const c = interpolation.controlPoints;\n const ub = new UnitBezier(c[0], c[1], c[2], c[3]);\n t = ub.solve(exponentialInterpolation(input, 1, lower, upper));\n }\n return t;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n let [operator, interpolation, input, ...rest] = args;\n\n if (!Array.isArray(interpolation) || interpolation.length === 0) {\n return context.error(`Expected an interpolation type expression.`, 1);\n }\n\n if (interpolation[0] === 'linear') {\n interpolation = {name: 'linear'};\n } else if (interpolation[0] === 'exponential') {\n const base = interpolation[1];\n if (typeof base !== 'number')\n return context.error(`Exponential interpolation requires a numeric base.`, 1, 1);\n interpolation = {\n name: 'exponential',\n base\n };\n } else if (interpolation[0] === 'cubic-bezier') {\n const controlPoints = interpolation.slice(1);\n if (\n controlPoints.length !== 4 ||\n controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1)\n ) {\n return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1);\n }\n\n interpolation = {\n name: 'cubic-bezier',\n controlPoints: (controlPoints: any)\n };\n } else {\n return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0);\n }\n\n if (args.length - 1 < 4) {\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n }\n\n if ((args.length - 1) % 2 !== 0) {\n return context.error(`Expected an even number of arguments.`);\n }\n\n input = context.parse(input, 2, NumberType);\n if (!input) return null;\n\n const stops: Stops = [];\n\n let outputType: Type = (null: any);\n if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') {\n outputType = ColorType;\n } else if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n for (let i = 0; i < rest.length; i += 2) {\n const label = rest[i];\n const value = rest[i + 1];\n\n const labelKey = i + 3;\n const valueKey = i + 4;\n\n if (typeof label !== 'number') {\n return context.error('Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey);\n }\n\n if (stops.length && stops[stops.length - 1][0] >= label) {\n return context.error('Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.', labelKey);\n }\n\n const parsed = context.parse(value, valueKey, outputType);\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n stops.push([label, parsed]);\n }\n\n if (outputType.kind !== 'number' &&\n outputType.kind !== 'color' &&\n !(\n outputType.kind === 'array' &&\n outputType.itemType.kind === 'number' &&\n typeof outputType.N === 'number'\n )\n ) {\n return context.error(`Type ${toString(outputType)} is not interpolatable.`);\n }\n\n return new Interpolate(outputType, (operator: any), interpolation, input, stops);\n }\n\n evaluate(ctx: EvaluationContext) {\n const labels = this.labels;\n const outputs = this.outputs;\n\n if (labels.length === 1) {\n return outputs[0].evaluate(ctx);\n }\n\n const value = ((this.input.evaluate(ctx): any): number);\n if (value <= labels[0]) {\n return outputs[0].evaluate(ctx);\n }\n\n const stopCount = labels.length;\n if (value >= labels[stopCount - 1]) {\n return outputs[stopCount - 1].evaluate(ctx);\n }\n\n const index = findStopLessThanOrEqualTo(labels, value);\n const lower = labels[index];\n const upper = labels[index + 1];\n const t = Interpolate.interpolationFactor(this.interpolation, value, lower, upper);\n\n const outputLower = outputs[index].evaluate(ctx);\n const outputUpper = outputs[index + 1].evaluate(ctx);\n\n if (this.operator === 'interpolate') {\n return (interpolate[this.type.kind.toLowerCase()]: any)(outputLower, outputUpper, t); // eslint-disable-line import/namespace\n } else if (this.operator === 'interpolate-hcl') {\n return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t));\n } else {\n return lab.reverse(lab.interpolate(lab.forward(outputLower), lab.forward(outputUpper), t));\n }\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n for (const expression of this.outputs) {\n fn(expression);\n }\n }\n\n outputDefined(): boolean {\n return this.outputs.every(out => out.outputDefined());\n }\n\n serialize(): Array {\n let interpolation;\n if (this.interpolation.name === 'linear') {\n interpolation = [\"linear\"];\n } else if (this.interpolation.name === 'exponential') {\n if (this.interpolation.base === 1) {\n interpolation = [\"linear\"];\n } else {\n interpolation = [\"exponential\", this.interpolation.base];\n }\n } else {\n interpolation = [\"cubic-bezier\" ].concat(this.interpolation.controlPoints);\n }\n\n const serialized = [this.operator, interpolation, this.input.serialize()];\n\n for (let i = 0; i < this.labels.length; i++) {\n serialized.push(\n this.labels[i],\n this.outputs[i].serialize()\n );\n }\n return serialized;\n }\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n * How it works: Two consecutive stop values define a (scaled and shifted) exponential function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n*/\nfunction exponentialInterpolation(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n\nexport default Interpolate;\n","// @flow\n\nimport assert from 'assert';\n\nimport {checkSubtype, ValueType} from '../types';\nimport ResolvedImage from '../types/resolved_image';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Coalesce implements Expression {\n type: Type;\n args: Array;\n\n constructor(type: Type, args: Array) {\n this.type = type;\n this.args = args;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length < 2) {\n return context.error(\"Expectected at least one argument.\");\n }\n let outputType: Type = (null: any);\n const expectedType = context.expectedType;\n if (expectedType && expectedType.kind !== 'value') {\n outputType = expectedType;\n }\n const parsedArgs = [];\n\n for (const arg of args.slice(1)) {\n const parsed = context.parse(arg, 1 + parsedArgs.length, outputType, undefined, {typeAnnotation: 'omit'});\n if (!parsed) return null;\n outputType = outputType || parsed.type;\n parsedArgs.push(parsed);\n }\n assert(outputType);\n\n // Above, we parse arguments without inferred type annotation so that\n // they don't produce a runtime error for `null` input, which would\n // preempt the desired null-coalescing behavior.\n // Thus, if any of our arguments would have needed an annotation, we\n // need to wrap the enclosing coalesce expression with it instead.\n const needsAnnotation = expectedType &&\n parsedArgs.some(arg => checkSubtype(expectedType, arg.type));\n\n return needsAnnotation ?\n new Coalesce(ValueType, parsedArgs) :\n new Coalesce((outputType: any), parsedArgs);\n }\n\n evaluate(ctx: EvaluationContext) {\n let result = null;\n let argCount = 0;\n let requestedImageName;\n for (const arg of this.args) {\n argCount++;\n result = arg.evaluate(ctx);\n // we need to keep track of the first requested image in a coalesce statement\n // if coalesce can't find a valid image, we return the first image name so styleimagemissing can fire\n if (result && result instanceof ResolvedImage && !result.available) {\n if (!requestedImageName) {\n requestedImageName = result.name;\n }\n result = null;\n if (argCount === this.args.length) {\n result = requestedImageName;\n }\n }\n\n if (result !== null) break;\n }\n return result;\n }\n\n eachChild(fn: (_: Expression) => void) {\n this.args.forEach(fn);\n }\n\n outputDefined(): boolean {\n return this.args.every(arg => arg.outputDefined());\n }\n\n serialize() {\n const serialized = [\"coalesce\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Coalesce;\n","// @flow\n\nimport type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\nclass Let implements Expression {\n type: Type;\n bindings: Array<[string, Expression]>;\n result: Expression;\n\n constructor(bindings: Array<[string, Expression]>, result: Expression) {\n this.type = result.type;\n this.bindings = [].concat(bindings);\n this.result = result;\n }\n\n evaluate(ctx: EvaluationContext) {\n return this.result.evaluate(ctx);\n }\n\n eachChild(fn: (_: Expression) => void) {\n for (const binding of this.bindings) {\n fn(binding[1]);\n }\n fn(this.result);\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`);\n\n const bindings: Array<[string, Expression]> = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const name = args[i];\n\n if (typeof name !== 'string') {\n return context.error(`Expected string, but found ${typeof name} instead.`, i);\n }\n\n if (/[^a-zA-Z0-9_]/.test(name)) {\n return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i);\n }\n\n const value = context.parse(args[i + 1], i + 1);\n if (!value) return null;\n\n bindings.push([name, value]);\n }\n\n const result = context.parse(args[args.length - 1], args.length - 1, context.expectedType, bindings);\n if (!result) return null;\n\n return new Let(bindings, result);\n }\n\n outputDefined() {\n return this.result.outputDefined();\n }\n\n serialize() {\n const serialized = [\"let\"];\n for (const [name, expr] of this.bindings) {\n serialized.push(name, expr.serialize());\n }\n serialized.push(this.result.serialize());\n return serialized;\n }\n}\n\nexport default Let;\n","// @flow\n\nimport {array, ValueType, NumberType} from '../types';\n\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type, ArrayType} from '../types';\nimport type {Value} from '../values';\n\nclass At implements Expression {\n type: Type;\n index: Expression;\n input: Expression;\n\n constructor(type: Type, index: Expression, input: Expression) {\n this.type = type;\n this.index = index;\n this.input = input;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 3)\n return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n\n const index = context.parse(args[1], 1, NumberType);\n const input = context.parse(args[2], 2, array(context.expectedType || ValueType));\n\n if (!index || !input) return null;\n\n const t: ArrayType = (input.type: any);\n return new At(t.itemType, index, input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const index = ((this.index.evaluate(ctx): any): number);\n const array = ((this.input.evaluate(ctx): any): Array);\n\n if (index < 0) {\n throw new RuntimeError(`Array index out of bounds: ${index} < 0.`);\n }\n\n if (index >= array.length) {\n throw new RuntimeError(`Array index out of bounds: ${index} > ${array.length - 1}.`);\n }\n\n if (index !== Math.floor(index)) {\n throw new RuntimeError(`Array index must be an integer, but found ${index} instead.`);\n }\n\n return array[index];\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.index);\n fn(this.input);\n }\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n return [\"at\", this.index.serialize(), this.input.serialize()];\n }\n}\n\nexport default At;\n","// @flow\n\nimport {BooleanType, StringType, ValueType, NullType, toString, NumberType, isValidType, isValidNativeType} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass In implements Expression {\n type: Type;\n needle: Expression;\n haystack: Expression;\n\n constructor(needle: Expression, haystack: Expression) {\n this.type = BooleanType;\n this.needle = needle;\n this.haystack = haystack;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 3) {\n return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`);\n }\n\n const needle = context.parse(args[1], 1, ValueType);\n\n const haystack = context.parse(args[2], 2, ValueType);\n\n if (!needle || !haystack) return null;\n\n if (!isValidType(needle.type, [BooleanType, StringType, NumberType, NullType, ValueType])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`);\n }\n\n return new In(needle, haystack);\n }\n\n evaluate(ctx: EvaluationContext) {\n const needle = (this.needle.evaluate(ctx): any);\n const haystack = (this.haystack.evaluate(ctx): any);\n\n if (!haystack) return false;\n\n if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) {\n throw new RuntimeError(`Expected first argument to be of type boolean, string, number or null, but found ${toString(typeOf(needle))} instead.`);\n }\n\n if (!isValidNativeType(haystack, ['string', 'array'])) {\n throw new RuntimeError(`Expected second argument to be of type array or string, but found ${toString(typeOf(haystack))} instead.`);\n }\n\n return haystack.indexOf(needle) >= 0;\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.needle);\n fn(this.haystack);\n }\n\n outputDefined() {\n return true;\n }\n\n serialize() {\n return [\"in\", this.needle.serialize(), this.haystack.serialize()];\n }\n}\n\nexport default In;\n","// @flow\n\nimport {BooleanType, StringType, ValueType, NullType, toString, NumberType, isValidType, isValidNativeType} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass IndexOf implements Expression {\n type: Type;\n needle: Expression;\n haystack: Expression;\n fromIndex: ?Expression;\n\n constructor(needle: Expression, haystack: Expression, fromIndex?: Expression) {\n this.type = NumberType;\n this.needle = needle;\n this.haystack = haystack;\n this.fromIndex = fromIndex;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`);\n }\n\n const needle = context.parse(args[1], 1, ValueType);\n\n const haystack = context.parse(args[2], 2, ValueType);\n\n if (!needle || !haystack) return null;\n if (!isValidType(needle.type, [BooleanType, StringType, NumberType, NullType, ValueType])) {\n return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`);\n }\n\n if (args.length === 4) {\n const fromIndex = context.parse(args[3], 3, NumberType);\n if (!fromIndex) return null;\n return new IndexOf(needle, haystack, fromIndex);\n } else {\n return new IndexOf(needle, haystack);\n }\n }\n\n evaluate(ctx: EvaluationContext) {\n const needle = (this.needle.evaluate(ctx): any);\n const haystack = (this.haystack.evaluate(ctx): any);\n\n if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) {\n throw new RuntimeError(`Expected first argument to be of type boolean, string, number or null, but found ${toString(typeOf(needle))} instead.`);\n }\n\n if (!isValidNativeType(haystack, ['string', 'array'])) {\n throw new RuntimeError(`Expected second argument to be of type array or string, but found ${toString(typeOf(haystack))} instead.`);\n }\n\n if (this.fromIndex) {\n const fromIndex = (this.fromIndex.evaluate(ctx): number);\n return haystack.indexOf(needle, fromIndex);\n }\n\n return haystack.indexOf(needle);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.needle);\n fn(this.haystack);\n if (this.fromIndex) {\n fn(this.fromIndex);\n }\n }\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n if (this.fromIndex != null && this.fromIndex !== undefined) {\n const fromIndex = this.fromIndex.serialize();\n return [\"index-of\", this.needle.serialize(), this.haystack.serialize(), fromIndex];\n }\n return [\"index-of\", this.needle.serialize(), this.haystack.serialize()];\n }\n}\n\nexport default IndexOf;\n","// @flow\n\nimport assert from 'assert';\n\nimport {typeOf} from '../values';\nimport {ValueType, type Type} from '../types';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\n\n// Map input label values to output expression index\ntype Cases = {[number | string]: number};\n\nclass Match implements Expression {\n type: Type;\n inputType: Type;\n\n input: Expression;\n cases: Cases;\n outputs: Array;\n otherwise: Expression;\n\n constructor(inputType: Type, outputType: Type, input: Expression, cases: Cases, outputs: Array, otherwise: Expression) {\n this.inputType = inputType;\n this.type = outputType;\n this.input = input;\n this.cases = cases;\n this.outputs = outputs;\n this.otherwise = otherwise;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length < 5)\n return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 1)\n return context.error(`Expected an even number of arguments.`);\n\n let inputType;\n let outputType;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n const cases = {};\n const outputs = [];\n for (let i = 2; i < args.length - 1; i += 2) {\n let labels = args[i];\n const value = args[i + 1];\n\n if (!Array.isArray(labels)) {\n labels = [labels];\n }\n\n const labelContext = context.concat(i);\n if (labels.length === 0) {\n return labelContext.error('Expected at least one branch label.');\n }\n\n for (const label of labels) {\n if (typeof label !== 'number' && typeof label !== 'string') {\n return labelContext.error(`Branch labels must be numbers or strings.`);\n } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n return labelContext.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`);\n\n } else if (typeof label === 'number' && Math.floor(label) !== label) {\n return labelContext.error(`Numeric branch labels must be integer values.`);\n\n } else if (!inputType) {\n inputType = typeOf(label);\n } else if (labelContext.checkSubtype(inputType, typeOf(label))) {\n return null;\n }\n\n if (typeof cases[String(label)] !== 'undefined') {\n return labelContext.error('Branch labels must be unique.');\n }\n\n cases[String(label)] = outputs.length;\n }\n\n const result = context.parse(value, i, outputType);\n if (!result) return null;\n outputType = outputType || result.type;\n outputs.push(result);\n }\n\n const input = context.parse(args[1], 1, ValueType);\n if (!input) return null;\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(inputType && outputType);\n\n if (input.type.kind !== 'value' && context.concat(1).checkSubtype((inputType: any), input.type)) {\n return null;\n }\n\n return new Match((inputType: any), (outputType: any), input, cases, outputs, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = (this.input.evaluate(ctx): any);\n const output = (typeOf(input) === this.inputType && this.outputs[this.cases[input]]) || this.otherwise;\n return output.evaluate(ctx);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n this.outputs.forEach(fn);\n fn(this.otherwise);\n }\n\n outputDefined(): boolean {\n return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined();\n }\n\n serialize(): Array {\n const serialized = [\"match\", this.input.serialize()];\n\n // Sort so serialization has an arbitrary defined order, even though\n // branch order doesn't affect evaluation\n const sortedLabels = Object.keys(this.cases).sort();\n\n // Group branches by unique match expression to support condensed\n // serializations of the form [case1, case2, ...] -> matchExpression\n const groupedByOutput: Array<[number, Array]> = [];\n const outputLookup: {[index: number]: number} = {}; // lookup index into groupedByOutput for a given output expression\n for (const label of sortedLabels) {\n const outputIndex = outputLookup[this.cases[label]];\n if (outputIndex === undefined) {\n // First time seeing this output, add it to the end of the grouped list\n outputLookup[this.cases[label]] = groupedByOutput.length;\n groupedByOutput.push([this.cases[label], [label]]);\n } else {\n // We've seen this expression before, add the label to that output's group\n groupedByOutput[outputIndex][1].push(label);\n }\n }\n\n const coerceLabel = (label) => this.inputType.kind === 'number' ? Number(label) : label;\n\n for (const [outputIndex, labels] of groupedByOutput) {\n if (labels.length === 1) {\n // Only a single label matches this output expression\n serialized.push(coerceLabel(labels[0]));\n } else {\n // Array of literal labels pointing to this output expression\n serialized.push(labels.map(coerceLabel));\n }\n serialized.push(this.outputs[outputIndex].serialize());\n }\n serialized.push(this.otherwise.serialize());\n return serialized;\n }\n}\n\nexport default Match;\n","// @flow\n\nimport assert from 'assert';\n\nimport {BooleanType} from '../types';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\ntype Branches = Array<[Expression, Expression]>;\n\nclass Case implements Expression {\n type: Type;\n\n branches: Branches;\n otherwise: Expression;\n\n constructor(type: Type, branches: Branches, otherwise: Expression) {\n this.type = type;\n this.branches = branches;\n this.otherwise = otherwise;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length < 4)\n return context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`);\n if (args.length % 2 !== 0)\n return context.error(`Expected an odd number of arguments.`);\n\n let outputType: ?Type;\n if (context.expectedType && context.expectedType.kind !== 'value') {\n outputType = context.expectedType;\n }\n\n const branches = [];\n for (let i = 1; i < args.length - 1; i += 2) {\n const test = context.parse(args[i], i, BooleanType);\n if (!test) return null;\n\n const result = context.parse(args[i + 1], i + 1, outputType);\n if (!result) return null;\n\n branches.push([test, result]);\n\n outputType = outputType || result.type;\n }\n\n const otherwise = context.parse(args[args.length - 1], args.length - 1, outputType);\n if (!otherwise) return null;\n\n assert(outputType);\n return new Case((outputType: any), branches, otherwise);\n }\n\n evaluate(ctx: EvaluationContext) {\n for (const [test, expression] of this.branches) {\n if (test.evaluate(ctx)) {\n return expression.evaluate(ctx);\n }\n }\n return this.otherwise.evaluate(ctx);\n }\n\n eachChild(fn: (_: Expression) => void) {\n for (const [test, expression] of this.branches) {\n fn(test);\n fn(expression);\n }\n fn(this.otherwise);\n }\n\n outputDefined(): boolean {\n return this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined();\n }\n\n serialize() {\n const serialized = [\"case\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Case;\n","// @flow\n\nimport {ValueType, NumberType, StringType, array, toString, isValidType, isValidNativeType} from '../types';\nimport RuntimeError from '../runtime_error';\nimport {typeOf} from '../values';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Slice implements Expression {\n type: Type;\n input: Expression;\n beginIndex: Expression;\n endIndex: ?Expression;\n\n constructor(type: Type, input: Expression, beginIndex: Expression, endIndex?: Expression) {\n this.type = type;\n this.input = input;\n this.beginIndex = beginIndex;\n this.endIndex = endIndex;\n\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length <= 2 || args.length >= 5) {\n return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`);\n }\n\n const input = context.parse(args[1], 1, ValueType);\n const beginIndex = context.parse(args[2], 2, NumberType);\n\n if (!input || !beginIndex) return null;\n\n if (!isValidType(input.type, [array(ValueType), StringType, ValueType])) {\n return context.error(`Expected first argument to be of type array or string, but found ${toString(input.type)} instead`);\n }\n\n if (args.length === 4) {\n const endIndex = context.parse(args[3], 3, NumberType);\n if (!endIndex) return null;\n return new Slice(input.type, input, beginIndex, endIndex);\n } else {\n return new Slice(input.type, input, beginIndex);\n }\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = (this.input.evaluate(ctx): any);\n const beginIndex = (this.beginIndex.evaluate(ctx): number);\n\n if (!isValidNativeType(input, ['string', 'array'])) {\n throw new RuntimeError(`Expected first argument to be of type array or string, but found ${toString(typeOf(input))} instead.`);\n }\n\n if (this.endIndex) {\n const endIndex = (this.endIndex.evaluate(ctx): number);\n return input.slice(beginIndex, endIndex);\n }\n\n return input.slice(beginIndex);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n fn(this.beginIndex);\n if (this.endIndex) {\n fn(this.endIndex);\n }\n }\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n if (this.endIndex != null && this.endIndex !== undefined) {\n const endIndex = this.endIndex.serialize();\n return [\"slice\", this.input.serialize(), this.beginIndex.serialize(), endIndex];\n }\n return [\"slice\", this.input.serialize(), this.beginIndex.serialize()];\n }\n}\n\nexport default Slice;\n","// @flow\n\nimport {toString, ValueType, BooleanType, CollatorType} from '../types';\nimport Assertion from './assertion';\nimport {typeOf} from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\ntype ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>=' ;\n\nfunction isComparableType(op: ComparisonOperator, type: Type) {\n if (op === '==' || op === '!=') {\n // equality operator\n return type.kind === 'boolean' ||\n type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'null' ||\n type.kind === 'value';\n } else {\n // ordering operator\n return type.kind === 'string' ||\n type.kind === 'number' ||\n type.kind === 'value';\n }\n}\n\nfunction eq(ctx, a, b) { return a === b; }\nfunction neq(ctx, a, b) { return a !== b; }\nfunction lt(ctx, a, b) { return a < b; }\nfunction gt(ctx, a, b) { return a > b; }\nfunction lteq(ctx, a, b) { return a <= b; }\nfunction gteq(ctx, a, b) { return a >= b; }\n\nfunction eqCollate(ctx, a, b, c) { return c.compare(a, b) === 0; }\nfunction neqCollate(ctx, a, b, c) { return !eqCollate(ctx, a, b, c); }\nfunction ltCollate(ctx, a, b, c) { return c.compare(a, b) < 0; }\nfunction gtCollate(ctx, a, b, c) { return c.compare(a, b) > 0; }\nfunction lteqCollate(ctx, a, b, c) { return c.compare(a, b) <= 0; }\nfunction gteqCollate(ctx, a, b, c) { return c.compare(a, b) >= 0; }\n\n/**\n * Special form for comparison operators, implementing the signatures:\n * - (T, T, ?Collator) => boolean\n * - (T, value, ?Collator) => boolean\n * - (value, T, ?Collator) => boolean\n *\n * For inequalities, T must be either value, string, or number. For ==/!=, it\n * can also be boolean or null.\n *\n * Equality semantics are equivalent to Javascript's strict equality (===/!==)\n * -- i.e., when the arguments' types don't match, == evaluates to false, != to\n * true.\n *\n * When types don't match in an ordering comparison, a runtime error is thrown.\n *\n * @private\n */\nfunction makeComparison(op: ComparisonOperator, compareBasic, compareWithCollator) {\n const isOrderComparison = op !== '==' && op !== '!=';\n\n return class Comparison implements Expression {\n type: Type;\n lhs: Expression;\n rhs: Expression;\n collator: ?Expression;\n hasUntypedArgument: boolean;\n\n constructor(lhs: Expression, rhs: Expression, collator: ?Expression) {\n this.type = BooleanType;\n this.lhs = lhs;\n this.rhs = rhs;\n this.collator = collator;\n this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value';\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length !== 3 && args.length !== 4)\n return context.error(`Expected two or three arguments.`);\n\n const op: ComparisonOperator = (args[0]: any);\n\n let lhs = context.parse(args[1], 1, ValueType);\n if (!lhs) return null;\n if (!isComparableType(op, lhs.type)) {\n return context.concat(1).error(`\"${op}\" comparisons are not supported for type '${toString(lhs.type)}'.`);\n }\n let rhs = context.parse(args[2], 2, ValueType);\n if (!rhs) return null;\n if (!isComparableType(op, rhs.type)) {\n return context.concat(2).error(`\"${op}\" comparisons are not supported for type '${toString(rhs.type)}'.`);\n }\n\n if (\n lhs.type.kind !== rhs.type.kind &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`);\n }\n\n if (isOrderComparison) {\n // typing rules specific to less/greater than operators\n if (lhs.type.kind === 'value' && rhs.type.kind !== 'value') {\n // (value, T)\n lhs = new Assertion(rhs.type, [lhs]);\n } else if (lhs.type.kind !== 'value' && rhs.type.kind === 'value') {\n // (T, value)\n rhs = new Assertion(lhs.type, [rhs]);\n }\n }\n\n let collator = null;\n if (args.length === 4) {\n if (\n lhs.type.kind !== 'string' &&\n rhs.type.kind !== 'string' &&\n lhs.type.kind !== 'value' &&\n rhs.type.kind !== 'value'\n ) {\n return context.error(`Cannot use collator to compare non-string types.`);\n }\n collator = context.parse(args[3], 3, CollatorType);\n if (!collator) return null;\n }\n\n return new Comparison(lhs, rhs, collator);\n }\n\n evaluate(ctx: EvaluationContext) {\n const lhs = this.lhs.evaluate(ctx);\n const rhs = this.rhs.evaluate(ctx);\n\n if (isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n // check that type is string or number, and equal\n if (lt.kind !== rt.kind || !(lt.kind === 'string' || lt.kind === 'number')) {\n throw new RuntimeError(`Expected arguments for \"${op}\" to be (string, string) or (number, number), but found (${lt.kind}, ${rt.kind}) instead.`);\n }\n }\n\n if (this.collator && !isOrderComparison && this.hasUntypedArgument) {\n const lt = typeOf(lhs);\n const rt = typeOf(rhs);\n if (lt.kind !== 'string' || rt.kind !== 'string') {\n return compareBasic(ctx, lhs, rhs);\n }\n }\n\n return this.collator ?\n compareWithCollator(ctx, lhs, rhs, this.collator.evaluate(ctx)) :\n compareBasic(ctx, lhs, rhs);\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.lhs);\n fn(this.rhs);\n if (this.collator) {\n fn(this.collator);\n }\n }\n\n outputDefined(): boolean {\n return true;\n }\n\n serialize() {\n const serialized = [op];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n };\n}\n\nexport const Equals = makeComparison('==', eq, eqCollate);\nexport const NotEquals = makeComparison('!=', neq, neqCollate);\nexport const LessThan = makeComparison('<', lt, ltCollate);\nexport const GreaterThan = makeComparison('>', gt, gtCollate);\nexport const LessThanOrEqual = makeComparison('<=', lteq, lteqCollate);\nexport const GreaterThanOrEqual = makeComparison('>=', gteq, gteqCollate);\n","// @flow\n\nimport {StringType, NumberType} from '../types';\n\nimport type {Expression} from '../expression';\nimport type EvaluationContext from '../evaluation_context';\nimport type ParsingContext from '../parsing_context';\nimport type {Type} from '../types';\n\ndeclare var Intl: {\n NumberFormat: Class\n};\n\ndeclare class Intl$NumberFormat {\n constructor (\n locales?: string | string[],\n options?: NumberFormatOptions\n ): Intl$NumberFormat;\n\n static (\n locales?: string | string[],\n options?: NumberFormatOptions\n ): Intl$NumberFormat;\n\n format(a: number): string;\n\n resolvedOptions(): any;\n}\n\ntype NumberFormatOptions = {\n style?: 'decimal' | 'currency' | 'percent';\n currency?: null | string;\n minimumFractionDigits?: null | string;\n maximumFractionDigits?: null | string;\n};\n\nexport default class NumberFormat implements Expression {\n type: Type;\n number: Expression;\n locale: Expression | null; // BCP 47 language tag\n currency: Expression | null; // ISO 4217 currency code, required if style=currency\n minFractionDigits: Expression | null; // Default 0\n maxFractionDigits: Expression | null; // Default 3\n\n constructor(number: Expression,\n locale: Expression | null,\n currency: Expression | null,\n minFractionDigits: Expression | null,\n maxFractionDigits: Expression | null) {\n this.type = StringType;\n this.number = number;\n this.locale = locale;\n this.currency = currency;\n this.minFractionDigits = minFractionDigits;\n this.maxFractionDigits = maxFractionDigits;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression {\n if (args.length !== 3)\n return context.error(`Expected two arguments.`);\n\n const number = context.parse(args[1], 1, NumberType);\n if (!number) return null;\n\n const options = (args[2]: any);\n if (typeof options !== \"object\" || Array.isArray(options))\n return context.error(`NumberFormat options argument must be an object.`);\n\n let locale = null;\n if (options['locale']) {\n locale = context.parse(options['locale'], 1, StringType);\n if (!locale) return null;\n }\n\n let currency = null;\n if (options['currency']) {\n currency = context.parse(options['currency'], 1, StringType);\n if (!currency) return null;\n }\n\n let minFractionDigits = null;\n if (options['min-fraction-digits']) {\n minFractionDigits = context.parse(options['min-fraction-digits'], 1, NumberType);\n if (!minFractionDigits) return null;\n }\n\n let maxFractionDigits = null;\n if (options['max-fraction-digits']) {\n maxFractionDigits = context.parse(options['max-fraction-digits'], 1, NumberType);\n if (!maxFractionDigits) return null;\n }\n\n return new NumberFormat(number, locale, currency, minFractionDigits, maxFractionDigits);\n }\n\n evaluate(ctx: EvaluationContext) {\n return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [],\n {\n style: this.currency ? \"currency\" : \"decimal\",\n currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined,\n maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined,\n }).format(this.number.evaluate(ctx));\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.number);\n if (this.locale) {\n fn(this.locale);\n }\n if (this.currency) {\n fn(this.currency);\n }\n if (this.minFractionDigits) {\n fn(this.minFractionDigits);\n }\n if (this.maxFractionDigits) {\n fn(this.maxFractionDigits);\n }\n }\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n const options = {};\n if (this.locale) {\n options['locale'] = this.locale.serialize();\n }\n if (this.currency) {\n options['currency'] = this.currency.serialize();\n }\n if (this.minFractionDigits) {\n options['min-fraction-digits'] = this.minFractionDigits.serialize();\n }\n if (this.maxFractionDigits) {\n options['max-fraction-digits'] = this.maxFractionDigits.serialize();\n }\n return [\"number-format\", this.number.serialize(), options];\n }\n}\n","// @flow\n\nimport {NumberType, toString} from '../types';\n\nimport {typeOf} from '../values';\nimport RuntimeError from '../runtime_error';\n\nimport type {Expression} from '../expression';\nimport type ParsingContext from '../parsing_context';\nimport type EvaluationContext from '../evaluation_context';\nimport type {Type} from '../types';\n\nclass Length implements Expression {\n type: Type;\n input: Expression;\n\n constructor(input: Expression) {\n this.type = NumberType;\n this.input = input;\n }\n\n static parse(args: $ReadOnlyArray, context: ParsingContext) {\n if (args.length !== 2)\n return context.error(`Expected 1 argument, but found ${args.length - 1} instead.`);\n\n const input = context.parse(args[1], 1);\n if (!input) return null;\n\n if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value')\n return context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`);\n\n return new Length(input);\n }\n\n evaluate(ctx: EvaluationContext) {\n const input = this.input.evaluate(ctx);\n if (typeof input === 'string') {\n return input.length;\n } else if (Array.isArray(input)) {\n return input.length;\n } else {\n throw new RuntimeError(`Expected value to be of type string or array, but found ${toString(typeOf(input))} instead.`);\n }\n }\n\n eachChild(fn: (_: Expression) => void) {\n fn(this.input);\n }\n\n outputDefined() {\n return false;\n }\n\n serialize() {\n const serialized = [\"length\"];\n this.eachChild(child => { serialized.push(child.serialize()); });\n return serialized;\n }\n}\n\nexport default Length;\n","// @flow\n\nimport {\n type Type,\n NumberType,\n StringType,\n BooleanType,\n ColorType,\n ObjectType,\n ValueType,\n ErrorType,\n CollatorType,\n array,\n toString as typeToString\n} from '../types';\n\nimport {typeOf, Color, validateRGBA, toString as valueToString} from '../values';\nimport CompoundExpression from '../compound_expression';\nimport RuntimeError from '../runtime_error';\nimport Let from './let';\nimport Var from './var';\nimport Literal from './literal';\nimport Assertion from './assertion';\nimport Coercion from './coercion';\nimport At from './at';\nimport In from './in';\nimport IndexOf from './index_of';\nimport Match from './match';\nimport Case from './case';\nimport Slice from './slice';\nimport Step from './step';\nimport Interpolate from './interpolate';\nimport Coalesce from './coalesce';\nimport {\n Equals,\n NotEquals,\n LessThan,\n GreaterThan,\n LessThanOrEqual,\n GreaterThanOrEqual\n} from './comparison';\nimport CollatorExpression from './collator';\nimport NumberFormat from './number_format';\nimport FormatExpression from './format';\nimport ImageExpression from './image';\nimport Length from './length';\nimport Within from './within';\n\nimport type {Varargs} from '../compound_expression';\nimport type {ExpressionRegistry} from '../expression';\n\nconst expressions: ExpressionRegistry = {\n // special forms\n '==': Equals,\n '!=': NotEquals,\n '>': GreaterThan,\n '<': LessThan,\n '>=': GreaterThanOrEqual,\n '<=': LessThanOrEqual,\n 'array': Assertion,\n 'at': At,\n 'boolean': Assertion,\n 'case': Case,\n 'coalesce': Coalesce,\n 'collator': CollatorExpression,\n 'format': FormatExpression,\n 'image': ImageExpression,\n 'in': In,\n 'index-of': IndexOf,\n 'interpolate': Interpolate,\n 'interpolate-hcl': Interpolate,\n 'interpolate-lab': Interpolate,\n 'length': Length,\n 'let': Let,\n 'literal': Literal,\n 'match': Match,\n 'number': Assertion,\n 'number-format': NumberFormat,\n 'object': Assertion,\n 'slice': Slice,\n 'step': Step,\n 'string': Assertion,\n 'to-boolean': Coercion,\n 'to-color': Coercion,\n 'to-number': Coercion,\n 'to-string': Coercion,\n 'var': Var,\n 'within': Within\n};\n\nfunction rgba(ctx, [r, g, b, a]) {\n r = r.evaluate(ctx);\n g = g.evaluate(ctx);\n b = b.evaluate(ctx);\n const alpha = a ? a.evaluate(ctx) : 1;\n const error = validateRGBA(r, g, b, alpha);\n if (error) throw new RuntimeError(error);\n return new Color(r / 255 * alpha, g / 255 * alpha, b / 255 * alpha, alpha);\n}\n\nfunction has(key, obj) {\n return key in obj;\n}\n\nfunction get(key, obj) {\n const v = obj[key];\n return typeof v === 'undefined' ? null : v;\n}\n\nfunction binarySearch(v, a, i, j) {\n while (i <= j) {\n const m = (i + j) >> 1;\n if (a[m] === v)\n return true;\n if (a[m] > v)\n j = m - 1;\n else\n i = m + 1;\n }\n return false;\n}\n\nfunction varargs(type: Type): Varargs {\n return {type};\n}\n\nCompoundExpression.register(expressions, {\n 'error': [\n ErrorType,\n [StringType],\n (ctx, [v]) => { throw new RuntimeError(v.evaluate(ctx)); }\n ],\n 'typeof': [\n StringType,\n [ValueType],\n (ctx, [v]) => typeToString(typeOf(v.evaluate(ctx)))\n ],\n 'to-rgba': [\n array(NumberType, 4),\n [ColorType],\n (ctx, [v]) => {\n return v.evaluate(ctx).toArray();\n }\n ],\n 'rgb': [\n ColorType,\n [NumberType, NumberType, NumberType],\n rgba\n ],\n 'rgba': [\n ColorType,\n [NumberType, NumberType, NumberType, NumberType],\n rgba\n ],\n 'has': {\n type: BooleanType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => has(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => has(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'get': {\n type: ValueType,\n overloads: [\n [\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.properties())\n ], [\n [StringType, ObjectType],\n (ctx, [key, obj]) => get(key.evaluate(ctx), obj.evaluate(ctx))\n ]\n ]\n },\n 'feature-state': [\n ValueType,\n [StringType],\n (ctx, [key]) => get(key.evaluate(ctx), ctx.featureState || {})\n ],\n 'properties': [\n ObjectType,\n [],\n (ctx) => ctx.properties()\n ],\n 'geometry-type': [\n StringType,\n [],\n (ctx) => ctx.geometryType()\n ],\n 'id': [\n ValueType,\n [],\n (ctx) => ctx.id()\n ],\n 'zoom': [\n NumberType,\n [],\n (ctx) => ctx.globals.zoom\n ],\n 'heatmap-density': [\n NumberType,\n [],\n (ctx) => ctx.globals.heatmapDensity || 0\n ],\n 'line-progress': [\n NumberType,\n [],\n (ctx) => ctx.globals.lineProgress || 0\n ],\n 'accumulated': [\n ValueType,\n [],\n (ctx) => ctx.globals.accumulated === undefined ? null : ctx.globals.accumulated\n ],\n '+': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 0;\n for (const arg of args) {\n result += arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '*': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => {\n let result = 1;\n for (const arg of args) {\n result *= arg.evaluate(ctx);\n }\n return result;\n }\n ],\n '-': {\n type: NumberType,\n overloads: [\n [\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)\n ], [\n [NumberType],\n (ctx, [a]) => -a.evaluate(ctx)\n ]\n ]\n },\n '/': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)\n ],\n '%': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)\n ],\n 'ln2': [\n NumberType,\n [],\n () => Math.LN2\n ],\n 'pi': [\n NumberType,\n [],\n () => Math.PI\n ],\n 'e': [\n NumberType,\n [],\n () => Math.E\n ],\n '^': [\n NumberType,\n [NumberType, NumberType],\n (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n ],\n 'sqrt': [\n NumberType,\n [NumberType],\n (ctx, [x]) => Math.sqrt(x.evaluate(ctx))\n ],\n 'log10': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10\n ],\n 'ln': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx))\n ],\n 'log2': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2\n ],\n 'sin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.sin(n.evaluate(ctx))\n ],\n 'cos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.cos(n.evaluate(ctx))\n ],\n 'tan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.tan(n.evaluate(ctx))\n ],\n 'asin': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.asin(n.evaluate(ctx))\n ],\n 'acos': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.acos(n.evaluate(ctx))\n ],\n 'atan': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.atan(n.evaluate(ctx))\n ],\n 'min': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.min(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'max': [\n NumberType,\n varargs(NumberType),\n (ctx, args) => Math.max(...args.map(arg => arg.evaluate(ctx)))\n ],\n 'abs': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.abs(n.evaluate(ctx))\n ],\n 'round': [\n NumberType,\n [NumberType],\n (ctx, [n]) => {\n const v = n.evaluate(ctx);\n // Javascript's Math.round() rounds towards +Infinity for halfway\n // values, even when they're negative. It's more common to round\n // away from 0 (e.g., this is what python and C++ do)\n return v < 0 ? -Math.round(-v) : Math.round(v);\n }\n ],\n 'floor': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.floor(n.evaluate(ctx))\n ],\n 'ceil': [\n NumberType,\n [NumberType],\n (ctx, [n]) => Math.ceil(n.evaluate(ctx))\n ],\n 'filter-==': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => ctx.properties()[(k: any).value] === (v: any).value\n ],\n 'filter-id-==': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => ctx.id() === (v: any).value\n ],\n 'filter-type-==': [\n BooleanType,\n [StringType],\n (ctx, [v]) => ctx.geometryType() === (v: any).value\n ],\n 'filter-<': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter-id-<': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a < b;\n }\n ],\n 'filter->': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-id->': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a > b;\n }\n ],\n 'filter-<=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter-id-<=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a <= b;\n }\n ],\n 'filter->=': [\n BooleanType,\n [StringType, ValueType],\n (ctx, [k, v]) => {\n const a = ctx.properties()[(k: any).value];\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-id->=': [\n BooleanType,\n [ValueType],\n (ctx, [v]) => {\n const a = ctx.id();\n const b = (v: any).value;\n return typeof a === typeof b && a >= b;\n }\n ],\n 'filter-has': [\n BooleanType,\n [ValueType],\n (ctx, [k]) => (k: any).value in ctx.properties()\n ],\n 'filter-has-id': [\n BooleanType,\n [],\n (ctx) => (ctx.id() !== null && ctx.id() !== undefined)\n ],\n 'filter-type-in': [\n BooleanType,\n [array(StringType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.geometryType()) >= 0\n ],\n 'filter-id-in': [\n BooleanType,\n [array(ValueType)],\n (ctx, [v]) => (v: any).value.indexOf(ctx.id()) >= 0\n ],\n 'filter-in-small': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is an array literal\n (ctx, [k, v]) => (v: any).value.indexOf(ctx.properties()[(k: any).value]) >= 0\n ],\n 'filter-in-large': [\n BooleanType,\n [StringType, array(ValueType)],\n // assumes v is a array literal with values sorted in ascending order and of a single type\n (ctx, [k, v]) => binarySearch(ctx.properties()[(k: any).value], (v: any).value, 0, (v: any).value.length - 1)\n ],\n 'all': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (!arg.evaluate(ctx))\n return false;\n }\n return true;\n }\n ]\n ]\n },\n 'any': {\n type: BooleanType,\n overloads: [\n [\n [BooleanType, BooleanType],\n (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)\n ],\n [\n varargs(BooleanType),\n (ctx, args) => {\n for (const arg of args) {\n if (arg.evaluate(ctx))\n return true;\n }\n return false;\n }\n ]\n ]\n },\n '!': [\n BooleanType,\n [BooleanType],\n (ctx, [b]) => !b.evaluate(ctx)\n ],\n 'is-supported-script': [\n BooleanType,\n [StringType],\n // At parse time this will always return true, so we need to exclude this expression with isGlobalPropertyConstant\n (ctx, [s]) => {\n const isSupportedScript = ctx.globals && ctx.globals.isSupportedScript;\n if (isSupportedScript) {\n return isSupportedScript(s.evaluate(ctx));\n }\n return true;\n }\n ],\n 'upcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toUpperCase()\n ],\n 'downcase': [\n StringType,\n [StringType],\n (ctx, [s]) => s.evaluate(ctx).toLowerCase()\n ],\n 'concat': [\n StringType,\n varargs(ValueType),\n (ctx, args) => args.map(arg => valueToString(arg.evaluate(ctx))).join('')\n ],\n 'resolved-locale': [\n StringType,\n [CollatorType],\n (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n ]\n});\n\nexport default expressions;\n","// @flow\n\n/**\n * A type used for returning and propagating errors. The first element of the union\n * represents success and contains a value, and the second represents an error and\n * contains an error value.\n * @private\n */\nexport type Result =\n | {| result: 'success', value: T |}\n | {| result: 'error', value: E |};\n\nexport function success(value: T): Result {\n return {result: 'success', value};\n}\n\nexport function error(value: E): Result {\n return {result: 'error', value};\n}\n","// @flow\n\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport function supportsPropertyExpression(spec: StylePropertySpecification): boolean {\n return spec['property-type'] === 'data-driven' || spec['property-type'] === 'cross-faded-data-driven';\n}\n\nexport function supportsZoomExpression(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.parameters.indexOf('zoom') > -1;\n}\n\nexport function supportsInterpolation(spec: StylePropertySpecification): boolean {\n return !!spec.expression && spec.expression.interpolated;\n}\n","// @flow\n\nexport default function getType(val: mixed): string {\n if (val instanceof Number) {\n return 'number';\n } else if (val instanceof String) {\n return 'string';\n } else if (val instanceof Boolean) {\n return 'boolean';\n } else if (Array.isArray(val)) {\n return 'array';\n } else if (val === null) {\n return 'null';\n } else {\n return typeof val;\n }\n}\n","\nimport * as colorSpaces from '../util/color_spaces';\nimport Color from '../util/color';\nimport extend from '../util/extend';\nimport getType from '../util/get_type';\nimport * as interpolate from '../util/interpolate';\nimport Interpolate from '../expression/definitions/interpolate';\nimport Formatted from '../expression/types/formatted';\nimport ResolvedImage from '../expression/types/resolved_image';\nimport {supportsInterpolation} from '../util/properties';\nimport {findStopLessThanOrEqualTo} from '../expression/stops';\n\nexport function isFunction(value) {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction identityFunction(x) {\n return x;\n}\n\nexport function createFunction(parameters, propertySpec) {\n const isColor = propertySpec.type === 'color';\n const zoomAndFeatureDependent = parameters.stops && typeof parameters.stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n const type = parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');\n\n if (isColor) {\n parameters = extend({}, parameters);\n\n if (parameters.stops) {\n parameters.stops = parameters.stops.map((stop) => {\n return [stop[0], Color.parse(stop[1])];\n });\n }\n\n if (parameters.default) {\n parameters.default = Color.parse(parameters.default);\n } else {\n parameters.default = Color.parse(propertySpec.default);\n }\n }\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb' && !colorSpaces[parameters.colorSpace]) { // eslint-disable-line import/namespace\n throw new Error(`Unknown color space: ${parameters.colorSpace}`);\n }\n\n let innerFun;\n let hashedStops;\n let categoricalKeyType;\n if (type === 'exponential') {\n innerFun = evaluateExponentialFunction;\n } else if (type === 'interval') {\n innerFun = evaluateIntervalFunction;\n } else if (type === 'categorical') {\n innerFun = evaluateCategoricalFunction;\n\n // For categorical functions, generate an Object as a hashmap of the stops for fast searching\n hashedStops = Object.create(null);\n for (const stop of parameters.stops) {\n hashedStops[stop[0]] = stop[1];\n }\n\n // Infer key type based on first stop key-- used to encforce strict type checking later\n categoricalKeyType = typeof parameters.stops[0][0];\n\n } else if (type === 'identity') {\n innerFun = evaluateIdentityFunction;\n } else {\n throw new Error(`Unknown function type \"${type}\"`);\n }\n\n if (zoomAndFeatureDependent) {\n const featureFunctions = {};\n const zoomStops = [];\n for (let s = 0; s < parameters.stops.length; s++) {\n const stop = parameters.stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctions[zoom] === undefined) {\n featureFunctions[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n stops: []\n };\n zoomStops.push(zoom);\n }\n featureFunctions[zoom].stops.push([stop[0].value, stop[1]]);\n }\n\n const featureFunctionStops = [];\n for (const z of zoomStops) {\n featureFunctionStops.push([featureFunctions[z].zoom, createFunction(featureFunctions[z], propertySpec)]);\n }\n\n const interpolationType = {name: 'linear'};\n return {\n kind: 'composite',\n interpolationType,\n interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),\n zoomStops: featureFunctionStops.map(s => s[0]),\n evaluate({zoom}, properties) {\n return evaluateExponentialFunction({\n stops: featureFunctionStops,\n base: parameters.base\n }, propertySpec, zoom).evaluate(zoom, properties);\n }\n };\n } else if (zoomDependent) {\n const interpolationType = type === 'exponential' ?\n {name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1} : null;\n return {\n kind: 'camera',\n interpolationType,\n interpolationFactor: Interpolate.interpolationFactor.bind(undefined, interpolationType),\n zoomStops: parameters.stops.map(s => s[0]),\n evaluate: ({zoom}) => innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)\n };\n } else {\n return {\n kind: 'source',\n evaluate(_, feature) {\n const value = feature && feature.properties ? feature.properties[parameters.property] : undefined;\n if (value === undefined) {\n return coalesce(parameters.default, propertySpec.default);\n }\n return innerFun(parameters, propertySpec, value, hashedStops, categoricalKeyType);\n }\n };\n }\n}\n\nfunction coalesce(a, b, c) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n if (c !== undefined) return c;\n}\n\nfunction evaluateCategoricalFunction(parameters, propertySpec, input, hashedStops, keyType) {\n const evaluated = typeof input === keyType ? hashedStops[input] : undefined; // Enforce strict typing on input\n return coalesce(evaluated, parameters.default, propertySpec.default);\n}\n\nfunction evaluateIntervalFunction(parameters, propertySpec, input) {\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);\n\n return parameters.stops[index][1];\n}\n\nfunction evaluateExponentialFunction(parameters, propertySpec, input) {\n const base = parameters.base !== undefined ? parameters.base : 1;\n\n // Edge cases\n if (getType(input) !== 'number') return coalesce(parameters.default, propertySpec.default);\n const n = parameters.stops.length;\n if (n === 1) return parameters.stops[0][1];\n if (input <= parameters.stops[0][0]) return parameters.stops[0][1];\n if (input >= parameters.stops[n - 1][0]) return parameters.stops[n - 1][1];\n\n const index = findStopLessThanOrEqualTo(parameters.stops.map((stop) => stop[0]), input);\n const t = interpolationFactor(\n input, base,\n parameters.stops[index][0],\n parameters.stops[index + 1][0]);\n\n const outputLower = parameters.stops[index][1];\n const outputUpper = parameters.stops[index + 1][1];\n let interp = interpolate[propertySpec.type] || identityFunction; // eslint-disable-line import/namespace\n\n if (parameters.colorSpace && parameters.colorSpace !== 'rgb') {\n const colorspace = colorSpaces[parameters.colorSpace]; // eslint-disable-line import/namespace\n interp = (a, b) => colorspace.reverse(colorspace.interpolate(colorspace.forward(a), colorspace.forward(b), t));\n }\n\n if (typeof outputLower.evaluate === 'function') {\n return {\n evaluate(...args) {\n const evaluatedLower = outputLower.evaluate.apply(undefined, args);\n const evaluatedUpper = outputUpper.evaluate.apply(undefined, args);\n // Special case for fill-outline-color, which has no spec default.\n if (evaluatedLower === undefined || evaluatedUpper === undefined) {\n return undefined;\n }\n return interp(evaluatedLower, evaluatedUpper, t);\n }\n };\n }\n\n return interp(outputLower, outputUpper, t);\n}\n\nfunction evaluateIdentityFunction(parameters, propertySpec, input) {\n if (propertySpec.type === 'color') {\n input = Color.parse(input);\n } else if (propertySpec.type === 'formatted') {\n input = Formatted.fromString(input.toString());\n } else if (propertySpec.type === 'resolvedImage') {\n input = ResolvedImage.fromString(input.toString());\n } else if (getType(input) !== propertySpec.type && (propertySpec.type !== 'enum' || !propertySpec.values[input])) {\n input = undefined;\n }\n return coalesce(input, parameters.default, propertySpec.default);\n}\n\n/**\n * Returns a ratio that can be used to interpolate between exponential function\n * stops.\n *\n * How it works:\n * Two consecutive stop values define a (scaled and shifted) exponential\n * function `f(x) = a * base^x + b`, where `base` is the user-specified base,\n * and `a` and `b` are constants affording sufficient degrees of freedom to fit\n * the function to the given stops.\n *\n * Here's a bit of algebra that lets us compute `f(x)` directly from the stop\n * values without explicitly solving for `a` and `b`:\n *\n * First stop value: `f(x0) = y0 = a * base^x0 + b`\n * Second stop value: `f(x1) = y1 = a * base^x1 + b`\n * => `y1 - y0 = a(base^x1 - base^x0)`\n * => `a = (y1 - y0)/(base^x1 - base^x0)`\n *\n * Desired value: `f(x) = y = a * base^x + b`\n * => `f(x) = y0 + a * (base^x - base^x0)`\n *\n * From the above, we can replace the `a` in `a * (base^x - base^x0)` and do a\n * little algebra:\n * ```\n * a * (base^x - base^x0) = (y1 - y0)/(base^x1 - base^x0) * (base^x - base^x0)\n * = (y1 - y0) * (base^x - base^x0) / (base^x1 - base^x0)\n * ```\n *\n * If we let `(base^x - base^x0) / (base^x1 base^x0)`, then we have\n * `f(x) = y0 + (y1 - y0) * ratio`. In other words, `ratio` may be treated as\n * an interpolation factor between the two stops' output values.\n *\n * (Note: a slightly different form for `ratio`,\n * `(base^(x-x0) - 1) / (base^(x1-x0) - 1) `, is equivalent, but requires fewer\n * expensive `Math.pow()` operations.)\n *\n * @private\n */\nfunction interpolationFactor(input, base, lowerValue, upperValue) {\n const difference = upperValue - lowerValue;\n const progress = input - lowerValue;\n\n if (difference === 0) {\n return 0;\n } else if (base === 1) {\n return progress / difference;\n } else {\n return (Math.pow(base, progress) - 1) / (Math.pow(base, difference) - 1);\n }\n}\n","// @flow\n\nimport assert from 'assert';\n\nimport extend from '../util/extend';\nimport ParsingError from './parsing_error';\nimport ParsingContext from './parsing_context';\nimport EvaluationContext from './evaluation_context';\nimport CompoundExpression from './compound_expression';\nimport Step from './definitions/step';\nimport Interpolate from './definitions/interpolate';\nimport Coalesce from './definitions/coalesce';\nimport Let from './definitions/let';\nimport definitions from './definitions';\nimport * as isConstant from './is_constant';\nimport RuntimeError from './runtime_error';\nimport {success, error} from '../util/result';\nimport {supportsPropertyExpression, supportsZoomExpression, supportsInterpolation} from '../util/properties';\n\nimport type {Type, EvaluationKind} from './types';\nimport type {Value} from './values';\nimport type {Expression} from './expression';\nimport type {StylePropertySpecification} from '../style-spec';\nimport type {Result} from '../util/result';\nimport type {InterpolationType} from './definitions/interpolate';\nimport type {PropertyValueSpecification} from '../types';\nimport type {FormattedSection} from './types/formatted';\nimport type Point from '@mapbox/point-geometry';\nimport type {CanonicalTileID} from '../../source/tile_id';\n\nexport type Feature = {\n +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon',\n +id?: any,\n +properties: {[_: string]: any},\n +patterns?: {[_: string]: {\"min\": string, \"mid\": string, \"max\": string}},\n +geometry?: Array>\n};\n\nexport type FeatureState = {[_: string]: any};\n\nexport type GlobalProperties = $ReadOnly<{\n zoom: number,\n heatmapDensity?: number,\n lineProgress?: number,\n isSupportedScript?: (_: string) => boolean,\n accumulated?: Value\n}>;\n\nexport class StyleExpression {\n expression: Expression;\n\n _evaluator: EvaluationContext;\n _defaultValue: Value;\n _warningHistory: {[key: string]: boolean};\n _enumValues: ?{[_: string]: any};\n\n constructor(expression: Expression, propertySpec: ?StylePropertySpecification) {\n this.expression = expression;\n this._warningHistory = {};\n this._evaluator = new EvaluationContext();\n this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature;\n this._evaluator.featureState = featureState;\n this._evaluator.canonical = canonical;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection;\n\n return this.expression.evaluate(this._evaluator);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n this._evaluator.globals = globals;\n this._evaluator.feature = feature || null;\n this._evaluator.featureState = featureState || null;\n this._evaluator.canonical = canonical;\n this._evaluator.availableImages = availableImages || null;\n this._evaluator.formattedSection = formattedSection || null;\n\n try {\n const val = this.expression.evaluate(this._evaluator);\n // eslint-disable-next-line no-self-compare\n if (val === null || val === undefined || (typeof val === 'number' && val !== val)) {\n return this._defaultValue;\n }\n if (this._enumValues && !(val in this._enumValues)) {\n throw new RuntimeError(`Expected value to be one of ${Object.keys(this._enumValues).map(v => JSON.stringify(v)).join(', ')}, but found ${JSON.stringify(val)} instead.`);\n }\n return val;\n } catch (e) {\n if (!this._warningHistory[e.message]) {\n this._warningHistory[e.message] = true;\n if (typeof console !== 'undefined') {\n console.warn(e.message);\n }\n }\n return this._defaultValue;\n }\n }\n}\n\nexport function isExpression(expression: mixed) {\n return Array.isArray(expression) && expression.length > 0 &&\n typeof expression[0] === 'string' && expression[0] in definitions;\n}\n\n/**\n * Parse and typecheck the given style spec JSON expression. If\n * options.defaultValue is provided, then the resulting StyleExpression's\n * `evaluate()` method will handle errors by logging a warning (once per\n * message) and returning the default value. Otherwise, it will throw\n * evaluation errors.\n *\n * @private\n */\nexport function createExpression(expression: mixed, propertySpec: ?StylePropertySpecification): Result> {\n const parser = new ParsingContext(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined);\n\n // For string-valued properties, coerce to string at the top level rather than asserting.\n const parsed = parser.parse(expression, undefined, undefined, undefined,\n propertySpec && propertySpec.type === 'string' ? {typeAnnotation: 'coerce'} : undefined);\n\n if (!parsed) {\n assert(parser.errors.length > 0);\n return error(parser.errors);\n }\n\n return success(new StyleExpression(parsed, propertySpec));\n}\n\nexport class ZoomConstantExpression {\n kind: Kind;\n isStateDependent: boolean;\n _styleExpression: StyleExpression;\n\n constructor(kind: Kind, expression: StyleExpression) {\n this.kind = kind;\n this._styleExpression = expression;\n this.isStateDependent = kind !== ('constant': EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n}\n\nexport class ZoomDependentExpression {\n kind: Kind;\n zoomStops: Array;\n isStateDependent: boolean;\n\n _styleExpression: StyleExpression;\n interpolationType: ?InterpolationType;\n\n constructor(kind: Kind, expression: StyleExpression, zoomStops: Array, interpolationType?: InterpolationType) {\n this.kind = kind;\n this.zoomStops = zoomStops;\n this._styleExpression = expression;\n this.isStateDependent = kind !== ('camera': EvaluationKind) && !isConstant.isStateConstant(expression.expression);\n this.interpolationType = interpolationType;\n }\n\n evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n\n evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any {\n return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection);\n }\n\n interpolationFactor(input: number, lower: number, upper: number): number {\n if (this.interpolationType) {\n return Interpolate.interpolationFactor(this.interpolationType, input, lower, upper);\n } else {\n return 0;\n }\n }\n}\n\nexport type ConstantExpression = {\n kind: 'constant',\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array) => any,\n}\n\nexport type SourceExpression = {\n kind: 'source',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection) => any,\n};\n\nexport type CameraExpression = {\n kind: 'camera',\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array,\n interpolationType: ?InterpolationType\n};\n\nexport type CompositeExpression = {\n kind: 'composite',\n isStateDependent: boolean,\n +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection) => any,\n +interpolationFactor: (input: number, lower: number, upper: number) => number,\n zoomStops: Array,\n interpolationType: ?InterpolationType\n};\n\nexport type StylePropertyExpression =\n | ConstantExpression\n | SourceExpression\n | CameraExpression\n | CompositeExpression;\n\nexport function createPropertyExpression(expression: mixed, propertySpec: StylePropertySpecification): Result> {\n expression = createExpression(expression, propertySpec);\n if (expression.result === 'error') {\n return expression;\n }\n\n const parsed = expression.value.expression;\n\n const isFeatureConstant = isConstant.isFeatureConstant(parsed);\n if (!isFeatureConstant && !supportsPropertyExpression(propertySpec)) {\n return error([new ParsingError('', 'data expressions not supported')]);\n }\n\n const isZoomConstant = isConstant.isGlobalPropertyConstant(parsed, ['zoom']);\n if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n return error([new ParsingError('', 'zoom expressions not supported')]);\n }\n\n const zoomCurve = findZoomCurve(parsed);\n if (!zoomCurve && !isZoomConstant) {\n return error([new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.')]);\n } else if (zoomCurve instanceof ParsingError) {\n return error([zoomCurve]);\n } else if (zoomCurve instanceof Interpolate && !supportsInterpolation(propertySpec)) {\n return error([new ParsingError('', '\"interpolate\" expressions cannot be used with this property')]);\n }\n\n if (!zoomCurve) {\n return success(isFeatureConstant ?\n (new ZoomConstantExpression('constant', expression.value): ConstantExpression) :\n (new ZoomConstantExpression('source', expression.value): SourceExpression));\n }\n\n const interpolationType = zoomCurve instanceof Interpolate ? zoomCurve.interpolation : undefined;\n\n return success(isFeatureConstant ?\n (new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType): CameraExpression) :\n (new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType): CompositeExpression));\n}\n\nimport {isFunction, createFunction} from '../function';\nimport {Color} from './values';\n\n// serialization wrapper for old-style stop functions normalized to the\n// expression interface\nexport class StylePropertyFunction {\n _parameters: PropertyValueSpecification;\n _specification: StylePropertySpecification;\n\n kind: EvaluationKind;\n evaluate: (globals: GlobalProperties, feature?: Feature) => any;\n interpolationFactor: ?(input: number, lower: number, upper: number) => number;\n zoomStops: ?Array;\n\n constructor(parameters: PropertyValueSpecification, specification: StylePropertySpecification) {\n this._parameters = parameters;\n this._specification = specification;\n extend(this, createFunction(this._parameters, this._specification));\n }\n\n static deserialize(serialized: {_parameters: PropertyValueSpecification, _specification: StylePropertySpecification}) {\n return ((new StylePropertyFunction(serialized._parameters, serialized._specification)): StylePropertyFunction);\n }\n\n static serialize(input: StylePropertyFunction) {\n return {\n _parameters: input._parameters,\n _specification: input._specification\n };\n }\n}\n\nexport function normalizePropertyExpression(value: PropertyValueSpecification, specification: StylePropertySpecification): StylePropertyExpression {\n if (isFunction(value)) {\n return (new StylePropertyFunction(value, specification): any);\n\n } else if (isExpression(value)) {\n const expression = createPropertyExpression(value, specification);\n if (expression.result === 'error') {\n // this should have been caught in validation\n throw new Error(expression.value.map(err => `${err.key}: ${err.message}`).join(', '));\n }\n return expression.value;\n\n } else {\n let constant: any = value;\n if (typeof value === 'string' && specification.type === 'color') {\n constant = Color.parse(value);\n }\n return {\n kind: 'constant',\n evaluate: () => constant\n };\n }\n}\n\n// Zoom-dependent expressions may only use [\"zoom\"] as the input to a top-level \"step\" or \"interpolate\"\n// expression (collectively referred to as a \"curve\"). The curve may be wrapped in one or more \"let\" or\n// \"coalesce\" expressions.\nfunction findZoomCurve(expression: Expression): Step | Interpolate | ParsingError | null {\n let result = null;\n if (expression instanceof Let) {\n result = findZoomCurve(expression.result);\n\n } else if (expression instanceof Coalesce) {\n for (const arg of expression.args) {\n result = findZoomCurve(arg);\n if (result) {\n break;\n }\n }\n\n } else if ((expression instanceof Step || expression instanceof Interpolate) &&\n expression.input instanceof CompoundExpression &&\n expression.input.name === 'zoom') {\n\n result = expression;\n }\n\n if (result instanceof ParsingError) {\n return result;\n }\n\n expression.eachChild((child) => {\n const childResult = findZoomCurve(child);\n if (childResult instanceof ParsingError) {\n result = childResult;\n } else if (!result && childResult) {\n result = new ParsingError('', '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.');\n } else if (result && childResult && result !== childResult) {\n result = new ParsingError('', 'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.');\n }\n });\n\n return result;\n}\n\nimport {ColorType, StringType, NumberType, BooleanType, ValueType, FormattedType, ResolvedImageType, array} from './types';\n\nfunction getExpectedType(spec: StylePropertySpecification): Type {\n const types = {\n color: ColorType,\n string: StringType,\n number: NumberType,\n enum: StringType,\n boolean: BooleanType,\n formatted: FormattedType,\n resolvedImage: ResolvedImageType\n };\n\n if (spec.type === 'array') {\n return array(types[spec.value] || ValueType, spec.length);\n }\n\n return types[spec.type];\n}\n\nfunction getDefaultValue(spec: StylePropertySpecification): Value {\n if (spec.type === 'color' && isFunction(spec.default)) {\n // Special case for heatmap-color: it uses the 'default:' to define a\n // default color ramp, but createExpression expects a simple value to fall\n // back to in case of runtime errors\n return new Color(0, 0, 0, 0);\n } else if (spec.type === 'color') {\n return Color.parse(spec.default) || null;\n } else if (spec.default === undefined) {\n return null;\n } else {\n return spec.default;\n }\n}\n","// @flow\n\nimport assert from 'assert';\nimport type {StylePropertySpecification} from '../style-spec';\n\nexport default convertFunction;\n\nfunction convertLiteral(value) {\n return typeof value === 'object' ? ['literal', value] : value;\n}\n\nfunction convertFunction(parameters: any, propertySpec: StylePropertySpecification) {\n let stops = parameters.stops;\n if (!stops) {\n // identity function\n return convertIdentityFunction(parameters, propertySpec);\n }\n\n const zoomAndFeatureDependent = stops && typeof stops[0][0] === 'object';\n const featureDependent = zoomAndFeatureDependent || parameters.property !== undefined;\n const zoomDependent = zoomAndFeatureDependent || !featureDependent;\n\n stops = stops.map((stop) => {\n if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') {\n return [stop[0], convertTokenString(stop[1])];\n }\n return [stop[0], convertLiteral(stop[1])];\n });\n\n if (zoomAndFeatureDependent) {\n return convertZoomAndPropertyFunction(parameters, propertySpec, stops);\n } else if (zoomDependent) {\n return convertZoomFunction(parameters, propertySpec, stops);\n } else {\n return convertPropertyFunction(parameters, propertySpec, stops);\n }\n}\n\nfunction convertIdentityFunction(parameters, propertySpec): Array {\n const get = ['get', parameters.property];\n\n if (parameters.default === undefined) {\n // By default, expressions for string-valued properties get coerced. To preserve\n // legacy function semantics, insert an explicit assertion instead.\n return propertySpec.type === 'string' ? ['string', get] : get;\n } else if (propertySpec.type === 'enum') {\n return [\n 'match',\n get,\n Object.keys(propertySpec.values),\n get,\n parameters.default\n ];\n } else {\n const expression = [propertySpec.type === 'color' ? 'to-color' : propertySpec.type, get, convertLiteral(parameters.default)];\n if (propertySpec.type === 'array') {\n expression.splice(1, 0, propertySpec.value, propertySpec.length || null);\n }\n return expression;\n }\n}\n\nfunction getInterpolateOperator(parameters) {\n switch (parameters.colorSpace) {\n case 'hcl': return 'interpolate-hcl';\n case 'lab': return 'interpolate-lab';\n default: return 'interpolate';\n }\n}\n\nfunction convertZoomAndPropertyFunction(parameters, propertySpec, stops) {\n const featureFunctionParameters = {};\n const featureFunctionStops = {};\n const zoomStops = [];\n for (let s = 0; s < stops.length; s++) {\n const stop = stops[s];\n const zoom = stop[0].zoom;\n if (featureFunctionParameters[zoom] === undefined) {\n featureFunctionParameters[zoom] = {\n zoom,\n type: parameters.type,\n property: parameters.property,\n default: parameters.default,\n };\n featureFunctionStops[zoom] = [];\n zoomStops.push(zoom);\n }\n featureFunctionStops[zoom].push([stop[0].value, stop[1]]);\n }\n\n // the interpolation type for the zoom dimension of a zoom-and-property\n // function is determined directly from the style property specification\n // for which it's being used: linear for interpolatable properties, step\n // otherwise.\n const functionType = getFunctionType({}, propertySpec);\n if (functionType === 'exponential') {\n const expression = [getInterpolateOperator(parameters), ['linear'], ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, false);\n }\n\n return expression;\n } else {\n const expression = ['step', ['zoom']];\n\n for (const z of zoomStops) {\n const output = convertPropertyFunction(featureFunctionParameters[z], propertySpec, featureFunctionStops[z]);\n appendStopPair(expression, z, output, true);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n }\n}\n\nfunction coalesce(a, b) {\n if (a !== undefined) return a;\n if (b !== undefined) return b;\n}\n\nfunction getFallback(parameters, propertySpec) {\n const defaultValue = convertLiteral(coalesce(parameters.default, propertySpec.default));\n\n /*\n * Some fields with type: resolvedImage have an undefined default.\n * Because undefined is an invalid value for resolvedImage, set fallback to\n * an empty string instead of undefined to ensure output\n * passes validation.\n */\n if (defaultValue === undefined && propertySpec.type === 'resolvedImage') {\n return '';\n }\n return defaultValue;\n}\n\nfunction convertPropertyFunction(parameters, propertySpec, stops) {\n const type = getFunctionType(parameters, propertySpec);\n const get = ['get', parameters.property];\n if (type === 'categorical' && typeof stops[0][0] === 'boolean') {\n assert(parameters.stops.length > 0 && parameters.stops.length <= 2);\n const expression = ['case'];\n for (const stop of stops) {\n expression.push(['==', get, stop[0]], stop[1]);\n }\n\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'categorical') {\n const expression = ['match', get];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n expression.push(getFallback(parameters, propertySpec));\n return expression;\n } else if (type === 'interval') {\n const expression = ['step', ['number', get]];\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], true);\n }\n fixupDegenerateStepCurve(expression);\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n const expression = [\n getInterpolateOperator(parameters),\n base === 1 ? [\"linear\"] : [\"exponential\", base],\n [\"number\", get]\n ];\n\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], false);\n }\n return parameters.default === undefined ? expression : [\n 'case',\n ['==', ['typeof', get], 'number'],\n expression,\n convertLiteral(parameters.default)\n ];\n } else {\n throw new Error(`Unknown property function type ${type}`);\n }\n}\n\nfunction convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) {\n const type = getFunctionType(parameters, propertySpec);\n let expression;\n let isStep = false;\n if (type === 'interval') {\n expression = ['step', input];\n isStep = true;\n } else if (type === 'exponential') {\n const base = parameters.base !== undefined ? parameters.base : 1;\n expression = [getInterpolateOperator(parameters), base === 1 ? [\"linear\"] : [\"exponential\", base], input];\n\n } else {\n throw new Error(`Unknown zoom function type \"${type}\"`);\n }\n\n for (const stop of stops) {\n appendStopPair(expression, stop[0], stop[1], isStep);\n }\n\n fixupDegenerateStepCurve(expression);\n\n return expression;\n}\n\nfunction fixupDegenerateStepCurve(expression) {\n // degenerate step curve (i.e. a constant function): add a noop stop\n if (expression[0] === 'step' && expression.length === 3) {\n expression.push(0);\n expression.push(expression[3]);\n }\n}\n\nfunction appendStopPair(curve, input, output, isStep) {\n // Skip duplicate stop values. They were not validated for functions, but they are for expressions.\n // https://github.com/mapbox/mapbox-gl-js/issues/4107\n if (curve.length > 3 && input === curve[curve.length - 2]) {\n return;\n }\n // step curves don't get the first input value, as it is redundant.\n if (!(isStep && curve.length === 2)) {\n curve.push(input);\n }\n curve.push(output);\n}\n\nfunction getFunctionType(parameters, propertySpec) {\n if (parameters.type) {\n return parameters.type;\n } else {\n assert(propertySpec.expression);\n return (propertySpec.expression: any).interpolated ? 'exponential' : 'interval';\n }\n}\n\n// \"String with {name} token\" => [\"concat\", \"String with \", [\"get\", \"name\"], \" token\"]\nexport function convertTokenString(s: string) {\n const result = ['concat'];\n const re = /{([^{}]+)}/g;\n let pos = 0;\n for (let match = re.exec(s); match !== null; match = re.exec(s)) {\n const literal = s.slice(pos, re.lastIndex - match[0].length);\n pos = re.lastIndex;\n if (literal.length > 0) result.push(literal);\n result.push(['get', match[1]]);\n }\n\n if (result.length === 1) {\n return s;\n }\n\n if (pos < s.length) {\n result.push(s.slice(pos));\n } else if (result.length === 2) {\n return ['to-string', result[1]];\n }\n\n return result;\n}\n\n","// @flow\n\nimport {createExpression} from '../expression';\nimport type {GlobalProperties, Feature} from '../expression';\nimport type {CanonicalTileID} from '../../source/tile_id';\n\ntype FilterExpression = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => boolean;\nexport type FeatureFilter ={filter: FilterExpression, needGeometry: boolean};\n\nexport default createFilter;\nexport {isExpressionFilter};\n\nfunction isExpressionFilter(filter: any) {\n if (filter === true || filter === false) {\n return true;\n }\n\n if (!Array.isArray(filter) || filter.length === 0) {\n return false;\n }\n switch (filter[0]) {\n case 'has':\n return filter.length >= 2 && filter[1] !== '$id' && filter[1] !== '$type';\n\n case 'in':\n return filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]));\n\n case '!in':\n case '!has':\n case 'none':\n return false;\n\n case '==':\n case '!=':\n case '>':\n case '>=':\n case '<':\n case '<=':\n return filter.length !== 3 || (Array.isArray(filter[1]) || Array.isArray(filter[2]));\n\n case 'any':\n case 'all':\n for (const f of filter.slice(1)) {\n if (!isExpressionFilter(f) && typeof f !== 'boolean') {\n return false;\n }\n }\n return true;\n\n default:\n return true;\n }\n}\n\nconst filterSpec = {\n 'type': 'boolean',\n 'default': false,\n 'transition': false,\n 'property-type': 'data-driven',\n 'expression': {\n 'interpolated': false,\n 'parameters': ['zoom', 'feature']\n }\n};\n\n/**\n * Given a filter expressed as nested arrays, return a new function\n * that evaluates whether a given feature (with a .properties or .tags property)\n * passes its test.\n *\n * @private\n * @param {Array} filter mapbox gl filter\n * @returns {Function} filter-evaluating function\n */\nfunction createFilter(filter: any): FeatureFilter {\n if (filter === null || filter === undefined) {\n return {filter: () => true, needGeometry: false};\n }\n\n if (!isExpressionFilter(filter)) {\n filter = convertFilter(filter);\n }\n\n const compiled = createExpression(filter, filterSpec);\n if (compiled.result === 'error') {\n throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', '));\n } else {\n const needGeometry = geometryNeeded(filter);\n return {filter: (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => compiled.value.evaluate(globalProperties, feature, {}, canonical),\n needGeometry};\n }\n}\n\n// Comparison function to sort numbers and strings\nfunction compare(a, b) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n\nfunction geometryNeeded(filter) {\n if (!Array.isArray(filter)) return false;\n if (filter[0] === 'within') return true;\n for (let index = 1; index < filter.length; index++) {\n if (geometryNeeded(filter[index])) return true;\n }\n return false;\n}\n\nfunction convertFilter(filter: ?Array): mixed {\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n const converted =\n op === '==' ? convertComparisonOp(filter[1], filter[2], '==') :\n op === '!=' ? convertNegation(convertComparisonOp(filter[1], filter[2], '==')) :\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>=' ? convertComparisonOp(filter[1], filter[2], op) :\n op === 'any' ? convertDisjunctionOp(filter.slice(1)) :\n op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) :\n op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) :\n op === 'in' ? convertInOp(filter[1], filter.slice(2)) :\n op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) :\n op === 'has' ? convertHasOp(filter[1]) :\n op === '!has' ? convertNegation(convertHasOp(filter[1])) :\n op === 'within' ? filter :\n true;\n return converted;\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string) {\n switch (property) {\n case '$type':\n return [`filter-type-${op}`, value];\n case '$id':\n return [`filter-id-${op}`, value];\n default:\n return [`filter-${op}`, property, value];\n }\n}\n\nfunction convertDisjunctionOp(filters: Array>) {\n return ['any'].concat(filters.map(convertFilter));\n}\n\nfunction convertInOp(property: string, values: Array) {\n if (values.length === 0) { return false; }\n switch (property) {\n case '$type':\n return [`filter-type-in`, ['literal', values]];\n case '$id':\n return [`filter-id-in`, ['literal', values]];\n default:\n if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) {\n return ['filter-in-large', property, ['literal', values.sort(compare)]];\n } else {\n return ['filter-in-small', property, ['literal', values]];\n }\n }\n}\n\nfunction convertHasOp(property: string) {\n switch (property) {\n case '$type':\n return true;\n case '$id':\n return [`filter-has-id`];\n default:\n return [`filter-has`, property];\n }\n}\n\nfunction convertNegation(filter: mixed) {\n return ['!', filter];\n}\n","// @flow\n\nimport {isExpressionFilter} from './index';\n\nimport type {FilterSpecification} from '../types';\n\ntype ExpectedTypes = {[_: string]: 'string' | 'number' | 'boolean'};\n\n/**\n * Convert the given legacy filter to (the JSON representation of) an\n * equivalent expression\n * @private\n */\nexport default function convertFilter(filter: FilterSpecification): mixed {\n return _convertFilter(filter, {});\n}\n\n/*\n * Convert the given filter to an expression, storing the expected types for\n * any feature properties referenced in expectedTypes.\n *\n * These expected types are needed in order to construct preflight type checks\n * needed for handling 'any' filters. A preflight type check is necessary in\n * order to mimic legacy filters' semantics around expected type mismatches.\n * For example, consider the legacy filter:\n *\n * [\"any\", [\"all\", [\">\", \"y\", 0], [\">\", \"y\", 0]], [\">\", \"x\", 0]]\n *\n * Naively, we might convert this to the expression:\n *\n * [\"any\", [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]], [\">\", [\"get\", \"x\"], 0]]\n *\n * But if we tried to evaluate this against, say `{x: 1, y: null, z: 0}`, the\n * [\">\", [\"get\", \"y\"], 0] would cause an evaluation error, leading to the\n * entire filter returning false. Legacy filter semantics, though, ask for\n * [\">\", \"y\", 0] to simply return `false` when `y` is of the wrong type,\n * allowing the subsequent terms of the outer \"any\" expression to be evaluated\n * (resulting, in this case, in a `true` value, because x > 0).\n *\n * We account for this by inserting a preflight type-checking expression before\n * each \"any\" term, allowing us to avoid evaluating the actual converted filter\n * if any type mismatches would cause it to produce an evalaution error:\n *\n * [\"any\",\n * [\"case\",\n * [\"all\", [\"==\", [\"typeof\", [\"get\", \"y\"]], \"number\"], [\"==\", [\"typeof\", [\"get\", \"z\"], \"number]],\n * [\"all\", [\">\", [\"get\", \"y\"], 0], [\">\", [\"get\", \"z\"], 0]],\n * false\n * ],\n * [\"case\",\n * [\"==\", [\"typeof\", [\"get\", \"x\"], \"number\"]],\n * [\">\", [\"get\", \"x\"], 0],\n * false\n * ]\n * ]\n *\n * An alternative, possibly more direct approach would be to use type checks\n * in the conversion of each comparison operator, so that the converted version\n * of each individual ==, >=, etc. would mimic the legacy filter semantics. The\n * downside of this approach is that it can lead to many more type checks than\n * would otherwise be necessary: outside the context of an \"any\" expression,\n * bailing out due to a runtime type error (expression semantics) and returning\n * false (legacy filter semantics) are equivalent: they cause the filter to\n * produce a `false` result.\n */\nfunction _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): mixed {\n if (isExpressionFilter(filter)) { return filter; }\n\n if (!filter) return true;\n const op = filter[0];\n if (filter.length <= 1) return (op !== 'any');\n\n let converted;\n\n if (\n op === '==' ||\n op === '!=' ||\n op === '<' ||\n op === '>' ||\n op === '<=' ||\n op === '>='\n ) {\n const [, property, value] = (filter: any);\n converted = convertComparisonOp(property, value, op, expectedTypes);\n } else if (op === 'any') {\n const children = (filter: any).slice(1).map(f => {\n const types = {};\n const child = _convertFilter(f, types);\n const typechecks = runtimeTypeChecks(types);\n return typechecks === true ? child : ['case', typechecks, child, false];\n });\n return ['any'].concat(children);\n } else if (op === 'all') {\n const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes));\n return children.length > 1 ? ['all'].concat(children) : [].concat(...children);\n } else if (op === 'none') {\n return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})];\n } else if (op === 'in') {\n converted = convertInOp((filter[1]: any), filter.slice(2));\n } else if (op === '!in') {\n converted = convertInOp((filter[1]: any), filter.slice(2), true);\n } else if (op === 'has') {\n converted = convertHasOp((filter[1]: any));\n } else if (op === '!has') {\n converted = ['!', convertHasOp((filter[1]: any))];\n } else {\n converted = true;\n }\n\n return converted;\n}\n\n// Given a set of feature properties and an expected type for each one,\n// construct an boolean expression that tests whether each property has the\n// right type.\n// E.g.: for {name: 'string', population: 'number'}, return\n// [ 'all',\n// ['==', ['typeof', ['get', 'name'], 'string']],\n// ['==', ['typeof', ['get', 'population'], 'number]]\n// ]\nfunction runtimeTypeChecks(expectedTypes: ExpectedTypes) {\n const conditions = [];\n for (const property in expectedTypes) {\n const get = property === '$id' ? ['id'] : ['get', property];\n conditions.push(['==', ['typeof', get], expectedTypes[property]]);\n }\n if (conditions.length === 0) return true;\n if (conditions.length === 1) return conditions[0];\n return ['all'].concat(conditions);\n}\n\nfunction convertComparisonOp(property: string, value: any, op: string, expectedTypes: ?ExpectedTypes) {\n let get;\n if (property === '$type') {\n return [op, ['geometry-type'], value];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n if (expectedTypes && value !== null) {\n const type = ((typeof value): any);\n expectedTypes[property] = type;\n }\n\n if (op === '==' && property !== '$id' && value === null) {\n return [\n 'all',\n ['has', property], // missing property != null for legacy filters\n ['==', get, null]\n ];\n } else if (op === '!=' && property !== '$id' && value === null) {\n return [\n 'any',\n ['!', ['has', property]], // missing property != null for legacy filters\n ['!=', get, null]\n ];\n }\n\n return [op, get, value];\n}\n\nfunction convertInOp(property: string, values: Array, negate = false) {\n if (values.length === 0) return negate;\n\n let get;\n if (property === '$type') {\n get = ['geometry-type'];\n } else if (property === '$id') {\n get = ['id'];\n } else {\n get = ['get', property];\n }\n\n // Determine if the list of values to be searched is homogenously typed.\n // If so (and if the type is string or number), then we can use a\n // [match, input, [...values], true, false] construction rather than a\n // bunch of `==` tests.\n let uniformTypes = true;\n const type = typeof values[0];\n for (const value of values) {\n if (typeof value !== type) {\n uniformTypes = false;\n break;\n }\n }\n\n if (uniformTypes && (type === 'string' || type === 'number')) {\n // Match expressions must have unique values.\n const uniqueValues = values.sort().filter((v, i) => i === 0 || values[i - 1] !== v);\n return ['match', get, uniqueValues, !negate, negate];\n }\n\n return [ negate ? 'all' : 'any' ].concat(\n values.map(v => [negate ? '!=' : '==', get, v])\n );\n}\n\nfunction convertHasOp(property: string) {\n if (property === '$type') {\n return true;\n } else if (property === '$id') {\n return ['!=', ['id'], null];\n } else {\n return ['has', property];\n }\n}\n","// @flow\n\nimport {\n eachLayer,\n eachProperty\n} from '../visit';\nimport {isExpression} from '../expression';\nimport convertFunction, {convertTokenString} from '../function/convert';\nimport convertFilter from '../feature_filter/convert';\n\nimport type {StyleSpecification} from '../types';\n\n/**\n * Migrate the given style object in place to use expressions. Specifically,\n * this will convert (a) \"stop\" functions, and (b) legacy filters to their\n * expression equivalents.\n */\nexport default function(style: StyleSpecification) {\n const converted = [];\n\n eachLayer(style, (layer) => {\n if (layer.filter) {\n layer.filter = (convertFilter(layer.filter): any);\n }\n });\n\n eachProperty(style, {paint: true, layout: true}, ({path, value, reference, set}) => {\n if (isExpression(value)) return;\n if (typeof value === 'object' && !Array.isArray(value)) {\n set(convertFunction(value, reference));\n converted.push(path.join('.'));\n } else if (reference.tokens && typeof value === 'string') {\n set(convertTokenString(value));\n }\n });\n\n return style;\n}\n\n","\nimport migrateToV8 from './migrate/v8';\nimport migrateToExpressions from './migrate/expressions';\n\n/**\n * Migrate a Mapbox GL Style to the latest version.\n *\n * @private\n * @alias migrate\n * @param {object} style a Mapbox GL Style\n * @returns {Object} a migrated style\n * @example\n * var fs = require('fs');\n * var migrate = require('mapbox-gl-style-spec').migrate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * fs.writeFileSync('./style.json', JSON.stringify(migrate(style)));\n */\nexport default function(style) {\n let migrated = false;\n\n if (style.version === 7) {\n style = migrateToV8(style);\n migrated = true;\n }\n\n if (style.version === 8) {\n migrated = migrateToExpressions(style);\n migrated = true;\n }\n\n if (!migrated) {\n throw new Error('cannot migrate from', style.version);\n }\n\n return style;\n}\n","\nexport default function (style) {\n const styleIDs = [];\n const sourceIDs = [];\n const compositedSourceLayers = [];\n\n for (const id in style.sources) {\n const source = style.sources[id];\n\n if (source.type !== \"vector\")\n continue;\n\n const match = /^mapbox:\\/\\/(.*)/.exec(source.url);\n if (!match)\n continue;\n\n styleIDs.push(id);\n sourceIDs.push(match[1]);\n }\n\n if (styleIDs.length < 2)\n return style;\n\n styleIDs.forEach((id) => {\n delete style.sources[id];\n });\n\n const compositeID = sourceIDs.join(\",\");\n\n style.sources[compositeID] = {\n \"type\": \"vector\",\n \"url\": `mapbox://${compositeID}`\n };\n\n style.layers.forEach((layer) => {\n if (styleIDs.indexOf(layer.source) >= 0) {\n layer.source = compositeID;\n\n if ('source-layer' in layer) {\n if (compositedSourceLayers.indexOf(layer['source-layer']) >= 0) {\n throw new Error('Conflicting source layer names');\n } else {\n compositedSourceLayers.push(layer['source-layer']);\n }\n }\n }\n });\n\n return style;\n}\n","\nexport default ['type', 'source', 'source-layer', 'minzoom', 'maxzoom', 'filter', 'layout'];\n","\nimport refProperties from './util/ref_properties';\n\nfunction deref(layer, parent) {\n const result = {};\n\n for (const k in layer) {\n if (k !== 'ref') {\n result[k] = layer[k];\n }\n }\n\n refProperties.forEach((k) => {\n if (k in parent) {\n result[k] = parent[k];\n }\n });\n\n return result;\n}\n\nexport default derefLayers;\n\n/**\n * Given an array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property, return a new array where\n * such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @private\n * @param {Array} layers\n * @returns {Array}\n */\nfunction derefLayers(layers) {\n layers = layers.slice();\n\n const map = Object.create(null);\n for (let i = 0; i < layers.length; i++) {\n map[layers[i].id] = layers[i];\n }\n\n for (let i = 0; i < layers.length; i++) {\n if ('ref' in layers[i]) {\n layers[i] = deref(layers[i], map[layers[i].ref]);\n }\n }\n\n return layers;\n}\n","// @flow\n\n/**\n * Deeply compares two object literals.\n *\n * @private\n */\nfunction deepEqual(a: ?mixed, b: ?mixed): boolean {\n if (Array.isArray(a)) {\n if (!Array.isArray(b) || a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (!deepEqual(a[i], b[i])) return false;\n }\n return true;\n }\n if (typeof a === 'object' && a !== null && b !== null) {\n if (!(typeof b === 'object')) return false;\n const keys = Object.keys(a);\n if (keys.length !== Object.keys(b).length) return false;\n for (const key in a) {\n if (!deepEqual(a[key], b[key])) return false;\n }\n return true;\n }\n return a === b;\n}\n\nexport default deepEqual;\n","\nimport isEqual from './util/deep_equal';\n\nconst operations = {\n\n /*\n * { command: 'setStyle', args: [stylesheet] }\n */\n setStyle: 'setStyle',\n\n /*\n * { command: 'addLayer', args: [layer, 'beforeLayerId'] }\n */\n addLayer: 'addLayer',\n\n /*\n * { command: 'removeLayer', args: ['layerId'] }\n */\n removeLayer: 'removeLayer',\n\n /*\n * { command: 'setPaintProperty', args: ['layerId', 'prop', value] }\n */\n setPaintProperty: 'setPaintProperty',\n\n /*\n * { command: 'setLayoutProperty', args: ['layerId', 'prop', value] }\n */\n setLayoutProperty: 'setLayoutProperty',\n\n /*\n * { command: 'setFilter', args: ['layerId', filter] }\n */\n setFilter: 'setFilter',\n\n /*\n * { command: 'addSource', args: ['sourceId', source] }\n */\n addSource: 'addSource',\n\n /*\n * { command: 'removeSource', args: ['sourceId'] }\n */\n removeSource: 'removeSource',\n\n /*\n * { command: 'setGeoJSONSourceData', args: ['sourceId', data] }\n */\n setGeoJSONSourceData: 'setGeoJSONSourceData',\n\n /*\n * { command: 'setLayerZoomRange', args: ['layerId', 0, 22] }\n */\n setLayerZoomRange: 'setLayerZoomRange',\n\n /*\n * { command: 'setLayerProperty', args: ['layerId', 'prop', value] }\n */\n setLayerProperty: 'setLayerProperty',\n\n /*\n * { command: 'setCenter', args: [[lon, lat]] }\n */\n setCenter: 'setCenter',\n\n /*\n * { command: 'setZoom', args: [zoom] }\n */\n setZoom: 'setZoom',\n\n /*\n * { command: 'setBearing', args: [bearing] }\n */\n setBearing: 'setBearing',\n\n /*\n * { command: 'setPitch', args: [pitch] }\n */\n setPitch: 'setPitch',\n\n /*\n * { command: 'setSprite', args: ['spriteUrl'] }\n */\n setSprite: 'setSprite',\n\n /*\n * { command: 'setGlyphs', args: ['glyphsUrl'] }\n */\n setGlyphs: 'setGlyphs',\n\n /*\n * { command: 'setTransition', args: [transition] }\n */\n setTransition: 'setTransition',\n\n /*\n * { command: 'setLighting', args: [lightProperties] }\n */\n setLight: 'setLight'\n\n};\n\nfunction addSource(sourceId, after, commands) {\n commands.push({command: operations.addSource, args: [sourceId, after[sourceId]]});\n}\n\nfunction removeSource(sourceId, commands, sourcesRemoved) {\n commands.push({command: operations.removeSource, args: [sourceId]});\n sourcesRemoved[sourceId] = true;\n}\n\nfunction updateSource(sourceId, after, commands, sourcesRemoved) {\n removeSource(sourceId, commands, sourcesRemoved);\n addSource(sourceId, after, commands);\n}\n\nfunction canUpdateGeoJSON(before, after, sourceId) {\n let prop;\n for (prop in before[sourceId]) {\n if (!before[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n for (prop in after[sourceId]) {\n if (!after[sourceId].hasOwnProperty(prop)) continue;\n if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) {\n return false;\n }\n }\n return true;\n}\n\nfunction diffSources(before, after, commands, sourcesRemoved) {\n before = before || {};\n after = after || {};\n\n let sourceId;\n\n // look for sources to remove\n for (sourceId in before) {\n if (!before.hasOwnProperty(sourceId)) continue;\n if (!after.hasOwnProperty(sourceId)) {\n removeSource(sourceId, commands, sourcesRemoved);\n }\n }\n\n // look for sources to add/update\n for (sourceId in after) {\n if (!after.hasOwnProperty(sourceId)) continue;\n if (!before.hasOwnProperty(sourceId)) {\n addSource(sourceId, after, commands);\n } else if (!isEqual(before[sourceId], after[sourceId])) {\n if (before[sourceId].type === 'geojson' && after[sourceId].type === 'geojson' && canUpdateGeoJSON(before, after, sourceId)) {\n commands.push({command: operations.setGeoJSONSourceData, args: [sourceId, after[sourceId].data]});\n } else {\n // no update command, must remove then add\n updateSource(sourceId, after, commands, sourcesRemoved);\n }\n }\n }\n}\n\nfunction diffLayerPropertyChanges(before, after, commands, layerId, klass, command) {\n before = before || {};\n after = after || {};\n\n let prop;\n\n for (prop in before) {\n if (!before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({command, args: [layerId, prop, after[prop], klass]});\n }\n }\n for (prop in after) {\n if (!after.hasOwnProperty(prop) || before.hasOwnProperty(prop)) continue;\n if (!isEqual(before[prop], after[prop])) {\n commands.push({command, args: [layerId, prop, after[prop], klass]});\n }\n }\n}\n\nfunction pluckId(layer) {\n return layer.id;\n}\nfunction indexById(group, layer) {\n group[layer.id] = layer;\n return group;\n}\n\nfunction diffLayers(before, after, commands) {\n before = before || [];\n after = after || [];\n\n // order of layers by id\n const beforeOrder = before.map(pluckId);\n const afterOrder = after.map(pluckId);\n\n // index of layer by id\n const beforeIndex = before.reduce(indexById, {});\n const afterIndex = after.reduce(indexById, {});\n\n // track order of layers as if they have been mutated\n const tracker = beforeOrder.slice();\n\n // layers that have been added do not need to be diffed\n const clean = Object.create(null);\n\n let i, d, layerId, beforeLayer, afterLayer, insertBeforeLayerId, prop;\n\n // remove layers\n for (i = 0, d = 0; i < beforeOrder.length; i++) {\n layerId = beforeOrder[i];\n if (!afterIndex.hasOwnProperty(layerId)) {\n commands.push({command: operations.removeLayer, args: [layerId]});\n tracker.splice(tracker.indexOf(layerId, d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n }\n\n // add/reorder layers\n for (i = 0, d = 0; i < afterOrder.length; i++) {\n // work backwards as insert is before an existing layer\n layerId = afterOrder[afterOrder.length - 1 - i];\n\n if (tracker[tracker.length - 1 - i] === layerId) continue;\n\n if (beforeIndex.hasOwnProperty(layerId)) {\n // remove the layer before we insert at the correct position\n commands.push({command: operations.removeLayer, args: [layerId]});\n tracker.splice(tracker.lastIndexOf(layerId, tracker.length - d), 1);\n } else {\n // limit where in tracker we need to look for a match\n d++;\n }\n\n // add layer at correct position\n insertBeforeLayerId = tracker[tracker.length - i];\n commands.push({command: operations.addLayer, args: [afterIndex[layerId], insertBeforeLayerId]});\n tracker.splice(tracker.length - i, 0, layerId);\n clean[layerId] = true;\n }\n\n // update layers\n for (i = 0; i < afterOrder.length; i++) {\n layerId = afterOrder[i];\n beforeLayer = beforeIndex[layerId];\n afterLayer = afterIndex[layerId];\n\n // no need to update if previously added (new or moved)\n if (clean[layerId] || isEqual(beforeLayer, afterLayer)) continue;\n\n // If source, source-layer, or type have changes, then remove the layer\n // and add it back 'from scratch'.\n if (!isEqual(beforeLayer.source, afterLayer.source) || !isEqual(beforeLayer['source-layer'], afterLayer['source-layer']) || !isEqual(beforeLayer.type, afterLayer.type)) {\n commands.push({command: operations.removeLayer, args: [layerId]});\n // we add the layer back at the same position it was already in, so\n // there's no need to update the `tracker`\n insertBeforeLayerId = tracker[tracker.lastIndexOf(layerId) + 1];\n commands.push({command: operations.addLayer, args: [afterLayer, insertBeforeLayerId]});\n continue;\n }\n\n // layout, paint, filter, minzoom, maxzoom\n diffLayerPropertyChanges(beforeLayer.layout, afterLayer.layout, commands, layerId, null, operations.setLayoutProperty);\n diffLayerPropertyChanges(beforeLayer.paint, afterLayer.paint, commands, layerId, null, operations.setPaintProperty);\n if (!isEqual(beforeLayer.filter, afterLayer.filter)) {\n commands.push({command: operations.setFilter, args: [layerId, afterLayer.filter]});\n }\n if (!isEqual(beforeLayer.minzoom, afterLayer.minzoom) || !isEqual(beforeLayer.maxzoom, afterLayer.maxzoom)) {\n commands.push({command: operations.setLayerZoomRange, args: [layerId, afterLayer.minzoom, afterLayer.maxzoom]});\n }\n\n // handle all other layer props, including paint.*\n for (prop in beforeLayer) {\n if (!beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]]});\n }\n }\n for (prop in afterLayer) {\n if (!afterLayer.hasOwnProperty(prop) || beforeLayer.hasOwnProperty(prop)) continue;\n if (prop === 'layout' || prop === 'paint' || prop === 'filter' ||\n prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue;\n if (prop.indexOf('paint.') === 0) {\n diffLayerPropertyChanges(beforeLayer[prop], afterLayer[prop], commands, layerId, prop.slice(6), operations.setPaintProperty);\n } else if (!isEqual(beforeLayer[prop], afterLayer[prop])) {\n commands.push({command: operations.setLayerProperty, args: [layerId, prop, afterLayer[prop]]});\n }\n }\n }\n}\n\n/**\n * Diff two stylesheet\n *\n * Creates semanticly aware diffs that can easily be applied at runtime.\n * Operations produced by the diff closely resemble the mapbox-gl-js API. Any\n * error creating the diff will fall back to the 'setStyle' operation.\n *\n * Example diff:\n * [\n * { command: 'setConstant', args: ['@water', '#0000FF'] },\n * { command: 'setPaintProperty', args: ['background', 'background-color', 'black'] }\n * ]\n *\n * @private\n * @param {*} [before] stylesheet to compare from\n * @param {*} after stylesheet to compare to\n * @returns Array list of changes\n */\nfunction diffStyles(before, after) {\n if (!before) return [{command: operations.setStyle, args: [after]}];\n\n let commands = [];\n\n try {\n // Handle changes to top-level properties\n if (!isEqual(before.version, after.version)) {\n return [{command: operations.setStyle, args: [after]}];\n }\n if (!isEqual(before.center, after.center)) {\n commands.push({command: operations.setCenter, args: [after.center]});\n }\n if (!isEqual(before.zoom, after.zoom)) {\n commands.push({command: operations.setZoom, args: [after.zoom]});\n }\n if (!isEqual(before.bearing, after.bearing)) {\n commands.push({command: operations.setBearing, args: [after.bearing]});\n }\n if (!isEqual(before.pitch, after.pitch)) {\n commands.push({command: operations.setPitch, args: [after.pitch]});\n }\n if (!isEqual(before.sprite, after.sprite)) {\n commands.push({command: operations.setSprite, args: [after.sprite]});\n }\n if (!isEqual(before.glyphs, after.glyphs)) {\n commands.push({command: operations.setGlyphs, args: [after.glyphs]});\n }\n if (!isEqual(before.transition, after.transition)) {\n commands.push({command: operations.setTransition, args: [after.transition]});\n }\n if (!isEqual(before.light, after.light)) {\n commands.push({command: operations.setLight, args: [after.light]});\n }\n\n // Handle changes to `sources`\n // If a source is to be removed, we also--before the removeSource\n // command--need to remove all the style layers that depend on it.\n const sourcesRemoved = {};\n\n // First collect the {add,remove}Source commands\n const removeOrAddSourceCommands = [];\n diffSources(before.sources, after.sources, removeOrAddSourceCommands, sourcesRemoved);\n\n // Push a removeLayer command for each style layer that depends on a\n // source that's being removed.\n // Also, exclude any such layers them from the input to `diffLayers`\n // below, so that diffLayers produces the appropriate `addLayers`\n // command\n const beforeLayers = [];\n if (before.layers) {\n before.layers.forEach((layer) => {\n if (sourcesRemoved[layer.source]) {\n commands.push({command: operations.removeLayer, args: [layer.id]});\n } else {\n beforeLayers.push(layer);\n }\n });\n }\n commands = commands.concat(removeOrAddSourceCommands);\n\n // Handle changes to `layers`\n diffLayers(beforeLayers, after.layers, commands);\n\n } catch (e) {\n // fall back to setStyle\n console.warn('Unable to compute style diff:', e);\n commands = [{command: operations.setStyle, args: [after]}];\n }\n\n return commands;\n}\n\nexport default diffStyles;\nexport {operations};\n","// @flow\n\n// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nexport default class ValidationError {\n message: string;\n identifier: ?string;\n line: ?number;\n\n constructor(key: ?string, value: ?{ __line__: number }, message: string, identifier: ?string) {\n this.message = (key ? `${key}: ` : '') + message;\n if (identifier) this.identifier = identifier;\n\n if (value !== null && value !== undefined && value.__line__) {\n this.line = value.__line__;\n }\n }\n}\n","// @flow\n\n// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nexport default class ParsingError {\n message: string;\n error: Error;\n line: number;\n\n constructor(error: Error) {\n this.error = error;\n this.message = error.message;\n const match = error.message.match(/line (\\d+)/);\n this.line = match ? parseInt(match[1], 10) : 0;\n }\n}\n","\nimport ValidationError from '../error/validation_error';\n\nexport default function validateConstants(options) {\n const key = options.key;\n const constants = options.value;\n\n if (constants) {\n return [new ValidationError(key, constants, 'constants have been deprecated as of v8')];\n } else {\n return [];\n }\n}\n","// @flow\n\n// Turn jsonlint-lines-primitives objects into primitive objects\nexport function unbundle(value: mixed) {\n if (value instanceof Number || value instanceof String || value instanceof Boolean) {\n return value.valueOf();\n } else {\n return value;\n }\n}\n\nexport function deepUnbundle(value: mixed): mixed {\n if (Array.isArray(value)) {\n return value.map(deepUnbundle);\n } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) {\n const unbundledValue: { [key: string]: mixed } = {};\n for (const key in value) {\n unbundledValue[key] = deepUnbundle(value[key]);\n }\n return unbundledValue;\n }\n\n return unbundle(value);\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validateSpec from './validate';\n\nexport default function validateObject(options) {\n const key = options.key;\n const object = options.value;\n const elementSpecs = options.valueSpec || {};\n const elementValidators = options.objectElementValidators || {};\n const style = options.style;\n const styleSpec = options.styleSpec;\n let errors = [];\n\n const type = getType(object);\n if (type !== 'object') {\n return [new ValidationError(key, object, `object expected, ${type} found`)];\n }\n\n for (const objectKey in object) {\n const elementSpecKey = objectKey.split('.')[0]; // treat 'paint.*' as 'paint'\n const elementSpec = elementSpecs[elementSpecKey] || elementSpecs['*'];\n\n let validateElement;\n if (elementValidators[elementSpecKey]) {\n validateElement = elementValidators[elementSpecKey];\n } else if (elementSpecs[elementSpecKey]) {\n validateElement = validateSpec;\n } else if (elementValidators['*']) {\n validateElement = elementValidators['*'];\n } else if (elementSpecs['*']) {\n validateElement = validateSpec;\n } else {\n errors.push(new ValidationError(key, object[objectKey], `unknown property \"${objectKey}\"`));\n continue;\n }\n\n errors = errors.concat(validateElement({\n key: (key ? `${key}.` : key) + objectKey,\n value: object[objectKey],\n valueSpec: elementSpec,\n style,\n styleSpec,\n object,\n objectKey\n }, object));\n }\n\n for (const elementSpecKey in elementSpecs) {\n // Don't check `required` when there's a custom validator for that property.\n if (elementValidators[elementSpecKey]) {\n continue;\n }\n\n if (elementSpecs[elementSpecKey].required && elementSpecs[elementSpecKey]['default'] === undefined && object[elementSpecKey] === undefined) {\n errors.push(new ValidationError(key, object, `missing required property \"${elementSpecKey}\"`));\n }\n }\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateArray(options) {\n const array = options.value;\n const arraySpec = options.valueSpec;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const key = options.key;\n const validateArrayElement = options.arrayElementValidator || validate;\n\n if (getType(array) !== 'array') {\n return [new ValidationError(key, array, `array expected, ${getType(array)} found`)];\n }\n\n if (arraySpec.length && array.length !== arraySpec.length) {\n return [new ValidationError(key, array, `array length ${arraySpec.length} expected, length ${array.length} found`)];\n }\n\n if (arraySpec['min-length'] && array.length < arraySpec['min-length']) {\n return [new ValidationError(key, array, `array length at least ${arraySpec['min-length']} expected, length ${array.length} found`)];\n }\n\n let arrayElementSpec = {\n \"type\": arraySpec.value,\n \"values\": arraySpec.values\n };\n\n if (styleSpec.$version < 7) {\n arrayElementSpec.function = arraySpec.function;\n }\n\n if (getType(arraySpec.value) === 'object') {\n arrayElementSpec = arraySpec.value;\n }\n\n let errors = [];\n for (let i = 0; i < array.length; i++) {\n errors = errors.concat(validateArrayElement({\n array,\n arrayIndex: i,\n value: array[i],\n valueSpec: arrayElementSpec,\n style,\n styleSpec,\n key: `${key}[${i}]`\n }));\n }\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateNumber(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n let type = getType(value);\n\n // eslint-disable-next-line no-self-compare\n if (type === 'number' && value !== value) {\n type = 'NaN';\n }\n\n if (type !== 'number') {\n return [new ValidationError(key, value, `number expected, ${type} found`)];\n }\n\n if ('minimum' in valueSpec && value < valueSpec.minimum) {\n return [new ValidationError(key, value, `${value} is less than the minimum value ${valueSpec.minimum}`)];\n }\n\n if ('maximum' in valueSpec && value > valueSpec.maximum) {\n return [new ValidationError(key, value, `${value} is greater than the maximum value ${valueSpec.maximum}`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateNumber from './validate_number';\nimport {isExpression} from '../expression';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {\n supportsPropertyExpression,\n supportsZoomExpression,\n supportsInterpolation\n} from '../util/properties';\n\nexport default function validateFunction(options) {\n const functionValueSpec = options.valueSpec;\n const functionType = unbundle(options.value.type);\n let stopKeyType;\n let stopDomainValues = {};\n let previousStopDomainValue;\n let previousStopDomainZoom;\n\n const isZoomFunction = functionType !== 'categorical' && options.value.property === undefined;\n const isPropertyFunction = !isZoomFunction;\n const isZoomAndPropertyFunction =\n getType(options.value.stops) === 'array' &&\n getType(options.value.stops[0]) === 'array' &&\n getType(options.value.stops[0][0]) === 'object';\n\n const errors = validateObject({\n key: options.key,\n value: options.value,\n valueSpec: options.styleSpec.function,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n stops: validateFunctionStops,\n default: validateFunctionDefault\n }\n });\n\n if (functionType === 'identity' && isZoomFunction) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"property\"'));\n }\n\n if (functionType !== 'identity' && !options.value.stops) {\n errors.push(new ValidationError(options.key, options.value, 'missing required property \"stops\"'));\n }\n\n if (functionType === 'exponential' && options.valueSpec.expression && !supportsInterpolation(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'exponential functions not supported'));\n }\n\n if (options.styleSpec.$version >= 8) {\n if (isPropertyFunction && !supportsPropertyExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'property functions not supported'));\n } else if (isZoomFunction && !supportsZoomExpression(options.valueSpec)) {\n errors.push(new ValidationError(options.key, options.value, 'zoom functions not supported'));\n }\n }\n\n if ((functionType === 'categorical' || isZoomAndPropertyFunction) && options.value.property === undefined) {\n errors.push(new ValidationError(options.key, options.value, '\"property\" property is required'));\n }\n\n return errors;\n\n function validateFunctionStops(options) {\n if (functionType === 'identity') {\n return [new ValidationError(options.key, options.value, 'identity function may not have a \"stops\" property')];\n }\n\n let errors = [];\n const value = options.value;\n\n errors = errors.concat(validateArray({\n key: options.key,\n value,\n valueSpec: options.valueSpec,\n style: options.style,\n styleSpec: options.styleSpec,\n arrayElementValidator: validateFunctionStop\n }));\n\n if (getType(value) === 'array' && value.length === 0) {\n errors.push(new ValidationError(options.key, value, 'array must have at least one stop'));\n }\n\n return errors;\n }\n\n function validateFunctionStop(options) {\n let errors = [];\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n if (value.length !== 2) {\n return [new ValidationError(key, value, `array length 2 expected, length ${value.length} found`)];\n }\n\n if (isZoomAndPropertyFunction) {\n if (getType(value[0]) !== 'object') {\n return [new ValidationError(key, value, `object expected, ${getType(value[0])} found`)];\n }\n if (value[0].zoom === undefined) {\n return [new ValidationError(key, value, 'object stop key must have zoom')];\n }\n if (value[0].value === undefined) {\n return [new ValidationError(key, value, 'object stop key must have value')];\n }\n if (previousStopDomainZoom && previousStopDomainZoom > unbundle(value[0].zoom)) {\n return [new ValidationError(key, value[0].zoom, 'stop zoom values must appear in ascending order')];\n }\n if (unbundle(value[0].zoom) !== previousStopDomainZoom) {\n previousStopDomainZoom = unbundle(value[0].zoom);\n previousStopDomainValue = undefined;\n stopDomainValues = {};\n }\n errors = errors.concat(validateObject({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: {zoom: {}},\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {zoom: validateNumber, value: validateStopDomainValue}\n }));\n } else {\n errors = errors.concat(validateStopDomainValue({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: {},\n style: options.style,\n styleSpec: options.styleSpec\n }, value));\n }\n\n if (isExpression(deepUnbundle(value[1]))) {\n return errors.concat([new ValidationError(`${key}[1]`, value[1], 'expressions are not allowed in function stops.')]);\n }\n\n return errors.concat(validate({\n key: `${key}[1]`,\n value: value[1],\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n\n function validateStopDomainValue(options, stop) {\n const type = getType(options.value);\n const value = unbundle(options.value);\n\n const reportValue = options.value !== null ? options.value : stop;\n\n if (!stopKeyType) {\n stopKeyType = type;\n } else if (type !== stopKeyType) {\n return [new ValidationError(options.key, reportValue, `${type} stop domain type must match previous stop domain type ${stopKeyType}`)];\n }\n\n if (type !== 'number' && type !== 'string' && type !== 'boolean') {\n return [new ValidationError(options.key, reportValue, 'stop domain value must be a number, string, or boolean')];\n }\n\n if (type !== 'number' && functionType !== 'categorical') {\n let message = `number expected, ${type} found`;\n if (supportsPropertyExpression(functionValueSpec) && functionType === undefined) {\n message += '\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.';\n }\n return [new ValidationError(options.key, reportValue, message)];\n }\n\n if (functionType === 'categorical' && type === 'number' && (!isFinite(value) || Math.floor(value) !== value)) {\n return [new ValidationError(options.key, reportValue, `integer expected, found ${value}`)];\n }\n\n if (functionType !== 'categorical' && type === 'number' && previousStopDomainValue !== undefined && value < previousStopDomainValue) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must appear in ascending order')];\n } else {\n previousStopDomainValue = value;\n }\n\n if (functionType === 'categorical' && value in stopDomainValues) {\n return [new ValidationError(options.key, reportValue, 'stop domain values must be unique')];\n } else {\n stopDomainValues[value] = true;\n }\n\n return [];\n }\n\n function validateFunctionDefault(options) {\n return validate({\n key: options.key,\n value: options.value,\n valueSpec: functionValueSpec,\n style: options.style,\n styleSpec: options.styleSpec\n });\n }\n}\n","// @flow\n\nimport ValidationError from '../error/validation_error';\n\nimport {createExpression, createPropertyExpression} from '../expression';\nimport {deepUnbundle} from '../util/unbundle_jsonlint';\nimport {isStateConstant, isGlobalPropertyConstant, isFeatureConstant} from '../expression/is_constant';\n\nexport default function validateExpression(options: any): Array {\n const expression = (options.expressionContext === 'property' ? createPropertyExpression : createExpression)(deepUnbundle(options.value), options.valueSpec);\n if (expression.result === 'error') {\n return expression.value.map((error) => {\n return new ValidationError(`${options.key}${error.key}`, options.value, error.message);\n });\n }\n\n const expressionObj = (expression.value: any).expression || (expression.value: any)._styleExpression.expression;\n\n if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') &&\n !expressionObj.outputDefined()) {\n return [new ValidationError(options.key, options.value, `Invalid data expression for \"${options.propertyKey}\". Output values must be contained as literals within the expression.`)];\n }\n\n if (options.expressionContext === 'property' && options.propertyType === 'layout' &&\n (!isStateConstant(expressionObj))) {\n return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with layout properties.')];\n }\n\n if (options.expressionContext === 'filter' && !isStateConstant(expressionObj)) {\n return [new ValidationError(options.key, options.value, '\"feature-state\" data expressions are not supported with filters.')];\n }\n\n if (options.expressionContext && options.expressionContext.indexOf('cluster') === 0) {\n if (!isGlobalPropertyConstant(expressionObj, ['zoom', 'feature-state'])) {\n return [new ValidationError(options.key, options.value, '\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.')];\n }\n if (options.expressionContext === 'cluster-initial' && !isFeatureConstant(expressionObj)) {\n return [new ValidationError(options.key, options.value, 'Feature data expressions are not supported with initial expression part of cluster properties.')];\n }\n }\n\n return [];\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateBoolean(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'boolean') {\n return [new ValidationError(key, value, `boolean expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport {parseCSSColor} from 'csscolorparser';\n\nexport default function validateColor(options) {\n const key = options.key;\n const value = options.value;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `color expected, ${type} found`)];\n }\n\n if (parseCSSColor(value) === null) {\n return [new ValidationError(key, value, `color expected, \"${value}\" found`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\n\nexport default function validateEnum(options) {\n const key = options.key;\n const value = options.value;\n const valueSpec = options.valueSpec;\n const errors = [];\n\n if (Array.isArray(valueSpec.values)) { // <=v7\n if (valueSpec.values.indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`));\n }\n } else { // >=v8\n if (Object.keys(valueSpec.values).indexOf(unbundle(value)) === -1) {\n errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`));\n }\n }\n return errors;\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateExpression from './validate_expression';\nimport validateEnum from './validate_enum';\nimport getType from '../util/get_type';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport extend from '../util/extend';\nimport {isExpressionFilter} from '../feature_filter';\n\nexport default function validateFilter(options) {\n if (isExpressionFilter(deepUnbundle(options.value))) {\n return validateExpression(extend({}, options, {\n expressionContext: 'filter',\n valueSpec: {value: 'boolean'}\n }));\n } else {\n return validateNonExpressionFilter(options);\n }\n}\n\nfunction validateNonExpressionFilter(options) {\n const value = options.value;\n const key = options.key;\n\n if (getType(value) !== 'array') {\n return [new ValidationError(key, value, `array expected, ${getType(value)} found`)];\n }\n\n const styleSpec = options.styleSpec;\n let type;\n\n let errors = [];\n\n if (value.length < 1) {\n return [new ValidationError(key, value, 'filter array must have at least 1 element')];\n }\n\n errors = errors.concat(validateEnum({\n key: `${key}[0]`,\n value: value[0],\n valueSpec: styleSpec.filter_operator,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n\n switch (unbundle(value[0])) {\n case '<':\n case '<=':\n case '>':\n case '>=':\n if (value.length >= 2 && unbundle(value[1]) === '$type') {\n errors.push(new ValidationError(key, value, `\"$type\" cannot be use with operator \"${value[0]}\"`));\n }\n /* falls through */\n case '==':\n case '!=':\n if (value.length !== 3) {\n errors.push(new ValidationError(key, value, `filter array for operator \"${value[0]}\" must have 3 elements`));\n }\n /* falls through */\n case 'in':\n case '!in':\n if (value.length >= 2) {\n type = getType(value[1]);\n if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n }\n for (let i = 2; i < value.length; i++) {\n type = getType(value[i]);\n if (unbundle(value[1]) === '$type') {\n errors = errors.concat(validateEnum({\n key: `${key}[${i}]`,\n value: value[i],\n valueSpec: styleSpec.geometry_type,\n style: options.style,\n styleSpec: options.styleSpec\n }));\n } else if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n errors.push(new ValidationError(`${key}[${i}]`, value[i], `string, number, or boolean expected, ${type} found`));\n }\n }\n break;\n\n case 'any':\n case 'all':\n case 'none':\n for (let i = 1; i < value.length; i++) {\n errors = errors.concat(validateNonExpressionFilter({\n key: `${key}[${i}]`,\n value: value[i],\n style: options.style,\n styleSpec: options.styleSpec\n }));\n }\n break;\n\n case 'has':\n case '!has':\n type = getType(value[1]);\n if (value.length !== 2) {\n errors.push(new ValidationError(key, value, `filter array for \"${value[0]}\" operator must have 2 elements`));\n } else if (type !== 'string') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`));\n }\n break;\n case 'within':\n type = getType(value[1]);\n if (value.length !== 2) {\n errors.push(new ValidationError(key, value, `filter array for \"${value[0]}\" operator must have 2 elements`));\n } else if (type !== 'object') {\n errors.push(new ValidationError(`${key}[1]`, value[1], `object expected, ${type} found`));\n }\n break;\n }\n return errors;\n}\n","\nimport validate from './validate';\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport {isFunction} from '../function';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {supportsPropertyExpression} from '../util/properties';\n\nexport default function validateProperty(options, propertyType) {\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n const value = options.value;\n const propertyKey = options.objectKey;\n const layerSpec = styleSpec[`${propertyType}_${options.layerType}`];\n\n if (!layerSpec) return [];\n\n const transitionMatch = propertyKey.match(/^(.*)-transition$/);\n if (propertyType === 'paint' && transitionMatch && layerSpec[transitionMatch[1]] && layerSpec[transitionMatch[1]].transition) {\n return validate({\n key,\n value,\n valueSpec: styleSpec.transition,\n style,\n styleSpec\n });\n }\n\n const valueSpec = options.valueSpec || layerSpec[propertyKey];\n if (!valueSpec) {\n return [new ValidationError(key, value, `unknown property \"${propertyKey}\"`)];\n }\n\n let tokenMatch;\n if (getType(value) === 'string' && supportsPropertyExpression(valueSpec) && !valueSpec.tokens && (tokenMatch = /^{([^}]+)}$/.exec(value))) {\n return [new ValidationError(\n key, value,\n `\"${propertyKey}\" does not support interpolation syntax\\n` +\n `Use an identity property function instead: \\`{ \"type\": \"identity\", \"property\": ${JSON.stringify(tokenMatch[1])} }\\`.`)];\n }\n\n const errors = [];\n\n if (options.layerType === 'symbol') {\n if (propertyKey === 'text-field' && style && !style.glyphs) {\n errors.push(new ValidationError(key, value, 'use of \"text-field\" requires a style \"glyphs\" property'));\n }\n if (propertyKey === 'text-font' && isFunction(deepUnbundle(value)) && unbundle(value.type) === 'identity') {\n errors.push(new ValidationError(key, value, '\"text-font\" does not support identity functions'));\n }\n }\n\n return errors.concat(validate({\n key: options.key,\n value,\n valueSpec,\n style,\n styleSpec,\n expressionContext: 'property',\n propertyType,\n propertyKey\n }));\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validatePaintProperty(options) {\n return validateProperty(options, 'paint');\n}\n","\nimport validateProperty from './validate_property';\n\nexport default function validateLayoutProperty(options) {\n return validateProperty(options, 'layout');\n}\n","\nimport ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateFilter from './validate_filter';\nimport validatePaintProperty from './validate_paint_property';\nimport validateLayoutProperty from './validate_layout_property';\nimport validateSpec from './validate';\nimport extend from '../util/extend';\n\nexport default function validateLayer(options) {\n let errors = [];\n\n const layer = options.value;\n const key = options.key;\n const style = options.style;\n const styleSpec = options.styleSpec;\n\n if (!layer.type && !layer.ref) {\n errors.push(new ValidationError(key, layer, 'either \"type\" or \"ref\" is required'));\n }\n let type = unbundle(layer.type);\n const ref = unbundle(layer.ref);\n\n if (layer.id) {\n const layerId = unbundle(layer.id);\n for (let i = 0; i < options.arrayIndex; i++) {\n const otherLayer = style.layers[i];\n if (unbundle(otherLayer.id) === layerId) {\n errors.push(new ValidationError(key, layer.id, `duplicate layer id \"${layer.id}\", previously used at line ${otherLayer.id.__line__}`));\n }\n }\n }\n\n if ('ref' in layer) {\n ['type', 'source', 'source-layer', 'filter', 'layout'].forEach((p) => {\n if (p in layer) {\n errors.push(new ValidationError(key, layer[p], `\"${p}\" is prohibited for ref layers`));\n }\n });\n\n let parent;\n\n style.layers.forEach((layer) => {\n if (unbundle(layer.id) === ref) parent = layer;\n });\n\n if (!parent) {\n errors.push(new ValidationError(key, layer.ref, `ref layer \"${ref}\" not found`));\n } else if (parent.ref) {\n errors.push(new ValidationError(key, layer.ref, 'ref cannot reference another ref layer'));\n } else {\n type = unbundle(parent.type);\n }\n } else if (type !== 'background') {\n if (!layer.source) {\n errors.push(new ValidationError(key, layer, 'missing required property \"source\"'));\n } else {\n const source = style.sources && style.sources[layer.source];\n const sourceType = source && unbundle(source.type);\n if (!source) {\n errors.push(new ValidationError(key, layer.source, `source \"${layer.source}\" not found`));\n } else if (sourceType === 'vector' && type === 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a raster source`));\n } else if (sourceType === 'raster' && type !== 'raster') {\n errors.push(new ValidationError(key, layer.source, `layer \"${layer.id}\" requires a vector source`));\n } else if (sourceType === 'vector' && !layer['source-layer']) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" must specify a \"source-layer\"`));\n } else if (sourceType === 'raster-dem' && type !== 'hillshade') {\n errors.push(new ValidationError(key, layer.source, 'raster-dem source can only be used with layer type \\'hillshade\\'.'));\n } else if (type === 'line' && layer.paint && layer.paint['line-gradient'] &&\n (sourceType !== 'geojson' || !source.lineMetrics)) {\n errors.push(new ValidationError(key, layer, `layer \"${layer.id}\" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`));\n }\n }\n }\n\n errors = errors.concat(validateObject({\n key,\n value: layer,\n valueSpec: styleSpec.layer,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'() {\n return [];\n },\n // We don't want to enforce the spec's `\"requires\": true` for backward compatibility with refs;\n // the actual requirement is validated above. See https://github.com/mapbox/mapbox-gl-js/issues/5772.\n type() {\n return validateSpec({\n key: `${key}.type`,\n value: layer.type,\n valueSpec: styleSpec.layer.type,\n style: options.style,\n styleSpec: options.styleSpec,\n object: layer,\n objectKey: 'type'\n });\n },\n filter: validateFilter,\n layout(options) {\n return validateObject({\n layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'(options) {\n return validateLayoutProperty(extend({layerType: type}, options));\n }\n }\n });\n },\n paint(options) {\n return validateObject({\n layer,\n key: options.key,\n value: options.value,\n style: options.style,\n styleSpec: options.styleSpec,\n objectElementValidators: {\n '*'(options) {\n return validatePaintProperty(extend({layerType: type}, options));\n }\n }\n });\n }\n }\n }));\n\n return errors;\n}\n","\nimport getType from '../util/get_type';\nimport ValidationError from '../error/validation_error';\n\nexport default function validateString(options) {\n const value = options.value;\n const key = options.key;\n const type = getType(value);\n\n if (type !== 'string') {\n return [new ValidationError(key, value, `string expected, ${type} found`)];\n }\n\n return [];\n}\n","\nimport ValidationError from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\nimport validateObject from './validate_object';\nimport validateEnum from './validate_enum';\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\nimport getType from '../util/get_type';\n\nconst objectElementValidators = {\n promoteId: validatePromoteId\n};\n\nexport default function validateSource(options) {\n const value = options.value;\n const key = options.key;\n const styleSpec = options.styleSpec;\n const style = options.style;\n\n if (!value.type) {\n return [new ValidationError(key, value, '\"type\" is required')];\n }\n\n const type = unbundle(value.type);\n let errors;\n\n switch (type) {\n case 'vector':\n case 'raster':\n case 'raster-dem':\n errors = validateObject({\n key,\n value,\n valueSpec: styleSpec[`source_${type.replace('-', '_')}`],\n style: options.style,\n styleSpec,\n objectElementValidators\n });\n return errors;\n\n case 'geojson':\n errors = validateObject({\n key,\n value,\n valueSpec: styleSpec.source_geojson,\n style,\n styleSpec,\n objectElementValidators\n });\n if (value.cluster) {\n for (const prop in value.clusterProperties) {\n const [operator, mapExpr] = value.clusterProperties[prop];\n const reduceExpr = typeof operator === 'string' ? [operator, ['accumulated'], ['get', prop]] : operator;\n\n errors.push(...validateExpression({\n key: `${key}.${prop}.map`,\n value: mapExpr,\n expressionContext: 'cluster-map'\n }));\n errors.push(...validateExpression({\n key: `${key}.${prop}.reduce`,\n value: reduceExpr,\n expressionContext: 'cluster-reduce'\n }));\n }\n }\n return errors;\n\n case 'video':\n return validateObject({\n key,\n value,\n valueSpec: styleSpec.source_video,\n style,\n styleSpec\n });\n\n case 'image':\n return validateObject({\n key,\n value,\n valueSpec: styleSpec.source_image,\n style,\n styleSpec\n });\n\n case 'canvas':\n return [new ValidationError(key, null, `Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`, 'source.canvas')];\n\n default:\n return validateEnum({\n key: `${key}.type`,\n value: value.type,\n valueSpec: {values: ['vector', 'raster', 'raster-dem', 'geojson', 'video', 'image']},\n style,\n styleSpec\n });\n }\n}\n\nfunction validatePromoteId({key, value}) {\n if (getType(value) === 'string') {\n return validateString({key, value});\n } else {\n const errors = [];\n for (const prop in value) {\n errors.push(...validateString({key: `${key}.${prop}`, value: value[prop]}));\n }\n return errors;\n }\n}\n","\nimport ValidationError from '../error/validation_error';\nimport getType from '../util/get_type';\nimport validate from './validate';\n\nexport default function validateLight(options) {\n const light = options.value;\n const styleSpec = options.styleSpec;\n const lightSpec = styleSpec.light;\n const style = options.style;\n\n let errors = [];\n\n const rootType = getType(light);\n if (light === undefined) {\n return errors;\n } else if (rootType !== 'object') {\n errors = errors.concat([new ValidationError('light', light, `object expected, ${rootType} found`)]);\n return errors;\n }\n\n for (const key in light) {\n const transitionMatch = key.match(/^(.*)-transition$/);\n\n if (transitionMatch && lightSpec[transitionMatch[1]] && lightSpec[transitionMatch[1]].transition) {\n errors = errors.concat(validate({\n key,\n value: light[key],\n valueSpec: styleSpec.transition,\n style,\n styleSpec\n }));\n } else if (lightSpec[key]) {\n errors = errors.concat(validate({\n key,\n value: light[key],\n valueSpec: lightSpec[key],\n style,\n styleSpec\n }));\n } else {\n errors = errors.concat([new ValidationError(key, light[key], `unknown property \"${key}\"`)]);\n }\n }\n\n return errors;\n}\n","// @flow\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nexport default function validateFormatted(options: any) {\n if (validateString(options).length === 0) {\n return [];\n }\n\n return validateExpression(options);\n}\n","// @flow\nimport validateExpression from './validate_expression';\nimport validateString from './validate_string';\n\nexport default function validateImage(options: any) {\n if (validateString(options).length === 0) {\n return [];\n }\n\n return validateExpression(options);\n}\n","\nimport extend from '../util/extend';\nimport {unbundle, deepUnbundle} from '../util/unbundle_jsonlint';\nimport {isExpression} from '../expression';\nimport {isFunction} from '../function';\n\nimport validateFunction from './validate_function';\nimport validateExpression from './validate_expression';\nimport validateObject from './validate_object';\nimport validateArray from './validate_array';\nimport validateBoolean from './validate_boolean';\nimport validateNumber from './validate_number';\nimport validateColor from './validate_color';\nimport validateConstants from './validate_constants';\nimport validateEnum from './validate_enum';\nimport validateFilter from './validate_filter';\nimport validateLayer from './validate_layer';\nimport validateSource from './validate_source';\nimport validateLight from './validate_light';\nimport validateString from './validate_string';\nimport validateFormatted from './validate_formatted';\nimport validateImage from './validate_image';\n\nconst VALIDATORS = {\n '*'() {\n return [];\n },\n 'array': validateArray,\n 'boolean': validateBoolean,\n 'number': validateNumber,\n 'color': validateColor,\n 'constants': validateConstants,\n 'enum': validateEnum,\n 'filter': validateFilter,\n 'function': validateFunction,\n 'layer': validateLayer,\n 'object': validateObject,\n 'source': validateSource,\n 'light': validateLight,\n 'string': validateString,\n 'formatted': validateFormatted,\n 'resolvedImage': validateImage\n};\n\n// Main recursive validation function. Tracks:\n//\n// - key: string representing location of validation in style tree. Used only\n// for more informative error reporting.\n// - value: current value from style being evaluated. May be anything from a\n// high level object that needs to be descended into deeper or a simple\n// scalar value.\n// - valueSpec: current spec being evaluated. Tracks value.\n// - styleSpec: current full spec being evaluated.\n\nexport default function validate(options) {\n const value = options.value;\n const valueSpec = options.valueSpec;\n const styleSpec = options.styleSpec;\n\n if (valueSpec.expression && isFunction(unbundle(value))) {\n return validateFunction(options);\n\n } else if (valueSpec.expression && isExpression(deepUnbundle(value))) {\n return validateExpression(options);\n\n } else if (valueSpec.type && VALIDATORS[valueSpec.type]) {\n return VALIDATORS[valueSpec.type](options);\n\n } else {\n const valid = validateObject(extend({}, options, {\n valueSpec: valueSpec.type ? styleSpec[valueSpec.type] : valueSpec\n }));\n return valid;\n }\n}\n","\nimport ValidationError from '../error/validation_error';\nimport validateString from './validate_string';\n\nexport default function(options) {\n const value = options.value;\n const key = options.key;\n\n const errors = validateString(options);\n if (errors.length) return errors;\n\n if (value.indexOf('{fontstack}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{fontstack}\" token'));\n }\n\n if (value.indexOf('{range}') === -1) {\n errors.push(new ValidationError(key, value, '\"glyphs\" url must include a \"{range}\" token'));\n }\n\n return errors;\n}\n","\nimport validateConstants from './validate/validate_constants';\nimport validate from './validate/validate';\nimport latestStyleSpec from './reference/latest';\nimport validateGlyphsURL from './validate/validate_glyphs_url';\n\nimport validateSource from './validate/validate_source';\nimport validateLight from './validate/validate_light';\nimport validateLayer from './validate/validate_layer';\nimport validateFilter from './validate/validate_filter';\nimport validatePaintProperty from './validate/validate_paint_property';\nimport validateLayoutProperty from './validate/validate_layout_property';\n\n/**\n * Validate a Mapbox GL style against the style specification. This entrypoint,\n * `mapbox-gl-style-spec/lib/validate_style.min`, is designed to produce as\n * small a browserify bundle as possible by omitting unnecessary functionality\n * and legacy style specifications.\n *\n * @private\n * @param {Object} style The style to be validated.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the latest style spec is used.\n * @returns {Array}\n * @example\n * var validate = require('mapbox-gl-style-spec/lib/validate_style.min');\n * var errors = validate(style);\n */\nfunction validateStyleMin(style, styleSpec = latestStyleSpec) {\n\n let errors = [];\n\n errors = errors.concat(validate({\n key: '',\n value: style,\n valueSpec: styleSpec.$root,\n styleSpec,\n style,\n objectElementValidators: {\n glyphs: validateGlyphsURL,\n '*'() {\n return [];\n }\n }\n }));\n\n if (style.constants) {\n errors = errors.concat(validateConstants({\n key: 'constants',\n value: style.constants,\n style,\n styleSpec\n }));\n }\n\n return sortErrors(errors);\n}\n\nvalidateStyleMin.source = wrapCleanErrors(validateSource);\nvalidateStyleMin.light = wrapCleanErrors(validateLight);\nvalidateStyleMin.layer = wrapCleanErrors(validateLayer);\nvalidateStyleMin.filter = wrapCleanErrors(validateFilter);\nvalidateStyleMin.paintProperty = wrapCleanErrors(validatePaintProperty);\nvalidateStyleMin.layoutProperty = wrapCleanErrors(validateLayoutProperty);\n\nfunction sortErrors(errors) {\n return [].concat(errors).sort((a, b) => {\n return a.line - b.line;\n });\n}\n\nfunction wrapCleanErrors(inner) {\n return function(...args) {\n return sortErrors(inner.apply(this, args));\n };\n}\n\nexport default validateStyleMin;\n","/* parser generated by jison 0.4.15 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,12],$V1=[1,13],$V2=[1,9],$V3=[1,10],$V4=[1,11],$V5=[1,14],$V6=[1,15],$V7=[14,18,22,24],$V8=[18,22],$V9=[22,24];\nvar parser = {trace: function trace() { },\nyy: {},\nsymbols_: {\"error\":2,\"JSONString\":3,\"STRING\":4,\"JSONNumber\":5,\"NUMBER\":6,\"JSONNullLiteral\":7,\"NULL\":8,\"JSONBooleanLiteral\":9,\"TRUE\":10,\"FALSE\":11,\"JSONText\":12,\"JSONValue\":13,\"EOF\":14,\"JSONObject\":15,\"JSONArray\":16,\"{\":17,\"}\":18,\"JSONMemberList\":19,\"JSONMember\":20,\":\":21,\",\":22,\"[\":23,\"]\":24,\"JSONElementList\":25,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",4:\"STRING\",6:\"NUMBER\",8:\"NULL\",10:\"TRUE\",11:\"FALSE\",14:\"EOF\",17:\"{\",18:\"}\",21:\":\",22:\",\",23:\"[\",24:\"]\"},\nproductions_: [0,[3,1],[5,1],[7,1],[9,1],[9,1],[12,2],[13,1],[13,1],[13,1],[13,1],[13,1],[13,1],[15,2],[15,3],[20,3],[19,1],[19,3],[16,2],[16,3],[25,1],[25,3]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\n // replace escaped characters with actual character\n this.$ = new String(yytext.replace(/\\\\(\\\\|\")/g, \"$\"+\"1\")\n .replace(/\\\\n/g,'\\n')\n .replace(/\\\\r/g,'\\r')\n .replace(/\\\\t/g,'\\t')\n .replace(/\\\\v/g,'\\v')\n .replace(/\\\\f/g,'\\f')\n .replace(/\\\\b/g,'\\b'));\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 2:\n\n this.$ = new Number(yytext);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 3:\n\n this.$ = null;\n \nbreak;\ncase 4:\n\n this.$ = new Boolean(true);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 5:\n\n this.$ = new Boolean(false);\n this.$.__line__ = this._$.first_line;\n \nbreak;\ncase 6:\nreturn this.$ = $$[$0-1];\nbreak;\ncase 13:\nthis.$ = {}; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 14: case 19:\nthis.$ = $$[$0-1]; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 15:\nthis.$ = [$$[$0-2], $$[$0]];\nbreak;\ncase 16:\nthis.$ = {}; this.$[$$[$0][0]] = $$[$0][1];\nbreak;\ncase 17:\nthis.$ = $$[$0-2]; $$[$0-2][$$[$0][0]] = $$[$0][1];\nbreak;\ncase 18:\nthis.$ = []; Object.defineProperty(this.$, '__line__', {\n value: this._$.first_line,\n enumerable: false\n })\nbreak;\ncase 20:\nthis.$ = [$$[$0]];\nbreak;\ncase 21:\nthis.$ = $$[$0-2]; $$[$0-2].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,12:1,13:2,15:7,16:8,17:$V5,23:$V6},{1:[3]},{14:[1,16]},o($V7,[2,7]),o($V7,[2,8]),o($V7,[2,9]),o($V7,[2,10]),o($V7,[2,11]),o($V7,[2,12]),o($V7,[2,3]),o($V7,[2,4]),o($V7,[2,5]),o([14,18,21,22,24],[2,1]),o($V7,[2,2]),{3:20,4:$V0,18:[1,17],19:18,20:19},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:23,15:7,16:8,17:$V5,23:$V6,24:[1,21],25:22},{1:[2,6]},o($V7,[2,13]),{18:[1,24],22:[1,25]},o($V8,[2,16]),{21:[1,26]},o($V7,[2,18]),{22:[1,28],24:[1,27]},o($V9,[2,20]),o($V7,[2,14]),{3:20,4:$V0,20:29},{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:30,15:7,16:8,17:$V5,23:$V6},o($V7,[2,19]),{3:5,4:$V0,5:6,6:$V1,7:3,8:$V2,9:4,10:$V3,11:$V4,13:31,15:7,16:8,17:$V5,23:$V6},o($V8,[2,17]),o($V8,[2,15]),o($V9,[2,21])],\ndefaultActions: {16:[2,6]},\nparseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n throw new Error(str);\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n function lex() {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function (match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin(condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState(condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:return 6\nbreak;\ncase 2:yy_.yytext = yy_.yytext.substr(1,yy_.yyleng-2); return 4\nbreak;\ncase 3:return 17\nbreak;\ncase 4:return 18\nbreak;\ncase 5:return 23\nbreak;\ncase 6:return 24\nbreak;\ncase 7:return 22\nbreak;\ncase 8:return 21\nbreak;\ncase 9:return 10\nbreak;\ncase 10:return 11\nbreak;\ncase 11:return 8\nbreak;\ncase 12:return 14\nbreak;\ncase 13:return 'INVALID'\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:(-?([0-9]|[1-9][0-9]+))(\\.[0-9]+)?([eE][-+]?[0-9]+)?\\b)/,/^(?:\"(?:\\\\[\\\\\"bfnrt/]|\\\\u[a-fA-F0-9]{4}|[^\\\\\\0-\\x09\\x0a-\\x1f\"])*\")/,/^(?:\\{)/,/^(?:\\})/,/^(?:\\[)/,/^(?:\\])/,/^(?:,)/,/^(?::)/,/^(?:true\\b)/,/^(?:false\\b)/,/^(?:null\\b)/,/^(?:$)/,/^(?:.)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\n\nif (typeof require !== 'undefined' && typeof exports !== 'undefined') {\nexports.parser = parser;\nexports.Parser = parser.Parser;\nexports.parse = function () { return parser.parse.apply(parser, arguments); };\n}\n","import ParsingError from './error/parsing_error';\nimport jsonlint from '@mapbox/jsonlint-lines-primitives';\n\nexport default function readStyle(style) {\n if (style instanceof String || typeof style === 'string' || style instanceof Buffer) {\n try {\n return jsonlint.parse(style.toString());\n } catch (e) {\n throw new ParsingError(e);\n }\n }\n\n return style;\n}\n","\nimport validateStyleMin from './validate_style.min';\nimport {v8} from './style-spec';\nimport readStyle from './read_style';\n\n/**\n * Validate a Mapbox GL style against the style specification.\n *\n * @private\n * @alias validate\n * @param {Object|String|Buffer} style The style to be validated. If a `String`\n * or `Buffer` is provided, the returned errors will contain line numbers.\n * @param {Object} [styleSpec] The style specification to validate against.\n * If omitted, the spec version is inferred from the stylesheet.\n * @returns {Array}\n * @example\n * var validate = require('mapbox-gl-style-spec').validate;\n * var style = fs.readFileSync('./style.json', 'utf8');\n * var errors = validate(style);\n */\n\nexport default function validateStyle(style, styleSpec = v8) {\n let s = style;\n\n try {\n s = readStyle(s);\n } catch (e) {\n return [e];\n }\n\n return validateStyleMin(s, styleSpec);\n}\n\nexport const source = validateStyleMin.source;\nexport const light = validateStyleMin.light;\nexport const layer = validateStyleMin.layer;\nexport const filter = validateStyleMin.filter;\nexport const paintProperty = validateStyleMin.paintProperty;\nexport const layoutProperty = validateStyleMin.layoutProperty;\n","// @flow\n\nimport validateStyle from './validate_style.min';\nimport {v8} from './style-spec';\nimport readStyle from './read_style';\nimport ValidationError from './error/validation_error';\nimport getType from './util/get_type';\n\nconst SUPPORTED_SPEC_VERSION = 8;\nconst MAX_SOURCES_IN_STYLE = 15;\n\nfunction isValid(value: ?string, regex: RegExp): boolean {\n if (!value || getType(value) !== 'string') return true;\n return !!value.match(regex);\n}\n\nfunction getSourceCount(source: Object): number {\n if (source.url) {\n return source.url.split(',').length;\n } else {\n return 0;\n }\n}\n\nfunction getAllowedKeyErrors(obj: Object, keys: Array<*>, path: ?string): Array {\n const allowed = new Set(keys);\n const errors = [];\n Object.keys(obj).forEach(k => {\n if (!allowed.has(k)) {\n const prop = path ? `${path}.${k}` : null;\n errors.push(new ValidationError(prop, obj[k], `Unsupported property \"${k}\"`));\n }\n });\n return errors;\n}\n\nfunction getSourceErrors(source: Object, i: number): Array {\n const errors = [];\n\n /*\n * Inlined sources are not supported by the Mapbox Styles API, so only\n * \"type\", \"url\", and \"tileSize\" properties are valid\n */\n const sourceKeys = ['type', 'url', 'tileSize'];\n errors.push(...getAllowedKeyErrors(source, sourceKeys, 'source'));\n\n /*\n * \"source\" is required. Valid examples:\n * mapbox://mapbox.abcd1234\n * mapbox://penny.abcd1234\n * mapbox://mapbox.abcd1234,penny.abcd1234\n */\n const sourceUrlPattern = /^mapbox:\\/\\/([^/]*)$/;\n if (!isValid(source.url, sourceUrlPattern)) {\n errors.push(new ValidationError(`sources[${i}]`, source.url, 'Source url must be a valid Mapbox tileset url'));\n }\n\n return errors;\n}\n\nfunction getSourcesErrors(sources: Object): Array {\n const errors = [];\n let count = 0;\n\n Object.keys(sources).forEach((s: string, i: number) => {\n const sourceErrors = getSourceErrors(sources[s], i);\n\n // If source has errors, skip counting\n if (!sourceErrors.length) {\n count = count + getSourceCount(sources[s]);\n }\n\n errors.push(...sourceErrors);\n });\n\n if (count > MAX_SOURCES_IN_STYLE) {\n errors.push(new ValidationError('sources', null, `Styles must contain ${MAX_SOURCES_IN_STYLE} or fewer sources`));\n }\n\n return errors;\n}\n\nfunction getRootErrors(style: Object, specKeys: Array): Array {\n const errors = [];\n\n /*\n * The following keys are optional but fully managed by the Mapbox Styles\n * API. Values on stylesheet on POST or PATCH will be ignored: \"owner\",\n * \"id\", \"cacheControl\", \"draft\", \"created\", \"modified\"\n *\n * The following keys are optional. The Mapbox Styles API respects value on\n * stylesheet on PATCH, but ignores the value on POST: \"visibility\"\n */\n const optionalRootProperties = [\n 'owner',\n 'id',\n 'cacheControl',\n 'draft',\n 'created',\n 'modified',\n 'visibility'\n ];\n\n const allowedKeyErrors = getAllowedKeyErrors(style, [...specKeys, ...optionalRootProperties]);\n errors.push(...allowedKeyErrors);\n\n if (style.version > SUPPORTED_SPEC_VERSION || style.version < SUPPORTED_SPEC_VERSION) {\n errors.push(new ValidationError('version', style.version, `Style version must be ${SUPPORTED_SPEC_VERSION}`));\n }\n\n /*\n * \"glyphs\" is optional. If present, valid examples:\n * mapbox://fonts/penny/{fontstack}/{range}.pbf\n * mapbox://fonts/mapbox/{fontstack}/{range}.pbf\n */\n const glyphUrlPattern = /^mapbox:\\/\\/fonts\\/([^/]*)\\/{fontstack}\\/{range}.pbf$/;\n if (!isValid(style.glyphs, glyphUrlPattern)) {\n errors.push(new ValidationError('glyphs', style.glyphs, 'Styles must reference glyphs hosted by Mapbox'));\n }\n\n /*\n * \"sprite\" is optional. If present, valid examples:\n * mapbox://sprites/penny/abcd1234\n * mapbox://sprites/mapbox/abcd1234/draft\n * mapbox://sprites/cyrus/abcd1234/abcd1234\n */\n const spriteUrlPattern = /^mapbox:\\/\\/sprites\\/([^/]*)\\/([^/]*)\\/?([^/]*)?$/;\n if (!isValid(style.sprite, spriteUrlPattern)) {\n errors.push(new ValidationError('sprite', style.sprite, 'Styles must reference sprites hosted by Mapbox'));\n }\n\n /*\n * \"visibility\" is optional. If present, valid examples:\n * \"private\"\n * \"public\"\n */\n const visibilityPattern = /^(public|private)$/;\n if (!isValid(style.visibility, visibilityPattern)) {\n errors.push(new ValidationError('visibility', style.visibility, 'Style visibility must be public or private'));\n }\n\n return errors;\n}\n\n/**\n * Validate a Mapbox GL style against the style specification and check for\n * compatibility with the Mapbox Styles API.\n *\n * @param {Object} style The style to be validated.\n * @returns {Array}\n * @example\n * var validateMapboxApiSupported = require('mapbox-gl-style-spec/lib/validate_style_mapbox_api_supported.js');\n * var errors = validateMapboxApiSupported(style);\n */\nexport default function validateMapboxApiSupported(style: Object): Array {\n let s = style;\n try {\n s = readStyle(s);\n } catch (e) {\n return [e];\n }\n\n let errors = validateStyle(s, v8)\n .concat(getRootErrors(s, Object.keys(v8.$root)));\n\n if (s.sources) {\n errors = errors.concat(getSourcesErrors(s.sources));\n }\n\n return errors;\n}\n","// @flow\n\ntype ExpressionType = 'data-driven' | 'cross-faded' | 'cross-faded-data-driven' | 'color-ramp' | 'data-constant' | 'constant';\ntype ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress'>;\n\ntype ExpressionSpecification = {\n interpolated: boolean,\n parameters: ExpressionParameters\n}\n\nexport type StylePropertySpecification = {\n type: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: number\n} | {\n type: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string,\n tokens?: boolean\n} | {\n type: 'boolean',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: boolean\n} | {\n type: 'enum',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n values: {[_: string]: {}},\n transition: boolean,\n default?: string\n} | {\n type: 'color',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n transition: boolean,\n default?: string,\n overridable: boolean\n} | {\n type: 'array',\n value: 'number',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array\n} | {\n type: 'array',\n value: 'string',\n 'property-type': ExpressionType,\n expression?: ExpressionSpecification,\n length?: number,\n transition: boolean,\n default?: Array\n};\n\nimport v8 from './reference/v8.json';\nimport latest from './reference/latest';\nimport format from './format';\nimport migrate from './migrate';\nimport composite from './composite';\nimport derefLayers from './deref';\nimport diff from './diff';\nimport ValidationError from './error/validation_error';\nimport ParsingError from './error/parsing_error';\nimport {StyleExpression, isExpression, createExpression, createPropertyExpression, normalizePropertyExpression, ZoomConstantExpression, ZoomDependentExpression, StylePropertyFunction} from './expression';\nimport featureFilter, {isExpressionFilter} from './feature_filter';\n\nimport convertFilter from './feature_filter/convert';\nimport Color from './util/color';\nimport {createFunction, isFunction} from './function';\nimport convertFunction from './function/convert';\nimport {eachSource, eachLayer, eachProperty} from './visit';\n\nimport validate from './validate_style';\nimport validateMapboxApiSupported from './validate_mapbox_api_supported';\n\nconst expression = {\n StyleExpression,\n isExpression,\n isExpressionFilter,\n createExpression,\n createPropertyExpression,\n normalizePropertyExpression,\n ZoomConstantExpression,\n ZoomDependentExpression,\n StylePropertyFunction\n};\n\nconst styleFunction = {\n convertFunction,\n createFunction,\n isFunction\n};\n\nconst visit = {eachSource, eachLayer, eachProperty};\n\nexport {\n v8,\n latest,\n format,\n migrate,\n composite,\n derefLayers,\n diff,\n ValidationError,\n ParsingError,\n expression,\n featureFilter,\n convertFilter,\n Color,\n styleFunction as function,\n validate,\n validateMapboxApiSupported,\n visit\n};\n\nvalidate.parsed = validate;\nvalidate.latest = validate;\n"],"names":["sortKeysBy","obj","reference","const","result","key","undefined","format","style","space","$root","layers","map","layer","stringifyPretty","indent","global","this","require$$0","require$$1","getPropertyReference","propertyName","let","i","Reference","layout","length","paint","eachSource","callback","k","sources","eachLayer","eachProperty","options","inner","propertyType","properties","Object","keys","forEach","path","id","value","set","x","eachLayout","indexOf","eachPaint","resolveConstant","constants","isFunction","Array","isArray","stops","renameProperty","from","to","version","source","type","url","coordinates","coord","reverse","property","stop","migrateFontstackURL","input","inputParsed","URL","parse","inputPathnameParts","pathname","split","protocol","hostname","glyphs","migrateFontStack","font","splitAndTrim","string","s","trim","Error","firstSymbolLayer","symbolLayers","splice","concat","output","inputs","ParsingError","message","super","Scope","parent","bindings","name","expression","get","has","NullType","kind","NumberType","StringType","BooleanType","ColorType","ObjectType","ValueType","ErrorType","CollatorType","FormattedType","ResolvedImageType","array","itemType","N","toString","valueMemberTypes","checkSubtype","expected","t","memberType","isValidType","provided","allowedTypes","some","isValidNativeType","Color","r","g","b","a","rgba","parseCSSColor","toArray","Math","round","black","white","transparent","red","Collator","caseSensitive","diacriticSensitive","locale","sensitivity","collator","Intl","usage","compare","lhs","rhs","resolvedLocale","resolvedOptions","FormattedSection","text","image","scale","fontStack","textColor","Formatted","sections","fromString","unformatted","isEmpty","section","factory","join","serialize","serialized","push","ResolvedImage","available","validateRGBA","isValue","mixed","item","typeOf","String","JSON","stringify","Literal","args","context","error","expectedType","evaluate","eachChild","outputDefined","RuntimeError","toJSON","types","number","boolean","object","Assertion","floor","parsed","ctx","fn","every","arg","FormatExpression","firstArg","nextTokenMayBeObject","lastExpression","content","evaluateSection","evaluatedContent","ImageExpression","evaluatedImageName","availableImages","Coercion","Boolean","c","parseColor","num","Number","isNaN","valueToString","child","geometryTypes","EvaluationContext","globals","feature","featureState","formattedSection","_parseColorCache","canonical","geometryType","geometry","canonicalID","cached","CompoundExpression","_evaluate","op","definition","definitions","availableOverloads","overloads","filter","signature","signatureContext","ParsingContext","registry","scope","parsedArgs","argParseFailed","params","errors","signatures","stringifySignature","actualTypes","register","CollatorExpression","EXTENT","updateBBox","bbox","min","max","mercatorXfromLng","lng","mercatorYfromLat","lat","PI","log","tan","boxWithinBox","bbox1","bbox2","getTileCoordinates","p","y","tilesAtZoom","pow","z","onBoundary","p1","p2","x1","y1","x2","y2","rayIntersect","pointWithinPolygon","point","rings","inside","len","ring","j","len2","pointWithinPolygons","polygons","perp","v1","v2","twoSided","q1","q2","x3","y3","det1","det2","lineIntersectLine","d","vectorP","vectorQ","lineIntersectPolygon","polygon","lineStringWithinPolygon","line","lineStringWithinPolygons","getTilePolygon","getTilePolygons","updatePoint","polyBBox","worldSize","halfWorldSize","shift","resetBBox","Infinity","getTilePoints","pointBBox","shifts","tilePoints","points","getTileLines","lineBBox","tileLines","tileLine","pointsWithinPolygons","polygonGeometry","tilePolygon","tilePolygons","linesWithinPolygons","Within","geojson","geometries","features","isFeatureConstant","e","test","isStateConstant","isGlobalPropertyConstant","Var","boundExpression","part","expr","index","_parse","annotate","typeAnnotation","Expr","actual","isConstant","ec","isTypeAnnotation","childrenConstant","findStopLessThanOrEqualTo","lastIndex","lowerIndex","upperIndex","currentIndex","currentValue","nextValue","Step","labels","outputs","label","outputType","labelKey","valueKey","stopCount","out","color","Xn","Yn","Zn","t0","t1","t2","t3","deg2rad","rad2deg","xyz2lab","lab2xyz","xyz2rgb","rgb2xyz","rgbToLab","rgbColor","l","alpha","labToRgb","labColor","interpolateLab","interpolateNumber","rgbToHcl","h","atan2","sqrt","hclToRgb","hclColor","cos","sin","interpolateHue","interpolateHcl","lab","forward","interpolate","hcl","Interpolate","operator","interpolation","interpolationFactor","lower","upper","exponentialInterpolation","base","controlPoints","ub","UnitBezier","solve","slice","rest","outputLower","outputUpper","toLowerCase","lowerValue","upperValue","difference","progress","Coalesce","needsAnnotation","argCount","requestedImageName","Let","binding","At","In","needle","haystack","IndexOf","fromIndex","Match","inputType","cases","otherwise","labelContext","abs","MAX_SAFE_INTEGER","sortedLabels","sort","groupedByOutput","outputLookup","outputIndex","coerceLabel","Case","branches","Slice","beginIndex","endIndex","isComparableType","eq","neq","lt","gt","lteq","gteq","eqCollate","neqCollate","ltCollate","gtCollate","lteqCollate","gteqCollate","makeComparison","compareBasic","compareWithCollator","isOrderComparison","hasUntypedArgument","Comparison","rt","Equals","NotEquals","LessThan","GreaterThan","LessThanOrEqual","GreaterThanOrEqual","NumberFormat","currency","minFractionDigits","maxFractionDigits","minimumFractionDigits","maximumFractionDigits","Length","expressions","v","binarySearch","m","varargs","typeToString","zoom","heatmapDensity","lineProgress","accumulated","LN2","E","n","LN10","asin","acos","atan","ceil","isSupportedScript","toUpperCase","success","supportsPropertyExpression","spec","supportsZoomExpression","parameters","supportsInterpolation","interpolated","getType","val","identityFunction","createFunction","propertySpec","isColor","zoomAndFeatureDependent","featureDependent","zoomDependent","extend","default","colorSpace","colorSpaces","innerFun","hashedStops","categoricalKeyType","evaluateExponentialFunction","evaluateIntervalFunction","evaluateCategoricalFunction","create","evaluateIdentityFunction","featureFunctions","zoomStops","featureFunctionStops","interpolationType","bind","_","coalesce","keyType","evaluated","interp","colorspace","evaluatedLower","apply","evaluatedUpper","values","StyleExpression","_warningHistory","_evaluator","_defaultValue","getDefaultValue","_enumValues","evaluateWithoutErrorHandling","console","warn","isExpression","createExpression","parser","getExpectedType","ZoomConstantExpression","_styleExpression","isStateDependent","ZoomDependentExpression","createPropertyExpression","isZoomConstant","zoomCurve","findZoomCurve","StylePropertyFunction","specification","_parameters","_specification","deserialize","normalizePropertyExpression","err","constant","childResult","enum","formatted","resolvedImage","convertLiteral","convertFunction","convertIdentityFunction","tokens","convertTokenString","convertZoomAndPropertyFunction","convertZoomFunction","convertPropertyFunction","getInterpolateOperator","featureFunctionParameters","functionType","getFunctionType","appendStopPair","fixupDegenerateStepCurve","getFallback","defaultValue","isStep","curve","re","pos","match","exec","literal","isExpressionFilter","f","filterSpec","createFilter","needGeometry","convertFilter","compiled","geometryNeeded","globalProperties","converted","convertComparisonOp","convertNegation","convertDisjunctionOp","convertInOp","convertHasOp","filters","_convertFilter","expectedTypes","children","typechecks","runtimeTypeChecks","conditions","negate","uniformTypes","uniqueValues","migrated","migrateToV8","migrateToExpressions","styleIDs","sourceIDs","compositedSourceLayers","compositeID","deref","refProperties","derefLayers","ref","deepEqual","operations","setStyle","addLayer","removeLayer","setPaintProperty","setLayoutProperty","setFilter","addSource","removeSource","setGeoJSONSourceData","setLayerZoomRange","setLayerProperty","setCenter","setZoom","setBearing","setPitch","setSprite","setGlyphs","setTransition","setLight","sourceId","after","commands","command","sourcesRemoved","updateSource","canUpdateGeoJSON","before","prop","hasOwnProperty","isEqual","diffSources","data","diffLayerPropertyChanges","layerId","klass","pluckId","indexById","group","diffLayers","beforeOrder","afterOrder","beforeIndex","reduce","afterIndex","tracker","clean","beforeLayer","afterLayer","insertBeforeLayerId","lastIndexOf","minzoom","maxzoom","diffStyles","center","bearing","pitch","sprite","transition","light","removeOrAddSourceCommands","beforeLayers","ValidationError","identifier","__line__","parseInt","validateConstants","unbundle","valueOf","deepUnbundle","unbundledValue","validateObject","elementSpecs","valueSpec","elementValidators","objectElementValidators","styleSpec","objectKey","elementSpecKey","elementSpec","validateElement","validateSpec","required","validateArray","arraySpec","validateArrayElement","arrayElementValidator","validate","arrayElementSpec","$version","function","arrayIndex","validateNumber","minimum","maximum","validateFunction","functionValueSpec","stopKeyType","stopDomainValues","previousStopDomainValue","previousStopDomainZoom","isZoomFunction","isPropertyFunction","isZoomAndPropertyFunction","validateFunctionStops","validateFunctionDefault","validateFunctionStop","validateStopDomainValue","reportValue","isFinite","validateExpression","expressionContext","expressionObj","propertyKey","validateBoolean","validateColor","validateEnum","validateFilter","validateNonExpressionFilter","filter_operator","geometry_type","validateProperty","layerSpec","layerType","transitionMatch","tokenMatch","validatePaintProperty","validateLayoutProperty","validateLayer","otherLayer","sourceType","lineMetrics","validateString","promoteId","validatePromoteId","validateSource","replace","source_geojson","cluster","clusterProperties","reduceExpr","mapExpr","source_video","source_image","validateLight","lightSpec","rootType","validateFormatted","validateImage","VALIDATORS","valid","validateStyleMin","latestStyleSpec","validateGlyphsURL","sortErrors","wrapCleanErrors","paintProperty","layoutProperty","require","readStyle","Buffer","jsonlint","validateStyle","v8","SUPPORTED_SPEC_VERSION","MAX_SOURCES_IN_STYLE","isValid","regex","getSourceCount","getAllowedKeyErrors","allowed","Set","getSourceErrors","sourceKeys","sourceUrlPattern","getSourcesErrors","count","sourceErrors","getRootErrors","specKeys","optionalRootProperties","allowedKeyErrors","glyphUrlPattern","spriteUrlPattern","visibilityPattern","visibility","validateMapboxApiSupported","styleFunction","visit","latest"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;AACA;AACA;AACA;AACA,IAAI,YAAY,GAAG,2BA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CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,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"}