{"version":3,"file":"index.mjs","sources":["../../src/util/ref_properties.ts","../../src/deref.ts","../../src/util/deep_equal.ts","../../src/diff.ts","../../src/error/validation_error.ts","../../src/error/parsing_error.ts","../../src/util/extend.ts","../../src/expression/parsing_error.ts","../../src/expression/scope.ts","../../src/expression/types.ts","../../src/expression/types/color_spaces.ts","../../src/util/get_own.ts","../../src/expression/types/parse_css_color.ts","../../src/util/interpolate-primitives.ts","../../src/expression/types/color.ts","../../src/expression/types/collator.ts","../../src/expression/types/formatted.ts","../../src/expression/types/padding.ts","../../src/expression/types/number_array.ts","../../src/expression/types/color_array.ts","../../src/expression/runtime_error.ts","../../src/expression/types/variable_anchor_offset_collection.ts","../../src/expression/types/resolved_image.ts","../../src/expression/types/projection_definition.ts","../../src/expression/values.ts","../../src/expression/definitions/literal.ts","../../src/expression/definitions/assertion.ts","../../src/expression/definitions/coercion.ts","../../src/expression/evaluation_context.ts","../../src/expression/parsing_context.ts","../../src/expression/definitions/let.ts","../../src/expression/definitions/var.ts","../../src/expression/definitions/at.ts","../../src/expression/definitions/in.ts","../../src/expression/definitions/index_of.ts","../../src/expression/definitions/match.ts","../../src/expression/definitions/case.ts","../../src/expression/definitions/slice.ts","../../src/expression/stops.ts","../../src/expression/definitions/step.ts","../node_modules/@mapbox/unitbezier/index.js","../../src/expression/definitions/interpolate.ts","../../src/expression/definitions/coalesce.ts","../../src/expression/definitions/comparison.ts","../../src/expression/definitions/collator.ts","../../src/expression/definitions/number_format.ts","../../src/expression/definitions/format.ts","../../src/expression/definitions/image.ts","../../src/expression/definitions/length.ts","../../src/util/geometry_util.ts","../../src/expression/definitions/within.ts","../node_modules/tinyqueue/index.js","../node_modules/quickselect/index.js","../../src/util/classify_rings.ts","../../src/util/cheap_ruler.ts","../../src/expression/definitions/distance.ts","../../src/expression/definitions/global_state.ts","../../src/expression/definitions/index.ts","../../src/expression/compound_expression.ts","../../src/util/result.ts","../../src/util/properties.ts","../../src/util/get_type.ts","../../src/function/index.ts","../../src/expression/index.ts","../../src/feature_filter/index.ts","../../src/feature_filter/convert.ts","../../src/function/convert.ts","../../src/visit.ts","../../src/group_by_layout.ts","../../src/empty.ts","../../src/validate/validate_constants.ts","../../src/util/unbundle_jsonlint.ts","../../src/validate/validate_object.ts","../../src/validate/validate_array.ts","../../src/validate/validate_number.ts","../../src/validate/validate_function.ts","../../src/validate/validate_expression.ts","../../src/validate/validate_boolean.ts","../../src/validate/validate_color.ts","../../src/validate/validate_enum.ts","../../src/validate/validate_filter.ts","../../src/validate/validate_property.ts","../../src/validate/validate_paint_property.ts","../../src/validate/validate_layout_property.ts","../../src/validate/validate_layer.ts","../../src/validate/validate_string.ts","../../src/validate/validate_raster_dem_source.ts","../../src/validate/validate_source.ts","../../src/validate/validate_light.ts","../../src/validate/validate_sky.ts","../../src/validate/validate_terrain.ts","../../src/validate/validate_formatted.ts","../../src/validate/validate_image.ts","../../src/validate/validate_padding.ts","../../src/validate/validate_number_array.ts","../../src/validate/validate_color_array.ts","../../src/validate/validate_variable_anchor_offset_collection.ts","../../src/validate/validate_sprite.ts","../../src/validate/validate_projection.ts","../../src/validate/validate_projectiondefinition.ts","../../src/util/is_object_literal.ts","../../src/validate/validate_state.ts","../../src/validate/validate_font_faces.ts","../../src/validate/validate.ts","../../src/validate/validate_glyphs_url.ts","../../src/validate_style.min.ts","../node_modules/json-stringify-pretty-compact/index.js","../../src/format.ts","../../src/migrate/v8.ts","../../src/migrate/expressions.ts","../../src/migrate/migrate_colors.ts","../../src/migrate.ts","../../src/expression/visibility.ts","../../src/index.ts"],"sourcesContent":["export const refProperties = [\n    'type',\n    'source',\n    'source-layer',\n    'minzoom',\n    'maxzoom',\n    'filter',\n    'layout'\n];\n","import {refProperties} from './util/ref_properties';\nimport {LayerSpecification} from './types.g';\n\nexport type LayerWithRef = LayerSpecification & {ref?: string};\n\nfunction deref(layer: LayerWithRef, parent: LayerSpecification): LayerSpecification {\n    const result: Partial<LayerSpecification> = {};\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 as LayerSpecification;\n}\n\n/**\n *\n * The input is not modified. The output may contain references to portions\n * of the input.\n *\n * @param layers - array of layers, some of which may contain `ref` properties\n * whose value is the `id` of another property\n * @returns a new array where such layers have been augmented with the 'type', 'source', etc. properties\n * from the parent layer, and the `ref` property has been removed.\n */\nexport function derefLayers(layers: LayerWithRef[]): LayerSpecification[] {\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","/**\n * Deeply compares two object literals.\n *\n * @private\n */\n\nexport function deepEqual(a?: unknown | null, b?: unknown | null): 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","import {\n    GeoJSONSourceSpecification,\n    LayerSpecification,\n    LightSpecification,\n    ProjectionSpecification,\n    SkySpecification,\n    SourceSpecification,\n    SpriteSpecification,\n    StyleSpecification,\n    TerrainSpecification,\n    TransitionSpecification,\n    StateSpecification\n} from './types.g';\nimport {deepEqual} from './util/deep_equal';\n\n/**\n * Operations that can be performed by the diff.\n * Below are the operations and their arguments, the arguments should be aligned with the style methods in maplibre-gl-js.\n */\nexport type DiffOperationsMap = {\n    setStyle: [StyleSpecification];\n    addLayer: [LayerSpecification, string | null];\n    removeLayer: [string];\n    setPaintProperty: [string, string, unknown, string | null];\n    setLayoutProperty: [string, string, unknown, string | null];\n    setFilter: [string, unknown];\n    addSource: [string, SourceSpecification];\n    removeSource: [string];\n    setGeoJSONSourceData: [string, unknown];\n    setLayerZoomRange: [string, number, number];\n    setLayerProperty: [string, string, unknown];\n    setCenter: [number[]];\n    setCenterAltitude: [number];\n    setZoom: [number];\n    setBearing: [number];\n    setPitch: [number];\n    setRoll: [number];\n    setSprite: [SpriteSpecification];\n    setGlyphs: [string];\n    setTransition: [TransitionSpecification];\n    setLight: [LightSpecification];\n    setTerrain: [TerrainSpecification];\n    setSky: [SkySpecification];\n    setProjection: [ProjectionSpecification];\n    setGlobalState: [StateSpecification];\n};\n\nexport type DiffOperations = keyof DiffOperationsMap;\n\nexport type DiffCommand<T extends DiffOperations> = {\n    command: T;\n    args: DiffOperationsMap[T];\n};\n\n/**\n * The main reason for this method is to allow type check when adding a command to the array.\n * @param commands - The commands array to add to\n * @param command - The command to add\n */\nfunction addCommand<T extends DiffOperations>(\n    commands: DiffCommand<DiffOperations>[],\n    command: DiffCommand<T>\n) {\n    commands.push(command);\n}\n\nfunction addSource(\n    sourceId: string,\n    after: {[key: string]: SourceSpecification},\n    commands: DiffCommand<DiffOperations>[]\n) {\n    addCommand(commands, {command: 'addSource', args: [sourceId, after[sourceId]]});\n}\n\nfunction removeSource(\n    sourceId: string,\n    commands: DiffCommand<DiffOperations>[],\n    sourcesRemoved: {[key: string]: boolean}\n) {\n    addCommand(commands, {command: 'removeSource', args: [sourceId]});\n    sourcesRemoved[sourceId] = true;\n}\n\nfunction updateSource(\n    sourceId: string,\n    after: {[key: string]: SourceSpecification},\n    commands: DiffCommand<DiffOperations>[],\n    sourcesRemoved: {[key: string]: boolean}\n) {\n    removeSource(sourceId, commands, sourcesRemoved);\n    addSource(sourceId, after, commands);\n}\n\nfunction canUpdateGeoJSON(\n    before: {[key: string]: SourceSpecification},\n    after: {[key: string]: SourceSpecification},\n    sourceId: string\n) {\n    let prop;\n    for (prop in before[sourceId]) {\n        if (!Object.prototype.hasOwnProperty.call(before[sourceId], prop)) continue;\n        if (prop !== 'data' && !deepEqual(before[sourceId][prop], after[sourceId][prop])) {\n            return false;\n        }\n    }\n    for (prop in after[sourceId]) {\n        if (!Object.prototype.hasOwnProperty.call(after[sourceId], prop)) continue;\n        if (prop !== 'data' && !deepEqual(before[sourceId][prop], after[sourceId][prop])) {\n            return false;\n        }\n    }\n    return true;\n}\n\nfunction diffSources(\n    before: {[key: string]: SourceSpecification},\n    after: {[key: string]: SourceSpecification},\n    commands: DiffCommand<DiffOperations>[],\n    sourcesRemoved: {[key: string]: boolean}\n) {\n    before = before || ({} as {[key: string]: SourceSpecification});\n    after = after || ({} as {[key: string]: SourceSpecification});\n\n    let sourceId: string;\n\n    // look for sources to remove\n    for (sourceId in before) {\n        if (!Object.prototype.hasOwnProperty.call(before, sourceId)) continue;\n        if (!Object.prototype.hasOwnProperty.call(after, sourceId)) {\n            removeSource(sourceId, commands, sourcesRemoved);\n        }\n    }\n\n    // look for sources to add/update\n    for (sourceId in after) {\n        if (!Object.prototype.hasOwnProperty.call(after, sourceId)) continue;\n        if (!Object.prototype.hasOwnProperty.call(before, sourceId)) {\n            addSource(sourceId, after, commands);\n        } else if (!deepEqual(before[sourceId], after[sourceId])) {\n            if (\n                before[sourceId].type === 'geojson' &&\n                after[sourceId].type === 'geojson' &&\n                canUpdateGeoJSON(before, after, sourceId)\n            ) {\n                addCommand(commands, {\n                    command: 'setGeoJSONSourceData',\n                    args: [sourceId, (after[sourceId] as GeoJSONSourceSpecification).data]\n                });\n            } else {\n                // no update command, must remove then add\n                updateSource(sourceId, after, commands, sourcesRemoved);\n            }\n        }\n    }\n}\n\nfunction diffLayerPropertyChanges(\n    before: LayerSpecification['layout'] | LayerSpecification['paint'],\n    after: LayerSpecification['layout'] | LayerSpecification['paint'],\n    commands: DiffCommand<DiffOperations>[],\n    layerId: string,\n    klass: string | null,\n    command: 'setPaintProperty' | 'setLayoutProperty'\n) {\n    before = before || ({} as LayerSpecification['layout'] | LayerSpecification['paint']);\n    after = after || ({} as LayerSpecification['layout'] | LayerSpecification['paint']);\n\n    for (const prop in before) {\n        if (!Object.prototype.hasOwnProperty.call(before, prop)) continue;\n        if (!deepEqual(before[prop], after[prop])) {\n            commands.push({command, args: [layerId, prop, after[prop], klass]});\n        }\n    }\n    for (const prop in after) {\n        if (\n            !Object.prototype.hasOwnProperty.call(after, prop) ||\n            Object.prototype.hasOwnProperty.call(before, prop)\n        )\n            continue;\n        if (!deepEqual(before[prop], after[prop])) {\n            commands.push({command, args: [layerId, prop, after[prop], klass]});\n        }\n    }\n}\n\nfunction pluckId(layer: LayerSpecification) {\n    return layer.id;\n}\nfunction indexById(group: {[key: string]: LayerSpecification}, layer: LayerSpecification) {\n    group[layer.id] = layer;\n    return group;\n}\n\nfunction diffLayers(\n    before: LayerSpecification[],\n    after: LayerSpecification[],\n    commands: DiffCommand<DiffOperations>[]\n) {\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 layerId: string;\n    let beforeLayer: LayerSpecification & {source?: string; filter?: unknown};\n    let afterLayer: LayerSpecification & {source?: string; filter?: unknown};\n    let insertBeforeLayerId: string;\n    let prop: string;\n\n    // remove layers\n    for (let i = 0, d = 0; i < beforeOrder.length; i++) {\n        layerId = beforeOrder[i];\n        if (!Object.prototype.hasOwnProperty.call(afterIndex, layerId)) {\n            addCommand(commands, {command: '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 (let 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 (Object.prototype.hasOwnProperty.call(beforeIndex, layerId)) {\n            // remove the layer before we insert at the correct position\n            addCommand(commands, {command: '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        addCommand(commands, {\n            command: 'addLayer',\n            args: [afterIndex[layerId], insertBeforeLayerId]\n        });\n        tracker.splice(tracker.length - i, 0, layerId);\n        clean[layerId] = true;\n    }\n\n    // update layers\n    for (let 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] || deepEqual(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 (\n            !deepEqual(beforeLayer.source, afterLayer.source) ||\n            !deepEqual(beforeLayer['source-layer'], afterLayer['source-layer']) ||\n            !deepEqual(beforeLayer.type, afterLayer.type)\n        ) {\n            addCommand(commands, {command: '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            addCommand(commands, {command: 'addLayer', args: [afterLayer, insertBeforeLayerId]});\n            continue;\n        }\n\n        // layout, paint, filter, minzoom, maxzoom\n        diffLayerPropertyChanges(\n            beforeLayer.layout,\n            afterLayer.layout,\n            commands,\n            layerId,\n            null,\n            'setLayoutProperty'\n        );\n        diffLayerPropertyChanges(\n            beforeLayer.paint,\n            afterLayer.paint,\n            commands,\n            layerId,\n            null,\n            'setPaintProperty'\n        );\n        if (!deepEqual(beforeLayer.filter, afterLayer.filter)) {\n            addCommand(commands, {command: 'setFilter', args: [layerId, afterLayer.filter]});\n        }\n        if (\n            !deepEqual(beforeLayer.minzoom, afterLayer.minzoom) ||\n            !deepEqual(beforeLayer.maxzoom, afterLayer.maxzoom)\n        ) {\n            addCommand(commands, {\n                command: 'setLayerZoomRange',\n                args: [layerId, afterLayer.minzoom, afterLayer.maxzoom]\n            });\n        }\n\n        // handle all other layer props, including paint.*\n        for (prop in beforeLayer) {\n            if (!Object.prototype.hasOwnProperty.call(beforeLayer, prop)) continue;\n            if (\n                prop === 'layout' ||\n                prop === 'paint' ||\n                prop === 'filter' ||\n                prop === 'metadata' ||\n                prop === 'minzoom' ||\n                prop === 'maxzoom'\n            )\n                continue;\n            if (prop.indexOf('paint.') === 0) {\n                diffLayerPropertyChanges(\n                    beforeLayer[prop],\n                    afterLayer[prop],\n                    commands,\n                    layerId,\n                    prop.slice(6),\n                    'setPaintProperty'\n                );\n            } else if (!deepEqual(beforeLayer[prop], afterLayer[prop])) {\n                addCommand(commands, {\n                    command: 'setLayerProperty',\n                    args: [layerId, prop, afterLayer[prop]]\n                });\n            }\n        }\n        for (prop in afterLayer) {\n            if (\n                !Object.prototype.hasOwnProperty.call(afterLayer, prop) ||\n                Object.prototype.hasOwnProperty.call(beforeLayer, prop)\n            )\n                continue;\n            if (\n                prop === 'layout' ||\n                prop === 'paint' ||\n                prop === 'filter' ||\n                prop === 'metadata' ||\n                prop === 'minzoom' ||\n                prop === 'maxzoom'\n            )\n                continue;\n            if (prop.indexOf('paint.') === 0) {\n                diffLayerPropertyChanges(\n                    beforeLayer[prop],\n                    afterLayer[prop],\n                    commands,\n                    layerId,\n                    prop.slice(6),\n                    'setPaintProperty'\n                );\n            } else if (!deepEqual(beforeLayer[prop], afterLayer[prop])) {\n                addCommand(commands, {\n                    command: 'setLayerProperty',\n                    args: [layerId, prop, afterLayer[prop]]\n                });\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 maplibre-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 */\nexport function diff(\n    before: StyleSpecification,\n    after: StyleSpecification\n): DiffCommand<DiffOperations>[] {\n    if (!before) return [{command: 'setStyle', args: [after]}];\n\n    let commands: DiffCommand<DiffOperations>[] = [];\n\n    try {\n        // Handle changes to top-level properties\n        if (!deepEqual(before.version, after.version)) {\n            return [{command: 'setStyle', args: [after]}];\n        }\n        if (!deepEqual(before.center, after.center)) {\n            commands.push({command: 'setCenter', args: [after.center]});\n        }\n        if (!deepEqual(before.state, after.state)) {\n            commands.push({command: 'setGlobalState', args: [after.state]});\n        }\n        if (!deepEqual(before.centerAltitude, after.centerAltitude)) {\n            commands.push({command: 'setCenterAltitude', args: [after.centerAltitude]});\n        }\n        if (!deepEqual(before.zoom, after.zoom)) {\n            commands.push({command: 'setZoom', args: [after.zoom]});\n        }\n        if (!deepEqual(before.bearing, after.bearing)) {\n            commands.push({command: 'setBearing', args: [after.bearing]});\n        }\n        if (!deepEqual(before.pitch, after.pitch)) {\n            commands.push({command: 'setPitch', args: [after.pitch]});\n        }\n        if (!deepEqual(before.roll, after.roll)) {\n            commands.push({command: 'setRoll', args: [after.roll]});\n        }\n        if (!deepEqual(before.sprite, after.sprite)) {\n            commands.push({command: 'setSprite', args: [after.sprite]});\n        }\n        if (!deepEqual(before.glyphs, after.glyphs)) {\n            commands.push({command: 'setGlyphs', args: [after.glyphs]});\n        }\n        if (!deepEqual(before.transition, after.transition)) {\n            commands.push({command: 'setTransition', args: [after.transition]});\n        }\n        if (!deepEqual(before.light, after.light)) {\n            commands.push({command: 'setLight', args: [after.light]});\n        }\n        if (!deepEqual(before.terrain, after.terrain)) {\n            commands.push({command: 'setTerrain', args: [after.terrain]});\n        }\n        if (!deepEqual(before.sky, after.sky)) {\n            commands.push({command: 'setSky', args: [after.sky]});\n        }\n        if (!deepEqual(before.projection, after.projection)) {\n            commands.push({command: 'setProjection', args: [after.projection]});\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 ('source' in layer && sourcesRemoved[layer.source]) {\n                    commands.push({command: '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    } catch (e) {\n        // fall back to setStyle\n        console.warn('Unable to compute style diff:', e);\n        commands = [{command: 'setStyle', args: [after]}];\n    }\n\n    return commands;\n}\n","// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nexport class ValidationError {\n    message: string;\n    identifier: string;\n    line: number;\n\n    constructor(\n        key: string,\n        value: any & {\n            __line__: number;\n        },\n        message: string,\n        identifier?: string | null\n    ) {\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","// Note: Do not inherit from Error. It breaks when transpiling to ES5.\n\nexport 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","export function extendBy(output: any, ...inputs: Array<any>) {\n    for (const input of inputs) {\n        for (const k in input) {\n            output[k] = input[k];\n        }\n    }\n    return output;\n}\n","export class ExpressionParsingError 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","import type {Expression} from './expression';\n\n/**\n * Tracks `let` bindings during expression parsing.\n * @private\n */\nexport class 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]) {\n            return this.bindings[name];\n        }\n        if (this.parent) {\n            return this.parent.get(name);\n        }\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","export type NullTypeT = {\n    kind: 'null';\n};\nexport type NumberTypeT = {\n    kind: 'number';\n};\nexport type StringTypeT = {\n    kind: 'string';\n};\nexport type BooleanTypeT = {\n    kind: 'boolean';\n};\nexport type ColorTypeT = {\n    kind: 'color';\n};\nexport type ProjectionDefinitionTypeT = {\n    kind: 'projectionDefinition';\n};\nexport type ObjectTypeT = {\n    kind: 'object';\n};\nexport type ValueTypeT = {\n    kind: 'value';\n};\nexport type ErrorTypeT = {\n    kind: 'error';\n};\nexport type CollatorTypeT = {\n    kind: 'collator';\n};\nexport type FormattedTypeT = {\n    kind: 'formatted';\n};\nexport type PaddingTypeT = {\n    kind: 'padding';\n};\nexport type NumberArrayTypeT = {\n    kind: 'numberArray';\n};\nexport type ColorArrayTypeT = {\n    kind: 'colorArray';\n};\nexport type ResolvedImageTypeT = {\n    kind: 'resolvedImage';\n};\nexport type VariableAnchorOffsetCollectionTypeT = {\n    kind: 'variableAnchorOffsetCollection';\n};\n\nexport type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite';\n\nexport type Type =\n    | NullTypeT\n    | NumberTypeT\n    | StringTypeT\n    | BooleanTypeT\n    | ColorTypeT\n    | ProjectionDefinitionTypeT\n    | ObjectTypeT\n    | ValueTypeT\n    | ArrayType\n    | ErrorTypeT\n    | CollatorTypeT\n    | FormattedTypeT\n    | PaddingTypeT\n    | NumberArrayTypeT\n    | ColorArrayTypeT\n    | ResolvedImageTypeT\n    | VariableAnchorOffsetCollectionTypeT;\n\nexport interface ArrayType<T extends Type = Type> {\n    kind: 'array';\n    itemType: T;\n    N: number;\n}\n\nexport type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object';\n\nexport const NullType = {kind: 'null'} as NullTypeT;\nexport const NumberType = {kind: 'number'} as NumberTypeT;\nexport const StringType = {kind: 'string'} as StringTypeT;\nexport const BooleanType = {kind: 'boolean'} as BooleanTypeT;\nexport const ColorType = {kind: 'color'} as ColorTypeT;\nexport const ProjectionDefinitionType = {\n    kind: 'projectionDefinition'\n} as ProjectionDefinitionTypeT;\nexport const ObjectType = {kind: 'object'} as ObjectTypeT;\nexport const ValueType = {kind: 'value'} as ValueTypeT;\nexport const ErrorType = {kind: 'error'} as ErrorTypeT;\nexport const CollatorType = {kind: 'collator'} as CollatorTypeT;\nexport const FormattedType = {kind: 'formatted'} as FormattedTypeT;\nexport const PaddingType = {kind: 'padding'} as PaddingTypeT;\nexport const ColorArrayType = {kind: 'colorArray'} as ColorArrayTypeT;\nexport const NumberArrayType = {kind: 'numberArray'} as NumberArrayTypeT;\nexport const ResolvedImageType = {kind: 'resolvedImage'} as ResolvedImageTypeT;\nexport const VariableAnchorOffsetCollectionType = {\n    kind: 'variableAnchorOffsetCollection'\n} as VariableAnchorOffsetCollectionTypeT;\n\nexport function array<T extends Type>(itemType: T, N?: number | null): ArrayType<T> {\n    return {\n        kind: 'array',\n        itemType,\n        N\n    };\n}\n\nexport function typeToString(type: Type): string {\n    if (type.kind === 'array') {\n        const itemType = typeToString(type.itemType);\n        return typeof type.N === 'number'\n            ? `array<${itemType}, ${type.N}>`\n            : type.itemType.kind === 'value'\n              ? 'array'\n              : `array<${itemType}>`;\n    } else {\n        return type.kind;\n    }\n}\n\nconst valueMemberTypes = [\n    NullType,\n    NumberType,\n    StringType,\n    BooleanType,\n    ColorType,\n    ProjectionDefinitionType,\n    FormattedType,\n    ObjectType,\n    array(ValueType),\n    PaddingType,\n    NumberArrayType,\n    ColorArrayType,\n    ResolvedImageType,\n    VariableAnchorOffsetCollectionType\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 (\n            t.kind === 'array' &&\n            ((t.N === 0 && t.itemType.kind === 'value') ||\n                !checkSubtype(expected.itemType, t.itemType)) &&\n            (typeof expected.N !== 'number' || expected.N === t.N)\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 ${typeToString(expected)} but found ${typeToString(t)} instead.`;\n}\n\nexport function isValidType(provided: Type, allowedTypes: Array<Type>): boolean {\n    return allowedTypes.some((t) => t.kind === provided.kind);\n}\n\nexport function isValidNativeType(provided: any, allowedTypes: Array<NativeType>): 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\n/**\n * Verify whether the specified type is of the same type as the specified sample.\n *\n * @param provided Type to verify\n * @param sample Sample type to reference\n * @returns `true` if both objects are of the same type, `false` otherwise\n * @example basic types\n * if (verifyType(outputType, ValueType)) {\n *     // type narrowed to:\n *     outputType.kind; // 'value'\n * }\n * @example array types\n * if (verifyType(outputType, array(NumberType))) {\n *     // type narrowed to:\n *     outputType.kind; // 'array'\n *     outputType.itemType; // NumberTypeT\n *     outputType.itemType.kind; // 'number'\n * }\n */\nexport function verifyType<T extends Type>(provided: Type, sample: T): provided is T {\n    if (provided.kind === 'array' && sample.kind === 'array') {\n        return provided.itemType.kind === sample.itemType.kind && typeof provided.N === 'number';\n    }\n    return provided.kind === sample.kind;\n}\n","/**\n * @param r Red component 0..1\n * @param g Green component 0..1\n * @param b Blue component 0..1\n * @param alpha Alpha component 0..1\n */\nexport type RGBColor = [r: number, g: number, b: number, alpha: number];\n\n/**\n * @param h Hue as degrees 0..360\n * @param s Saturation as percentage 0..100\n * @param l Lightness as percentage 0..100\n * @param alpha Alpha component 0..1\n */\nexport type HSLColor = [h: number, s: number, l: number, alpha: number];\n\n/**\n * @param h Hue as degrees 0..360\n * @param c Chroma 0..~230\n * @param l Lightness as percentage 0..100\n * @param alpha Alpha component 0..1\n */\nexport type HCLColor = [h: number, c: number, l: number, alpha: number];\n\n/**\n * @param l Lightness as percentage 0..100\n * @param a A axis value -125..125\n * @param b B axis value -125..125\n * @param alpha Alpha component 0..1\n */\nexport type LABColor = [l: number, a: number, b: number, alpha: number];\n\n// See https://observablehq.com/@mbostock/lab-and-rgb\nconst Xn = 0.96422,\n    Yn = 1,\n    Zn = 0.82521,\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\nfunction constrainAngle(angle: number): number {\n    angle = angle % 360;\n    if (angle < 0) {\n        angle += 360;\n    }\n    return angle;\n}\n\nexport function rgbToLab([r, g, b, alpha]: RGBColor): LABColor {\n    r = rgb2xyz(r);\n    g = rgb2xyz(g);\n    b = rgb2xyz(b);\n    let x, z;\n    const y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn);\n    if (r === g && g === b) {\n        x = z = y;\n    } else {\n        x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n        z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n    }\n\n    const l = 116 * y - 16;\n    return [l < 0 ? 0 : l, 500 * (x - y), 200 * (y - z), alpha];\n}\n\nfunction rgb2xyz(x: number): number {\n    return x <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction xyz2lab(t: number): number {\n    return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nexport function labToRgb([l, a, b, alpha]: LABColor): RGBColor {\n    let y = (l + 16) / 116,\n        x = isNaN(a) ? y : y + a / 500,\n        z = isNaN(b) ? y : y - b / 200;\n\n    y = Yn * lab2xyz(y);\n    x = Xn * lab2xyz(x);\n    z = Zn * lab2xyz(z);\n\n    return [\n        xyz2rgb(3.1338561 * x - 1.6168667 * y - 0.4906146 * z), // D50 -> sRGB\n        xyz2rgb(-0.9787684 * x + 1.9161415 * y + 0.033454 * z),\n        xyz2rgb(0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n        alpha\n    ];\n}\n\nfunction xyz2rgb(x: number): number {\n    x = x <= 0.00304 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055;\n    return x < 0 ? 0 : x > 1 ? 1 : x; // clip to 0..1 range\n}\n\nfunction lab2xyz(t: number): number {\n    return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nexport function rgbToHcl(rgbColor: RGBColor): HCLColor {\n    const [l, a, b, alpha] = rgbToLab(rgbColor);\n    const c = Math.sqrt(a * a + b * b);\n    const h = Math.round(c * 10000) ? constrainAngle(Math.atan2(b, a) * rad2deg) : NaN;\n    return [h, c, l, alpha];\n}\n\nexport function hclToRgb([h, c, l, alpha]: HCLColor): RGBColor {\n    h = isNaN(h) ? 0 : h * deg2rad;\n    return labToRgb([l, Math.cos(h) * c, Math.sin(h) * c, alpha]);\n}\n\n// https://drafts.csswg.org/css-color-4/#hsl-to-rgb\nexport function hslToRgb([h, s, l, alpha]: HSLColor): RGBColor {\n    h = constrainAngle(h);\n    s /= 100;\n    l /= 100;\n\n    function f(n) {\n        const k = (n + h / 30) % 12;\n        const a = s * Math.min(l, 1 - l);\n        return l - a * Math.max(-1, Math.min(k - 3, 9 - k, 1));\n    }\n\n    return [f(0), f(8), f(4), alpha];\n}\n","type HasOwnPropertyFn = <TObject extends object>(\n    obj: TObject,\n    key: PropertyKey\n) => key is keyof TObject;\n\n// polyfill for Object.hasOwn\nconst hasOwnProperty: HasOwnPropertyFn =\n    (Object.hasOwn as HasOwnPropertyFn) ||\n    function hasOwnProperty<T extends object>(object: T, key: PropertyKey): key is keyof T {\n        return Object.prototype.hasOwnProperty.call(object, key);\n    };\n\nexport function getOwn<T extends object>(object: T, key: PropertyKey): T[keyof T] | undefined {\n    return hasOwnProperty(object, key) ? object[key] : undefined;\n}\n","import {getOwn} from '../../util/get_own';\nimport {HSLColor, hslToRgb, RGBColor} from './color_spaces';\n\n/**\n * CSS color parser compliant with CSS Color 4 Specification.\n * Supports: named colors, `transparent` keyword, all rgb hex notations,\n * rgb(), rgba(), hsl() and hsla() functions.\n * Does not round the parsed values to integers from the range 0..255.\n *\n * Syntax:\n *\n * <alpha-value> = <number> | <percentage>\n *         <hue> = <number> | <angle>\n *\n *         rgb() = rgb( <percentage>{3} [ / <alpha-value> ]? ) | rgb( <number>{3} [ / <alpha-value> ]? )\n *         rgb() = rgb( <percentage>#{3} , <alpha-value>? )    | rgb( <number>#{3} , <alpha-value>? )\n *\n *         hsl() = hsl( <hue> <percentage> <percentage> [ / <alpha-value> ]? )\n *         hsl() = hsl( <hue>, <percentage>, <percentage>, <alpha-value>? )\n *\n * Caveats:\n *   - <angle> - <number> with optional `deg` suffix; `grad`, `rad`, `turn` are not supported\n *   - `none` keyword is not supported\n *   - comments inside rgb()/hsl() are not supported\n *   - legacy color syntax rgba() is supported with an identical grammar and behavior to rgb()\n *   - legacy color syntax hsla() is supported with an identical grammar and behavior to hsl()\n *\n * @param input CSS color string to parse.\n * @returns Color in sRGB color space, with `red`, `green`, `blue`\n * and `alpha` channels normalized to the range 0..1,\n * or `undefined` if the input is not a valid color string.\n */\nexport function parseCssColor(input: string): RGBColor | undefined {\n    input = input.toLowerCase().trim();\n\n    if (input === 'transparent') {\n        return [0, 0, 0, 0];\n    }\n\n    // 'white', 'black', 'blue'\n    const namedColorsMatch = getOwn(namedColors, input);\n    if (namedColorsMatch) {\n        const [r, g, b] = namedColorsMatch;\n        return [r / 255, g / 255, b / 255, 1];\n    }\n\n    // #f0c, #f0cf, #ff00cc, #ff00ccff\n    if (input.startsWith('#')) {\n        const hexRegexp = /^#(?:[0-9a-f]{3,4}|[0-9a-f]{6}|[0-9a-f]{8})$/;\n        if (hexRegexp.test(input)) {\n            const step = input.length < 6 ? 1 : 2;\n            let i = 1;\n            return [\n                parseHex(input.slice(i, (i += step))),\n                parseHex(input.slice(i, (i += step))),\n                parseHex(input.slice(i, (i += step))),\n                parseHex(input.slice(i, i + step) || 'ff')\n            ];\n        }\n    }\n\n    // rgb(128 0 0), rgb(50% 0% 0%), rgba(255,0,255,0.6), rgb(255 0 255 / 60%), rgb(100% 0% 100% /.6)\n    if (input.startsWith('rgb')) {\n        const rgbRegExp =\n            /^rgba?\\(\\s*([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)(%)?(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/;\n        const rgbMatch = input.match(rgbRegExp);\n        if (rgbMatch) {\n            const [\n                _, // eslint-disable-line @typescript-eslint/no-unused-vars\n                r, // <numeric>\n                rp, // %         (optional)\n                f1, // ,         (optional)\n                g, // <numeric>\n                gp, // %         (optional)\n                f2, // ,         (optional)\n                b, // <numeric>\n                bp, // %         (optional)\n                f3, // ,|/       (optional)\n                a, // <numeric> (optional)\n                ap // %         (optional)\n            ] = rgbMatch;\n\n            const argFormat = [f1 || ' ', f2 || ' ', f3].join('');\n            if (\n                argFormat === '  ' ||\n                argFormat === '  /' ||\n                argFormat === ',,' ||\n                argFormat === ',,,'\n            ) {\n                const valFormat = [rp, gp, bp].join('');\n                const maxValue = valFormat === '%%%' ? 100 : valFormat === '' ? 255 : 0;\n                if (maxValue) {\n                    const rgba: RGBColor = [\n                        clamp(+r / maxValue, 0, 1),\n                        clamp(+g / maxValue, 0, 1),\n                        clamp(+b / maxValue, 0, 1),\n                        a ? parseAlpha(+a, ap) : 1\n                    ];\n                    if (validateNumbers(rgba)) {\n                        return rgba;\n                    }\n                    // invalid numbers\n                }\n                // values must be all numbers or all percentages\n            }\n            return; // comma optional syntax requires no commas at all\n        }\n    }\n\n    // hsl(120 50% 80%), hsla(120deg,50%,80%,.9), hsl(12e1 50% 80% / 90%)\n    const hslRegExp =\n        /^hsla?\\(\\s*([\\de.+-]+)(?:deg)?(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s+|\\s*(,)\\s*)([\\de.+-]+)%(?:\\s*([,\\/])\\s*([\\de.+-]+)(%)?)?\\s*\\)$/;\n    const hslMatch = input.match(hslRegExp);\n    if (hslMatch) {\n        const [\n            _, // eslint-disable-line @typescript-eslint/no-unused-vars\n            h, // <numeric>\n            f1, // ,         (optional)\n            s, // <numeric>\n            f2, // ,         (optional)\n            l, // <numeric>\n            f3, // ,|/       (optional)\n            a, // <numeric> (optional)\n            ap // %         (optional)\n        ] = hslMatch;\n\n        const argFormat = [f1 || ' ', f2 || ' ', f3].join('');\n        if (\n            argFormat === '  ' ||\n            argFormat === '  /' ||\n            argFormat === ',,' ||\n            argFormat === ',,,'\n        ) {\n            const hsla: HSLColor = [\n                +h,\n                clamp(+s, 0, 100),\n                clamp(+l, 0, 100),\n                a ? parseAlpha(+a, ap) : 1\n            ];\n            if (validateNumbers(hsla)) {\n                return hslToRgb(hsla);\n            }\n            // invalid numbers\n        }\n        // comma optional syntax requires no commas at all\n    }\n}\n\nfunction parseHex(hex: string): number {\n    return parseInt(hex.padEnd(2, hex), 16) / 255;\n}\n\nfunction parseAlpha(a: number, asPercentage: string | undefined): number {\n    return clamp(asPercentage ? a / 100 : a, 0, 1);\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n    return Math.min(Math.max(min, n), max);\n}\n\n/**\n * The regular expression for numeric values is not super specific, and it may\n * happen that it will accept a value that is not a valid number. In order to\n * detect and eliminate such values this function exists.\n *\n * @param array Array of uncertain numbers.\n * @returns `true` if the specified array contains only valid numbers, `false` otherwise.\n */\nfunction validateNumbers(array: number[]): boolean {\n    return !array.some(Number.isNaN);\n}\n\n/**\n * To generate:\n * - visit {@link https://www.w3.org/TR/css-color-4/#named-colors}\n * - run in the console:\n * @example\n * copy(`{\\n${[...document.querySelector('.named-color-table tbody').children].map((tr) => `${tr.cells[2].textContent.trim()}: [${tr.cells[4].textContent.trim().split(/\\s+/).join(', ')}],`).join('\\n')}\\n}`);\n */\nconst namedColors: Record<string, [number, number, number]> = {\n    aliceblue: [240, 248, 255],\n    antiquewhite: [250, 235, 215],\n    aqua: [0, 255, 255],\n    aquamarine: [127, 255, 212],\n    azure: [240, 255, 255],\n    beige: [245, 245, 220],\n    bisque: [255, 228, 196],\n    black: [0, 0, 0],\n    blanchedalmond: [255, 235, 205],\n    blue: [0, 0, 255],\n    blueviolet: [138, 43, 226],\n    brown: [165, 42, 42],\n    burlywood: [222, 184, 135],\n    cadetblue: [95, 158, 160],\n    chartreuse: [127, 255, 0],\n    chocolate: [210, 105, 30],\n    coral: [255, 127, 80],\n    cornflowerblue: [100, 149, 237],\n    cornsilk: [255, 248, 220],\n    crimson: [220, 20, 60],\n    cyan: [0, 255, 255],\n    darkblue: [0, 0, 139],\n    darkcyan: [0, 139, 139],\n    darkgoldenrod: [184, 134, 11],\n    darkgray: [169, 169, 169],\n    darkgreen: [0, 100, 0],\n    darkgrey: [169, 169, 169],\n    darkkhaki: [189, 183, 107],\n    darkmagenta: [139, 0, 139],\n    darkolivegreen: [85, 107, 47],\n    darkorange: [255, 140, 0],\n    darkorchid: [153, 50, 204],\n    darkred: [139, 0, 0],\n    darksalmon: [233, 150, 122],\n    darkseagreen: [143, 188, 143],\n    darkslateblue: [72, 61, 139],\n    darkslategray: [47, 79, 79],\n    darkslategrey: [47, 79, 79],\n    darkturquoise: [0, 206, 209],\n    darkviolet: [148, 0, 211],\n    deeppink: [255, 20, 147],\n    deepskyblue: [0, 191, 255],\n    dimgray: [105, 105, 105],\n    dimgrey: [105, 105, 105],\n    dodgerblue: [30, 144, 255],\n    firebrick: [178, 34, 34],\n    floralwhite: [255, 250, 240],\n    forestgreen: [34, 139, 34],\n    fuchsia: [255, 0, 255],\n    gainsboro: [220, 220, 220],\n    ghostwhite: [248, 248, 255],\n    gold: [255, 215, 0],\n    goldenrod: [218, 165, 32],\n    gray: [128, 128, 128],\n    green: [0, 128, 0],\n    greenyellow: [173, 255, 47],\n    grey: [128, 128, 128],\n    honeydew: [240, 255, 240],\n    hotpink: [255, 105, 180],\n    indianred: [205, 92, 92],\n    indigo: [75, 0, 130],\n    ivory: [255, 255, 240],\n    khaki: [240, 230, 140],\n    lavender: [230, 230, 250],\n    lavenderblush: [255, 240, 245],\n    lawngreen: [124, 252, 0],\n    lemonchiffon: [255, 250, 205],\n    lightblue: [173, 216, 230],\n    lightcoral: [240, 128, 128],\n    lightcyan: [224, 255, 255],\n    lightgoldenrodyellow: [250, 250, 210],\n    lightgray: [211, 211, 211],\n    lightgreen: [144, 238, 144],\n    lightgrey: [211, 211, 211],\n    lightpink: [255, 182, 193],\n    lightsalmon: [255, 160, 122],\n    lightseagreen: [32, 178, 170],\n    lightskyblue: [135, 206, 250],\n    lightslategray: [119, 136, 153],\n    lightslategrey: [119, 136, 153],\n    lightsteelblue: [176, 196, 222],\n    lightyellow: [255, 255, 224],\n    lime: [0, 255, 0],\n    limegreen: [50, 205, 50],\n    linen: [250, 240, 230],\n    magenta: [255, 0, 255],\n    maroon: [128, 0, 0],\n    mediumaquamarine: [102, 205, 170],\n    mediumblue: [0, 0, 205],\n    mediumorchid: [186, 85, 211],\n    mediumpurple: [147, 112, 219],\n    mediumseagreen: [60, 179, 113],\n    mediumslateblue: [123, 104, 238],\n    mediumspringgreen: [0, 250, 154],\n    mediumturquoise: [72, 209, 204],\n    mediumvioletred: [199, 21, 133],\n    midnightblue: [25, 25, 112],\n    mintcream: [245, 255, 250],\n    mistyrose: [255, 228, 225],\n    moccasin: [255, 228, 181],\n    navajowhite: [255, 222, 173],\n    navy: [0, 0, 128],\n    oldlace: [253, 245, 230],\n    olive: [128, 128, 0],\n    olivedrab: [107, 142, 35],\n    orange: [255, 165, 0],\n    orangered: [255, 69, 0],\n    orchid: [218, 112, 214],\n    palegoldenrod: [238, 232, 170],\n    palegreen: [152, 251, 152],\n    paleturquoise: [175, 238, 238],\n    palevioletred: [219, 112, 147],\n    papayawhip: [255, 239, 213],\n    peachpuff: [255, 218, 185],\n    peru: [205, 133, 63],\n    pink: [255, 192, 203],\n    plum: [221, 160, 221],\n    powderblue: [176, 224, 230],\n    purple: [128, 0, 128],\n    rebeccapurple: [102, 51, 153],\n    red: [255, 0, 0],\n    rosybrown: [188, 143, 143],\n    royalblue: [65, 105, 225],\n    saddlebrown: [139, 69, 19],\n    salmon: [250, 128, 114],\n    sandybrown: [244, 164, 96],\n    seagreen: [46, 139, 87],\n    seashell: [255, 245, 238],\n    sienna: [160, 82, 45],\n    silver: [192, 192, 192],\n    skyblue: [135, 206, 235],\n    slateblue: [106, 90, 205],\n    slategray: [112, 128, 144],\n    slategrey: [112, 128, 144],\n    snow: [255, 250, 250],\n    springgreen: [0, 255, 127],\n    steelblue: [70, 130, 180],\n    tan: [210, 180, 140],\n    teal: [0, 128, 128],\n    thistle: [216, 191, 216],\n    tomato: [255, 99, 71],\n    turquoise: [64, 224, 208],\n    violet: [238, 130, 238],\n    wheat: [245, 222, 179],\n    white: [255, 255, 255],\n    whitesmoke: [245, 245, 245],\n    yellow: [255, 255, 0],\n    yellowgreen: [154, 205, 50]\n};\n","export function interpolateNumber(from: number, to: number, t: number): number {\n    return from + t * (to - from);\n}\n\nexport function interpolateArray<T extends number[]>(from: T, to: T, t: number): T {\n    return from.map((d, i) => {\n        return interpolateNumber(d, to[i], t);\n    }) as T;\n}\n","import {HCLColor, hclToRgb, LABColor, labToRgb, RGBColor, rgbToHcl, rgbToLab} from './color_spaces';\nimport {parseCssColor} from './parse_css_color';\nimport {interpolateArray, interpolateNumber} from '../../util/interpolate-primitives';\n\nexport type InterpolationColorSpace = 'rgb' | 'hcl' | 'lab';\n\n/**\n * Checks whether the specified color space is one of the supported interpolation color spaces.\n *\n * @param colorSpace Color space key to verify.\n * @returns `true` if the specified color space is one of the supported\n * interpolation color spaces, `false` otherwise\n */\nexport function isSupportedInterpolationColorSpace(\n    colorSpace: string\n): colorSpace is InterpolationColorSpace {\n    return colorSpace === 'rgb' || colorSpace === 'hcl' || colorSpace === 'lab';\n}\n\n/**\n * Color representation used by WebGL.\n * Defined in sRGB color space and pre-blended with alpha.\n * @private\n */\nexport class Color {\n    readonly r: number;\n    readonly g: number;\n    readonly b: number;\n    readonly a: number;\n\n    /**\n     * @param r Red component premultiplied by `alpha` 0..1\n     * @param g Green component premultiplied by `alpha` 0..1\n     * @param b Blue component premultiplied by `alpha` 0..1\n     * @param [alpha=1] Alpha component 0..1\n     * @param [premultiplied=true] Whether the `r`, `g` and `b` values have already\n     * been multiplied by alpha. If `true` nothing happens if `false` then they will\n     * be multiplied automatically.\n     */\n    constructor(r: number, g: number, b: number, alpha = 1, premultiplied = true) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n        this.a = alpha;\n\n        if (!premultiplied) {\n            this.r *= alpha;\n            this.g *= alpha;\n            this.b *= alpha;\n\n            if (!alpha) {\n                // alpha = 0 erases completely rgb channels. This behavior is not desirable\n                // if this particular color is later used in color interpolation.\n                // Because of that, a reference to original color is saved.\n                this.overwriteGetter('rgb', [r, g, b, alpha]);\n            }\n        }\n    }\n\n    static black = new Color(0, 0, 0, 1);\n    static white = new Color(1, 1, 1, 1);\n    static transparent = new Color(0, 0, 0, 0);\n    static red = new Color(1, 0, 0, 1);\n\n    /**\n     * Parses CSS color strings and converts colors to sRGB color space if needed.\n     * Officially supported color formats:\n     * - keyword, e.g. 'aquamarine' or 'steelblue'\n     * - hex (with 3, 4, 6 or 8 digits), e.g. '#f0f' or '#e9bebea9'\n     * - rgb and rgba, e.g. 'rgb(0,240,120)' or 'rgba(0%,94%,47%,0.1)' or 'rgb(0 240 120 / .3)'\n     * - hsl and hsla, e.g. 'hsl(0,0%,83%)' or 'hsla(0,0%,83%,.5)' or 'hsl(0 0% 83% / 20%)'\n     *\n     * @param input CSS color string to parse.\n     * @returns A `Color` instance, or `undefined` if the input is not a valid color string.\n     */\n    static parse(input: Color | string | undefined | null): Color | undefined {\n        // in zoom-and-property function input could be an instance of Color class\n        if (input instanceof Color) {\n            return input;\n        }\n\n        if (typeof input !== 'string') {\n            return;\n        }\n\n        const rgba = parseCssColor(input);\n        if (rgba) {\n            return new Color(...rgba, false);\n        }\n    }\n\n    /**\n     * Used in color interpolation and by 'to-rgba' expression.\n     *\n     * @returns Gien color, with reversed alpha blending, in sRGB color space.\n     */\n    get rgb(): RGBColor {\n        const {r, g, b, a} = this;\n        const f = a || Infinity; // reverse alpha blending factor\n        return this.overwriteGetter('rgb', [r / f, g / f, b / f, a]);\n    }\n\n    /**\n     * Used in color interpolation.\n     *\n     * @returns Gien color, with reversed alpha blending, in HCL color space.\n     */\n    get hcl(): HCLColor {\n        return this.overwriteGetter('hcl', rgbToHcl(this.rgb));\n    }\n\n    /**\n     * Used in color interpolation.\n     *\n     * @returns Gien color, with reversed alpha blending, in LAB color space.\n     */\n    get lab(): LABColor {\n        return this.overwriteGetter('lab', rgbToLab(this.rgb));\n    }\n\n    /**\n     * Lazy getter pattern. When getter is called for the first time lazy value\n     * is calculated and then overwrites getter function in given object instance.\n     *\n     * @example:\n     * const redColor = Color.parse('red');\n     * let x = redColor.hcl; // this will invoke `get hcl()`, which will calculate\n     * // the value of red in HCL space and invoke this `overwriteGetter` function\n     * // which in turn will set a field with a key 'hcl' in the `redColor` object.\n     * // In other words it will override `get hcl()` from its `Color` prototype\n     * // with its own property: hcl = [calculated red value in hcl].\n     * let y = redColor.hcl; // next call will no longer invoke getter but simply\n     * // return the previously calculated value\n     * x === y; // true - `x` is exactly the same object as `y`\n     *\n     * @param getterKey Getter key\n     * @param lazyValue Lazily calculated value to be memoized by current instance\n     * @private\n     */\n    private overwriteGetter<T>(getterKey: string, lazyValue: T): T {\n        Object.defineProperty(this, getterKey, {value: lazyValue});\n        return lazyValue;\n    }\n\n    /**\n     * Used by 'to-string' expression.\n     *\n     * @returns Serialized color in format `rgba(r,g,b,a)`\n     * where r,g,b are numbers within 0..255 and alpha is number within 1..0\n     *\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.rgb;\n        return `rgba(${[r, g, b].map((n) => Math.round(n * 255)).join(',')},${a})`;\n    }\n\n    static interpolate(\n        from: Color,\n        to: Color,\n        t: number,\n        spaceKey: InterpolationColorSpace = 'rgb'\n    ): Color {\n        switch (spaceKey) {\n            case 'rgb': {\n                const [r, g, b, alpha] = interpolateArray(from.rgb, to.rgb, t);\n                return new Color(r, g, b, alpha, false);\n            }\n            case 'hcl': {\n                const [hue0, chroma0, light0, alphaF] = from.hcl;\n                const [hue1, chroma1, light1, alphaT] = to.hcl;\n\n                // https://github.com/gka/chroma.js/blob/cd1b3c0926c7a85cbdc3b1453b3a94006de91a92/src/interpolator/_hsx.js\n                let hue, chroma;\n\n                if (!isNaN(hue0) && !isNaN(hue1)) {\n                    let dh = hue1 - hue0;\n                    if (hue1 > hue0 && dh > 180) {\n                        dh -= 360;\n                    } else if (hue1 < hue0 && hue0 - hue1 > 180) {\n                        dh += 360;\n                    }\n                    hue = hue0 + t * dh;\n                } else if (!isNaN(hue0)) {\n                    hue = hue0;\n                    if (light1 === 1 || light1 === 0) chroma = chroma0;\n                } else if (!isNaN(hue1)) {\n                    hue = hue1;\n                    if (light0 === 1 || light0 === 0) chroma = chroma1;\n                } else {\n                    hue = NaN;\n                }\n\n                const [r, g, b, alpha] = hclToRgb([\n                    hue,\n                    chroma ?? interpolateNumber(chroma0, chroma1, t),\n                    interpolateNumber(light0, light1, t),\n                    interpolateNumber(alphaF, alphaT, t)\n                ]);\n                return new Color(r, g, b, alpha, false);\n            }\n            case 'lab': {\n                const [r, g, b, alpha] = labToRgb(interpolateArray(from.lab, to.lab, t));\n                return new Color(r, g, b, alpha, false);\n            }\n        }\n    }\n}\n","export 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) this.sensitivity = diacriticSensitive ? 'variant' : 'case';\n        else this.sensitivity = diacriticSensitive ? 'accent' : 'base';\n\n        this.locale = locale;\n        this.collator = new Intl.Collator(this.locale ? this.locale : [], {\n            sensitivity: this.sensitivity,\n            usage: 'search'\n        });\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 : []).resolvedOptions().locale;\n    }\n}\n","import type {Color} from '../../expression/types/color';\nimport type {ResolvedImage} from '../types/resolved_image';\n\nexport const VERTICAL_ALIGN_OPTIONS = ['bottom', 'center', 'top'] as const;\nexport type VerticalAlign = (typeof VERTICAL_ALIGN_OPTIONS)[number];\n\nexport class FormattedSection {\n    text: string;\n    image: ResolvedImage | null;\n    scale: number | null;\n    fontStack: string | null;\n    textColor: Color | null;\n    verticalAlign: VerticalAlign | null;\n\n    constructor(\n        text: string,\n        image: ResolvedImage | null,\n        scale: number | null,\n        fontStack: string | null,\n        textColor: Color | null,\n        verticalAlign: VerticalAlign | null\n    ) {\n        this.text = text;\n        this.image = image;\n        this.scale = scale;\n        this.fontStack = fontStack;\n        this.textColor = textColor;\n        this.verticalAlign = verticalAlign;\n    }\n}\n\nexport class Formatted {\n    sections: Array<FormattedSection>;\n\n    constructor(sections: Array<FormattedSection>) {\n        this.sections = sections;\n    }\n\n    static fromString(unformatted: string): Formatted {\n        return new Formatted([new FormattedSection(unformatted, null, null, null, null, null)]);\n    }\n\n    isEmpty(): boolean {\n        if (this.sections.length === 0) return true;\n        return !this.sections.some(\n            (section) =>\n                section.text.length !== 0 || (section.image && section.image.name.length !== 0)\n        );\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","import {interpolateArray} from '../../util/interpolate-primitives';\n\n/**\n * A set of four numbers representing padding around a box. Create instances from\n * bare arrays or numeric values using the static method `Padding.parse`.\n * @private\n */\nexport class Padding {\n    /** Padding values are in CSS order: top, right, bottom, left */\n    values: [number, number, number, number];\n\n    constructor(values: [number, number, number, number]) {\n        this.values = values.slice() as [number, number, number, number];\n    }\n\n    /**\n     * Numeric padding values\n     * @param input A padding value\n     * @returns A `Padding` instance, or `undefined` if the input is not a valid padding value.\n     */\n    static parse(input?: number | number[] | Padding | null): Padding | undefined {\n        if (input instanceof Padding) {\n            return input;\n        }\n\n        // Backwards compatibility: bare number is treated the same as array with single value.\n        // Padding applies to all four sides.\n        if (typeof input === 'number') {\n            return new Padding([input, input, input, input]);\n        }\n\n        if (!Array.isArray(input)) {\n            return undefined;\n        }\n\n        if (input.length < 1 || input.length > 4) {\n            return undefined;\n        }\n\n        for (const val of input) {\n            if (typeof val !== 'number') {\n                return undefined;\n            }\n        }\n\n        // Expand shortcut properties into explicit 4-sided values\n        switch (input.length) {\n            case 1:\n                input = [input[0], input[0], input[0], input[0]];\n                break;\n            case 2:\n                input = [input[0], input[1], input[0], input[1]];\n                break;\n            case 3:\n                input = [input[0], input[1], input[2], input[1]];\n                break;\n        }\n\n        return new Padding(input as [number, number, number, number]);\n    }\n\n    toString(): string {\n        return JSON.stringify(this.values);\n    }\n\n    static interpolate(from: Padding, to: Padding, t: number): Padding {\n        return new Padding(interpolateArray(from.values, to.values, t));\n    }\n}\n","import {interpolateArray} from '../../util/interpolate-primitives';\n\n/**\n * An array of numbers. Create instances from\n * bare arrays or numeric values using the static method `NumberArray.parse`.\n * @private\n */\nexport class NumberArray {\n    values: number[];\n\n    constructor(values: number[]) {\n        this.values = values.slice();\n    }\n\n    /**\n     * Numeric NumberArray values\n     * @param input A NumberArray value\n     * @returns A `NumberArray` instance, or `undefined` if the input is not a valid NumberArray value.\n     */\n    static parse(input?: number | number[] | NumberArray | null): NumberArray | undefined {\n        if (input instanceof NumberArray) {\n            return input;\n        }\n\n        // Backwards compatibility (e.g. hillshade-illumination-direction): bare number is treated the same as array with single value.\n        if (typeof input === 'number') {\n            return new NumberArray([input]);\n        }\n\n        if (!Array.isArray(input)) {\n            return undefined;\n        }\n\n        for (const val of input) {\n            if (typeof val !== 'number') {\n                return undefined;\n            }\n        }\n\n        return new NumberArray(input);\n    }\n\n    toString(): string {\n        return JSON.stringify(this.values);\n    }\n\n    static interpolate(from: NumberArray, to: NumberArray, t: number): NumberArray {\n        return new NumberArray(interpolateArray(from.values, to.values, t));\n    }\n}\n","import {Color, InterpolationColorSpace} from './color';\n\n/**\n * An array of colors. Create instances from\n * bare arrays or strings using the static method `ColorArray.parse`.\n * @private\n */\nexport class ColorArray {\n    values: Color[];\n\n    constructor(values: Color[]) {\n        this.values = values.slice();\n    }\n\n    /**\n     * ColorArray values\n     * @param input A ColorArray value\n     * @returns A `ColorArray` instance, or `undefined` if the input is not a valid ColorArray value.\n     */\n    static parse(input?: string | string[] | ColorArray | null): ColorArray | undefined {\n        if (input instanceof ColorArray) {\n            return input;\n        }\n\n        // Backwards compatibility (e.g. hillshade-shadow-color): bare Color is treated the same as array with single value.\n        if (typeof input === 'string') {\n            const parsed_val = Color.parse(input);\n            if (!parsed_val) {\n                return undefined;\n            }\n            return new ColorArray([parsed_val]);\n        }\n\n        if (!Array.isArray(input)) {\n            return undefined;\n        }\n\n        const colors: Color[] = [];\n\n        for (const val of input) {\n            if (typeof val !== 'string') {\n                return undefined;\n            }\n            const parsed_val = Color.parse(val);\n            if (!parsed_val) {\n                return undefined;\n            }\n            colors.push(parsed_val);\n        }\n\n        return new ColorArray(colors);\n    }\n\n    toString(): string {\n        return JSON.stringify(this.values);\n    }\n\n    static interpolate(\n        from: ColorArray,\n        to: ColorArray,\n        t: number,\n        spaceKey: InterpolationColorSpace = 'rgb'\n    ): ColorArray {\n        const colors = [] as Color[];\n        if (from.values.length != to.values.length) {\n            throw new Error(\n                `colorArray: Arrays have mismatched length (${from.values.length} vs. ${to.values.length}), cannot interpolate.`\n            );\n        }\n        for (let i = 0; i < from.values.length; i++) {\n            colors.push(Color.interpolate(from.values[i], to.values[i], t, spaceKey));\n        }\n        return new ColorArray(colors);\n    }\n}\n","export class RuntimeError extends Error {\n    constructor(message: string) {\n        super(message);\n        this.name = 'RuntimeError';\n    }\n\n    toJSON() {\n        return this.message;\n    }\n}\n","import {RuntimeError} from '../runtime_error';\nimport {interpolateNumber} from '../../util/interpolate-primitives';\nimport type {VariableAnchorOffsetCollectionSpecification} from '../../types.g';\n\n/** Set of valid anchor positions, as a set for validation */\nconst anchors = new Set([\n    'center',\n    'left',\n    'right',\n    'top',\n    'bottom',\n    'top-left',\n    'top-right',\n    'bottom-left',\n    'bottom-right'\n]);\n\n/**\n * Utility class to assist managing values for text-variable-anchor-offset property. Create instances from\n * bare arrays using the static method `VariableAnchorOffsetCollection.parse`.\n * @private\n */\nexport class VariableAnchorOffsetCollection {\n    /** Series of paired of anchor (string) and offset (point) values */\n    values: VariableAnchorOffsetCollectionSpecification;\n\n    constructor(values: VariableAnchorOffsetCollectionSpecification) {\n        this.values = values.slice();\n    }\n\n    static parse(\n        input?: VariableAnchorOffsetCollectionSpecification | VariableAnchorOffsetCollection\n    ): VariableAnchorOffsetCollection | undefined {\n        if (input instanceof VariableAnchorOffsetCollection) {\n            return input;\n        }\n\n        if (!Array.isArray(input) || input.length < 1 || input.length % 2 !== 0) {\n            return undefined;\n        }\n\n        for (let i = 0; i < input.length; i += 2) {\n            // Elements in even positions should be anchor positions; Elements in odd positions should be offset values\n            const anchorValue = input[i];\n            const offsetValue = input[i + 1];\n\n            if (typeof anchorValue !== 'string' || !anchors.has(anchorValue)) {\n                return undefined;\n            }\n\n            if (\n                !Array.isArray(offsetValue) ||\n                offsetValue.length !== 2 ||\n                typeof offsetValue[0] !== 'number' ||\n                typeof offsetValue[1] !== 'number'\n            ) {\n                return undefined;\n            }\n        }\n\n        return new VariableAnchorOffsetCollection(input);\n    }\n\n    toString(): string {\n        return JSON.stringify(this.values);\n    }\n\n    static interpolate(\n        from: VariableAnchorOffsetCollection,\n        to: VariableAnchorOffsetCollection,\n        t: number\n    ): VariableAnchorOffsetCollection {\n        const fromValues = from.values;\n        const toValues = to.values;\n\n        if (fromValues.length !== toValues.length) {\n            throw new RuntimeError(\n                `Cannot interpolate values of different length. from: ${from.toString()}, to: ${to.toString()}`\n            );\n        }\n\n        const output: VariableAnchorOffsetCollectionSpecification = [];\n\n        for (let i = 0; i < fromValues.length; i += 2) {\n            // Anchor entries must match\n            if (fromValues[i] !== toValues[i]) {\n                throw new RuntimeError(\n                    `Cannot interpolate values containing mismatched anchors. from[${i}]: ${fromValues[i]}, to[${i}]: ${toValues[i]}`\n                );\n            }\n            output.push(fromValues[i]);\n\n            // Interpolate the offset values for each anchor\n            const [fx, fy] = fromValues[i + 1] as [number, number];\n            const [tx, ty] = toValues[i + 1] as [number, number];\n            output.push([interpolateNumber(fx, tx, t), interpolateNumber(fy, ty, t)]);\n        }\n\n        return new VariableAnchorOffsetCollection(output);\n    }\n}\n","export type ResolvedImageOptions = {\n    name: string;\n    available: boolean;\n};\n\nexport 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","export class ProjectionDefinition {\n    readonly from: string;\n    readonly to: string;\n    readonly transition: number;\n\n    constructor(from: string, to: string, transition: number) {\n        this.from = from;\n        this.to = to;\n        this.transition = transition;\n    }\n\n    static interpolate(from: string, to: string, t: number) {\n        return new ProjectionDefinition(from, to, t);\n    }\n\n    static parse(input?: any): ProjectionDefinition {\n        if (input instanceof ProjectionDefinition) {\n            return input;\n        }\n        if (\n            Array.isArray(input) &&\n            input.length === 3 &&\n            typeof input[0] === 'string' &&\n            typeof input[1] === 'string' &&\n            typeof input[2] === 'number'\n        ) {\n            return new ProjectionDefinition(input[0], input[1], input[2]);\n        }\n\n        if (\n            typeof input === 'object' &&\n            typeof input.from === 'string' &&\n            typeof input.to === 'string' &&\n            typeof input.transition === 'number'\n        ) {\n            return new ProjectionDefinition(input.from, input.to, input.transition);\n        }\n\n        if (typeof input === 'string') {\n            return new ProjectionDefinition(input, input, 1);\n        }\n        return undefined;\n    }\n}\n","import {Color} from './types/color';\nimport {Collator} from './types/collator';\nimport {Formatted} from './types/formatted';\nimport {Padding} from './types/padding';\nimport {NumberArray} from './types/number_array';\nimport {ColorArray} from './types/color_array';\nimport {VariableAnchorOffsetCollection} from './types/variable_anchor_offset_collection';\nimport {ResolvedImage} from './types/resolved_image';\nimport {ProjectionDefinition} from './types/projection_definition';\nimport {\n    NullType,\n    NumberType,\n    StringType,\n    BooleanType,\n    ColorType,\n    ObjectType,\n    ValueType,\n    CollatorType,\n    FormattedType,\n    ResolvedImageType,\n    array,\n    PaddingType,\n    NumberArrayType,\n    ColorArrayType,\n    VariableAnchorOffsetCollectionType,\n    ProjectionDefinitionType\n} from './types';\n\nimport type {Type} from './types';\n\nexport function validateRGBA(r: unknown, g: unknown, b: unknown, a?: unknown): string | null {\n    if (\n        !(\n            typeof r === 'number' &&\n            r >= 0 &&\n            r <= 255 &&\n            typeof g === 'number' &&\n            g >= 0 &&\n            g <= 255 &&\n            typeof b === 'number' &&\n            b >= 0 &&\n            b <= 255\n        )\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 (!(typeof a === 'undefined' || (typeof a === 'number' && a >= 0 && a <= 1))) {\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 =\n    | null\n    | string\n    | boolean\n    | number\n    | Color\n    | ProjectionDefinition\n    | Collator\n    | Formatted\n    | Padding\n    | NumberArray\n    | ColorArray\n    | ResolvedImage\n    | VariableAnchorOffsetCollection\n    | ReadonlyArray<Value>\n    | {\n          readonly [x: string]: Value;\n      };\n\nexport function isValue(mixed: unknown): boolean {\n    if (\n        mixed === null ||\n        typeof mixed === 'string' ||\n        typeof mixed === 'boolean' ||\n        typeof mixed === 'number' ||\n        mixed instanceof ProjectionDefinition ||\n        mixed instanceof Color ||\n        mixed instanceof Collator ||\n        mixed instanceof Formatted ||\n        mixed instanceof Padding ||\n        mixed instanceof NumberArray ||\n        mixed instanceof ColorArray ||\n        mixed instanceof VariableAnchorOffsetCollection ||\n        mixed instanceof ResolvedImage\n    ) {\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 ProjectionDefinition) {\n        return ProjectionDefinitionType;\n    } else if (value instanceof Collator) {\n        return CollatorType;\n    } else if (value instanceof Formatted) {\n        return FormattedType;\n    } else if (value instanceof Padding) {\n        return PaddingType;\n    } else if (value instanceof NumberArray) {\n        return NumberArrayType;\n    } else if (value instanceof ColorArray) {\n        return ColorArrayType;\n    } else if (value instanceof VariableAnchorOffsetCollection) {\n        return VariableAnchorOffsetCollectionType;\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        return ObjectType;\n    }\n}\n\nexport function valueToString(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 (\n        value instanceof Color ||\n        value instanceof ProjectionDefinition ||\n        value instanceof Formatted ||\n        value instanceof Padding ||\n        value instanceof NumberArray ||\n        value instanceof ColorArray ||\n        value instanceof VariableAnchorOffsetCollection ||\n        value instanceof ResolvedImage\n    ) {\n        return value.toString();\n    } else {\n        return JSON.stringify(value);\n    }\n}\n","import {isValue, typeOf} from '../values';\n\nimport type {Type} from '../types';\nimport type {Value} from '../values';\nimport type {Expression} from '../expression';\nimport type {ParsingContext} from '../parsing_context';\n\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2)\n            return context.error(\n                `'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`\n            ) as null;\n\n        if (!isValue(args[1])) return context.error('invalid value') as null;\n\n        const value = args[1] as 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","import {\n    ObjectType,\n    ValueType,\n    StringType,\n    NumberType,\n    BooleanType,\n    checkSubtype,\n    typeToString,\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\nexport class Assertion implements Expression {\n    type: Type;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length < 2) return context.error('Expected at least one argument.') as null;\n\n        let i = 1;\n        let type;\n\n        const name: string = args[0] as 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(\n                        'The item type argument of \"array\" must be one of string, number, boolean',\n                        1\n                    ) as null;\n                itemType = types[type];\n                i++;\n            } else {\n                itemType = ValueType;\n            }\n\n            let N;\n            if (args.length > 3) {\n                if (\n                    args[2] !== null &&\n                    (typeof args[2] !== 'number' || args[2] < 0 || args[2] !== Math.floor(args[2]))\n                ) {\n                    return context.error(\n                        'The length argument to \"array\" must be a positive integer literal',\n                        2\n                    ) as null;\n                }\n                N = args[2];\n                i++;\n            }\n\n            type = array(itemType, N);\n        } else {\n            if (!types[name]) throw new Error(`Types doesn't contain 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(\n                    `Expected value to be of type ${typeToString(this.type)}, but found ${typeToString(typeOf(value))} instead.`\n                );\n            }\n        }\n\n        throw new Error();\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","import {BooleanType, ColorType, NumberType, StringType, ValueType} from '../types';\nimport {valueToString, validateRGBA} from '../values';\nimport {RuntimeError} from '../runtime_error';\nimport {Formatted} from '../types/formatted';\nimport {ResolvedImage} from '../types/resolved_image';\nimport {Color} from '../types/color';\nimport {Padding} from '../types/padding';\nimport {NumberArray} from '../types/number_array';\nimport {ColorArray} from '../types/color_array';\nimport {VariableAnchorOffsetCollection} from '../types/variable_anchor_offset_collection';\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 */\nexport class Coercion implements Expression {\n    type: Type;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length < 2) return context.error('Expected at least one argument.') as null;\n\n        const name: string = args[0] as any;\n        if (!types[name])\n            throw new Error(`Can't parse ${name} as it is not part of the known types`);\n        if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2)\n            return context.error('Expected one argument.') as null;\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        switch (this.type.kind) {\n            case 'boolean':\n                return Boolean(this.args[0].evaluate(ctx));\n            case '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 rgba 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(\n                                (input[0] as any) / 255,\n                                (input[1] as any) / 255,\n                                (input[2] as any) / 255,\n                                input[3] as any\n                            );\n                        }\n                    }\n                }\n                throw new RuntimeError(\n                    error ||\n                        `Could not parse color from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`\n                );\n            }\n            case 'padding': {\n                let input;\n                for (const arg of this.args) {\n                    input = arg.evaluate(ctx);\n\n                    const pad = Padding.parse(input);\n                    if (pad) {\n                        return pad;\n                    }\n                }\n                throw new RuntimeError(\n                    `Could not parse padding from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`\n                );\n            }\n            case 'numberArray': {\n                let input;\n                for (const arg of this.args) {\n                    input = arg.evaluate(ctx);\n\n                    const val = NumberArray.parse(input);\n                    if (val) {\n                        return val;\n                    }\n                }\n                throw new RuntimeError(\n                    `Could not parse numberArray from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`\n                );\n            }\n            case 'colorArray': {\n                let input;\n                for (const arg of this.args) {\n                    input = arg.evaluate(ctx);\n\n                    const val = ColorArray.parse(input);\n                    if (val) {\n                        return val;\n                    }\n                }\n                throw new RuntimeError(\n                    `Could not parse colorArray from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`\n                );\n            }\n            case 'variableAnchorOffsetCollection': {\n                let input;\n                for (const arg of this.args) {\n                    input = arg.evaluate(ctx);\n\n                    const coll = VariableAnchorOffsetCollection.parse(input);\n                    if (coll) {\n                        return coll;\n                    }\n                }\n                throw new RuntimeError(\n                    `Could not parse variableAnchorOffsetCollection from value '${typeof input === 'string' ? input : JSON.stringify(input)}'`\n                );\n            }\n            case '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            }\n            case '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            case 'resolvedImage':\n                return ResolvedImage.fromString(valueToString(this.args[0].evaluate(ctx)));\n            case 'projectionDefinition':\n                return this.args[0].evaluate(ctx);\n            default:\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","import type {FormattedSection} from './types/formatted';\nimport type {GlobalProperties, Feature, FeatureState} from './index';\nimport {ICanonicalTileID} from '../tiles_and_coordinates';\nimport {Color} from './types/color';\n\nconst geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon'];\n\nexport class EvaluationContext {\n    globals: GlobalProperties;\n    feature: Feature;\n    featureState: FeatureState;\n    formattedSection: FormattedSection;\n    availableImages: Array<string>;\n    canonical: ICanonicalTileID;\n\n    _parseColorCache: Map<string, Color>;\n\n    constructor() {\n        this.globals = null;\n        this.feature = null;\n        this.featureState = null;\n        this.formattedSection = null;\n        this._parseColorCache = new Map<string, Color>();\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\n            ? typeof this.feature.type === 'number'\n                ? geometryTypes[this.feature.type]\n                : this.feature.type\n            : 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.get(input);\n        if (!cached) {\n            cached = Color.parse(input);\n            this._parseColorCache.set(input, cached);\n        }\n        return cached;\n    }\n}\n","import {Scope} from './scope';\nimport {checkSubtype} from './types';\nimport {ExpressionParsingError} from './parsing_error';\nimport {Literal} from './definitions/literal';\nimport {Assertion} from './definitions/assertion';\nimport {Coercion} from './definitions/coercion';\nimport {EvaluationContext} from './evaluation_context';\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 */\nexport class ParsingContext {\n    registry: ExpressionRegistry;\n    path: Array<number>;\n    key: string;\n    scope: Scope;\n    errors: Array<ExpressionParsingError>;\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    /**\n     * Internal delegate to inConstant function to avoid circular dependency to CompoundExpression\n     */\n    private _isConstant: (expression: Expression) => boolean;\n\n    constructor(\n        registry: ExpressionRegistry,\n        isConstantFunc: (expression: Expression) => boolean,\n        path: Array<number> = [],\n        expectedType?: Type | null,\n        scope: Scope = new Scope(),\n        errors: Array<ExpressionParsingError> = []\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        this._isConstant = isConstantFunc;\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: unknown,\n        index?: number,\n        expectedType?: Type | null,\n        bindings?: Array<[string, Expression]>,\n        options: {\n            typeAnnotation?: 'assert' | 'coerce' | 'omit';\n        } = {}\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(\n        expr: unknown,\n        options: {\n            typeAnnotation?: 'assert' | 'coerce' | 'omit';\n        }\n    ): Expression {\n        if (\n            expr === null ||\n            typeof expr === 'string' ||\n            typeof expr === 'boolean' ||\n            typeof expr === 'number'\n        ) {\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(\n                    'Expected an array with at least one element. If you wanted a literal array, use [\"literal\", []].'\n                ) as null;\n            }\n\n            const op = expr[0];\n            if (typeof op !== 'string') {\n                this.error(\n                    `Expression name must be a string, but found ${typeof op} instead. If you wanted a literal array, use [\"literal\", [...]].`,\n                    0\n                );\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 (\n                        (expected.kind === 'string' ||\n                            expected.kind === 'number' ||\n                            expected.kind === 'boolean' ||\n                            expected.kind === 'object' ||\n                            expected.kind === 'array') &&\n                        actual.kind === 'value'\n                    ) {\n                        parsed = annotate(parsed, expected, options.typeAnnotation || 'assert');\n                    } else if (\n                        ('projectionDefinition' === expected.kind &&\n                            ['string', 'array'].includes(actual.kind)) ||\n                        (['color', 'formatted', 'resolvedImage'].includes(expected.kind) &&\n                            ['value', 'string'].includes(actual.kind)) ||\n                        (['padding', 'numberArray'].includes(expected.kind) &&\n                            ['value', 'number', 'array'].includes(actual.kind)) ||\n                        ('colorArray' === expected.kind &&\n                            ['value', 'string', 'array'].includes(actual.kind)) ||\n                        ('variableAnchorOffsetCollection' === expected.kind &&\n                            ['value', 'array'].includes(actual.kind))\n                    ) {\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 (\n                    !(parsed instanceof Literal) &&\n                    parsed.type.kind !== 'resolvedImage' &&\n                    this._isConstant(parsed)\n                ) {\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(\n                `Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`,\n                0\n            ) as null;\n        } else if (typeof expr === 'undefined') {\n            return this.error(\"'undefined' value invalid. Use null instead.\") as null;\n        } else if (typeof expr === 'object') {\n            return this.error('Bare objects invalid. Use [\"literal\", {...}] instead.') as null;\n        } else {\n            return this.error(`Expected an array, but found ${typeof expr} instead.`) as null;\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 | null, 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            this._isConstant,\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<number>) {\n        const key = `${this.key}${keys.map((k) => `[${k}]`).join('')}`;\n        this.errors.push(new ExpressionParsingError(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     * @param expected The expected type\n     * @param t The actual type\n     * @returns null if `t` is a subtype of `expected`; otherwise returns an error message\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","import type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type {ParsingContext} from '../parsing_context';\nimport type {EvaluationContext} from '../evaluation_context';\n\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length < 4)\n            return context.error(\n                `Expected at least 3 arguments, but found ${args.length - 1} instead.`\n            ) as null;\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(\n                    `Expected string, but found ${typeof name} instead.`,\n                    i\n                ) as null;\n            }\n\n            if (/[^a-zA-Z0-9_]/.test(name)) {\n                return context.error(\n                    \"Variable names must contain only alphanumeric characters or '_'.\",\n                    i\n                ) as null;\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(\n            args[args.length - 1],\n            args.length - 1,\n            context.expectedType,\n            bindings\n        );\n        if (!result) return null;\n\n        return new Let(bindings, result);\n    }\n\n    outputDefined() {\n        return this.result.outputDefined();\n    }\n}\n","import type {Type} from '../types';\nimport type {Expression} from '../expression';\nimport type {ParsingContext} from '../parsing_context';\nimport type {EvaluationContext} from '../evaluation_context';\n\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2 || typeof args[1] !== 'string')\n            return context.error(\n                \"'var' expression requires exactly one string literal argument.\"\n            ) as null;\n\n        const name = args[1];\n        if (!context.scope.has(name)) {\n            return context.error(\n                `Unknown variable \"${name}\". Make sure \"${name}\" has been bound in an enclosing \"let\" expression before using it.`,\n                1\n            ) as null;\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","import {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\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 3)\n            return context.error(\n                `Expected 2 arguments, but found ${args.length - 1} instead.`\n            ) as null;\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 as any;\n        return new At(t.itemType, index, input);\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        const index = this.index.evaluate(ctx) as any as number;\n        const array = this.input.evaluate(ctx) as any as Array<Value>;\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","import {\n    BooleanType,\n    StringType,\n    ValueType,\n    NullType,\n    typeToString,\n    NumberType,\n    isValidType,\n    isValidNativeType\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\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 3) {\n            return context.error(\n                `Expected 2 arguments, but found ${args.length - 1} instead.`\n            ) as null;\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(\n                `Expected first argument to be of type boolean, string, number or null, but found ${typeToString(needle.type)} instead`\n            ) as null;\n        }\n\n        return new In(needle, haystack);\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        const needle = this.needle.evaluate(ctx) as any;\n        const haystack = this.haystack.evaluate(ctx) as any;\n\n        if (!haystack) return false;\n\n        if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) {\n            throw new RuntimeError(\n                `Expected first argument to be of type boolean, string, number or null, but found ${typeToString(typeOf(needle))} instead.`\n            );\n        }\n\n        if (!isValidNativeType(haystack, ['string', 'array'])) {\n            throw new RuntimeError(\n                `Expected second argument to be of type array or string, but found ${typeToString(typeOf(haystack))} instead.`\n            );\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","import {\n    BooleanType,\n    StringType,\n    ValueType,\n    NullType,\n    typeToString,\n    NumberType,\n    isValidType,\n    isValidNativeType\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\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length <= 2 || args.length >= 5) {\n            return context.error(\n                `Expected 2 or 3 arguments, but found ${args.length - 1} instead.`\n            ) as null;\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(\n                `Expected first argument to be of type boolean, string, number or null, but found ${typeToString(needle.type)} instead`\n            ) as null;\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) as any;\n        const haystack = this.haystack.evaluate(ctx) as any;\n\n        if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) {\n            throw new RuntimeError(\n                `Expected first argument to be of type boolean, string, number or null, but found ${typeToString(typeOf(needle))} instead.`\n            );\n        }\n\n        let fromIndex;\n        if (this.fromIndex) {\n            fromIndex = this.fromIndex.evaluate(ctx) as number;\n        }\n\n        if (isValidNativeType(haystack, ['string'])) {\n            const rawIndex = haystack.indexOf(needle, fromIndex);\n            if (rawIndex === -1) {\n                return -1;\n            } else {\n                // The index may be affected by surrogate pairs, so get the length of the preceding substring.\n                return [...haystack.slice(0, rawIndex)].length;\n            }\n        } else if (isValidNativeType(haystack, ['array'])) {\n            return haystack.indexOf(needle, fromIndex);\n        } else {\n            throw new RuntimeError(\n                `Expected second argument to be of type array or string, but found ${typeToString(typeOf(haystack))} instead.`\n            );\n        }\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","import {typeOf} from '../values';\nimport {ValueType} from '../types';\n\nimport 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 = {\n    [k in number | string]: number;\n};\n\nexport class Match implements Expression {\n    type: Type;\n    inputType: Type;\n\n    input: Expression;\n    cases: Cases;\n    outputs: Array<Expression>;\n    otherwise: Expression;\n\n    constructor(\n        inputType: Type,\n        outputType: Type,\n        input: Expression,\n        cases: Cases,\n        outputs: Array<Expression>,\n        otherwise: Expression\n    ) {\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<unknown>, context: ParsingContext): Expression {\n        if (args.length < 5)\n            return context.error(\n                `Expected at least 4 arguments, but found only ${args.length - 1}.`\n            ) as null;\n        if (args.length % 2 !== 1)\n            return context.error('Expected an even number of arguments.') as null;\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] as unknown[];\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.') as null;\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.') as null;\n                } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) {\n                    return labelContext.error(\n                        `Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`\n                    ) as null;\n                } else if (typeof label === 'number' && Math.floor(label) !== label) {\n                    return labelContext.error(\n                        'Numeric branch labels must be integer values.'\n                    ) as null;\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.') as null;\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        if (\n            input.type.kind !== 'value' &&\n            context.concat(1).checkSubtype(inputType as any, input.type)\n        ) {\n            return null;\n        }\n\n        return new Match(inputType as any, outputType as any, input, cases, outputs, otherwise);\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        const input = this.input.evaluate(ctx) as any;\n        const output =\n            (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","import {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\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length < 4)\n            return context.error(\n                `Expected at least 3 arguments, but found only ${args.length - 1}.`\n            ) as null;\n        if (args.length % 2 !== 0)\n            return context.error('Expected an odd number of arguments.') as null;\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        if (!outputType) throw new Error(\"Can't infer output type\");\n        return new Case(outputType as 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 (\n            this.branches.every(([_, out]) => out.outputDefined()) && this.otherwise.outputDefined()\n        );\n    }\n}\n","import {\n    ValueType,\n    NumberType,\n    StringType,\n    array,\n    typeToString,\n    isValidType,\n    isValidNativeType\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\nexport class 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    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length <= 2 || args.length >= 5) {\n            return context.error(\n                `Expected 2 or 3 arguments, but found ${args.length - 1} instead.`\n            ) as null;\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(\n                `Expected first argument to be of type array or string, but found ${typeToString(input.type)} instead`\n            ) as null;\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) as any;\n        const beginIndex = this.beginIndex.evaluate(ctx) as number;\n\n        let endIndex;\n        if (this.endIndex) {\n            endIndex = this.endIndex.evaluate(ctx) as number;\n        }\n\n        if (isValidNativeType(input, ['string'])) {\n            // Indices may be affected by surrogate pairs.\n            return [...input].slice(beginIndex, endIndex).join('');\n        } else if (isValidNativeType(input, ['array'])) {\n            return input.slice(beginIndex, endIndex);\n        } else {\n            throw new RuntimeError(\n                `Expected first argument to be of type array or string, but found ${typeToString(typeOf(input))} instead.`\n            );\n        }\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","import {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<number>, 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) {\n                // 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","import {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\nexport class Step implements Expression {\n    type: Type;\n\n    input: Expression;\n    labels: Array<number>;\n    outputs: Array<Expression>;\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<unknown>, context: ParsingContext): Expression {\n        if (args.length - 1 < 4) {\n            return context.error(\n                `Expected at least 4 arguments, but found only ${args.length - 1}.`\n            ) as null;\n        }\n\n        if ((args.length - 1) % 2 !== 0) {\n            return context.error('Expected an even number of arguments.') as null;\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;\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(\n                    'Input/output pairs for \"step\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',\n                    labelKey\n                ) as null;\n            }\n\n            if (stops.length && stops[stops.length - 1][0] >= label) {\n                return context.error(\n                    'Input/output pairs for \"step\" expressions must be arranged with input values in strictly ascending order.',\n                    labelKey\n                ) as null;\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) as any as 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","'use strict';\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 = p1y;\n    this.p2x = p2x;\n    this.p2y = p2y;\n}\n\nUnitBezier.prototype = {\n    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\n    sampleCurveY: function (t) {\n        return ((this.ay * t + this.by) * t + this.cy) * t;\n    },\n\n    sampleCurveDerivativeX: function (t) {\n        return (3.0 * this.ax * t + 2.0 * this.bx) * t + this.cx;\n    },\n\n    solveCurveX: function (x, epsilon) {\n        if (epsilon === undefined) epsilon = 1e-6;\n\n        if (x < 0.0) return 0.0;\n        if (x > 1.0) return 1.0;\n\n        var t = x;\n\n        // First try a few iterations of Newton's method - normally very fast.\n        for (var i = 0; i < 8; i++) {\n            var x2 = this.sampleCurveX(t) - x;\n            if (Math.abs(x2) < epsilon) return t;\n\n            var d2 = this.sampleCurveDerivativeX(t);\n            if (Math.abs(d2) < 1e-6) break;\n\n            t = t - x2 / d2;\n        }\n\n        // Fall back to the bisection method for reliability.\n        var t0 = 0.0;\n        var t1 = 1.0;\n        t = x;\n\n        for (i = 0; i < 20; i++) {\n            x2 = this.sampleCurveX(t);\n            if (Math.abs(x2 - x) < epsilon) break;\n\n            if (x > x2) {\n                t0 = t;\n            } else {\n                t1 = t;\n            }\n\n            t = (t1 - t0) * 0.5 + t0;\n        }\n\n        return t;\n    },\n\n    solve: function (x, epsilon) {\n        return this.sampleCurveY(this.solveCurveX(x, epsilon));\n    }\n};\n","import UnitBezier from '@mapbox/unitbezier';\n\nimport {\n    array,\n    ArrayType,\n    ColorType,\n    ColorTypeT,\n    NumberType,\n    NumberTypeT,\n    PaddingType,\n    PaddingTypeT,\n    NumberArrayTypeT,\n    ColorArrayTypeT,\n    VariableAnchorOffsetCollectionType,\n    VariableAnchorOffsetCollectionTypeT,\n    typeToString,\n    verifyType,\n    ProjectionDefinitionType,\n    ColorArrayType,\n    NumberArrayType\n} from '../types';\nimport {findStopLessThanOrEqualTo} from '../stops';\nimport {Color} from '../types/color';\nimport {interpolateArray, interpolateNumber} from '../../util/interpolate-primitives';\nimport {Padding} from '../types/padding';\nimport {ColorArray} from '../types/color_array';\nimport {NumberArray} from '../types/number_array';\nimport {VariableAnchorOffsetCollection} from '../types/variable_anchor_offset_collection';\nimport {ProjectionDefinition} from '../types/projection_definition';\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 {ProjectionDefinitionTypeT, Type} from '../types';\n\nexport type InterpolationType =\n    | {\n          name: 'linear';\n      }\n    | {\n          name: 'exponential';\n          base: number;\n      }\n    | {\n          name: 'cubic-bezier';\n          controlPoints: [number, number, number, number];\n      };\ntype InterpolatedValueType =\n    | NumberTypeT\n    | ColorTypeT\n    | ProjectionDefinitionTypeT\n    | PaddingTypeT\n    | NumberArrayTypeT\n    | ColorArrayTypeT\n    | VariableAnchorOffsetCollectionTypeT\n    | ArrayType<NumberTypeT>;\nexport class Interpolate implements Expression {\n    type: InterpolatedValueType;\n\n    operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab';\n    interpolation: InterpolationType;\n    input: Expression;\n    labels: Array<number>;\n    outputs: Array<Expression>;\n\n    constructor(\n        type: InterpolatedValueType,\n        operator: 'interpolate' | 'interpolate-hcl' | 'interpolate-lab',\n        interpolation: InterpolationType,\n        input: Expression,\n        stops: Stops\n    ) {\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(\n        interpolation: InterpolationType,\n        input: number,\n        lower: number,\n        upper: number\n    ) {\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<unknown>, context: ParsingContext): Expression {\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) as null;\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(\n                    'Exponential interpolation requires a numeric base.',\n                    1,\n                    1\n                ) as null;\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(\n                    'Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.',\n                    1\n                ) as null;\n            }\n\n            interpolation = {\n                name: 'cubic-bezier',\n                controlPoints: controlPoints as any\n            };\n        } else {\n            return context.error(\n                `Unknown interpolation type ${String(interpolation[0])}`,\n                1,\n                0\n            ) as null;\n        }\n\n        if (args.length - 1 < 4) {\n            return context.error(\n                `Expected at least 4 arguments, but found only ${args.length - 1}.`\n            ) as null;\n        }\n\n        if ((args.length - 1) % 2 !== 0) {\n            return context.error('Expected an even number of arguments.') as null;\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;\n        if (\n            (operator === 'interpolate-hcl' || operator === 'interpolate-lab') &&\n            context.expectedType != ColorArrayType\n        ) {\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(\n                    'Input/output pairs for \"interpolate\" expressions must be defined using literal numeric values (not computed expressions) for the input values.',\n                    labelKey\n                ) as null;\n            }\n\n            if (stops.length && stops[stops.length - 1][0] >= label) {\n                return context.error(\n                    'Input/output pairs for \"interpolate\" expressions must be arranged with input values in strictly ascending order.',\n                    labelKey\n                ) as null;\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 (\n            !verifyType(outputType, NumberType) &&\n            !verifyType(outputType, ProjectionDefinitionType) &&\n            !verifyType(outputType, ColorType) &&\n            !verifyType(outputType, PaddingType) &&\n            !verifyType(outputType, NumberArrayType) &&\n            !verifyType(outputType, ColorArrayType) &&\n            !verifyType(outputType, VariableAnchorOffsetCollectionType) &&\n            !verifyType(outputType, array(NumberType))\n        ) {\n            return context.error(`Type ${typeToString(outputType)} is not interpolatable.`) as null;\n        }\n\n        return new Interpolate(\n            outputType,\n            operator as any,\n            interpolation as InterpolationType,\n            input as Expression,\n            stops\n        );\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: number = this.input.evaluate(ctx);\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        switch (this.operator) {\n            case 'interpolate':\n                switch (this.type.kind) {\n                    case 'number':\n                        return interpolateNumber(outputLower, outputUpper, t);\n                    case 'color':\n                        return Color.interpolate(outputLower, outputUpper, t);\n                    case 'padding':\n                        return Padding.interpolate(outputLower, outputUpper, t);\n                    case 'colorArray':\n                        return ColorArray.interpolate(outputLower, outputUpper, t);\n                    case 'numberArray':\n                        return NumberArray.interpolate(outputLower, outputUpper, t);\n                    case 'variableAnchorOffsetCollection':\n                        return VariableAnchorOffsetCollection.interpolate(\n                            outputLower,\n                            outputUpper,\n                            t\n                        );\n                    case 'array':\n                        return interpolateArray(outputLower, outputUpper, t);\n                    case 'projectionDefinition':\n                        return ProjectionDefinition.interpolate(outputLower, outputUpper, t);\n                }\n            case 'interpolate-hcl':\n                switch (this.type.kind) {\n                    case 'color':\n                        return Color.interpolate(outputLower, outputUpper, t, 'hcl');\n                    case 'colorArray':\n                        return ColorArray.interpolate(outputLower, outputUpper, t, 'hcl');\n                }\n            case 'interpolate-lab':\n                switch (this.type.kind) {\n                    case 'color':\n                        return Color.interpolate(outputLower, outputUpper, t, 'lab');\n                    case 'colorArray':\n                        return ColorArray.interpolate(outputLower, outputUpper, t, 'lab');\n                }\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\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 const interpolateFactory = {\n    color: Color.interpolate,\n    number: interpolateNumber,\n    padding: Padding.interpolate,\n    numberArray: NumberArray.interpolate,\n    colorArray: ColorArray.interpolate,\n    variableAnchorOffsetCollection: VariableAnchorOffsetCollection.interpolate,\n    array: interpolateArray\n};\n","import {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\nexport class Coalesce implements Expression {\n    type: Type;\n    args: Array<Expression>;\n\n    constructor(type: Type, args: Array<Expression>) {\n        this.type = type;\n        this.args = args;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length < 2) {\n            return context.error('Expected at least one argument.') as null;\n        }\n        let outputType: Type = null;\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, {\n                typeAnnotation: 'omit'\n            });\n            if (!parsed) return null;\n            outputType = outputType || parsed.type;\n            parsedArgs.push(parsed);\n        }\n        if (!outputType) throw new Error('No output type');\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 =\n            expectedType && parsedArgs.some((arg) => checkSubtype(expectedType, arg.type));\n\n        return needsAnnotation\n            ? new Coalesce(ValueType, parsedArgs)\n            : new Coalesce(outputType as 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","import {typeToString, 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 (\n            type.kind === 'boolean' ||\n            type.kind === 'string' ||\n            type.kind === 'number' ||\n            type.kind === 'null' ||\n            type.kind === 'value'\n        );\n    } else {\n        // ordering operator\n        return type.kind === 'string' || type.kind === 'number' || type.kind === 'value';\n    }\n}\n\nfunction eq(ctx, a, b) {\n    return a === b;\n}\nfunction neq(ctx, a, b) {\n    return a !== b;\n}\nfunction lt(ctx, a, b) {\n    return a < b;\n}\nfunction gt(ctx, a, b) {\n    return a > b;\n}\nfunction lteq(ctx, a, b) {\n    return a <= b;\n}\nfunction gteq(ctx, a, b) {\n    return a >= b;\n}\n\nfunction eqCollate(ctx, a, b, c) {\n    return c.compare(a, b) === 0;\n}\nfunction neqCollate(ctx, a, b, c) {\n    return !eqCollate(ctx, a, b, c);\n}\nfunction ltCollate(ctx, a, b, c) {\n    return c.compare(a, b) < 0;\n}\nfunction gtCollate(ctx, a, b, c) {\n    return c.compare(a, b) > 0;\n}\nfunction lteqCollate(ctx, a, b, c) {\n    return c.compare(a, b) <= 0;\n}\nfunction gteqCollate(ctx, a, b, c) {\n    return c.compare(a, b) >= 0;\n}\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 | null) {\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<unknown>, context: ParsingContext): Expression {\n            if (args.length !== 3 && args.length !== 4)\n                return context.error('Expected two or three arguments.') as null;\n\n            const op: ComparisonOperator = args[0] as 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\n                    .concat(1)\n                    .error(\n                        `\"${op}\" comparisons are not supported for type '${typeToString(lhs.type)}'.`\n                    ) as null;\n            }\n            let rhs = context.parse(args[2], 2, ValueType);\n            if (!rhs) return null;\n            if (!isComparableType(op, rhs.type)) {\n                return context\n                    .concat(2)\n                    .error(\n                        `\"${op}\" comparisons are not supported for type '${typeToString(rhs.type)}'.`\n                    ) as null;\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(\n                    `Cannot compare types '${typeToString(lhs.type)}' and '${typeToString(rhs.type)}'.`\n                ) as null;\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(\n                        'Cannot use collator to compare non-string types.'\n                    ) as null;\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(\n                        `Expected arguments for \"${op}\" to be (string, string) or (number, number), but found (${lt.kind}, ${rt.kind}) instead.`\n                    );\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}\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","import {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 class CollatorExpression implements Expression {\n    type: Type;\n    caseSensitive: Expression;\n    diacriticSensitive: Expression;\n    locale: Expression | null;\n\n    constructor(\n        caseSensitive: Expression,\n        diacriticSensitive: Expression,\n        locale: Expression | null\n    ) {\n        this.type = CollatorType;\n        this.locale = locale;\n        this.caseSensitive = caseSensitive;\n        this.diacriticSensitive = diacriticSensitive;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2) return context.error('Expected one argument.') as null;\n\n        const options = args[1] as any;\n        if (typeof options !== 'object' || Array.isArray(options))\n            return context.error('Collator options argument must be an object.') as null;\n\n        const caseSensitive = context.parse(\n            options['case-sensitive'] === undefined ? false : options['case-sensitive'],\n            1,\n            BooleanType\n        );\n        if (!caseSensitive) return null;\n\n        const diacriticSensitive = context.parse(\n            options['diacritic-sensitive'] === undefined ? false : options['diacritic-sensitive'],\n            1,\n            BooleanType\n        );\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(\n            this.caseSensitive.evaluate(ctx),\n            this.diacriticSensitive.evaluate(ctx),\n            this.locale ? this.locale.evaluate(ctx) : null\n        );\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","import {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\nexport class NumberFormat implements Expression {\n    type: Type;\n    number: Expression;\n    /**\n     * BCP 47 language tag\n     */\n    locale: Expression | null;\n    /**\n     * ISO 4217 currency code, required if style=currency\n     */\n    currency: Expression | null;\n    /**\n     * CLDR or ECMA-402 unit specifier, required if style=unit\n     */\n    unit: Expression | null;\n    /**\n     * @default 0\n     */\n    minFractionDigits: Expression | null;\n    /**\n     * @default 3\n     */\n    maxFractionDigits: Expression | null;\n\n    constructor(\n        number: Expression,\n        locale: Expression | null,\n        currency: Expression | null,\n        unit: Expression | null,\n        minFractionDigits: Expression | null,\n        maxFractionDigits: Expression | null\n    ) {\n        this.type = StringType;\n        this.number = number;\n        this.locale = locale;\n        this.currency = currency;\n        this.unit = unit;\n        this.minFractionDigits = minFractionDigits;\n        this.maxFractionDigits = maxFractionDigits;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 3) return context.error('Expected two arguments.') as null;\n\n        const number = context.parse(args[1], 1, NumberType);\n        if (!number) return null;\n\n        const options = args[2] as any;\n        if (typeof options !== 'object' || Array.isArray(options))\n            return context.error('NumberFormat options argument must be an object.') as 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        let currency = null;\n        if (options['currency']) {\n            currency = context.parse(options['currency'], 1, StringType);\n            if (!currency) return null;\n        }\n\n        let unit = null;\n        if (options['unit']) {\n            unit = context.parse(options['unit'], 1, StringType);\n            if (!unit) return null;\n        }\n\n        if (currency && unit) {\n            return context.error(\n                'NumberFormat options `currency` and `unit` are mutually exclusive'\n            ) as 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(\n            number,\n            locale,\n            currency,\n            unit,\n            minFractionDigits,\n            maxFractionDigits\n        );\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], {\n            style: this.currency ? 'currency' : this.unit ? 'unit' : 'decimal',\n            currency: this.currency ? this.currency.evaluate(ctx) : undefined,\n            unit: this.unit ? this.unit.evaluate(ctx) : undefined,\n            minimumFractionDigits: this.minFractionDigits\n                ? this.minFractionDigits.evaluate(ctx)\n                : undefined,\n            maximumFractionDigits: this.maxFractionDigits\n                ? this.maxFractionDigits.evaluate(ctx)\n                : 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.unit) {\n            fn(this.unit);\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","import {\n    NumberType,\n    ValueType,\n    FormattedType,\n    array,\n    StringType,\n    ColorType,\n    ResolvedImageType\n} from '../types';\nimport {\n    Formatted,\n    FormattedSection,\n    VERTICAL_ALIGN_OPTIONS,\n    VerticalAlign\n} from '../types/formatted';\nimport {valueToString, 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    verticalAlign: Expression | null;\n};\n\nexport class FormatExpression implements Expression {\n    type: Type;\n    sections: Array<FormattedSectionExpression>;\n\n    constructor(sections: Array<FormattedSectionExpression>) {\n        this.type = FormattedType;\n        this.sections = sections;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length < 2) {\n            return context.error('Expected at least one argument.') as null;\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.') as null;\n        }\n\n        const sections: Array<FormattedSectionExpression> = [];\n        let nextTokenMayBeObject = false;\n        for (let i = 1; i <= args.length - 1; ++i) {\n            const arg = args[i] as 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                let verticalAlign = null;\n                if (arg['vertical-align']) {\n                    if (\n                        typeof arg['vertical-align'] === 'string' &&\n                        !VERTICAL_ALIGN_OPTIONS.includes(arg['vertical-align'] as VerticalAlign)\n                    ) {\n                        return context.error(\n                            `'vertical-align' must be one of: 'bottom', 'center', 'top' but found '${arg['vertical-align']}' instead.`\n                        ) as null;\n                    }\n\n                    verticalAlign = context.parse(arg['vertical-align'], 1, StringType);\n                    if (!verticalAlign) return null;\n                }\n\n                const lastExpression = sections[sections.length - 1];\n                lastExpression.scale = scale;\n                lastExpression.font = font;\n                lastExpression.textColor = textColor;\n                lastExpression.verticalAlign = verticalAlign;\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 (\n                    kind !== 'string' &&\n                    kind !== 'value' &&\n                    kind !== 'null' &&\n                    kind !== 'resolvedImage'\n                )\n                    return context.error(\n                        \"Formatted text type must be 'string', 'value', 'image' or 'null'.\"\n                    ) as null;\n\n                nextTokenMayBeObject = true;\n                sections.push({\n                    content,\n                    scale: null,\n                    font: null,\n                    textColor: null,\n                    verticalAlign: null\n                });\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(\n                    '',\n                    evaluatedContent,\n                    null,\n                    null,\n                    null,\n                    section.verticalAlign ? section.verticalAlign.evaluate(ctx) : null\n                );\n            }\n\n            return new FormattedSection(\n                valueToString(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                section.verticalAlign ? section.verticalAlign.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            if (section.verticalAlign) {\n                fn(section.verticalAlign);\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","import {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 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2) {\n            return context.error('Expected two arguments.') as null;\n        }\n\n        const name = context.parse(args[1], 1, StringType);\n        if (!name) return context.error('No image name provided.') as null;\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)\n            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","import {NumberType, typeToString} 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\nexport class 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<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2)\n            return context.error(\n                `Expected 1 argument, but found ${args.length - 1} instead.`\n            ) as null;\n\n        const input = context.parse(args[1], 1);\n        if (!input) return null;\n\n        if (\n            input.type.kind !== 'array' &&\n            input.type.kind !== 'string' &&\n            input.type.kind !== 'value'\n        )\n            return context.error(\n                `Expected argument of type string or array, but found ${typeToString(input.type)} instead.`\n            ) as null;\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            // The length may be affected by surrogate pairs.\n            return [...input].length;\n        } else if (Array.isArray(input)) {\n            return input.length;\n        } else {\n            throw new RuntimeError(\n                `Expected value to be of type string or array, but found ${typeToString(typeOf(input))} instead.`\n            );\n        }\n    }\n\n    eachChild(fn: (_: Expression) => void) {\n        fn(this.input);\n    }\n\n    outputDefined() {\n        return false;\n    }\n}\n","import {ICanonicalTileID} from '../tiles_and_coordinates';\n\n// minX, minY, maxX, maxY\nexport type BBox = [number, number, number, number];\n\nexport const EXTENT = 8192;\n\nexport function getTileCoordinates(\n    p: GeoJSON.Position,\n    canonical: ICanonicalTileID\n): [number, number] {\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\nexport function getLngLatFromTileCoord(\n    coord: [number, number],\n    canonical: ICanonicalTileID\n): GeoJSON.Position {\n    const tilesAtZoom = Math.pow(2, canonical.z);\n    const x = (coord[0] / EXTENT + canonical.x) / tilesAtZoom;\n    const y = (coord[1] / EXTENT + canonical.y) / tilesAtZoom;\n    return [lngFromMercatorXfromLng(x), latFromMercatorY(y)];\n}\n\nfunction mercatorXfromLng(lng: number) {\n    return (180 + lng) / 360;\n}\n\nfunction lngFromMercatorXfromLng(mercatorX: number) {\n    return mercatorX * 360 - 180;\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 latFromMercatorY(mercatorY: number) {\n    return (360 / Math.PI) * Math.atan(Math.exp(((180 - mercatorY * 360) * Math.PI) / 180)) - 90;\n}\n\nexport function updateBBox(bbox: BBox, coord: GeoJSON.Position) {\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\nexport function 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\nexport function rayIntersect(\n    p: [number, number],\n    p1: [number, number],\n    p2: [number, number]\n): boolean {\n    return (\n        p1[1] > p[1] !== p2[1] > p[1] &&\n        p[0] < ((p2[0] - p1[0]) * (p[1] - p1[1])) / (p2[1] - p1[1]) + p1[0]\n    );\n}\n\nfunction pointOnBoundary(p: [number, number], p1: [number, number], p2: [number, number]): boolean {\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\n// a, b are end points for line segment1, c and d are end points for line segment2\nexport function segmentIntersectSegment(\n    a: [number, number],\n    b: [number, number],\n    c: [number, number],\n    d: [number, number]\n) {\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: [number, number] = [b[0] - a[0], b[1] - a[1]];\n    const vectorQ: [number, number] = [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\nexport function 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 (segmentIntersectSegment(p1, p2, ring[j], ring[j + 1])) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\n// ray casting algorithm for detecting if point is in polygon\nexport function pointWithinPolygon(\n    point: [number, number],\n    rings: [number, number][][],\n    trueIfOnBoundary = false\n) {\n    let inside = false;\n    for (const ring of rings) {\n        for (let j = 0; j < ring.length - 1; j++) {\n            if (pointOnBoundary(point, ring[j], ring[j + 1])) return trueIfOnBoundary;\n            if (rayIntersect(point, ring[j], ring[j + 1])) inside = !inside;\n        }\n    }\n    return inside;\n}\n\nexport function pointWithinPolygons(point: [number, number], polygons: [number, number][][][]) {\n    for (const polygon of polygons) {\n        if (pointWithinPolygon(point, polygon)) return true;\n    }\n    return false;\n}\n\nexport function lineStringWithinPolygon(line: [number, number][], polygon: [number, number][][]) {\n    // First, check if geometry points of line segments are all inside polygon\n    for (const point of line) {\n        if (!pointWithinPolygon(point, 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\nexport function lineStringWithinPolygons(\n    line: [number, number][],\n    polygons: [number, number][][][]\n) {\n    for (const polygon of polygons) {\n        if (lineStringWithinPolygon(line, polygon)) return true;\n    }\n    return false;\n}\n\nfunction perp(v1: [number, number], v2: [number, number]) {\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(\n    p1: [number, number],\n    p2: [number, number],\n    q1: [number, number],\n    q2: [number, number]\n) {\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","import {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 {ICanonicalTileID} from '../../tiles_and_coordinates';\nimport {\n    BBox,\n    EXTENT,\n    boxWithinBox,\n    getTileCoordinates,\n    lineStringWithinPolygon,\n    lineStringWithinPolygons,\n    pointWithinPolygon,\n    pointWithinPolygons,\n    updateBBox\n} from '../../util/geometry_util';\nimport {Point2D} from '../../point2d';\n\ntype GeoJSONPolygons = GeoJSON.Polygon | GeoJSON.MultiPolygon;\n\nfunction getTilePolygon(\n    coordinates: GeoJSON.Position[][],\n    bbox: BBox,\n    canonical: ICanonicalTileID\n) {\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(\n    coordinates: GeoJSON.Position[][][],\n    bbox: BBox,\n    canonical: ICanonicalTileID\n) {\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: GeoJSON.Position, bbox: BBox, polyBBox: BBox, worldSize: number) {\n    if (p[0] < polyBBox[0] || p[0] > polyBBox[2]) {\n        const halfWorldSize = worldSize * 0.5;\n        let shift =\n            p[0] - polyBBox[0] > halfWorldSize\n                ? -worldSize\n                : polyBBox[0] - p[0] > halfWorldSize\n                  ? worldSize\n                  : 0;\n        if (shift === 0) {\n            shift =\n                p[0] - polyBBox[2] > halfWorldSize\n                    ? -worldSize\n                    : polyBBox[2] - p[0] > halfWorldSize\n                      ? worldSize\n                      : 0;\n        }\n        p[0] += shift;\n    }\n    updateBBox(bbox, p);\n}\n\nfunction resetBBox(bbox: BBox) {\n    bbox[0] = bbox[1] = Infinity;\n    bbox[2] = bbox[3] = -Infinity;\n}\n\nfunction getTilePoints(\n    geometry: Point2D[][],\n    pointBBox: BBox,\n    polyBBox: BBox,\n    canonical: ICanonicalTileID\n): [number, number][] {\n    const worldSize = Math.pow(2, canonical.z) * EXTENT;\n    const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n    const tilePoints: [number, number][] = [];\n    for (const points of geometry) {\n        for (const point of points) {\n            const p: [number, number] = [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(\n    geometry: Point2D[][],\n    lineBBox: BBox,\n    polyBBox: BBox,\n    canonical: ICanonicalTileID\n): [number, number][][] {\n    const worldSize = Math.pow(2, canonical.z) * EXTENT;\n    const shifts = [canonical.x * EXTENT, canonical.y * EXTENT];\n    const tileLines: [number, number][][] = [];\n    for (const line of geometry) {\n        const tileLine: [number, number][] = [];\n        for (const point of line) {\n            const p: [number, number] = [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: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    const polyBBox: BBox = [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: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    const polyBBox: BBox = [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\nexport class Within implements Expression {\n    type: Type;\n    geojson: GeoJSON.GeoJSON;\n    geometries: GeoJSONPolygons;\n\n    constructor(geojson: GeoJSON.GeoJSON, geometries: GeoJSONPolygons) {\n        this.type = BooleanType;\n        this.geojson = geojson;\n        this.geometries = geometries;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2)\n            return context.error(\n                `'within' expression requires exactly one argument, but found ${args.length - 1} instead.`\n            ) as null;\n        if (isValue(args[1])) {\n            const geojson = args[1] as any;\n            if (geojson.type === 'FeatureCollection') {\n                const polygonsCoords: GeoJSON.Position[][][] = [];\n                for (const polygon of geojson.features) {\n                    const {type, coordinates} = polygon.geometry;\n                    if (type === 'Polygon') {\n                        polygonsCoords.push(coordinates);\n                    }\n                    if (type === 'MultiPolygon') {\n                        polygonsCoords.push(...coordinates);\n                    }\n                }\n                if (polygonsCoords.length) {\n                    const multipolygonWrapper: GeoJSON.MultiPolygon = {\n                        type: 'MultiPolygon',\n                        coordinates: polygonsCoords\n                    };\n                    return new Within(geojson, multipolygonWrapper);\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(\n            \"'within' expression requires valid geojson object that contains polygon geometry type.\"\n        ) as null;\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","\nexport default class TinyQueue {\n    constructor(data = [], compare = (a, b) => (a < b ? -1 : a > b ? 1 : 0)) {\n        this.data = data;\n        this.length = this.data.length;\n        this.compare = compare;\n\n        if (this.length > 0) {\n            for (let i = (this.length >> 1) - 1; i >= 0; i--) this._down(i);\n        }\n    }\n\n    push(item) {\n        this.data.push(item);\n        this._up(this.length++);\n    }\n\n    pop() {\n        if (this.length === 0) return undefined;\n\n        const top = this.data[0];\n        const bottom = this.data.pop();\n\n        if (--this.length > 0) {\n            this.data[0] = bottom;\n            this._down(0);\n        }\n\n        return top;\n    }\n\n    peek() {\n        return this.data[0];\n    }\n\n    _up(pos) {\n        const {data, compare} = this;\n        const item = data[pos];\n\n        while (pos > 0) {\n            const parent = (pos - 1) >> 1;\n            const current = data[parent];\n            if (compare(item, current) >= 0) break;\n            data[pos] = current;\n            pos = parent;\n        }\n\n        data[pos] = item;\n    }\n\n    _down(pos) {\n        const {data, compare} = this;\n        const halfLength = this.length >> 1;\n        const item = data[pos];\n\n        while (pos < halfLength) {\n            let bestChild = (pos << 1) + 1; // initially it is the left child\n            const right = bestChild + 1;\n\n            if (right < this.length && compare(data[right], data[bestChild]) < 0) {\n                bestChild = right;\n            }\n            if (compare(data[bestChild], item) >= 0) break;\n\n            data[pos] = data[bestChild];\n            pos = bestChild;\n        }\n\n        data[pos] = item;\n    }\n}\n","\n/**\n * Rearranges items so that all items in the [left, k] are the smallest.\n * The k-th element will have the (k - left + 1)-th smallest value in [left, right].\n *\n * @template T\n * @param {T[]} arr the array to partially sort (in place)\n * @param {number} k middle index for partial sorting (as defined above)\n * @param {number} [left=0] left index of the range to sort\n * @param {number} [right=arr.length-1] right index\n * @param {(a: T, b: T) => number} [compare = (a, b) => a - b] compare function\n */\nexport default function quickselect(arr, k, left = 0, right = arr.length - 1, compare = defaultCompare) {\n\n    while (right > left) {\n        if (right - left > 600) {\n            const n = right - left + 1;\n            const m = k - left + 1;\n            const z = Math.log(n);\n            const s = 0.5 * Math.exp(2 * z / 3);\n            const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n            const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n            const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n            quickselect(arr, k, newLeft, newRight, compare);\n        }\n\n        const t = arr[k];\n        let i = left;\n        /** @type {number} */\n        let j = right;\n\n        swap(arr, left, k);\n        if (compare(arr[right], t) > 0) swap(arr, left, right);\n\n        while (i < j) {\n            swap(arr, i, j);\n            i++;\n            j--;\n            while (compare(arr[i], t) < 0) i++;\n            while (compare(arr[j], t) > 0) j--;\n        }\n\n        if (compare(arr[left], t) === 0) swap(arr, left, j);\n        else {\n            j++;\n            swap(arr, j, right);\n        }\n\n        if (j <= k) left = j + 1;\n        if (k <= j) right = j - 1;\n    }\n}\n\n/**\n * @template T\n * @param {T[]} arr\n * @param {number} i\n * @param {number} j\n */\nfunction swap(arr, i, j) {\n    const tmp = arr[i];\n    arr[i] = arr[j];\n    arr[j] = tmp;\n}\n\n/**\n * @template T\n * @param {T} a\n * @param {T} b\n * @returns {number}\n */\nfunction defaultCompare(a, b) {\n    return a < b ? -1 : a > b ? 1 : 0;\n}\n","import quickselect from 'quickselect';\nimport {Point2D} from '../point2d';\n\nexport type RingWithArea<T extends Point2D> = T[] & {area?: number};\n\n/**\n * Classifies an array of rings into polygons with outer rings and holes\n * @param rings - the rings to classify\n * @param maxRings - the maximum number of rings to include in a polygon, use 0 to include all rings\n * @returns an array of polygons with internal rings as holes\n */\nexport function classifyRings<T extends Point2D>(\n    rings: RingWithArea<T>[],\n    maxRings?: number\n): RingWithArea<T>[][] {\n    const len = rings.length;\n\n    if (len <= 1) return [rings];\n\n    const polygons: RingWithArea<T>[][] = [];\n    let polygon: RingWithArea<T>[];\n    let ccw: boolean | undefined;\n\n    for (const ring of rings) {\n        const area = calculateSignedArea(ring);\n        if (area === 0) continue;\n\n        ring.area = Math.abs(area);\n\n        if (ccw === undefined) ccw = area < 0;\n\n        if (ccw === area < 0) {\n            if (polygon) polygons.push(polygon);\n            polygon = [ring];\n        } else {\n            polygon.push(ring);\n        }\n    }\n    if (polygon) polygons.push(polygon);\n\n    // Earcut performance degrades with the # of rings in a polygon. For this\n    // reason, we limit strip out all but the `maxRings` largest rings.\n    if (maxRings > 1) {\n        for (let j = 0; j < polygons.length; j++) {\n            if (polygons[j].length <= maxRings) continue;\n            quickselect(polygons[j], maxRings, 1, polygons[j].length - 1, compareAreas);\n            polygons[j] = polygons[j].slice(0, maxRings);\n        }\n    }\n\n    return polygons;\n}\n\nfunction compareAreas<T extends Point2D>(a: RingWithArea<T>, b: RingWithArea<T>): number {\n    return b.area - a.area;\n}\n\n/**\n * Returns the signed area for the polygon ring.  Positive areas are exterior rings and\n * have a clockwise winding.  Negative areas are interior rings and have a counter clockwise\n * ordering.\n *\n * @param ring - Exterior or interior ring\n * @returns Signed area\n */\nfunction calculateSignedArea(ring: Point2D[]): number {\n    let sum = 0;\n    for (let i = 0, len = ring.length, j = len - 1, p1, p2; i < len; j = i++) {\n        p1 = ring[i];\n        p2 = ring[j];\n        sum += (p2.x - p1.x) * (p1.y + p2.y);\n    }\n    return sum;\n}\n","// This is taken from https://github.com/mapbox/cheap-ruler/ in order to take only the relevant parts\n\n// Values that define WGS84 ellipsoid model of the Earth\nconst RE = 6378.137; // equatorial radius\nconst FE = 1 / 298.257223563; // flattening\n\nconst E2 = FE * (2 - FE);\nconst RAD = Math.PI / 180;\n\nexport class CheapRuler {\n    private kx: number;\n    private ky: number;\n\n    constructor(lat: number) {\n        // Curvature formulas from https://en.wikipedia.org/wiki/Earth_radius#Meridional\n        const m = RAD * RE * 1000;\n        const coslat = Math.cos(lat * RAD);\n        const w2 = 1 / (1 - E2 * (1 - coslat * coslat));\n        const w = Math.sqrt(w2);\n\n        // multipliers for converting longitude and latitude degrees into distance\n        this.kx = m * w * coslat; // based on normal radius of curvature\n        this.ky = m * w * w2 * (1 - E2); // based on meridional radius of curvature\n    }\n\n    /**\n     * Given two points of the form [longitude, latitude], returns the distance.\n     *\n     * @param a - point [longitude, latitude]\n     * @param b - point [longitude, latitude]\n     * @returns distance\n     * @example\n     * const distance = ruler.distance([30.5, 50.5], [30.51, 50.49]);\n     * //=distance\n     */\n    public distance(a: [number, number], b: [number, number]) {\n        const dx = this.wrap(a[0] - b[0]) * this.kx;\n        const dy = (a[1] - b[1]) * this.ky;\n        return Math.sqrt(dx * dx + dy * dy);\n    }\n\n    /**\n     * Returns an object of the form {point, index, t}, where point is closest point on the line\n     * from the given point, index is the start index of the segment with the closest point,\n     * and t is a parameter from 0 to 1 that indicates where the closest point is on that segment.\n     *\n     * @param line - an array of points that form the line\n     * @param p - point [longitude, latitude]\n     * @returns the nearest point, its index in the array and the proportion along the line\n     * @example\n     * const point = ruler.pointOnLine(line, [-67.04, 50.5]).point;\n     * //=point\n     */\n    public pointOnLine(line: [number, number][], p: [number, number]) {\n        let minDist = Infinity;\n        let minX: number, minY: number, minI: number, minT: number;\n\n        for (let i = 0; i < line.length - 1; i++) {\n            let x = line[i][0];\n            let y = line[i][1];\n            let dx = this.wrap(line[i + 1][0] - x) * this.kx;\n            let dy = (line[i + 1][1] - y) * this.ky;\n            let t = 0;\n\n            if (dx !== 0 || dy !== 0) {\n                t =\n                    (this.wrap(p[0] - x) * this.kx * dx + (p[1] - y) * this.ky * dy) /\n                    (dx * dx + dy * dy);\n\n                if (t > 1) {\n                    x = line[i + 1][0];\n                    y = line[i + 1][1];\n                } else if (t > 0) {\n                    x += (dx / this.kx) * t;\n                    y += (dy / this.ky) * t;\n                }\n            }\n\n            dx = this.wrap(p[0] - x) * this.kx;\n            dy = (p[1] - y) * this.ky;\n\n            const sqDist = dx * dx + dy * dy;\n            if (sqDist < minDist) {\n                minDist = sqDist;\n                minX = x;\n                minY = y;\n                minI = i;\n                minT = t;\n            }\n        }\n\n        return {\n            point: [minX, minY] as [number, number],\n            index: minI,\n            t: Math.max(0, Math.min(1, minT))\n        };\n    }\n\n    private wrap(deg: number) {\n        while (deg < -180) deg += 360;\n        while (deg > 180) deg -= 360;\n        return deg;\n    }\n}\n","import TinyQueue from 'tinyqueue';\nimport {Expression} from '../expression';\nimport {ParsingContext} from '../parsing_context';\nimport {NumberType, Type} from '../types';\nimport {isValue} from '../values';\nimport {EvaluationContext} from '../evaluation_context';\nimport {\n    BBox,\n    boxWithinBox,\n    getLngLatFromTileCoord,\n    pointWithinPolygon,\n    segmentIntersectSegment,\n    updateBBox\n} from '../../util/geometry_util';\nimport {classifyRings} from '../../util/classify_rings';\nimport {CheapRuler} from '../../util/cheap_ruler';\n\ntype SimpleGeometry = GeoJSON.Polygon | GeoJSON.LineString | GeoJSON.Point;\n\nconst MinPointsSize = 100;\nconst MinLinePointsSize = 50;\n\ntype IndexRange = [number, number];\ntype DistPair = [number, IndexRange, IndexRange];\n\nfunction compareDistPair(a: DistPair, b: DistPair): number {\n    return b[0] - a[0];\n}\n\nfunction getRangeSize(range: IndexRange) {\n    return range[1] - range[0] + 1;\n}\n\nfunction isRangeSafe(range: IndexRange, threshold: number): boolean {\n    return range[1] >= range[0] && range[1] < threshold;\n}\n\nfunction splitRange(range: IndexRange, isLine: boolean): [IndexRange, IndexRange] {\n    if (range[0] > range[1]) {\n        return [null, null];\n    }\n    const size = getRangeSize(range);\n    if (isLine) {\n        if (size === 2) {\n            return [range, null];\n        }\n        const size1 = Math.floor(size / 2);\n        return [\n            [range[0], range[0] + size1],\n            [range[0] + size1, range[1]]\n        ];\n    }\n    if (size === 1) {\n        return [range, null];\n    }\n    const size1 = Math.floor(size / 2) - 1;\n    return [\n        [range[0], range[0] + size1],\n        [range[0] + size1 + 1, range[1]]\n    ];\n}\n\nfunction getBBox(coords: [number, number][], range: IndexRange): BBox {\n    if (!isRangeSafe(range, coords.length)) {\n        return [Infinity, Infinity, -Infinity, -Infinity];\n    }\n\n    const bbox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    for (let i = range[0]; i <= range[1]; ++i) {\n        updateBBox(bbox, coords[i]);\n    }\n    return bbox;\n}\n\nfunction getPolygonBBox(polygon: [number, number][][]): BBox {\n    const bbox: BBox = [Infinity, Infinity, -Infinity, -Infinity];\n    for (const ring of polygon) {\n        for (const coord of ring) {\n            updateBBox(bbox, coord);\n        }\n    }\n    return bbox;\n}\n\nfunction isValidBBox(bbox: BBox): boolean {\n    return (\n        bbox[0] !== -Infinity &&\n        bbox[1] !== -Infinity &&\n        bbox[2] !== Infinity &&\n        bbox[3] !== Infinity\n    );\n}\n\n// Calculate the distance between two bounding boxes.\n// Calculate the delta in x and y direction, and use two fake points {0.0, 0.0}\n// and {dx, dy} to calculate the distance. Distance will be 0.0 if bounding box are overlapping.\nfunction bboxToBBoxDistance(bbox1: BBox, bbox2: BBox, ruler: CheapRuler): number {\n    if (!isValidBBox(bbox1) || !isValidBBox(bbox2)) {\n        return NaN;\n    }\n    let dx = 0.0;\n    let dy = 0.0;\n    // bbox1 in left side\n    if (bbox1[2] < bbox2[0]) {\n        dx = bbox2[0] - bbox1[2];\n    }\n    // bbox1 in right side\n    if (bbox1[0] > bbox2[2]) {\n        dx = bbox1[0] - bbox2[2];\n    }\n    // bbox1 in above side\n    if (bbox1[1] > bbox2[3]) {\n        dy = bbox1[1] - bbox2[3];\n    }\n    // bbox1 in down side\n    if (bbox1[3] < bbox2[1]) {\n        dy = bbox2[1] - bbox1[3];\n    }\n    return ruler.distance([0.0, 0.0], [dx, dy]);\n}\n\nfunction pointToLineDistance(\n    point: [number, number],\n    line: [number, number][],\n    ruler: CheapRuler\n): number {\n    const nearestPoint = ruler.pointOnLine(line, point);\n    return ruler.distance(point, nearestPoint.point);\n}\n\nfunction segmentToSegmentDistance(\n    p1: [number, number],\n    p2: [number, number],\n    q1: [number, number],\n    q2: [number, number],\n    ruler: CheapRuler\n): number {\n    const dist1 = Math.min(\n        pointToLineDistance(p1, [q1, q2], ruler),\n        pointToLineDistance(p2, [q1, q2], ruler)\n    );\n    const dist2 = Math.min(\n        pointToLineDistance(q1, [p1, p2], ruler),\n        pointToLineDistance(q2, [p1, p2], ruler)\n    );\n    return Math.min(dist1, dist2);\n}\n\nfunction lineToLineDistance(\n    line1: [number, number][],\n    range1: IndexRange,\n    line2: [number, number][],\n    range2: IndexRange,\n    ruler: CheapRuler\n): number {\n    const rangeSafe = isRangeSafe(range1, line1.length) && isRangeSafe(range2, line2.length);\n    if (!rangeSafe) {\n        return Infinity;\n    }\n\n    let dist = Infinity;\n    for (let i = range1[0]; i < range1[1]; ++i) {\n        const p1 = line1[i];\n        const p2 = line1[i + 1];\n        for (let j = range2[0]; j < range2[1]; ++j) {\n            const q1 = line2[j];\n            const q2 = line2[j + 1];\n            if (segmentIntersectSegment(p1, p2, q1, q2)) {\n                return 0.0;\n            }\n            dist = Math.min(dist, segmentToSegmentDistance(p1, p2, q1, q2, ruler));\n        }\n    }\n    return dist;\n}\n\nfunction pointsToPointsDistance(\n    points1: [number, number][],\n    range1: IndexRange,\n    points2: [number, number][],\n    range2: IndexRange,\n    ruler: CheapRuler\n): number {\n    const rangeSafe = isRangeSafe(range1, points1.length) && isRangeSafe(range2, points2.length);\n    if (!rangeSafe) {\n        return NaN;\n    }\n\n    let dist = Infinity;\n    for (let i = range1[0]; i <= range1[1]; ++i) {\n        for (let j = range2[0]; j <= range2[1]; ++j) {\n            dist = Math.min(dist, ruler.distance(points1[i], points2[j]));\n            if (dist === 0.0) {\n                return dist;\n            }\n        }\n    }\n    return dist;\n}\n\nfunction pointToPolygonDistance(\n    point: [number, number],\n    polygon: [number, number][][],\n    ruler: CheapRuler\n): number {\n    if (pointWithinPolygon(point, polygon, true)) {\n        return 0.0;\n    }\n    let dist = Infinity;\n    for (const ring of polygon) {\n        const front = ring[0];\n        const back = ring[ring.length - 1];\n        if (front !== back) {\n            dist = Math.min(dist, pointToLineDistance(point, [back, front], ruler));\n            if (dist === 0.0) {\n                return dist;\n            }\n        }\n        const nearestPoint = ruler.pointOnLine(ring, point);\n        dist = Math.min(dist, ruler.distance(point, nearestPoint.point));\n        if (dist === 0.0) {\n            return dist;\n        }\n    }\n    return dist;\n}\n\nfunction lineToPolygonDistance(\n    line: [number, number][],\n    range: IndexRange,\n    polygon: [number, number][][],\n    ruler: CheapRuler\n): number {\n    if (!isRangeSafe(range, line.length)) {\n        return NaN;\n    }\n\n    for (let i = range[0]; i <= range[1]; ++i) {\n        if (pointWithinPolygon(line[i], polygon, true)) {\n            return 0.0;\n        }\n    }\n\n    let dist = Infinity;\n    for (let i = range[0]; i < range[1]; ++i) {\n        const p1 = line[i];\n        const p2 = line[i + 1];\n        for (const ring of polygon) {\n            for (let j = 0, len = ring.length, k = len - 1; j < len; k = j++) {\n                const q1 = ring[k];\n                const q2 = ring[j];\n                if (segmentIntersectSegment(p1, p2, q1, q2)) {\n                    return 0.0;\n                }\n                dist = Math.min(dist, segmentToSegmentDistance(p1, p2, q1, q2, ruler));\n            }\n        }\n    }\n    return dist;\n}\n\nfunction polygonIntersect(poly1: [number, number][][], poly2: [number, number][][]): boolean {\n    for (const ring of poly1) {\n        for (const point of ring) {\n            if (pointWithinPolygon(point, poly2, true)) {\n                return true;\n            }\n        }\n    }\n    return false;\n}\n\nfunction polygonToPolygonDistance(\n    polygon1: [number, number][][],\n    polygon2: [number, number][][],\n    ruler,\n    currentMiniDist = Infinity\n): number {\n    const bbox1 = getPolygonBBox(polygon1);\n    const bbox2 = getPolygonBBox(polygon2);\n    if (\n        currentMiniDist !== Infinity &&\n        bboxToBBoxDistance(bbox1, bbox2, ruler) >= currentMiniDist\n    ) {\n        return currentMiniDist;\n    }\n\n    if (boxWithinBox(bbox1, bbox2)) {\n        if (polygonIntersect(polygon1, polygon2)) {\n            return 0.0;\n        }\n    } else if (polygonIntersect(polygon2, polygon1)) {\n        return 0.0;\n    }\n\n    let dist = Infinity;\n    for (const ring1 of polygon1) {\n        for (let i = 0, len1 = ring1.length, l = len1 - 1; i < len1; l = i++) {\n            const p1 = ring1[l];\n            const p2 = ring1[i];\n            for (const ring2 of polygon2) {\n                for (let j = 0, len2 = ring2.length, k = len2 - 1; j < len2; k = j++) {\n                    const q1 = ring2[k];\n                    const q2 = ring2[j];\n                    if (segmentIntersectSegment(p1, p2, q1, q2)) {\n                        return 0.0;\n                    }\n                    dist = Math.min(dist, segmentToSegmentDistance(p1, p2, q1, q2, ruler));\n                }\n            }\n        }\n    }\n    return dist;\n}\n\nfunction updateQueue(\n    distQueue: TinyQueue<DistPair>,\n    miniDist: number,\n    ruler: CheapRuler,\n    points: [number, number][],\n    polyBBox: BBox,\n    rangeA?: IndexRange\n) {\n    if (!rangeA) {\n        return;\n    }\n    const tempDist = bboxToBBoxDistance(getBBox(points, rangeA), polyBBox, ruler);\n    // Insert new pair to the queue if the bbox distance is less than\n    // miniDist, The pair with biggest distance will be at the top\n    if (tempDist < miniDist) {\n        distQueue.push([tempDist, rangeA, [0, 0]]);\n    }\n}\n\nfunction updateQueueTwoSets(\n    distQueue: TinyQueue<DistPair>,\n    miniDist: number,\n    ruler: CheapRuler,\n    pointSet1: [number, number][],\n    pointSet2: [number, number][],\n    range1?: IndexRange,\n    range2?: IndexRange\n) {\n    if (!range1 || !range2) {\n        return;\n    }\n    const tempDist = bboxToBBoxDistance(\n        getBBox(pointSet1, range1),\n        getBBox(pointSet2, range2),\n        ruler\n    );\n    // Insert new pair to the queue if the bbox distance is less than\n    // miniDist, The pair with biggest distance will be at the top\n    if (tempDist < miniDist) {\n        distQueue.push([tempDist, range1, range2]);\n    }\n}\n\n// Divide and conquer, the time complexity is O(n*lgn), faster than Brute force\n// O(n*n) Most of the time, use index for in-place processing.\nfunction pointsToPolygonDistance(\n    points: [number, number][],\n    isLine: boolean,\n    polygon: [number, number][][],\n    ruler: CheapRuler,\n    currentMiniDist = Infinity\n) {\n    let miniDist = Math.min(ruler.distance(points[0], polygon[0][0]), currentMiniDist);\n    if (miniDist === 0.0) {\n        return miniDist;\n    }\n\n    const distQueue = new TinyQueue<DistPair>(\n        [[0, [0, points.length - 1], [0, 0]]],\n        compareDistPair\n    );\n\n    const polyBBox = getPolygonBBox(polygon);\n    while (distQueue.length > 0) {\n        const distPair = distQueue.pop();\n        if (distPair[0] >= miniDist) {\n            continue;\n        }\n\n        const range = distPair[1];\n\n        // In case the set size are relatively small, we could use brute-force directly\n        const threshold = isLine ? MinLinePointsSize : MinPointsSize;\n        if (getRangeSize(range) <= threshold) {\n            if (!isRangeSafe(range, points.length)) {\n                return NaN;\n            }\n            if (isLine) {\n                const tempDist = lineToPolygonDistance(points, range, polygon, ruler);\n                if (isNaN(tempDist) || tempDist === 0.0) {\n                    return tempDist;\n                }\n                miniDist = Math.min(miniDist, tempDist);\n            } else {\n                for (let i = range[0]; i <= range[1]; ++i) {\n                    const tempDist = pointToPolygonDistance(points[i], polygon, ruler);\n                    miniDist = Math.min(miniDist, tempDist);\n                    if (miniDist === 0.0) {\n                        return 0.0;\n                    }\n                }\n            }\n        } else {\n            const newRangesA = splitRange(range, isLine);\n\n            updateQueue(distQueue, miniDist, ruler, points, polyBBox, newRangesA[0]);\n            updateQueue(distQueue, miniDist, ruler, points, polyBBox, newRangesA[1]);\n        }\n    }\n    return miniDist;\n}\n\nfunction pointSetToPointSetDistance(\n    pointSet1: [number, number][],\n    isLine1: boolean,\n    pointSet2: [number, number][],\n    isLine2: boolean,\n    ruler: CheapRuler,\n    currentMiniDist = Infinity\n): number {\n    let miniDist = Math.min(currentMiniDist, ruler.distance(pointSet1[0], pointSet2[0]));\n    if (miniDist === 0.0) {\n        return miniDist;\n    }\n\n    const distQueue = new TinyQueue<DistPair>(\n        [[0, [0, pointSet1.length - 1], [0, pointSet2.length - 1]]],\n        compareDistPair\n    );\n\n    while (distQueue.length > 0) {\n        const distPair = distQueue.pop();\n        if (distPair[0] >= miniDist) {\n            continue;\n        }\n\n        const rangeA = distPair[1];\n        const rangeB = distPair[2];\n        const threshold1 = isLine1 ? MinLinePointsSize : MinPointsSize;\n        const threshold2 = isLine2 ? MinLinePointsSize : MinPointsSize;\n\n        // In case the set size are relatively small, we could use brute-force directly\n        if (getRangeSize(rangeA) <= threshold1 && getRangeSize(rangeB) <= threshold2) {\n            if (!isRangeSafe(rangeA, pointSet1.length) && isRangeSafe(rangeB, pointSet2.length)) {\n                return NaN;\n            }\n            let tempDist: number;\n            if (isLine1 && isLine2) {\n                tempDist = lineToLineDistance(pointSet1, rangeA, pointSet2, rangeB, ruler);\n                miniDist = Math.min(miniDist, tempDist);\n            } else if (isLine1 && !isLine2) {\n                const sublibe = pointSet1.slice(rangeA[0], rangeA[1] + 1);\n                for (let i = rangeB[0]; i <= rangeB[1]; ++i) {\n                    tempDist = pointToLineDistance(pointSet2[i], sublibe, ruler);\n                    miniDist = Math.min(miniDist, tempDist);\n                    if (miniDist === 0.0) {\n                        return miniDist;\n                    }\n                }\n            } else if (!isLine1 && isLine2) {\n                const sublibe = pointSet2.slice(rangeB[0], rangeB[1] + 1);\n                for (let i = rangeA[0]; i <= rangeA[1]; ++i) {\n                    tempDist = pointToLineDistance(pointSet1[i], sublibe, ruler);\n                    miniDist = Math.min(miniDist, tempDist);\n                    if (miniDist === 0.0) {\n                        return miniDist;\n                    }\n                }\n            } else {\n                tempDist = pointsToPointsDistance(pointSet1, rangeA, pointSet2, rangeB, ruler);\n                miniDist = Math.min(miniDist, tempDist);\n            }\n        } else {\n            const newRangesA = splitRange(rangeA, isLine1);\n            const newRangesB = splitRange(rangeB, isLine2);\n            updateQueueTwoSets(\n                distQueue,\n                miniDist,\n                ruler,\n                pointSet1,\n                pointSet2,\n                newRangesA[0],\n                newRangesB[0]\n            );\n            updateQueueTwoSets(\n                distQueue,\n                miniDist,\n                ruler,\n                pointSet1,\n                pointSet2,\n                newRangesA[0],\n                newRangesB[1]\n            );\n            updateQueueTwoSets(\n                distQueue,\n                miniDist,\n                ruler,\n                pointSet1,\n                pointSet2,\n                newRangesA[1],\n                newRangesB[0]\n            );\n            updateQueueTwoSets(\n                distQueue,\n                miniDist,\n                ruler,\n                pointSet1,\n                pointSet2,\n                newRangesA[1],\n                newRangesB[1]\n            );\n        }\n    }\n    return miniDist;\n}\n\nfunction pointToGeometryDistance(ctx: EvaluationContext, geometries: SimpleGeometry[]) {\n    const tilePoints = ctx.geometry();\n    const pointPosition = tilePoints\n        .flat()\n        .map((p) => getLngLatFromTileCoord([p.x, p.y], ctx.canonical) as [number, number]);\n    if (tilePoints.length === 0) {\n        return NaN;\n    }\n    const ruler = new CheapRuler(pointPosition[0][1]);\n    let dist = Infinity;\n    for (const geometry of geometries) {\n        switch (geometry.type) {\n            case 'Point':\n                dist = Math.min(\n                    dist,\n                    pointSetToPointSetDistance(\n                        pointPosition,\n                        false,\n                        [geometry.coordinates as [number, number]],\n                        false,\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n            case 'LineString':\n                dist = Math.min(\n                    dist,\n                    pointSetToPointSetDistance(\n                        pointPosition,\n                        false,\n                        geometry.coordinates as [number, number][],\n                        true,\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n            case 'Polygon':\n                dist = Math.min(\n                    dist,\n                    pointsToPolygonDistance(\n                        pointPosition,\n                        false,\n                        geometry.coordinates as [number, number][][],\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n        }\n        if (dist === 0.0) {\n            return dist;\n        }\n    }\n    return dist;\n}\n\nfunction lineStringToGeometryDistance(ctx: EvaluationContext, geometries: SimpleGeometry[]) {\n    const tileLine = ctx.geometry();\n    const linePositions = tileLine\n        .flat()\n        .map((p) => getLngLatFromTileCoord([p.x, p.y], ctx.canonical) as [number, number]);\n    if (tileLine.length === 0) {\n        return NaN;\n    }\n    const ruler = new CheapRuler(linePositions[0][1]);\n    let dist = Infinity;\n    for (const geometry of geometries) {\n        switch (geometry.type) {\n            case 'Point':\n                dist = Math.min(\n                    dist,\n                    pointSetToPointSetDistance(\n                        linePositions,\n                        true,\n                        [geometry.coordinates as [number, number]],\n                        false,\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n            case 'LineString':\n                dist = Math.min(\n                    dist,\n                    pointSetToPointSetDistance(\n                        linePositions,\n                        true,\n                        geometry.coordinates as [number, number][],\n                        true,\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n            case 'Polygon':\n                dist = Math.min(\n                    dist,\n                    pointsToPolygonDistance(\n                        linePositions,\n                        true,\n                        geometry.coordinates as [number, number][][],\n                        ruler,\n                        dist\n                    )\n                );\n                break;\n        }\n        if (dist === 0.0) {\n            return dist;\n        }\n    }\n    return dist;\n}\n\nfunction polygonToGeometryDistance(ctx: EvaluationContext, geometries: SimpleGeometry[]) {\n    const tilePolygon = ctx.geometry();\n    if (tilePolygon.length === 0 || tilePolygon[0].length === 0) {\n        return NaN;\n    }\n    const polygons = classifyRings(tilePolygon, 0).map((polygon) => {\n        return polygon.map((ring) => {\n            return ring.map(\n                (p) => getLngLatFromTileCoord([p.x, p.y], ctx.canonical) as [number, number]\n            );\n        });\n    });\n    const ruler = new CheapRuler(polygons[0][0][0][1]);\n    let dist = Infinity;\n    for (const geometry of geometries) {\n        for (const polygon of polygons) {\n            switch (geometry.type) {\n                case 'Point':\n                    dist = Math.min(\n                        dist,\n                        pointsToPolygonDistance(\n                            [geometry.coordinates as [number, number]],\n                            false,\n                            polygon,\n                            ruler,\n                            dist\n                        )\n                    );\n                    break;\n                case 'LineString':\n                    dist = Math.min(\n                        dist,\n                        pointsToPolygonDistance(\n                            geometry.coordinates as [number, number][],\n                            true,\n                            polygon,\n                            ruler,\n                            dist\n                        )\n                    );\n                    break;\n                case 'Polygon':\n                    dist = Math.min(\n                        dist,\n                        polygonToPolygonDistance(\n                            polygon,\n                            geometry.coordinates as [number, number][][],\n                            ruler,\n                            dist\n                        )\n                    );\n                    break;\n            }\n            if (dist === 0.0) {\n                return dist;\n            }\n        }\n    }\n    return dist;\n}\n\nfunction toSimpleGeometry(\n    geometry: Exclude<GeoJSON.Geometry, GeoJSON.GeometryCollection>\n): SimpleGeometry[] {\n    if (geometry.type === 'MultiPolygon') {\n        return geometry.coordinates.map((polygon) => {\n            return {\n                type: 'Polygon',\n                coordinates: polygon\n            };\n        });\n    }\n    if (geometry.type === 'MultiLineString') {\n        return geometry.coordinates.map((lineString) => {\n            return {\n                type: 'LineString',\n                coordinates: lineString\n            };\n        });\n    }\n    if (geometry.type === 'MultiPoint') {\n        return geometry.coordinates.map((point) => {\n            return {\n                type: 'Point',\n                coordinates: point\n            };\n        });\n    }\n    return [geometry];\n}\n\nexport class Distance implements Expression {\n    type: Type;\n    geojson: GeoJSON.GeoJSON;\n    geometries: SimpleGeometry[];\n\n    constructor(geojson: GeoJSON.GeoJSON, geometries: SimpleGeometry[]) {\n        this.type = NumberType;\n        this.geojson = geojson;\n        this.geometries = geometries;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2)\n            return context.error(\n                `'distance' expression requires exactly one argument, but found ${args.length - 1} instead.`\n            ) as null;\n        if (isValue(args[1])) {\n            const geojson = args[1] as any;\n            if (geojson.type === 'FeatureCollection') {\n                return new Distance(\n                    geojson,\n                    geojson.features.map((feature) => toSimpleGeometry(feature.geometry)).flat()\n                );\n            } else if (geojson.type === 'Feature') {\n                return new Distance(geojson, toSimpleGeometry(geojson.geometry));\n            } else if ('type' in geojson && 'coordinates' in geojson) {\n                return new Distance(geojson, toSimpleGeometry(geojson));\n            }\n        }\n        return context.error(\n            \"'distance' expression requires valid geojson object that contains polygon geometry type.\"\n        ) as null;\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        if (ctx.geometry() != null && ctx.canonicalID() != null) {\n            if (ctx.geometryType() === 'Point') {\n                return pointToGeometryDistance(ctx, this.geometries);\n            } else if (ctx.geometryType() === 'LineString') {\n                return lineStringToGeometryDistance(ctx, this.geometries);\n            } else if (ctx.geometryType() === 'Polygon') {\n                return polygonToGeometryDistance(ctx, this.geometries);\n            }\n        }\n        return NaN;\n    }\n\n    eachChild() {}\n\n    outputDefined(): boolean {\n        return true;\n    }\n}\n","import {Type, ValueType} from '../types';\nimport type {Expression} from '../expression';\nimport {ParsingContext} from '../parsing_context';\nimport {EvaluationContext} from '../evaluation_context';\nimport {getOwn} from '../../util/get_own';\n\nexport class GlobalState implements Expression {\n    type: Type;\n    key: string;\n\n    constructor(key: string) {\n        this.type = ValueType;\n        this.key = key;\n    }\n\n    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        if (args.length !== 2) {\n            return context.error(\n                `Expected 1 argument, but found ${args.length - 1} instead.`\n            ) as null;\n        }\n\n        const key = args[1];\n\n        if (key === undefined || key === null) {\n            return context.error('Global state property must be defined.') as null;\n        }\n\n        if (typeof key !== 'string') {\n            return context.error(\n                `Global state property must be string, but found ${typeof args[1]} instead.`\n            ) as null;\n        }\n\n        return new GlobalState(key);\n    }\n\n    evaluate(ctx: EvaluationContext) {\n        const globalState = ctx.globals?.globalState;\n\n        if (!globalState || Object.keys(globalState).length === 0) return null;\n\n        return getOwn(globalState, this.key);\n    }\n\n    eachChild() {}\n\n    outputDefined() {\n        return false;\n    }\n}\n","import {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';\nimport {Distance} from './distance';\nimport {GlobalState} from './global_state';\n\nimport type {ExpressionRegistry} from '../expression';\n\nexport const 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    distance: Distance,\n    'global-state': GlobalState\n};\n","import {\n    typeToString,\n    NumberType,\n    StringType,\n    BooleanType,\n    ColorType,\n    ObjectType,\n    ValueType,\n    ErrorType,\n    CollatorType,\n    array\n} from './types';\n\nimport {ParsingContext} from './parsing_context';\nimport {EvaluationContext} from './evaluation_context';\n\nimport {expressions} from './definitions';\nimport {CollatorExpression} from './definitions/collator';\nimport {Within} from './definitions/within';\nimport {Literal} from './definitions/literal';\nimport {Assertion} from './definitions/assertion';\nimport {Coercion} from './definitions/coercion';\nimport {Var} from './definitions/var';\nimport {Distance} from './definitions/distance';\nimport {GlobalState} from './definitions/global_state';\n\nimport type {Expression, ExpressionRegistry} from './expression';\nimport type {Value} from './values';\nimport type {Type} from './types';\n\nimport {typeOf, validateRGBA, valueToString} from './values';\nimport {RuntimeError} from './runtime_error';\nimport {Color} from './types/color';\n\nexport type Varargs = {\n    type: Type;\n};\ntype Signature = Array<Type> | Varargs;\ntype Evaluate = (b: EvaluationContext, a: Array<Expression>) => Value;\n\ntype Definition =\n    | [Type, Signature, Evaluate]\n    | {\n          type: Type;\n          overloads: Array<[Signature, Evaluate]>;\n      };\n\nexport class CompoundExpression implements Expression {\n    name: string;\n    type: Type;\n    _evaluate: Evaluate;\n    args: Array<Expression>;\n\n    static definitions: {[_: string]: Definition};\n\n    constructor(name: string, type: Type, evaluate: Evaluate, args: Array<Expression>) {\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    static parse(args: ReadonlyArray<unknown>, context: ParsingContext): Expression {\n        const op: string = args[0] as any;\n        const definition = CompoundExpression.definitions[op];\n        if (!definition) {\n            return context.error(\n                `Unknown expression \"${op}\". If you wanted a literal array, use [\"literal\", [...]].`,\n                0\n            ) as null;\n        }\n\n        // Now check argument types against each signature\n        const type = Array.isArray(definition) ? 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(\n            ([signature]) =>\n                !Array.isArray(signature) || // varags\n                signature.length === args.length - 1 // correct param count\n        );\n\n        let signatureContext: ParsingContext = null;\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(\n                context.registry,\n                isExpressionConstant,\n                context.path,\n                null,\n                context.scope\n            );\n\n            // First parse all the args, potentially coercing to the\n            // types expected by this overload.\n            const parsedArgs: Array<Expression> = [];\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 as Varargs).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(\n                        `Expected ${params.length} arguments, but found ${parsedArgs.length} instead.`\n                    );\n                    continue;\n                }\n            }\n\n            for (let i = 0; i < parsedArgs.length; i++) {\n                const expected = Array.isArray(params) ? params[i] : (params as Varargs).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 as Evaluate, parsedArgs);\n            }\n        }\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 as Signature))\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(typeToString(parsed.type));\n            }\n            context.error(\n                `Expected arguments of type ${signatures}, but found (${actualTypes.join(', ')}) instead.`\n            );\n        }\n\n        return null;\n    }\n\n    static register(registry: ExpressionRegistry, definitions: {[_: string]: Definition}) {\n        CompoundExpression.definitions = definitions;\n        for (const name in definitions) {\n            registry[name] = CompoundExpression;\n        }\n    }\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, g / 255, b / 255, alpha, false);\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) return true;\n        if (a[m] > v) j = m - 1;\n        else 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]) => {\n            throw new RuntimeError(v.evaluate(ctx));\n        }\n    ],\n    typeof: [StringType, [ValueType], (ctx, [v]) => typeToString(typeOf(v.evaluate(ctx)))],\n    'to-rgba': [\n        array(NumberType, 4),\n        [ColorType],\n        (ctx, [v]) => {\n            const [r, g, b, a] = v.evaluate(ctx).rgb;\n            return [r * 255, g * 255, b * 255, a];\n        }\n    ],\n    rgb: [ColorType, [NumberType, NumberType, NumberType], rgba],\n    rgba: [ColorType, [NumberType, NumberType, NumberType, NumberType], rgba],\n    has: {\n        type: BooleanType,\n        overloads: [\n            [[StringType], (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            [[StringType], (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: [ObjectType, [], (ctx) => ctx.properties()],\n    'geometry-type': [StringType, [], (ctx) => ctx.geometryType()],\n    id: [ValueType, [], (ctx) => ctx.id()],\n    zoom: [NumberType, [], (ctx) => ctx.globals.zoom],\n    'heatmap-density': [NumberType, [], (ctx) => ctx.globals.heatmapDensity || 0],\n    elevation: [NumberType, [], (ctx) => ctx.globals.elevation || 0],\n    'line-progress': [NumberType, [], (ctx) => ctx.globals.lineProgress || 0],\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            [[NumberType, NumberType], (ctx, [a, b]) => a.evaluate(ctx) - b.evaluate(ctx)],\n            [[NumberType], (ctx, [a]) => -a.evaluate(ctx)]\n        ]\n    },\n    '/': [NumberType, [NumberType, NumberType], (ctx, [a, b]) => a.evaluate(ctx) / b.evaluate(ctx)],\n    '%': [NumberType, [NumberType, NumberType], (ctx, [a, b]) => a.evaluate(ctx) % b.evaluate(ctx)],\n    ln2: [NumberType, [], () => Math.LN2],\n    pi: [NumberType, [], () => Math.PI],\n    e: [NumberType, [], () => Math.E],\n    '^': [\n        NumberType,\n        [NumberType, NumberType],\n        (ctx, [b, e]) => Math.pow(b.evaluate(ctx), e.evaluate(ctx))\n    ],\n    sqrt: [NumberType, [NumberType], (ctx, [x]) => Math.sqrt(x.evaluate(ctx))],\n    log10: [NumberType, [NumberType], (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN10],\n    ln: [NumberType, [NumberType], (ctx, [n]) => Math.log(n.evaluate(ctx))],\n    log2: [NumberType, [NumberType], (ctx, [n]) => Math.log(n.evaluate(ctx)) / Math.LN2],\n    sin: [NumberType, [NumberType], (ctx, [n]) => Math.sin(n.evaluate(ctx))],\n    cos: [NumberType, [NumberType], (ctx, [n]) => Math.cos(n.evaluate(ctx))],\n    tan: [NumberType, [NumberType], (ctx, [n]) => Math.tan(n.evaluate(ctx))],\n    asin: [NumberType, [NumberType], (ctx, [n]) => Math.asin(n.evaluate(ctx))],\n    acos: [NumberType, [NumberType], (ctx, [n]) => Math.acos(n.evaluate(ctx))],\n    atan: [NumberType, [NumberType], (ctx, [n]) => Math.atan(n.evaluate(ctx))],\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: [NumberType, [NumberType], (ctx, [n]) => Math.abs(n.evaluate(ctx))],\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: [NumberType, [NumberType], (ctx, [n]) => Math.floor(n.evaluate(ctx))],\n    ceil: [NumberType, [NumberType], (ctx, [n]) => Math.ceil(n.evaluate(ctx))],\n    'filter-==': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => ctx.properties()[(k as any).value] === (v as any).value\n    ],\n    'filter-id-==': [BooleanType, [ValueType], (ctx, [v]) => ctx.id() === (v as any).value],\n    'filter-type-==': [\n        BooleanType,\n        [StringType],\n        (ctx, [v]) => ctx.geometryType() === (v as any).value\n    ],\n    'filter-<': [\n        BooleanType,\n        [StringType, ValueType],\n        (ctx, [k, v]) => {\n            const a = ctx.properties()[(k as any).value];\n            const b = (v as 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 as 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 as any).value];\n            const b = (v as 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 as 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 as any).value];\n            const b = (v as 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 as 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 as any).value];\n            const b = (v as 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 as any).value;\n            return typeof a === typeof b && a >= b;\n        }\n    ],\n    'filter-has': [BooleanType, [ValueType], (ctx, [k]) => (k as any).value in ctx.properties()],\n    'filter-has-id': [BooleanType, [], (ctx) => ctx.id() !== null && ctx.id() !== undefined],\n    'filter-type-in': [\n        BooleanType,\n        [array(StringType)],\n        (ctx, [v]) => (v as any).value.indexOf(ctx.geometryType()) >= 0\n    ],\n    'filter-id-in': [\n        BooleanType,\n        [array(ValueType)],\n        (ctx, [v]) => (v as 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 as any).value.indexOf(ctx.properties()[(k as 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]) =>\n            binarySearch(\n                ctx.properties()[(k as any).value],\n                (v as any).value,\n                0,\n                (v as any).value.length - 1\n            )\n    ],\n    all: {\n        type: BooleanType,\n        overloads: [\n            [[BooleanType, BooleanType], (ctx, [a, b]) => a.evaluate(ctx) && b.evaluate(ctx)],\n            [\n                varargs(BooleanType),\n                (ctx, args) => {\n                    for (const arg of args) {\n                        if (!arg.evaluate(ctx)) return false;\n                    }\n                    return true;\n                }\n            ]\n        ]\n    },\n    any: {\n        type: BooleanType,\n        overloads: [\n            [[BooleanType, BooleanType], (ctx, [a, b]) => a.evaluate(ctx) || b.evaluate(ctx)],\n            [\n                varargs(BooleanType),\n                (ctx, args) => {\n                    for (const arg of args) {\n                        if (arg.evaluate(ctx)) return true;\n                    }\n                    return false;\n                }\n            ]\n        ]\n    },\n    '!': [BooleanType, [BooleanType], (ctx, [b]) => !b.evaluate(ctx)],\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: [StringType, [StringType], (ctx, [s]) => s.evaluate(ctx).toUpperCase()],\n    downcase: [StringType, [StringType], (ctx, [s]) => s.evaluate(ctx).toLowerCase()],\n    concat: [\n        StringType,\n        varargs(ValueType),\n        (ctx, args) => args.map((arg) => valueToString(arg.evaluate(ctx))).join('')\n    ],\n    split: [\n        array(StringType),\n        [StringType, StringType],\n        (ctx, [s, delim]) => s.evaluate(ctx).split(delim.evaluate(ctx))\n    ],\n    join: [\n        StringType,\n        [array(StringType), StringType],\n        (ctx, [arr, delim]) => arr.evaluate(ctx).join(delim.evaluate(ctx))\n    ],\n    'resolved-locale': [\n        StringType,\n        [CollatorType],\n        (ctx, [collator]) => collator.evaluate(ctx).resolvedLocale()\n    ]\n});\n\nfunction stringifySignature(signature: Signature): string {\n    if (Array.isArray(signature)) {\n        return `(${signature.map(typeToString).join(', ')})`;\n    } else {\n        return `(${typeToString(signature.type)}...)`;\n    }\n}\n\nfunction isExpressionConstant(expression: Expression) {\n    if (expression instanceof Var) {\n        return isExpressionConstant(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    } else if (expression instanceof Distance) {\n        return false;\n    } else if (expression instanceof GlobalState) {\n        return false;\n    }\n\n    const isTypeAnnotation = expression instanceof Coercion || 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 && isExpressionConstant(child);\n        } else {\n            childrenConstant = childrenConstant && child instanceof Literal;\n        }\n    });\n    if (!childrenConstant) {\n        return false;\n    }\n\n    return (\n        isFeatureConstant(expression) &&\n        isGlobalPropertyConstant(expression, [\n            'zoom',\n            'heatmap-density',\n            'elevation',\n            'line-progress',\n            'accumulated',\n            'is-supported-script'\n        ])\n    );\n}\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 (e.name === 'properties' || e.name === 'geometry-type' || e.name === 'id') {\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    if (e instanceof Distance) {\n        return false;\n    }\n\n    let result = true;\n    e.eachChild((arg) => {\n        if (result && !isFeatureConstant(arg)) {\n            result = false;\n        }\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)) {\n            result = false;\n        }\n    });\n    return result;\n}\n\nfunction isGlobalPropertyConstant(e: Expression, properties: Array<string>) {\n    if (e instanceof CompoundExpression && properties.indexOf(e.name) >= 0) {\n        return false;\n    }\n    let result = true;\n    e.eachChild((arg) => {\n        if (result && !isGlobalPropertyConstant(arg, properties)) {\n            result = false;\n        }\n    });\n    return result;\n}\n\nexport {isFeatureConstant, isGlobalPropertyConstant, isStateConstant, isExpressionConstant};\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<T, E> =\n    | {\n          result: 'success';\n          value: T;\n      }\n    | {\n          result: 'error';\n          value: E;\n      };\n\nexport function success<T, E>(value: T): Result<T, E> {\n    return {result: 'success', value};\n}\n\nexport function error<T, E>(value: E): Result<T, E> {\n    return {result: 'error', value};\n}\n","import type {StylePropertySpecification} from '..';\n\nexport function supportsPropertyExpression(spec: StylePropertySpecification): boolean {\n    return (\n        spec['property-type'] === 'data-driven' ||\n        spec['property-type'] === 'cross-faded-data-driven'\n    );\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","export function getType(val: unknown): 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","import {Color, isSupportedInterpolationColorSpace} from '../expression/types/color';\nimport {extendBy} from '../util/extend';\nimport {getType} from '../util/get_type';\nimport {Interpolate, interpolateFactory} 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';\nimport {Padding} from '../expression/types/padding';\nimport {ColorArray} from '../expression/types/color_array';\nimport {NumberArray} from '../expression/types/number_array';\nimport {typeOf} from '../expression/values';\nimport {ObjectType} from '../expression/types';\nimport {StylePropertySpecification} from '..';\n\nexport function isFunction(value) {\n    return (\n        typeof value === 'object' &&\n        value !== null &&\n        !Array.isArray(value) &&\n        typeOf(value) === ObjectType\n    );\n}\n\nfunction identityFunction(x) {\n    return x;\n}\n\nfunction getParseFunction(propertySpec: StylePropertySpecification) {\n    switch (propertySpec.type) {\n        case 'color':\n            return Color.parse;\n        case 'padding':\n            return Padding.parse;\n        case 'numberArray':\n            return NumberArray.parse;\n        case 'colorArray':\n            return ColorArray.parse;\n        default:\n            return null;\n    }\n}\n\nfunction getInnerFunction(type: string) {\n    switch (type) {\n        case 'exponential':\n            return evaluateExponentialFunction;\n        case 'interval':\n            return evaluateIntervalFunction;\n        case 'categorical':\n            return evaluateCategoricalFunction;\n        case 'identity':\n            return evaluateIdentityFunction;\n        default:\n            throw new Error(`Unknown function type \"${type}\"`);\n    }\n}\n\nexport function createFunction(parameters, propertySpec) {\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 =\n        parameters.type || (supportsInterpolation(propertySpec) ? 'exponential' : 'interval');\n\n    const parseFn = getParseFunction(propertySpec);\n    if (parseFn) {\n        parameters = extendBy({}, parameters);\n\n        if (parameters.stops) {\n            parameters.stops = parameters.stops.map((stop) => {\n                return [stop[0], parseFn(stop[1])];\n            });\n        }\n\n        if (parameters.default) {\n            parameters.default = parseFn(parameters.default);\n        } else {\n            parameters.default = parseFn(propertySpec.default);\n        }\n    }\n\n    if (parameters.colorSpace && !isSupportedInterpolationColorSpace(parameters.colorSpace)) {\n        throw new Error(`Unknown color space: \"${parameters.colorSpace}\"`);\n    }\n\n    const innerFun = getInnerFunction(type);\n    let hashedStops;\n    let categoricalKeyType;\n    if (type === 'categorical') {\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\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([\n                featureFunctions[z].zoom,\n                createFunction(featureFunctions[z], propertySpec)\n            ]);\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                    {\n                        stops: featureFunctionStops,\n                        base: parameters.base\n                    },\n                    propertySpec,\n                    zoom\n                ).evaluate(zoom, properties);\n            }\n        };\n    } else if (zoomDependent) {\n        const interpolationType =\n            type === 'exponential'\n                ? {name: 'exponential', base: parameters.base !== undefined ? parameters.base : 1}\n                : 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}) =>\n                innerFun(parameters, propertySpec, zoom, hashedStops, categoricalKeyType)\n        };\n    } else {\n        return {\n            kind: 'source',\n            evaluate(_, feature) {\n                const value =\n                    feature && feature.properties\n                        ? feature.properties[parameters.property]\n                        : 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(\n        parameters.stops.map((stop) => stop[0]),\n        input\n    );\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(\n        parameters.stops.map((stop) => stop[0]),\n        input\n    );\n    const t = interpolationFactor(\n        input,\n        base,\n        parameters.stops[index][0],\n        parameters.stops[index + 1][0]\n    );\n\n    const outputLower = parameters.stops[index][1];\n    const outputUpper = parameters.stops[index + 1][1];\n    const interp = interpolateFactory[propertySpec.type] || identityFunction;\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, parameters.colorSpace);\n            }\n        };\n    }\n\n    return interp(outputLower, outputUpper, t, parameters.colorSpace);\n}\n\nfunction evaluateIdentityFunction(parameters, propertySpec, input) {\n    switch (propertySpec.type) {\n        case 'color':\n            input = Color.parse(input);\n            break;\n        case 'formatted':\n            input = Formatted.fromString(input.toString());\n            break;\n        case 'resolvedImage':\n            input = ResolvedImage.fromString(input.toString());\n            break;\n        case 'padding':\n            input = Padding.parse(input);\n            break;\n        case 'colorArray':\n            input = ColorArray.parse(input);\n            break;\n        case 'numberArray':\n            input = NumberArray.parse(input);\n            break;\n        default:\n            if (\n                getType(input) !== propertySpec.type &&\n                (propertySpec.type !== 'enum' || !propertySpec.values[input])\n            ) {\n                input = undefined;\n            }\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","import {extendBy} from '../util/extend';\nimport {ExpressionParsingError} from './parsing_error';\nimport {ParsingContext} from './parsing_context';\nimport {EvaluationContext} from './evaluation_context';\n\nimport {\n    CompoundExpression,\n    isFeatureConstant,\n    isGlobalPropertyConstant,\n    isStateConstant,\n    isExpressionConstant\n} from './compound_expression';\n\nimport {Step} from './definitions/step';\nimport {Interpolate} from './definitions/interpolate';\nimport {Coalesce} from './definitions/coalesce';\nimport {Let} from './definitions/let';\nimport {expressions} from './definitions';\n\nimport {RuntimeError} from './runtime_error';\nimport {success, error} from '../util/result';\nimport {\n    supportsPropertyExpression,\n    supportsZoomExpression,\n    supportsInterpolation\n} from '../util/properties';\n\nimport {\n    ColorType,\n    StringType,\n    NumberType,\n    BooleanType,\n    ValueType,\n    FormattedType,\n    PaddingType,\n    ResolvedImageType,\n    VariableAnchorOffsetCollectionType,\n    array,\n    type Type,\n    type EvaluationKind,\n    ProjectionDefinitionType,\n    NumberArrayType,\n    ColorArrayType\n} from './types';\nimport type {Value} from './values';\nimport type {Expression} from './expression';\nimport {type StylePropertySpecification} from '..';\nimport type {Result} from '../util/result';\nimport type {InterpolationType} from './definitions/interpolate';\nimport type {\n    PaddingSpecification,\n    NumberArraySpecification,\n    ColorArraySpecification,\n    PropertyValueSpecification,\n    VariableAnchorOffsetCollectionSpecification\n} from '../types.g';\nimport type {FormattedSection} from './types/formatted';\nimport type {Point2D} from '../point2d';\n\nimport {ICanonicalTileID} from '../tiles_and_coordinates';\nimport {isFunction, createFunction} from '../function';\nimport {Color} from './types/color';\nimport {Padding} from './types/padding';\nimport {NumberArray} from './types/number_array';\nimport {ColorArray} from './types/color_array';\nimport {VariableAnchorOffsetCollection} from './types/variable_anchor_offset_collection';\nimport {ProjectionDefinition} from './types/projection_definition';\nimport {GlobalState} from './definitions/global_state';\n\nexport type Feature = {\n    readonly type:\n        | 0\n        | 1\n        | 2\n        | 3\n        | 'Unknown'\n        | 'Point'\n        | 'MultiPoint'\n        | 'LineString'\n        | 'MultiLineString'\n        | 'Polygon'\n        | 'MultiPolygon';\n    readonly id?: any;\n    readonly properties: {[_: string]: any};\n    readonly patterns?: {\n        [_: string]: {\n            min: string;\n            mid: string;\n            max: string;\n        };\n    };\n    readonly dashes?: {\n        [_: string]: {\n            min: string;\n            mid: string;\n            max: string;\n        };\n    };\n    readonly geometry?: Array<Array<Point2D>>;\n};\n\nexport type FeatureState = {[_: string]: any};\n\nexport type GlobalProperties = Readonly<{\n    zoom: number;\n    heatmapDensity?: number;\n    elevation?: number;\n    lineProgress?: number;\n    isSupportedScript?: (_: string) => boolean;\n    accumulated?: Value;\n    globalState?: Record<string, any>;\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    readonly _globalState: Record<string, any>;\n\n    constructor(\n        expression: Expression,\n        propertySpec?: StylePropertySpecification | null,\n        globalState?: Record<string, any>\n    ) {\n        this.expression = expression;\n        this._warningHistory = {};\n        this._evaluator = new EvaluationContext();\n        this._defaultValue = propertySpec ? getDefaultValue(propertySpec) : null;\n        this._enumValues =\n            propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null;\n        this._globalState = globalState;\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\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(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\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            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(\n                    `Expected value to be one of ${Object.keys(this._enumValues)\n                        .map((v) => JSON.stringify(v))\n                        .join(', ')}, but found ${JSON.stringify(val)} instead.`\n                );\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: unknown) {\n    return (\n        Array.isArray(expression) &&\n        expression.length > 0 &&\n        typeof expression[0] === 'string' &&\n        expression[0] in expressions\n    );\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(\n    expression: unknown,\n    propertySpec?: StylePropertySpecification | null,\n    globalState?: Record<string, any>\n): Result<StyleExpression, Array<ExpressionParsingError>> {\n    const parser = new ParsingContext(\n        expressions,\n        isExpressionConstant,\n        [],\n        propertySpec ? getExpectedType(propertySpec) : undefined\n    );\n\n    // For string-valued properties, coerce to string at the top level rather than asserting.\n    const parsed = parser.parse(\n        expression,\n        undefined,\n        undefined,\n        undefined,\n        propertySpec && propertySpec.type === 'string' ? {typeAnnotation: 'coerce'} : undefined\n    );\n\n    if (!parsed) {\n        return error(parser.errors);\n    }\n\n    return success(new StyleExpression(parsed, propertySpec, globalState));\n}\n\nexport class ZoomConstantExpression<Kind extends EvaluationKind> {\n    kind: Kind;\n    isStateDependent: boolean;\n    globalStateRefs: Set<string>;\n    _styleExpression: StyleExpression;\n    readonly _globalState: Record<string, any>;\n\n    constructor(kind: Kind, expression: StyleExpression, globalState?: Record<string, any>) {\n        this.kind = kind;\n        this._styleExpression = expression;\n        this.isStateDependent =\n            kind !== ('constant' as EvaluationKind) && !isStateConstant(expression.expression);\n        this.globalStateRefs = findGlobalStateRefs(expression.expression);\n        this._globalState = globalState;\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\n        return this._styleExpression.evaluateWithoutErrorHandling(\n            globals,\n            feature,\n            featureState,\n            canonical,\n            availableImages,\n            formattedSection\n        );\n    }\n\n    evaluate(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\n        return this._styleExpression.evaluate(\n            globals,\n            feature,\n            featureState,\n            canonical,\n            availableImages,\n            formattedSection\n        );\n    }\n}\n\nexport class ZoomDependentExpression<Kind extends EvaluationKind> {\n    kind: Kind;\n    zoomStops: Array<number>;\n    isStateDependent: boolean;\n    globalStateRefs: Set<string>;\n    _styleExpression: StyleExpression;\n    interpolationType: InterpolationType;\n    readonly _globalState: Record<string, any>;\n\n    constructor(\n        kind: Kind,\n        expression: StyleExpression,\n        zoomStops: Array<number>,\n        interpolationType?: InterpolationType,\n        globalState?: Record<string, any>\n    ) {\n        this.kind = kind;\n        this.zoomStops = zoomStops;\n        this._styleExpression = expression;\n        this.isStateDependent =\n            kind !== ('camera' as EvaluationKind) && !isStateConstant(expression.expression);\n        this.globalStateRefs = findGlobalStateRefs(expression.expression);\n        this.interpolationType = interpolationType;\n        this._globalState = globalState;\n    }\n\n    evaluateWithoutErrorHandling(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\n        return this._styleExpression.evaluateWithoutErrorHandling(\n            globals,\n            feature,\n            featureState,\n            canonical,\n            availableImages,\n            formattedSection\n        );\n    }\n\n    evaluate(\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ): any {\n        if (this._globalState) {\n            globals = addGlobalState(globals, this._globalState);\n        }\n        return this._styleExpression.evaluate(\n            globals,\n            feature,\n            featureState,\n            canonical,\n            availableImages,\n            formattedSection\n        );\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 function isZoomExpression(\n    expression: any\n): expression is ZoomConstantExpression<'source'> | ZoomDependentExpression<'source'> {\n    return (expression as ZoomConstantExpression<'source'>)._styleExpression !== undefined;\n}\n\nexport type ConstantExpression = {\n    kind: 'constant';\n    globalStateRefs: Set<string>;\n    readonly _globalState: Record<string, any>;\n    readonly evaluate: (\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>\n    ) => any;\n};\n\nexport type SourceExpression = {\n    kind: 'source';\n    isStateDependent: boolean;\n    globalStateRefs: Set<string>;\n    readonly _globalState: Record<string, any>;\n    readonly evaluate: (\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ) => any;\n};\n\nexport type CameraExpression = {\n    kind: 'camera';\n    globalStateRefs: Set<string>;\n    readonly _globalState: Record<string, any>;\n    readonly evaluate: (\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>\n    ) => any;\n    readonly interpolationFactor: (input: number, lower: number, upper: number) => number;\n    zoomStops: Array<number>;\n    interpolationType: InterpolationType;\n};\n\nexport type CompositeExpression = {\n    kind: 'composite';\n    isStateDependent: boolean;\n    globalStateRefs: Set<string>;\n    readonly _globalState: Record<string, any>;\n    readonly evaluate: (\n        globals: GlobalProperties,\n        feature?: Feature,\n        featureState?: FeatureState,\n        canonical?: ICanonicalTileID,\n        availableImages?: Array<string>,\n        formattedSection?: FormattedSection\n    ) => any;\n    readonly interpolationFactor: (input: number, lower: number, upper: number) => number;\n    zoomStops: Array<number>;\n    interpolationType: InterpolationType;\n};\n\nexport type StylePropertyExpression =\n    | ConstantExpression\n    | SourceExpression\n    | CameraExpression\n    | CompositeExpression;\n\nexport function createPropertyExpression(\n    expressionInput: unknown,\n    propertySpec: StylePropertySpecification,\n    globalState?: Record<string, any>\n): Result<StylePropertyExpression, Array<ExpressionParsingError>> {\n    const expression = createExpression(expressionInput, propertySpec, globalState);\n    if (expression.result === 'error') {\n        return expression;\n    }\n\n    const parsed = expression.value.expression;\n\n    const isFeatureConstantResult = isFeatureConstant(parsed);\n    if (!isFeatureConstantResult && !supportsPropertyExpression(propertySpec)) {\n        return error([new ExpressionParsingError('', 'data expressions not supported')]);\n    }\n\n    const isZoomConstant = isGlobalPropertyConstant(parsed, ['zoom']);\n    if (!isZoomConstant && !supportsZoomExpression(propertySpec)) {\n        return error([new ExpressionParsingError('', 'zoom expressions not supported')]);\n    }\n\n    const zoomCurve = findZoomCurve(parsed);\n    if (!zoomCurve && !isZoomConstant) {\n        return error([\n            new ExpressionParsingError(\n                '',\n                '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'\n            )\n        ]);\n    } else if (zoomCurve instanceof ExpressionParsingError) {\n        return error([zoomCurve]);\n    } else if (zoomCurve instanceof Interpolate && !supportsInterpolation(propertySpec)) {\n        return error([\n            new ExpressionParsingError(\n                '',\n                '\"interpolate\" expressions cannot be used with this property'\n            )\n        ]);\n    }\n\n    if (!zoomCurve) {\n        return success(\n            isFeatureConstantResult\n                ? (new ZoomConstantExpression(\n                      'constant',\n                      expression.value,\n                      globalState\n                  ) as ConstantExpression)\n                : (new ZoomConstantExpression(\n                      'source',\n                      expression.value,\n                      globalState\n                  ) as SourceExpression)\n        );\n    }\n\n    const interpolationType =\n        zoomCurve instanceof Interpolate ? zoomCurve.interpolation : undefined;\n\n    return success(\n        isFeatureConstantResult\n            ? (new ZoomDependentExpression(\n                  'camera',\n                  expression.value,\n                  zoomCurve.labels,\n                  interpolationType,\n                  globalState\n              ) as CameraExpression)\n            : (new ZoomDependentExpression(\n                  'composite',\n                  expression.value,\n                  zoomCurve.labels,\n                  interpolationType,\n                  globalState\n              ) as CompositeExpression)\n    );\n}\n\n// serialization wrapper for old-style stop functions normalized to the\n// expression interface\nexport class StylePropertyFunction<T> {\n    _parameters: PropertyValueSpecification<T>;\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<number>;\n\n    constructor(\n        parameters: PropertyValueSpecification<T>,\n        specification: StylePropertySpecification\n    ) {\n        this._parameters = parameters;\n        this._specification = specification;\n        extendBy(this, createFunction(this._parameters, this._specification));\n    }\n\n    static deserialize<T>(serialized: {\n        _parameters: PropertyValueSpecification<T>;\n        _specification: StylePropertySpecification;\n    }) {\n        return new StylePropertyFunction(\n            serialized._parameters,\n            serialized._specification\n        ) as StylePropertyFunction<T>;\n    }\n\n    static serialize<T>(input: StylePropertyFunction<T>) {\n        return {\n            _parameters: input._parameters,\n            _specification: input._specification\n        };\n    }\n}\n\nexport function normalizePropertyExpression<T>(\n    value: PropertyValueSpecification<T>,\n    specification: StylePropertySpecification,\n    globalState?: Record<string, any>\n): StylePropertyExpression {\n    if (isFunction(value)) {\n        return new StylePropertyFunction(value, specification) as any;\n    } else if (isExpression(value)) {\n        const expression = createPropertyExpression(value, specification, globalState);\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    } else {\n        let constant: any = value;\n        if (specification.type === 'color' && typeof value === 'string') {\n            constant = Color.parse(value);\n        } else if (\n            specification.type === 'padding' &&\n            (typeof value === 'number' || Array.isArray(value))\n        ) {\n            constant = Padding.parse(value as PaddingSpecification);\n        } else if (\n            specification.type === 'numberArray' &&\n            (typeof value === 'number' || Array.isArray(value))\n        ) {\n            constant = NumberArray.parse(value as NumberArraySpecification);\n        } else if (\n            specification.type === 'colorArray' &&\n            (typeof value === 'string' || Array.isArray(value))\n        ) {\n            constant = ColorArray.parse(value as ColorArraySpecification);\n        } else if (\n            specification.type === 'variableAnchorOffsetCollection' &&\n            Array.isArray(value)\n        ) {\n            constant = VariableAnchorOffsetCollection.parse(\n                value as VariableAnchorOffsetCollectionSpecification\n            );\n        } else if (specification.type === 'projectionDefinition' && typeof value === 'string') {\n            constant = ProjectionDefinition.parse(value);\n        }\n        return {\n            globalStateRefs: new Set<string>(),\n            _globalState: null,\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 | ExpressionParsingError | null {\n    let result = null;\n    if (expression instanceof Let) {\n        result = findZoomCurve(expression.result);\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    } else if (\n        (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 ExpressionParsingError) {\n        return result;\n    }\n\n    expression.eachChild((child) => {\n        const childResult = findZoomCurve(child);\n        if (childResult instanceof ExpressionParsingError) {\n            result = childResult;\n        } else if (!result && childResult) {\n            result = new ExpressionParsingError(\n                '',\n                '\"zoom\" expression may only be used as input to a top-level \"step\" or \"interpolate\" expression.'\n            );\n        } else if (result && childResult && result !== childResult) {\n            result = new ExpressionParsingError(\n                '',\n                'Only one zoom-based \"step\" or \"interpolate\" subexpression may be used in an expression.'\n            );\n        }\n    });\n\n    return result;\n}\n\nexport function findGlobalStateRefs(\n    expression: Expression,\n    results = new Set<string>()\n): Set<string> {\n    if (expression instanceof GlobalState) {\n        results.add(expression.key);\n    }\n\n    expression.eachChild((childExpression) => {\n        findGlobalStateRefs(childExpression, results);\n    });\n    return results;\n}\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        padding: PaddingType,\n        numberArray: NumberArrayType,\n        colorArray: ColorArrayType,\n        projectionDefinition: ProjectionDefinitionType,\n        resolvedImage: ResolvedImageType,\n        variableAnchorOffsetCollection: VariableAnchorOffsetCollectionType\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    }\n    switch (spec.type) {\n        case 'color':\n            return Color.parse(spec.default) || null;\n        case 'padding':\n            return Padding.parse(spec.default) || null;\n        case 'numberArray':\n            return NumberArray.parse(spec.default) || null;\n        case 'colorArray':\n            return ColorArray.parse(spec.default) || null;\n        case 'variableAnchorOffsetCollection':\n            return VariableAnchorOffsetCollection.parse(spec.default) || null;\n        case 'projectionDefinition':\n            return ProjectionDefinition.parse(spec.default) || null;\n        default:\n            return spec.default === undefined ? null : spec.default;\n    }\n}\n\nfunction addGlobalState(\n    globals: GlobalProperties,\n    globalState: Record<string, any>\n): GlobalProperties {\n    const {zoom, heatmapDensity, elevation, lineProgress, isSupportedScript, accumulated} =\n        globals ?? {};\n    return {\n        zoom,\n        heatmapDensity,\n        elevation,\n        lineProgress,\n        isSupportedScript,\n        accumulated,\n        globalState\n    };\n}\n","import {createExpression, findGlobalStateRefs} from '../expression';\nimport type {GlobalProperties, Feature} from '../expression';\nimport {ICanonicalTileID} from '../tiles_and_coordinates';\nimport {StylePropertySpecification} from '..';\nimport {ExpressionFilterSpecification, type FilterSpecification} from '../types.g';\n\ntype FilterExpression = (\n    globalProperties: GlobalProperties,\n    feature: Feature,\n    canonical?: ICanonicalTileID\n) => boolean;\n\nexport type FeatureFilter = {\n    filter: FilterExpression;\n    needGeometry: boolean;\n    getGlobalStateRefs: () => Set<string>;\n};\n\nexport function isExpressionFilter(filter: any): filter is ExpressionFilterSpecification {\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 (\n                filter.length >= 3 && (typeof filter[1] !== 'string' || Array.isArray(filter[2]))\n            );\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 filter MapLibre filter\n * @param [globalState] Global state object to be used for evaluating 'global-state' expressions\n * @returns filter-evaluating function\n */\nexport function featureFilter(\n    filter: FilterSpecification | void,\n    globalState?: Record<string, any>\n): FeatureFilter {\n    if (filter === null || filter === undefined) {\n        return {filter: () => true, needGeometry: false, getGlobalStateRefs: () => new Set()};\n    }\n\n    if (!isExpressionFilter(filter)) {\n        filter = convertFilter(filter) as ExpressionFilterSpecification;\n    }\n\n    const compiled = createExpression(\n        filter,\n        filterSpec as StylePropertySpecification,\n        globalState\n    );\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 {\n            filter: (\n                globalProperties: GlobalProperties,\n                feature: Feature,\n                canonical?: ICanonicalTileID\n            ) => compiled.value.evaluate(globalProperties, feature, {}, canonical),\n            needGeometry,\n            getGlobalStateRefs: () => findGlobalStateRefs(compiled.value.expression)\n        };\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' || filter[0] === 'distance') 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<any> | null | void): unknown {\n    if (!filter) return true;\n    const op = filter[0];\n    if (filter.length <= 1) return op !== 'any';\n    const converted =\n        op === '=='\n            ? convertComparisonOp(filter[1], filter[2], '==')\n            : op === '!='\n              ? convertNegation(convertComparisonOp(filter[1], filter[2], '=='))\n              : op === '<' || op === '>' || op === '<=' || op === '>='\n                ? convertComparisonOp(filter[1], filter[2], op)\n                : op === 'any'\n                  ? convertDisjunctionOp(filter.slice(1))\n                  : op === 'all'\n                    ? ['all' as unknown].concat(filter.slice(1).map(convertFilter))\n                    : op === 'none'\n                      ? ['all' as unknown].concat(\n                            filter.slice(1).map(convertFilter).map(convertNegation)\n                        )\n                      : op === 'in'\n                        ? convertInOp(filter[1], filter.slice(2))\n                        : op === '!in'\n                          ? convertNegation(convertInOp(filter[1], filter.slice(2)))\n                          : op === 'has'\n                            ? convertHasOp(filter[1])\n                            : op === '!has'\n                              ? convertNegation(convertHasOp(filter[1]))\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<Array<any>>) {\n    return ['any' as unknown].concat(filters.map(convertFilter));\n}\n\nfunction convertInOp(property: string, values: Array<any>) {\n    if (values.length === 0) {\n        return false;\n    }\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: unknown) {\n    return ['!', filter];\n}\n","import {isExpressionFilter} from './index';\n\nimport type {\n    ExpressionFilterSpecification,\n    ExpressionInputType,\n    ExpressionSpecification,\n    FilterSpecification,\n    LegacyFilterSpecification\n} from '../types.g';\n\ntype ExpectedTypes = {[_: string]: ExpressionInputType};\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 evaluation 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 */\nexport function convertFilter(\n    filter: FilterSpecification,\n    expectedTypes: ExpectedTypes = {}\n): ExpressionFilterSpecification {\n    if (isExpressionFilter(filter)) return filter;\n    if (!filter) return true;\n\n    const legacyFilter = filter as LegacyFilterSpecification;\n    const legacyOp = legacyFilter[0];\n    if (filter.length <= 1) return legacyOp !== 'any';\n\n    switch (legacyOp) {\n        case '==':\n        case '!=':\n        case '<':\n        case '>':\n        case '<=':\n        case '>=': {\n            const [, property, value] = filter;\n            return convertComparisonOp(property as string, value, legacyOp, expectedTypes);\n        }\n        case 'any': {\n            const [, ...conditions] = legacyFilter;\n            const children = conditions.map((f: LegacyFilterSpecification) => {\n                const types = {};\n                const child = convertFilter(f, types);\n                const typechecks = runtimeTypeChecks(types);\n                return typechecks === true\n                    ? child\n                    : (['case', typechecks, child, false] as ExpressionSpecification);\n            });\n            return ['any', ...children];\n        }\n        case 'all': {\n            const [, ...conditions] = legacyFilter;\n            const children = conditions.map((f) => convertFilter(f, expectedTypes));\n            return children.length > 1 ? ['all', ...children] : children[0];\n        }\n        case 'none': {\n            const [, ...conditions] = legacyFilter;\n            return ['!', convertFilter(['any', ...conditions], {})];\n        }\n        case 'in': {\n            const [, property, ...values] = legacyFilter;\n            return convertInOp(property, values);\n        }\n        case '!in': {\n            const [, property, ...values] = legacyFilter;\n            return convertInOp(property, values, true);\n        }\n        case 'has':\n            return convertHasOp(legacyFilter[1]);\n        case '!has':\n            return ['!', convertHasOp(legacyFilter[1])];\n        default:\n            return true;\n    }\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): ExpressionFilterSpecification {\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', ...conditions];\n}\n\nfunction convertComparisonOp(\n    property: string,\n    value: any,\n    op: string,\n    expectedTypes?: ExpectedTypes | null\n): ExpressionFilterSpecification {\n    let get;\n    if (property === '$type') {\n        return [op, ['geometry-type'], value] as ExpressionFilterSpecification;\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 as 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] as ExpressionFilterSpecification;\n}\n\nfunction convertInOp(\n    property: string,\n    values: Array<any>,\n    negate = false\n): ExpressionFilterSpecification {\n    if (values.length === 0) return negate;\n\n    let get: ExpressionSpecification;\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    if (negate) {\n        return ['all', ...values.map((v) => ['!=', get, v] as ExpressionSpecification)];\n    } else {\n        return ['any', ...values.map((v) => ['==', get, v] as ExpressionSpecification)];\n    }\n}\n\nfunction convertHasOp(property: string): ExpressionFilterSpecification {\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","import type {StylePropertySpecification} from '..';\n\nfunction convertLiteral(value) {\n    return typeof value === 'object' ? ['literal', value] : value;\n}\n\nexport function 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 as any).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<unknown> {\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 ['match', get, Object.keys(propertySpec.values), get, parameters.default];\n    } else {\n        const expression = [\n            propertySpec.type === 'color' ? 'to-color' : propertySpec.type,\n            get,\n            convertLiteral(parameters.default)\n        ];\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':\n            return 'interpolate-hcl';\n        case 'lab':\n            return 'interpolate-lab';\n        default:\n            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(\n                featureFunctionParameters[z],\n                propertySpec,\n                featureFunctionStops[z]\n            );\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(\n                featureFunctionParameters[z],\n                propertySpec,\n                featureFunctionStops[z]\n            );\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        const expression: any = ['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\n            ? expression\n            : [\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\n            ? expression\n            : [\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 = [\n            getInterpolateOperator(parameters),\n            base === 1 ? ['linear'] : ['exponential', base],\n            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        return (propertySpec.expression as 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: any = ['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","import Reference from './reference/v8.json' with {type: 'json'};\nimport type {StylePropertySpecification} from '.';\nimport type {\n    StyleSpecification,\n    SourceSpecification,\n    LayerSpecification,\n    PropertyValueSpecification,\n    DataDrivenPropertyValueSpecification\n} from './types.g';\n\nfunction getPropertyReference(propertyName: string): StylePropertySpecification | null {\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];\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];\n        }\n    }\n\n    return null;\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 = (a: {\n    path: [string, 'paint' | 'layout', string]; // [layerid, paint/layout, property key],\n    key: string;\n    value: PropertyValueSpecification<unknown> | DataDrivenPropertyValueSpecification<unknown>;\n    reference: StylePropertySpecification | null;\n    set: (\n        a: PropertyValueSpecification<unknown> | DataDrivenPropertyValueSpecification<unknown>\n    ) => void;\n}) => void;\n\nexport function eachProperty(\n    style: StyleSpecification,\n    options: {\n        paint?: boolean;\n        layout?: boolean;\n    },\n    callback: PropertyCallback\n) {\n    function inner(layer: LayerSpecification, propertyType: 'paint' | 'layout') {\n        const properties = layer[propertyType];\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","import {refProperties} from './util/ref_properties';\nimport type {LayerSpecification} from './types.g';\n\nfunction stringify(obj: any): string {\n    const type = typeof obj;\n    if (\n        type === 'number' ||\n        type === 'boolean' ||\n        type === 'string' ||\n        obj === undefined ||\n        obj === null\n    )\n        return JSON.stringify(obj);\n\n    if (Array.isArray(obj)) {\n        let str = '[';\n        for (const val of obj) {\n            str += `${stringify(val)},`;\n        }\n        return `${str}]`;\n    }\n\n    const keys = Object.keys(obj).sort();\n\n    let str = '{';\n    for (let i = 0; i < keys.length; i++) {\n        str += `${JSON.stringify(keys[i])}:${stringify(obj[keys[i]])},`;\n    }\n    return `${str}}`;\n}\n\nfunction getKey(layer: LayerSpecification): string {\n    let key = '';\n    for (const k of refProperties) {\n        key += `/${stringify(layer[k])}`;\n    }\n    return key;\n}\n\n/**\n * Groups layers by their layout-affecting properties.\n * These are the properties that were formerly used by explicit `ref` mechanism\n * for layers: 'type', 'source', 'source-layer', 'minzoom', 'maxzoom',\n * 'filter', and 'layout'.\n *\n * The input is not modified. The output layers are references to the\n * input layers.\n *\n * @param layers - an array of {@link LayerSpecification}.\n * @param cachedKeys - an object to keep already calculated keys.\n * @returns an array of arrays of {@link LayerSpecification} objects, where each inner array\n * contains layers that share the same layout-affecting properties.\n */\nexport function groupByLayout(\n    layers: LayerSpecification[],\n    cachedKeys?: Record<string, string>\n): LayerSpecification[][] {\n    const groups: Record<string, LayerSpecification[]> = {};\n\n    for (let i = 0; i < layers.length; i++) {\n        const k: string = (cachedKeys && cachedKeys[layers[i].id]) || getKey(layers[i]);\n        // update the cache if there is one\n        if (cachedKeys) cachedKeys[layers[i].id] = k;\n\n        let group = groups[k];\n        if (!group) {\n            group = groups[k] = [];\n        }\n        group.push(layers[i]);\n    }\n\n    const result: LayerSpecification[][] = [];\n\n    for (const k in groups) {\n        result.push(groups[k]);\n    }\n\n    return result;\n}\n","import {latest} from './reference/latest';\nimport {StyleSpecification} from './types.g';\n\nexport function emptyStyle(): StyleSpecification {\n    const style = {};\n\n    const version = latest['$version'];\n    for (const styleKey in latest['$root']) {\n        const specification = latest['$root'][styleKey];\n\n        if (specification.required) {\n            let value = null;\n            if (styleKey === 'version') {\n                value = version;\n            } else {\n                if (specification.type === 'array') {\n                    value = [];\n                } else {\n                    value = {};\n                }\n            }\n\n            if (value != null) {\n                style[styleKey] = value;\n            }\n        }\n    }\n\n    return style as StyleSpecification;\n}\n","import {ValidationError} from '../error/validation_error';\n\nexport 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","// Turn jsonlint-lines-primitives objects into primitive objects\nexport function unbundle(value: unknown) {\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: unknown): unknown {\n    if (Array.isArray(value)) {\n        return value.map(deepUnbundle);\n    } else if (\n        value instanceof Object &&\n        !(value instanceof Number || value instanceof String || value instanceof Boolean)\n    ) {\n        const unbundledValue: {[key: string]: unknown} = {};\n        for (const key in value) {\n            unbundledValue[key] = deepUnbundle(value[key]);\n        }\n        return unbundledValue;\n    }\n\n    return unbundle(value);\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getOwn} from '../util/get_own';\nimport {getType} from '../util/get_type';\n\nexport function validateObject(options): Array<ValidationError> {\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    const validateSpec = options.validateSpec;\n    let errors: ValidationError[] = [];\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        // objectKey comes from the user controlled style input, so elementSpecKey may be e.g. \"__proto__\"\n        const elementSpec = getOwn(elementSpecs, elementSpecKey) || elementSpecs['*'];\n\n        let validateElement;\n        if (getOwn(elementValidators, elementSpecKey)) {\n            validateElement = elementValidators[elementSpecKey];\n        } else if (getOwn(elementSpecs, elementSpecKey)) {\n            if (object[objectKey] === undefined) {\n                // property is possible, set but set to undefined\n                // we only check it if it is required and not defaulted in the next loop\n                // without skipping here, we would alert to properties being set to undefined\n                continue;\n            }\n            validateElement = validateSpec;\n        } else if (elementValidators['*']) {\n            validateElement = elementValidators['*'];\n        } else if (elementSpecs['*']) {\n            validateElement = validateSpec;\n        } else {\n            errors.push(\n                new ValidationError(key, object[objectKey], `unknown property \"${objectKey}\"`)\n            );\n            continue;\n        }\n\n        errors = errors.concat(\n            validateElement(\n                {\n                    key: (key ? `${key}.` : key) + objectKey,\n                    value: object[objectKey],\n                    valueSpec: elementSpec,\n                    style,\n                    styleSpec,\n                    object,\n                    objectKey,\n                    validateSpec\n                },\n                object\n            )\n        );\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 (\n            elementSpecs[elementSpecKey].required &&\n            elementSpecs[elementSpecKey]['default'] === undefined &&\n            object[elementSpecKey] === undefined\n        ) {\n            errors.push(\n                new ValidationError(key, object, `missing required property \"${elementSpecKey}\"`)\n            );\n        }\n    }\n\n    return errors;\n}\n","import {getType} from '../util/get_type';\nimport {ValidationError} from '../error/validation_error';\n\nexport function validateArray(options) {\n    const array = options.value;\n    const arraySpec = options.valueSpec;\n    const validateSpec = options.validateSpec;\n    const style = options.style;\n    const styleSpec = options.styleSpec;\n    const key = options.key;\n    const validateArrayElement = options.arrayElementValidator || validateSpec;\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 [\n            new ValidationError(\n                key,\n                array,\n                `array length ${arraySpec.length} expected, length ${array.length} found`\n            )\n        ];\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(\n            validateArrayElement({\n                array,\n                arrayIndex: i,\n                value: array[i],\n                valueSpec: arrayElementSpec,\n                validateSpec: options.validateSpec,\n                style,\n                styleSpec,\n                key: `${key}[${i}]`\n            })\n        );\n    }\n    return errors;\n}\n","import {getType} from '../util/get_type';\nimport {ValidationError} from '../error/validation_error';\n\nexport 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    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 [\n            new ValidationError(\n                key,\n                value,\n                `${value} is less than the minimum value ${valueSpec.minimum}`\n            )\n        ];\n    }\n\n    if ('maximum' in valueSpec && value > valueSpec.maximum) {\n        return [\n            new ValidationError(\n                key,\n                value,\n                `${value} is greater than the maximum value ${valueSpec.maximum}`\n            )\n        ];\n    }\n\n    return [];\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\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 function validateFunction(options): Array<ValidationError> {\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        validateSpec: options.validateSpec,\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(\n            new ValidationError(options.key, options.value, 'missing required property \"property\"')\n        );\n    }\n\n    if (functionType !== 'identity' && !options.value.stops) {\n        errors.push(\n            new ValidationError(options.key, options.value, 'missing required property \"stops\"')\n        );\n    }\n\n    if (\n        functionType === 'exponential' &&\n        options.valueSpec.expression &&\n        !supportsInterpolation(options.valueSpec)\n    ) {\n        errors.push(\n            new ValidationError(options.key, options.value, 'exponential functions not supported')\n        );\n    }\n\n    if (options.styleSpec.$version >= 8) {\n        if (isPropertyFunction && !supportsPropertyExpression(options.valueSpec)) {\n            errors.push(\n                new ValidationError(options.key, options.value, 'property functions not supported')\n            );\n        } else if (isZoomFunction && !supportsZoomExpression(options.valueSpec)) {\n            errors.push(\n                new ValidationError(options.key, options.value, 'zoom functions not supported')\n            );\n        }\n    }\n\n    if (\n        (functionType === 'categorical' || isZoomAndPropertyFunction) &&\n        options.value.property === undefined\n    ) {\n        errors.push(\n            new ValidationError(options.key, options.value, '\"property\" property is required')\n        );\n    }\n\n    return errors;\n\n    function validateFunctionStops(options) {\n        if (functionType === 'identity') {\n            return [\n                new ValidationError(\n                    options.key,\n                    options.value,\n                    'identity function may not have a \"stops\" property'\n                )\n            ];\n        }\n\n        let errors = [];\n        const value = options.value;\n\n        errors = errors.concat(\n            validateArray({\n                key: options.key,\n                value,\n                valueSpec: options.valueSpec,\n                validateSpec: options.validateSpec,\n                style: options.style,\n                styleSpec: options.styleSpec,\n                arrayElementValidator: validateFunctionStop\n            })\n        );\n\n        if (getType(value) === 'array' && value.length === 0) {\n            errors.push(\n                new ValidationError(options.key, value, 'array must have at least one stop')\n            );\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 [\n                new ValidationError(\n                    key,\n                    value,\n                    `array length 2 expected, length ${value.length} found`\n                )\n            ];\n        }\n\n        if (isZoomAndPropertyFunction) {\n            if (getType(value[0]) !== 'object') {\n                return [\n                    new ValidationError(key, value, `object expected, ${getType(value[0])} found`)\n                ];\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 [\n                    new ValidationError(\n                        key,\n                        value[0].zoom,\n                        'stop zoom values must appear in ascending order'\n                    )\n                ];\n            }\n            if (unbundle(value[0].zoom) !== previousStopDomainZoom) {\n                previousStopDomainZoom = unbundle(value[0].zoom);\n                previousStopDomainValue = undefined;\n                stopDomainValues = {};\n            }\n            errors = errors.concat(\n                validateObject({\n                    key: `${key}[0]`,\n                    value: value[0],\n                    valueSpec: {zoom: {}},\n                    validateSpec: options.validateSpec,\n                    style: options.style,\n                    styleSpec: options.styleSpec,\n                    objectElementValidators: {\n                        zoom: validateNumber,\n                        value: validateStopDomainValue\n                    }\n                })\n            );\n        } else {\n            errors = errors.concat(\n                validateStopDomainValue(\n                    {\n                        key: `${key}[0]`,\n                        value: value[0],\n                        valueSpec: {},\n                        validateSpec: options.validateSpec,\n                        style: options.style,\n                        styleSpec: options.styleSpec\n                    },\n                    value\n                )\n            );\n        }\n\n        if (isExpression(deepUnbundle(value[1]))) {\n            return errors.concat([\n                new ValidationError(\n                    `${key}[1]`,\n                    value[1],\n                    'expressions are not allowed in function stops.'\n                )\n            ]);\n        }\n\n        return errors.concat(\n            options.validateSpec({\n                key: `${key}[1]`,\n                value: value[1],\n                valueSpec: functionValueSpec,\n                validateSpec: options.validateSpec,\n                style: options.style,\n                styleSpec: options.styleSpec\n            })\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 [\n                new ValidationError(\n                    options.key,\n                    reportValue,\n                    `${type} stop domain type must match previous stop domain type ${stopKeyType}`\n                )\n            ];\n        }\n\n        if (type !== 'number' && type !== 'string' && type !== 'boolean') {\n            return [\n                new ValidationError(\n                    options.key,\n                    reportValue,\n                    'stop domain value must be a number, string, or boolean'\n                )\n            ];\n        }\n\n        if (type !== 'number' && functionType !== 'categorical') {\n            let message = `number expected, ${type} found`;\n            if (supportsPropertyExpression(functionValueSpec) && functionType === undefined) {\n                message +=\n                    '\\nIf you intended to use a categorical function, specify `\"type\": \"categorical\"`.';\n            }\n            return [new ValidationError(options.key, reportValue, message)];\n        }\n\n        if (\n            functionType === 'categorical' &&\n            type === 'number' &&\n            (!isFinite(value as number) || Math.floor(value as number) !== value)\n        ) {\n            return [\n                new ValidationError(options.key, reportValue, `integer expected, found ${value}`)\n            ];\n        }\n\n        if (\n            functionType !== 'categorical' &&\n            type === 'number' &&\n            previousStopDomainValue !== undefined &&\n            value < previousStopDomainValue\n        ) {\n            return [\n                new ValidationError(\n                    options.key,\n                    reportValue,\n                    'stop domain values must appear in ascending order'\n                )\n            ];\n        } else {\n            previousStopDomainValue = value;\n        }\n\n        if (functionType === 'categorical' && (value as any) in stopDomainValues) {\n            return [\n                new ValidationError(options.key, reportValue, 'stop domain values must be unique')\n            ];\n        } else {\n            stopDomainValues[value as any] = true;\n        }\n\n        return [];\n    }\n\n    function validateFunctionDefault(options): Array<ValidationError> {\n        return options.validateSpec({\n            key: options.key,\n            value: options.value,\n            valueSpec: functionValueSpec,\n            validateSpec: options.validateSpec,\n            style: options.style,\n            styleSpec: options.styleSpec\n        });\n    }\n}\n","import {ValidationError} from '../error/validation_error';\n\nimport {createExpression, createPropertyExpression} from '../expression';\nimport {deepUnbundle} from '../util/unbundle_jsonlint';\n\nimport {\n    isFeatureConstant,\n    isGlobalPropertyConstant,\n    isStateConstant\n} from '../expression/compound_expression';\n\nimport {Expression} from '../expression/expression';\n\nexport function validateExpression(options: any): Array<ValidationError> {\n    const expression = (\n        options.expressionContext === 'property' ? createPropertyExpression : createExpression\n    )(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 =\n        (expression.value as any).expression ||\n        (expression.value as any)._styleExpression.expression;\n\n    if (\n        options.expressionContext === 'property' &&\n        options.propertyKey === 'text-font' &&\n        !expressionObj.outputDefined()\n    ) {\n        return [\n            new ValidationError(\n                options.key,\n                options.value,\n                `Invalid data expression for \"${options.propertyKey}\". Output values must be contained as literals within the expression.`\n            )\n        ];\n    }\n\n    if (\n        options.expressionContext === 'property' &&\n        options.propertyType === 'layout' &&\n        !isStateConstant(expressionObj)\n    ) {\n        return [\n            new ValidationError(\n                options.key,\n                options.value,\n                '\"feature-state\" data expressions are not supported with layout properties.'\n            )\n        ];\n    }\n\n    if (options.expressionContext === 'filter' && !isStateConstant(expressionObj)) {\n        return [\n            new ValidationError(\n                options.key,\n                options.value,\n                '\"feature-state\" data expressions are not supported with filters.'\n            )\n        ];\n    }\n\n    if (options.expressionContext && options.expressionContext.indexOf('cluster') === 0) {\n        if (!isGlobalPropertyConstant(expressionObj, ['zoom', 'feature-state'])) {\n            return [\n                new ValidationError(\n                    options.key,\n                    options.value,\n                    '\"zoom\" and \"feature-state\" expressions are not supported with cluster properties.'\n                )\n            ];\n        }\n        if (options.expressionContext === 'cluster-initial' && !isFeatureConstant(expressionObj)) {\n            return [\n                new ValidationError(\n                    options.key,\n                    options.value,\n                    'Feature data expressions are not supported with initial expression part of cluster properties.'\n                )\n            ];\n        }\n    }\n\n    return [];\n}\n","import {getType} from '../util/get_type';\nimport {ValidationError} from '../error/validation_error';\n\nexport 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","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {Color} from '../expression/types/color';\n\nexport 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 (!Color.parse(String(value))) {\n        // cast String object to string primitive\n        return [new ValidationError(key, value, `color expected, \"${value}\" found`)];\n    }\n\n    return [];\n}\n","import {ValidationError} from '../error/validation_error';\nimport {unbundle} from '../util/unbundle_jsonlint';\n\nexport 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)) {\n        // <=v7\n        if (valueSpec.values.indexOf(unbundle(value)) === -1) {\n            errors.push(\n                new ValidationError(\n                    key,\n                    value,\n                    `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`\n                )\n            );\n        }\n    } else {\n        // >=v8\n        if (Object.keys(valueSpec.values).indexOf(unbundle(value) as string) === -1) {\n            errors.push(\n                new ValidationError(\n                    key,\n                    value,\n                    `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`\n                )\n            );\n        }\n    }\n    return errors;\n}\n","import {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 {extendBy as extend} from '../util/extend';\nimport {isExpressionFilter} from '../feature_filter';\n\nexport function validateFilter(options) {\n    if (isExpressionFilter(deepUnbundle(options.value))) {\n        return validateExpression(\n            extend({}, options, {\n                expressionContext: 'filter',\n                valueSpec: {value: 'boolean'}\n            })\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(\n        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\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(\n                    new ValidationError(\n                        key,\n                        value,\n                        `\"$type\" cannot be use with operator \"${value[0]}\"`\n                    )\n                );\n            }\n        /* falls through */\n        case '==':\n        case '!=':\n            if (value.length !== 3) {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        value,\n                        `filter array for operator \"${value[0]}\" must have 3 elements`\n                    )\n                );\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(\n                        new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`)\n                    );\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(\n                        validateEnum({\n                            key: `${key}[${i}]`,\n                            value: value[i],\n                            valueSpec: styleSpec.geometry_type,\n                            style: options.style,\n                            styleSpec: options.styleSpec\n                        })\n                    );\n                } else if (type !== 'string' && type !== 'number' && type !== 'boolean') {\n                    errors.push(\n                        new ValidationError(\n                            `${key}[${i}]`,\n                            value[i],\n                            `string, number, or boolean expected, ${type} found`\n                        )\n                    );\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(\n                    validateNonExpressionFilter({\n                        key: `${key}[${i}]`,\n                        value: value[i],\n                        style: options.style,\n                        styleSpec: options.styleSpec\n                    })\n                );\n            }\n            break;\n\n        case 'has':\n        case '!has':\n            type = getType(value[1]);\n            if (value.length !== 2) {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        value,\n                        `filter array for \"${value[0]}\" operator must have 2 elements`\n                    )\n                );\n            } else if (type !== 'string') {\n                errors.push(\n                    new ValidationError(`${key}[1]`, value[1], `string expected, ${type} found`)\n                );\n            }\n            break;\n    }\n    return errors;\n}\n","import {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 function validateProperty(options, propertyType) {\n    const key = options.key;\n    const validateSpec = options.validateSpec;\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 (\n        propertyType === 'paint' &&\n        transitionMatch &&\n        layerSpec[transitionMatch[1]] &&\n        layerSpec[transitionMatch[1]].transition\n    ) {\n        return validateSpec({\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 (\n        getType(value) === 'string' &&\n        supportsPropertyExpression(valueSpec) &&\n        !valueSpec.tokens &&\n        (tokenMatch = /^{([^}]+)}$/.exec(value))\n    ) {\n        return [\n            new ValidationError(\n                key,\n                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    }\n\n    const errors = [];\n\n    if (options.layerType === 'symbol') {\n        if (\n            propertyKey === 'text-font' &&\n            isFunction(deepUnbundle(value)) &&\n            unbundle(value.type) === 'identity'\n        ) {\n            errors.push(\n                new ValidationError(key, value, '\"text-font\" does not support identity functions')\n            );\n        }\n    }\n\n    return errors.concat(\n        validateSpec({\n            key: options.key,\n            value,\n            valueSpec,\n            style,\n            styleSpec,\n            expressionContext: 'property',\n            propertyType,\n            propertyKey\n        })\n    );\n}\n","import {validateProperty} from './validate_property';\n\nexport function validatePaintProperty(options) {\n    return validateProperty(options, 'paint');\n}\n","import {validateProperty} from './validate_property';\n\nexport function validateLayoutProperty(options) {\n    return validateProperty(options, 'layout');\n}\n","import {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 {extendBy as extend} from '../util/extend';\nimport {getType} from '../util/get_type';\n\nexport 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 (getType(layer) !== 'object') {\n        return [new ValidationError(key, layer, `object expected, ${getType(layer)} found`)];\n    }\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(\n                    new ValidationError(\n                        key,\n                        layer.id,\n                        `duplicate layer id \"${layer.id}\", previously used at line ${otherLayer.id.__line__}`\n                    )\n                );\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(\n                    new ValidationError(key, layer[p], `\"${p}\" is prohibited for ref layers`)\n                );\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(\n                new ValidationError(key, layer.ref, 'ref cannot reference another ref layer')\n            );\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(\n                    new ValidationError(key, layer.source, `source \"${layer.source}\" not found`)\n                );\n            } else if (sourceType === 'vector' && type === 'raster') {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer.source,\n                        `layer \"${layer.id}\" requires a raster source`\n                    )\n                );\n            } else if (sourceType !== 'raster-dem' && type === 'hillshade') {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer.source,\n                        `layer \"${layer.id}\" requires a raster-dem source`\n                    )\n                );\n            } else if (sourceType !== 'raster-dem' && type === 'color-relief') {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer.source,\n                        `layer \"${layer.id}\" requires a raster-dem source`\n                    )\n                );\n            } else if (sourceType === 'raster' && type !== 'raster') {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer.source,\n                        `layer \"${layer.id}\" requires a vector source`\n                    )\n                );\n            } else if (sourceType === 'vector' && !layer['source-layer']) {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer,\n                        `layer \"${layer.id}\" must specify a \"source-layer\"`\n                    )\n                );\n            } else if (\n                sourceType === 'raster-dem' &&\n                type !== 'hillshade' &&\n                type !== 'color-relief'\n            ) {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer.source,\n                        \"raster-dem source can only be used with layer type 'hillshade' or 'color-relief'.\"\n                    )\n                );\n            } else if (\n                type === 'line' &&\n                layer.paint &&\n                layer.paint['line-gradient'] &&\n                (sourceType !== 'geojson' || !source.lineMetrics)\n            ) {\n                errors.push(\n                    new ValidationError(\n                        key,\n                        layer,\n                        `layer \"${layer.id}\" specifies a line-gradient, which requires a GeoJSON source with \\`lineMetrics\\` enabled.`\n                    )\n                );\n            }\n        }\n    }\n\n    if (type === 'raster' && layer.paint?.resampling && layer.paint?.['raster-resampling']) {\n        errors.push(\n            new ValidationError(\n                key,\n                layer.paint,\n                `layer \"${layer.id}\" redundantly specifies \"resampling\" and \"raster-resampling\" paint properties, but only one is allowed. It is advised to use \"resampling\".`\n            )\n        );\n    }\n\n    errors = errors.concat(\n        validateObject({\n            key,\n            value: layer,\n            valueSpec: styleSpec.layer,\n            style: options.style,\n            styleSpec: options.styleSpec,\n            validateSpec: options.validateSpec,\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 options.validateSpec({\n                        key: `${key}.type`,\n                        value: layer.type,\n                        valueSpec: styleSpec.layer.type,\n                        style: options.style,\n                        styleSpec: options.styleSpec,\n                        validateSpec: options.validateSpec,\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                        validateSpec: options.validateSpec,\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                        validateSpec: options.validateSpec,\n                        objectElementValidators: {\n                            '*'(options) {\n                                return validatePaintProperty(extend({layerType: type}, options));\n                            }\n                        }\n                    });\n                }\n            }\n        })\n    );\n\n    return errors;\n}\n","import {getType} from '../util/get_type';\nimport {ValidationError} from '../error/validation_error';\n\nexport 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","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport type {RasterDEMSourceSpecification, StyleSpecification} from '../types.g';\nimport v8 from '../reference/v8.json' with {type: 'json'};\nimport {unbundle} from '../util/unbundle_jsonlint';\n\ninterface ValidateRasterDENSourceOptions {\n    sourceName?: string;\n    value: RasterDEMSourceSpecification;\n    styleSpec: typeof v8;\n    style: StyleSpecification;\n    validateSpec: Function;\n}\n\nexport function validateRasterDEMSource(\n    options: ValidateRasterDENSourceOptions\n): ValidationError[] {\n    const sourceName = options.sourceName ?? '';\n    const rasterDEM = options.value;\n    const styleSpec = options.styleSpec;\n    const rasterDEMSpec = styleSpec.source_raster_dem;\n    const style = options.style;\n\n    let errors = [];\n\n    const rootType = getType(rasterDEM);\n    if (rasterDEM === undefined) {\n        return errors;\n    } else if (rootType !== 'object') {\n        errors.push(\n            new ValidationError(\n                'source_raster_dem',\n                rasterDEM,\n                `object expected, ${rootType} found`\n            )\n        );\n        return errors;\n    }\n\n    const encoding = unbundle(rasterDEM.encoding);\n    const isCustomEncoding = encoding === 'custom';\n    const customEncodingKeys = ['redFactor', 'greenFactor', 'blueFactor', 'baseShift'];\n    const encodingName = options.value.encoding ? `\"${options.value.encoding}\"` : 'Default';\n\n    for (const key in rasterDEM) {\n        if (!isCustomEncoding && customEncodingKeys.includes(key)) {\n            errors.push(\n                new ValidationError(\n                    key,\n                    rasterDEM[key],\n                    `In \"${sourceName}\": \"${key}\" is only valid when \"encoding\" is set to \"custom\". ${encodingName} encoding found`\n                )\n            );\n        } else if (rasterDEMSpec[key]) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: rasterDEM[key],\n                    valueSpec: rasterDEMSpec[key],\n                    validateSpec: options.validateSpec,\n                    style,\n                    styleSpec\n                })\n            );\n        } else {\n            errors.push(new ValidationError(key, rasterDEM[key], `unknown property \"${key}\"`));\n        }\n    }\n\n    return errors;\n}\n","import {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';\nimport {validateRasterDEMSource} from './validate_raster_dem_source';\n\nconst objectElementValidators = {\n    promoteId: validatePromoteId\n};\n\nexport function validateSource(options) {\n    const value = options.value;\n    const key = options.key;\n    const styleSpec = options.styleSpec;\n    const style = options.style;\n    const validateSpec = options.validateSpec;\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            errors = validateObject({\n                key,\n                value,\n                valueSpec: styleSpec[`source_${type.replace('-', '_')}`],\n                style: options.style,\n                styleSpec,\n                objectElementValidators,\n                validateSpec\n            });\n            return errors;\n        case 'raster-dem':\n            errors = validateRasterDEMSource({\n                sourceName: key,\n                value,\n                style: options.style,\n                styleSpec,\n                validateSpec\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                validateSpec,\n                objectElementValidators\n            });\n            if (value.cluster) {\n                for (const prop in value.clusterProperties) {\n                    const [operator, mapExpr] = value.clusterProperties[prop];\n                    const reduceExpr =\n                        typeof operator === 'string'\n                            ? [operator, ['accumulated'], ['get', prop]]\n                            : operator;\n\n                    errors.push(\n                        ...validateExpression({\n                            key: `${key}.${prop}.map`,\n                            value: mapExpr,\n                            validateSpec,\n                            expressionContext: 'cluster-map'\n                        })\n                    );\n                    errors.push(\n                        ...validateExpression({\n                            key: `${key}.${prop}.reduce`,\n                            value: reduceExpr,\n                            validateSpec,\n                            expressionContext: 'cluster-reduce'\n                        })\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                validateSpec,\n                styleSpec\n            });\n\n        case 'image':\n            return validateObject({\n                key,\n                value,\n                valueSpec: styleSpec.source_image,\n                style,\n                validateSpec,\n                styleSpec\n            });\n\n        case 'canvas':\n            return [\n                new ValidationError(\n                    key,\n                    null,\n                    'Please use runtime APIs to add canvas sources, rather than including them in stylesheets.',\n                    'source.canvas'\n                )\n            ];\n\n        default:\n            return validateEnum({\n                key: `${key}.type`,\n                value: value.type,\n                valueSpec: {\n                    values: ['vector', 'raster', 'raster-dem', 'geojson', 'video', 'image']\n                },\n                style,\n                validateSpec,\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","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\n\nexport 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([\n            new ValidationError('light', light, `object expected, ${rootType} found`)\n        ]);\n        return errors;\n    }\n\n    for (const key in light) {\n        const transitionMatch = key.match(/^(.*)-transition$/);\n\n        if (\n            transitionMatch &&\n            lightSpec[transitionMatch[1]] &&\n            lightSpec[transitionMatch[1]].transition\n        ) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: light[key],\n                    valueSpec: styleSpec.transition,\n                    validateSpec: options.validateSpec,\n                    style,\n                    styleSpec\n                })\n            );\n        } else if (lightSpec[key]) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: light[key],\n                    valueSpec: lightSpec[key],\n                    validateSpec: options.validateSpec,\n                    style,\n                    styleSpec\n                })\n            );\n        } else {\n            errors = errors.concat([\n                new ValidationError(key, light[key], `unknown property \"${key}\"`)\n            ]);\n        }\n    }\n\n    return errors;\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport v8 from '../reference/v8.json' with {type: 'json'};\nimport {SkySpecification, StyleSpecification} from '../types.g';\n\ninterface ValidateSkyOptions {\n    sourceName?: string;\n    value: SkySpecification;\n    styleSpec: typeof v8;\n    style: StyleSpecification;\n    validateSpec: Function;\n}\n\nexport function validateSky(options: ValidateSkyOptions) {\n    const sky = options.value;\n    const styleSpec = options.styleSpec;\n    const skySpec = styleSpec.sky;\n    const style = options.style;\n\n    const rootType = getType(sky);\n    if (sky === undefined) {\n        return [];\n    } else if (rootType !== 'object') {\n        return [new ValidationError('sky', sky, `object expected, ${rootType} found`)];\n    }\n\n    let errors = [];\n    for (const key in sky) {\n        if (skySpec[key]) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: sky[key],\n                    valueSpec: skySpec[key],\n                    style,\n                    styleSpec\n                })\n            );\n        } else {\n            errors = errors.concat([\n                new ValidationError(key, sky[key], `unknown property \"${key}\"`)\n            ]);\n        }\n    }\n\n    return errors;\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport type {StyleSpecification, TerrainSpecification} from '../types.g';\nimport v8 from '../reference/v8.json' with {type: 'json'};\n\nexport function validateTerrain(options: {\n    value: TerrainSpecification;\n    styleSpec: typeof v8;\n    style: StyleSpecification;\n    validateSpec: Function;\n}): ValidationError[] {\n    const terrain = options.value;\n    const styleSpec = options.styleSpec;\n    const terrainSpec = styleSpec.terrain;\n    const style = options.style;\n\n    let errors = [];\n\n    const rootType = getType(terrain);\n    if (terrain === undefined) {\n        return errors;\n    } else if (rootType !== 'object') {\n        errors = errors.concat([\n            new ValidationError('terrain', terrain, `object expected, ${rootType} found`)\n        ]);\n        return errors;\n    }\n\n    for (const key in terrain) {\n        if (terrainSpec[key]) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: terrain[key],\n                    valueSpec: terrainSpec[key],\n                    validateSpec: options.validateSpec,\n                    style,\n                    styleSpec\n                })\n            );\n        } else {\n            errors = errors.concat([\n                new ValidationError(key, terrain[key], `unknown property \"${key}\"`)\n            ]);\n        }\n    }\n\n    return errors;\n}\n","import {validateExpression} from './validate_expression';\nimport {validateString} from './validate_string';\n\nexport function validateFormatted(options: any) {\n    if (validateString(options).length === 0) {\n        return [];\n    }\n\n    return validateExpression(options);\n}\n","import {validateExpression} from './validate_expression';\nimport {validateString} from './validate_string';\n\nexport function validateImage(options: any) {\n    if (validateString(options).length === 0) {\n        return [];\n    }\n\n    return validateExpression(options);\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {validateNumber} from './validate_number';\n\nexport function validatePadding(options) {\n    const key = options.key;\n    const value = options.value;\n    const type = getType(value);\n\n    if (type === 'array') {\n        if (value.length < 1 || value.length > 4) {\n            return [\n                new ValidationError(\n                    key,\n                    value,\n                    `padding requires 1 to 4 values; ${value.length} values found`\n                )\n            ];\n        }\n\n        const arrayElementSpec = {\n            type: 'number'\n        };\n\n        let errors = [];\n        for (let i = 0; i < value.length; i++) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key: `${key}[${i}]`,\n                    value: value[i],\n                    validateSpec: options.validateSpec,\n                    valueSpec: arrayElementSpec\n                })\n            );\n        }\n        return errors;\n    } else {\n        return validateNumber({\n            key,\n            value,\n            valueSpec: {}\n        });\n    }\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {validateNumber} from './validate_number';\n\nexport function validateNumberArray(options) {\n    const key = options.key;\n    const value = options.value;\n    const type = getType(value);\n\n    if (type === 'array') {\n        const arrayElementSpec = {\n            type: 'number'\n        };\n\n        if (value.length < 1) {\n            return [\n                new ValidationError(key, value, 'array length at least 1 expected, length 0 found')\n            ];\n        }\n\n        let errors = [];\n        for (let i = 0; i < value.length; i++) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key: `${key}[${i}]`,\n                    value: value[i],\n                    validateSpec: options.validateSpec,\n                    valueSpec: arrayElementSpec\n                })\n            );\n        }\n        return errors;\n    } else {\n        return validateNumber({\n            key,\n            value,\n            valueSpec: {}\n        });\n    }\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {validateColor} from './validate_color';\n\nexport function validateColorArray(options) {\n    const key = options.key;\n    const value = options.value;\n    const type = getType(value);\n\n    if (type === 'array') {\n        if (value.length < 1) {\n            return [\n                new ValidationError(key, value, 'array length at least 1 expected, length 0 found')\n            ];\n        }\n\n        let errors = [];\n        for (let i = 0; i < value.length; i++) {\n            errors = errors.concat(\n                validateColor({\n                    key: `${key}[${i}]`,\n                    value: value[i],\n                    valueSpec: {}\n                })\n            );\n        }\n        return errors;\n    } else {\n        return validateColor({\n            key,\n            value,\n            valueSpec: {}\n        });\n    }\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {validateArray} from './validate_array';\nimport {validateEnum} from './validate_enum';\n\nexport function validateVariableAnchorOffsetCollection(options): ValidationError[] {\n    const key = options.key;\n    const value = options.value;\n    const type = getType(value);\n    const styleSpec = options.styleSpec;\n\n    if (type !== 'array' || value.length < 1 || value.length % 2 !== 0) {\n        return [\n            new ValidationError(\n                key,\n                value,\n                'variableAnchorOffsetCollection requires a non-empty array of even length'\n            )\n        ];\n    }\n\n    let errors = [];\n\n    for (let i = 0; i < value.length; i += 2) {\n        // Elements in even positions should be values from text-anchor enum\n        errors = errors.concat(\n            validateEnum({\n                key: `${key}[${i}]`,\n                value: value[i],\n                valueSpec: styleSpec['layout_symbol']['text-anchor']\n            })\n        );\n\n        // Elements in odd positions should be points (2-element numeric arrays)\n        errors = errors.concat(\n            validateArray({\n                key: `${key}[${i + 1}]`,\n                value: value[i + 1],\n                valueSpec: {\n                    length: 2,\n                    value: 'number'\n                },\n                validateSpec: options.validateSpec,\n                style: options.style,\n                styleSpec\n            })\n        );\n    }\n\n    return errors;\n}\n","import {validateObject} from './validate_object';\nimport {validateString} from './validate_string';\nimport {ValidationError} from '../error/validation_error';\n\ninterface ValidateSpriteOptions {\n    key: 'sprite';\n    value: unknown; // we don't know how the user defined the \"sprite\"\n    validateSpec: Function;\n}\n\nexport function validateSprite(options: ValidateSpriteOptions) {\n    let errors = [];\n\n    const sprite = options.value;\n    const key = options.key;\n\n    if (!Array.isArray(sprite)) {\n        return validateString({\n            key,\n            value: sprite\n        });\n    } else {\n        const allSpriteIds = [];\n        const allSpriteURLs = [];\n\n        for (const i in sprite) {\n            if (sprite[i].id && allSpriteIds.includes(sprite[i].id))\n                errors.push(\n                    new ValidationError(\n                        key,\n                        sprite,\n                        `all the sprites' ids must be unique, but ${sprite[i].id} is duplicated`\n                    )\n                );\n            allSpriteIds.push(sprite[i].id);\n\n            if (sprite[i].url && allSpriteURLs.includes(sprite[i].url))\n                errors.push(\n                    new ValidationError(\n                        key,\n                        sprite,\n                        `all the sprites' URLs must be unique, but ${sprite[i].url} is duplicated`\n                    )\n                );\n            allSpriteURLs.push(sprite[i].url);\n\n            const pairSpec = {\n                id: {\n                    type: 'string',\n                    required: true\n                },\n                url: {\n                    type: 'string',\n                    required: true\n                }\n            };\n\n            errors = errors.concat(\n                validateObject({\n                    key: `${key}[${i}]`,\n                    value: sprite[i],\n                    valueSpec: pairSpec,\n                    validateSpec: options.validateSpec\n                })\n            );\n        }\n\n        return errors;\n    }\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport v8 from '../reference/v8.json' with {type: 'json'};\nimport {ProjectionSpecification, StyleSpecification} from '../types.g';\n\ninterface ValidateProjectionOptions {\n    sourceName?: string;\n    value: ProjectionSpecification;\n    styleSpec: typeof v8;\n    style: StyleSpecification;\n    validateSpec: Function;\n}\n\nexport function validateProjection(options: ValidateProjectionOptions) {\n    const projection = options.value;\n    const styleSpec = options.styleSpec;\n    const projectionSpec = styleSpec.projection;\n    const style = options.style;\n\n    const rootType = getType(projection);\n    if (projection === undefined) {\n        return [];\n    } else if (rootType !== 'object') {\n        return [\n            new ValidationError('projection', projection, `object expected, ${rootType} found`)\n        ];\n    }\n\n    let errors = [];\n    for (const key in projection) {\n        if (projectionSpec[key]) {\n            errors = errors.concat(\n                options.validateSpec({\n                    key,\n                    value: projection[key],\n                    valueSpec: projectionSpec[key],\n                    style,\n                    styleSpec\n                })\n            );\n        } else {\n            errors = errors.concat([\n                new ValidationError(key, projection[key], `unknown property \"${key}\"`)\n            ]);\n        }\n    }\n\n    return errors;\n}\n","import {ValidationError} from '../error/validation_error';\nimport {ProjectionDefinitionT, PropertyValueSpecification} from '../types.g';\nimport {getType} from '../util/get_type';\n\nexport function validateProjectionDefinition(options) {\n    const key = options.key;\n    let value = options.value;\n    value = value instanceof String ? value.valueOf() : value;\n\n    const type = getType(value);\n\n    if (\n        type === 'array' &&\n        !isProjectionDefinitionValue(value) &&\n        !isPropertyValueSpecification(value)\n    ) {\n        return [\n            new ValidationError(\n                key,\n                value,\n                `projection expected, invalid array ${JSON.stringify(value)} found`\n            )\n        ];\n    } else if (!['array', 'string'].includes(type)) {\n        return [\n            new ValidationError(key, value, `projection expected, invalid type \"${type}\" found`)\n        ];\n    }\n\n    return [];\n}\n\nfunction isPropertyValueSpecification(\n    value: unknown\n): value is PropertyValueSpecification<ProjectionDefinitionT> {\n    if (['interpolate', 'step', 'literal'].includes(value[0])) {\n        return true;\n    }\n    return false;\n}\n\nfunction isProjectionDefinitionValue(value: unknown): value is ProjectionDefinitionT {\n    return (\n        Array.isArray(value) &&\n        value.length === 3 &&\n        typeof value[0] === 'string' &&\n        typeof value[1] === 'string' &&\n        typeof value[2] === 'number'\n    );\n}\n","export function isObjectLiteral(anything: unknown): anything is Record<string, unknown> {\n    return Boolean(anything) && anything.constructor === Object;\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {isObjectLiteral} from '../util/is_object_literal';\n\ninterface ValidateStateOptions {\n    key: 'state';\n    value: unknown;\n}\n\nexport function validateState(options: ValidateStateOptions): ValidationError[] {\n    if (!isObjectLiteral(options.value)) {\n        return [\n            new ValidationError(\n                options.key,\n                options.value,\n                `object expected, ${getType(options.value)} found`\n            )\n        ];\n    }\n\n    return [];\n}\n","import {ValidationError} from '../error/validation_error';\nimport {getType} from '../util/get_type';\nimport {isObjectLiteral} from '../util/is_object_literal';\nimport {validateObject} from './validate_object';\nimport {validateString} from './validate_string';\nimport v8 from '../reference/v8.json' with {type: 'json'};\nimport type {StyleSpecification} from '../types.g';\n\ninterface ValidateFontFacesOptions {\n    key: string;\n    value: unknown;\n    styleSpec: typeof v8;\n    style: StyleSpecification;\n    validateSpec: Function;\n}\n\nexport function validateFontFaces(options: ValidateFontFacesOptions): ValidationError[] {\n    const key = options.key;\n    const value = options.value;\n    const validateSpec = options.validateSpec;\n    const styleSpec = options.styleSpec;\n    const style = options.style;\n\n    if (!isObjectLiteral(value)) {\n        return [new ValidationError(key, value, `object expected, ${getType(value)} found`)];\n    }\n\n    const errors: ValidationError[] = [];\n\n    for (const fontName in value) {\n        const fontValue = value[fontName];\n        const fontValueType = getType(fontValue);\n\n        if (fontValueType === 'string') {\n            // Validate as a string URL\n            errors.push(\n                ...validateString({\n                    key: `${key}.${fontName}`,\n                    value: fontValue\n                })\n            );\n        } else if (fontValueType === 'array') {\n            // Validate as an array of font face objects\n            const fontFaceSpec = {\n                url: {\n                    type: 'string',\n                    required: true\n                },\n                'unicode-range': {\n                    type: 'array',\n                    value: 'string'\n                }\n            };\n\n            for (const [i, fontFace] of (fontValue as any[]).entries()) {\n                errors.push(\n                    ...validateObject({\n                        key: `${key}.${fontName}[${i}]`,\n                        value: fontFace,\n                        valueSpec: fontFaceSpec,\n                        styleSpec,\n                        style,\n                        validateSpec\n                    })\n                );\n            }\n        } else {\n            errors.push(\n                new ValidationError(\n                    `${key}.${fontName}`,\n                    fontValue,\n                    `string or array expected, ${fontValueType} found`\n                )\n            );\n        }\n    }\n\n    return errors;\n}\n","import {extendBy} 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 {validateSky} from './validate_sky';\nimport {validateTerrain} from './validate_terrain';\nimport {validateString} from './validate_string';\nimport {validateFormatted} from './validate_formatted';\nimport {validateImage} from './validate_image';\nimport {validatePadding} from './validate_padding';\nimport {validateNumberArray} from './validate_number_array';\nimport {validateColorArray} from './validate_color_array';\nimport {validateVariableAnchorOffsetCollection} from './validate_variable_anchor_offset_collection';\nimport {validateSprite} from './validate_sprite';\nimport {ValidationError} from '../error/validation_error';\nimport {validateProjection} from './validate_projection';\nimport {validateProjectionDefinition} from './validate_projectiondefinition';\nimport {validateState} from './validate_state';\nimport {validateFontFaces} from './validate_font_faces';\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    sky: validateSky,\n    terrain: validateTerrain,\n    projection: validateProjection,\n    projectionDefinition: validateProjectionDefinition,\n    string: validateString,\n    formatted: validateFormatted,\n    resolvedImage: validateImage,\n    padding: validatePadding,\n    numberArray: validateNumberArray,\n    colorArray: validateColorArray,\n    variableAnchorOffsetCollection: validateVariableAnchorOffsetCollection,\n    sprite: validateSprite,\n    state: validateState,\n    fontFaces: validateFontFaces\n};\n\n/**\n * Main recursive validation function used internally.\n * You should use `validateStyleMin` in the browser or `validateStyle` in node env.\n * @param options - the options object\n * @param options.key - string representing location of validation in style tree. Used only\n * for more informative error reporting.\n * @param options.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 * @param options.valueSpec - current spec being evaluated. Tracks value.\n * @param options.styleSpec - current full spec being evaluated.\n * @param options.validateSpec - the validate function itself\n * @param options.style - the style object\n * @param options.objectElementValidators - optional object of functions that will be called\n * @returns an array of errors, or an empty array if no errors are found.\n */\nexport function validate(options: {\n    key: any;\n    value: any;\n    valueSpec: any;\n    styleSpec: any;\n    validateSpec?: any;\n    style: any;\n    objectElementValidators?: any;\n}): ValidationError[] {\n    const value = options.value;\n    const valueSpec = options.valueSpec;\n    const styleSpec = options.styleSpec;\n    options.validateSpec = validate;\n\n    if (valueSpec.expression && isFunction(unbundle(value))) {\n        return validateFunction(options);\n    } else if (valueSpec.expression && isExpression(deepUnbundle(value))) {\n        return validateExpression(options);\n    } else if (valueSpec.type && VALIDATORS[valueSpec.type]) {\n        return VALIDATORS[valueSpec.type](options);\n    } else {\n        const valid = validateObject(\n            extendBy({}, options, {\n                valueSpec: valueSpec.type ? styleSpec[valueSpec.type] : valueSpec\n            })\n        );\n        return valid;\n    }\n}\n","import {ValidationError} from '../error/validation_error';\nimport {validateString} from './validate_string';\n\nexport function validateGlyphsUrl(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(\n            new ValidationError(key, value, '\"glyphs\" url must include a \"{fontstack}\" token')\n        );\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","import {validateConstants} from './validate/validate_constants';\nimport {validate} from './validate/validate';\nimport {latest} from './reference/latest';\n\nimport {validateSource} from './validate/validate_source';\nimport {validateLight} from './validate/validate_light';\nimport {validateSky} from './validate/validate_sky';\nimport {validateTerrain} from './validate/validate_terrain';\nimport {validateState} from './validate/validate_state';\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';\nimport {validateSprite} from './validate/validate_sprite';\nimport {validateGlyphsUrl} from './validate/validate_glyphs_url';\nimport {ValidationError} from './error/validation_error';\nimport type {StyleSpecification} from './types.g';\n\n/**\n * Validate a MapLibre style against the style specification.\n * Use this when running in the browser.\n *\n * @param style - The style to be validated.\n * @param styleSpec - The style specification to validate against.\n * If omitted, the latest style spec is used.\n * @returns an array of errors, or an empty array if no errors are found.\n * @example\n *   const validate = require('@maplibre/maplibre-gl-style-spec/').validateStyleMin;\n *   const errors = validate(style);\n */\nexport function validateStyleMin(\n    style: StyleSpecification,\n    styleSpec = latest\n): Array<ValidationError> {\n    let errors: ValidationError[] = [];\n\n    errors = errors.concat(\n        validate({\n            key: '',\n            value: style,\n            valueSpec: styleSpec.$root,\n            styleSpec,\n            style,\n            validateSpec: validate,\n            objectElementValidators: {\n                glyphs: validateGlyphsUrl,\n                '*'() {\n                    return [];\n                }\n            }\n        })\n    );\n\n    if (style['constants']) {\n        errors = errors.concat(\n            validateConstants({\n                key: 'constants',\n                value: style['constants'],\n                style,\n                styleSpec,\n                validateSpec: validate\n            })\n        );\n    }\n\n    return sortErrors(errors);\n}\n\nvalidateStyleMin.source = wrapCleanErrors(injectValidateSpec(validateSource));\nvalidateStyleMin.sprite = wrapCleanErrors(injectValidateSpec(validateSprite));\nvalidateStyleMin.glyphs = wrapCleanErrors(injectValidateSpec(validateGlyphsUrl));\nvalidateStyleMin.light = wrapCleanErrors(injectValidateSpec(validateLight));\nvalidateStyleMin.sky = wrapCleanErrors(injectValidateSpec(validateSky));\nvalidateStyleMin.terrain = wrapCleanErrors(injectValidateSpec(validateTerrain));\nvalidateStyleMin.state = wrapCleanErrors(injectValidateSpec(validateState));\nvalidateStyleMin.layer = wrapCleanErrors(injectValidateSpec(validateLayer));\nvalidateStyleMin.filter = wrapCleanErrors(injectValidateSpec(validateFilter));\nvalidateStyleMin.paintProperty = wrapCleanErrors(injectValidateSpec(validatePaintProperty));\nvalidateStyleMin.layoutProperty = wrapCleanErrors(injectValidateSpec(validateLayoutProperty));\n\nfunction injectValidateSpec(validator: (options: object) => any) {\n    return function (options) {\n        return validator(Object.assign({}, options, {validateSpec: validate}));\n    };\n}\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","// 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).\nconst stringOrChar = /(\"(?:[^\\\\\"]|\\\\.)*\")|[:,]/g;\n\nexport default function stringify(passedObj, options = {}) {\n  const indent = JSON.stringify(\n    [1],\n    undefined,\n    options.indent === undefined ? 2 : options.indent\n  ).slice(2, -3);\n\n  const maxLength =\n    indent === \"\"\n      ? Infinity\n      : options.maxLength === undefined\n      ? 80\n      : options.maxLength;\n\n  let { replacer } = options;\n\n  return (function _stringify(obj, currentIndent, reserved) {\n    if (obj && typeof obj.toJSON === \"function\") {\n      obj = obj.toJSON();\n    }\n\n    const string = JSON.stringify(obj, replacer);\n\n    if (string === undefined) {\n      return string;\n    }\n\n    const length = maxLength - currentIndent.length - reserved;\n\n    if (string.length <= length) {\n      const prettified = string.replace(\n        stringOrChar,\n        (match, stringLiteral) => {\n          return stringLiteral || `${match} `;\n        }\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      const nextIndent = currentIndent + indent;\n      const items = [];\n      let index = 0;\n      let start;\n      let end;\n\n      if (Array.isArray(obj)) {\n        start = \"[\";\n        end = \"]\";\n        const { length } = obj;\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        const keys = Object.keys(obj);\n        const { length } = keys;\n        for (; index < length; index++) {\n          const key = keys[index];\n          const keyPart = `${JSON.stringify(key)}: `;\n          const 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","import {latest} from './reference/latest';\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 MapLibre 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 MapLibre 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('maplibre-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 */\nexport function format(style, space = 2) {\n    style = sortKeysBy(style, latest.$root);\n\n    if (style.layers) {\n        style.layers = style.layers.map((layer) => sortKeysBy(layer, latest.layer));\n    }\n\n    return stringifyPretty(style, {indent: space});\n}\n","import {eachSource, eachLayer, eachProperty} from '../visit';\nimport type {LayerSpecification, StyleSpecification} from '../types.g';\n\nfunction eachLayout(\n    layer: LayerSpecification,\n    callback: (_: LayerSpecification['layout'], __: string) => void\n) {\n    for (const k in layer) {\n        if (k.indexOf('layout') === 0) {\n            callback(layer[k], k);\n        }\n    }\n}\n\nfunction eachPaint(\n    layer: LayerSpecification,\n    callback: (_: LayerSpecification['paint'], __: string) => void\n) {\n    for (const k in layer) {\n        if (k.indexOf('paint') === 0) {\n            callback(layer[k], k);\n        }\n    }\n}\n\nfunction resolveConstant(style: StyleSpecification, value: any) {\n    if (typeof value === 'string' && value[0] === '@') {\n        return resolveConstant(style, (style as any).constants[value]);\n    } else {\n        return value;\n    }\n}\n\nfunction isFunction(value) {\n    return Array.isArray(value.stops);\n}\n\nfunction renameProperty(obj: Object, from: string, to: string) {\n    obj[to] = obj[from];\n    delete obj[from];\n}\n\nexport function migrateV8(style: StyleSpecification) {\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 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        } else if (typeof font === 'string') {\n            return splitAndTrim(font);\n        } else if (typeof font === 'object') {\n            font.stops.forEach((stop) => {\n                stop[1] = splitAndTrim(stop[1]);\n            });\n            return font;\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","import {eachLayer, eachProperty} from '../visit';\nimport {isExpression} from '../expression';\nimport {convertFunction, convertTokenString} from '../function/convert';\nimport {convertFilter} from '../feature_filter/convert';\n\nimport type {FilterSpecification, LayerSpecification, StyleSpecification} from '../types.g';\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 * @param style The style object to migrate.\n * @returns The migrated style object.\n */\nexport function expressions(style: StyleSpecification) {\n    const converted = [];\n\n    eachLayer(style, (layer: LayerSpecification & {filter?: FilterSpecification}) => {\n        if (layer.filter) {\n            layer.filter = convertFilter(layer.filter);\n        }\n    });\n\n    eachProperty(style, {paint: true, layout: true}, ({path, key, value, reference, set}) => {\n        if (isExpression(value) || key.endsWith('-transition') || reference === null) return;\n        if (typeof value === 'object' && !Array.isArray(value)) {\n            set(convertFunction(value, reference));\n            converted.push(path.join('.'));\n        } else if ((reference as any).tokens && typeof value === 'string') {\n            set(convertTokenString(value));\n        }\n    });\n\n    return style;\n}\n","/**\n * Migrate color style values to supported format.\n *\n * @param colorToMigrate Color value to migrate, could be a string or an expression.\n * @returns Color style value in supported format.\n */\nexport function migrateColors<T>(colorToMigrate: T): T {\n    return JSON.parse(migrateHslColors(JSON.stringify(colorToMigrate)));\n}\n\n/**\n * Created to migrate from colors supported by the former CSS color parsing\n * library `csscolorparser` but not compliant with the CSS Color specification,\n * like `hsl(900, 0.15, 90%)`.\n *\n * @param colorToMigrate Serialized color style value.\n * @returns A serialized color style value in which all non-standard hsl color values\n * have been converted to a format that complies with the CSS Color specification.\n *\n * @example\n * migrateHslColors('\"hsl(900, 0.15, 90%)\"'); // returns '\"hsl(900, 15%, 90%)\"'\n * migrateHslColors('\"hsla(900, .15, .9)\"'); // returns '\"hsl(900, 15%, 90%)\"'\n * migrateHslColors('\"hsl(900, 15%, 90%)\"'); // returns '\"hsl(900, 15%, 90%)\"' - no changes\n */\nfunction migrateHslColors(colorToMigrate: string): string {\n    return colorToMigrate.replace(/\"hsla?\\((.+?)\\)\"/gi, (match, hslArgs) => {\n        const argsMatch = hslArgs.match(/^(.+?)\\s*,\\s*(.+?)\\s*,\\s*(.+?)(?:\\s*,\\s*(.+))?$/i);\n        if (argsMatch) {\n            let [h, s, l, a] = argsMatch.slice(1);\n            [s, l] = [s, l].map((v) => (v.endsWith('%') ? v : `${parseFloat(v) * 100}%`));\n            return `\"hsl${typeof a === 'string' ? 'a' : ''}(${[h, s, l, a].filter(Boolean).join(',')})\"`;\n        }\n        return match;\n    });\n}\n","import {migrateV8} from './migrate/v8';\nimport {expressions} from './migrate/expressions';\nimport {migrateColors} from './migrate/migrate_colors';\nimport {eachProperty} from './visit';\nimport type {StyleSpecification} from './types.g';\n\n/**\n * Migrate a Mapbox/MapLibre GL Style to the latest version.\n *\n * @param style - a MapLibre Style\n * @returns a migrated style\n * @example\n * const fs = require('fs');\n * const migrate = require('@maplibre/maplibre-gl-style-spec').migrate;\n * const style = fs.readFileSync('./style.json', 'utf8');\n * fs.writeFileSync('./style.json', JSON.stringify(migrate(style)));\n */\nexport function migrate(style: StyleSpecification): StyleSpecification {\n    let migrated = false;\n\n    if ((style.version as any) === 7) {\n        style = migrateV8(style);\n        migrated = true;\n    }\n\n    if (style.version === 8) {\n        migrated = !!expressions(style);\n        migrated = true;\n    }\n\n    eachProperty(style, {paint: true, layout: true}, ({value, reference, set}) => {\n        if (reference?.type === 'color') {\n            set(migrateColors(value));\n        }\n    });\n\n    if (!migrated) {\n        throw new Error(`Cannot migrate from ${style.version}`);\n    }\n\n    return style;\n}\n","import {createExpression, findGlobalStateRefs} from './index';\nimport {StyleExpression, type GlobalProperties, type StylePropertySpecification} from '../index';\nimport {type VisibilitySpecification} from '../types.g';\n\nconst visibilitySpec: StylePropertySpecification = {\n    type: 'enum',\n    'property-type': 'data-constant',\n    expression: {\n        interpolated: false,\n        parameters: ['global-state']\n    },\n    values: {visible: {}, none: {}},\n    transition: false,\n    default: 'visible'\n};\n\nexport interface VisibilityExpression {\n    /**\n     * Evaluates the visibility expression and returns either 'visible' or 'none'.\n     */\n    evaluate: () => 'visible' | 'none';\n    /**\n     * Updates the visibility specification.\n     */\n    setValue: (visibility: VisibilitySpecification) => void;\n    /**\n     * Returns the set of global state properties referenced by the expression.\n     */\n    getGlobalStateRefs: () => Set<string>;\n}\n\nclass VisibilityExpressionClass implements VisibilityExpression {\n    private _globalState: Record<string, any>;\n    private _globalStateRefs: Set<string>;\n    private _literalValue: 'visible' | 'none' | undefined;\n    private _compiledValue: StyleExpression;\n\n    constructor(visibility: VisibilitySpecification, globalState: Record<string, any>) {\n        this._globalState = globalState;\n        this.setValue(visibility);\n    }\n\n    evaluate(): 'visible' | 'none' {\n        return this._literalValue ?? this._compiledValue.evaluate({} as GlobalProperties);\n    }\n\n    setValue(visibility: VisibilitySpecification) {\n        if (\n            visibility === null ||\n            visibility === undefined ||\n            visibility === 'visible' ||\n            visibility === 'none'\n        ) {\n            this._literalValue = visibility === 'none' ? 'none' : 'visible';\n            this._compiledValue = undefined;\n            this._globalStateRefs = new Set<string>();\n            return;\n        }\n        const compiled = createExpression(visibility, visibilitySpec, this._globalState);\n        if (compiled.result === 'error') {\n            this._literalValue = 'visible';\n            this._compiledValue = undefined;\n            throw new Error(compiled.value.map((err) => `${err.key}: ${err.message}`).join(', '));\n        }\n        this._literalValue = undefined;\n        this._compiledValue = compiled.value;\n        this._globalStateRefs = findGlobalStateRefs(compiled.value.expression);\n    }\n\n    getGlobalStateRefs() {\n        return this._globalStateRefs;\n    }\n}\n\n/**\n * Creates a visibility expression from a visibility specification.\n * @param visibility - the visibility specification, literal or expression\n * @param globalState - the global state object\n * @returns visibility expression object\n */\nexport default function createVisibility(\n    visibility: VisibilitySpecification,\n    globalState: Record<string, any>\n): VisibilityExpression {\n    return new VisibilityExpressionClass(visibility, globalState);\n}\n","import v8Spec from './reference/v8.json' with {type: 'json'};\nconst v8 = v8Spec as any;\nimport latest from './reference/latest';\nimport {derefLayers} from './deref';\nimport {diff} from './diff';\nimport {ValidationError} from './error/validation_error';\nimport {ParsingError} from './error/parsing_error';\nimport {\n    FeatureState,\n    StyleExpression,\n    isExpression,\n    isZoomExpression,\n    createExpression,\n    createPropertyExpression,\n    normalizePropertyExpression,\n    ZoomConstantExpression,\n    ZoomDependentExpression,\n    StylePropertyFunction,\n    Feature,\n    GlobalProperties,\n    SourceExpression,\n    CompositeExpression,\n    StylePropertyExpression\n} from './expression';\nimport {featureFilter, isExpressionFilter} from './feature_filter';\n\nimport {convertFilter} from './feature_filter/convert';\nimport {Color} from './expression/types/color';\nimport {Padding} from './expression/types/padding';\nimport {NumberArray} from './expression/types/number_array';\nimport {ColorArray} from './expression/types/color_array';\nimport {VariableAnchorOffsetCollection} from './expression/types/variable_anchor_offset_collection';\nimport {Formatted, FormattedSection} from './expression/types/formatted';\nimport {createFunction, isFunction} from './function';\nimport {convertFunction} from './function/convert';\nimport {eachSource, eachLayer, eachProperty} from './visit';\nimport {ResolvedImage} from './expression/types/resolved_image';\nimport {supportsPropertyExpression} from './util/properties';\nimport {IMercatorCoordinate, ICanonicalTileID, ILngLat, ILngLatLike} from './tiles_and_coordinates';\nimport {EvaluationContext} from './expression/evaluation_context';\nimport {\n    FormattedType,\n    NullType,\n    Type,\n    typeToString,\n    ColorType,\n    ProjectionDefinitionType\n} from './expression/types';\n\nimport {expressions} from './expression/definitions';\nimport {Interpolate} from './expression/definitions/interpolate';\nimport {interpolateFactory, type InterpolationType} from './expression/definitions/interpolate';\n\nimport {groupByLayout} from './group_by_layout';\nimport {emptyStyle} from './empty';\nimport {validateStyleMin} from './validate_style.min';\nimport {Step} from './expression/definitions/step';\nimport {typeOf} from './expression/values';\nimport {FormatExpression} from './expression/definitions/format';\nimport {Literal} from './expression/definitions/literal';\nimport {CompoundExpression} from './expression/compound_expression';\nimport {\n    ColorSpecification,\n    PaddingSpecification,\n    NumberArraySpecification,\n    ColorArraySpecification,\n    ProjectionDefinitionSpecification,\n    VariableAnchorOffsetCollectionSpecification,\n    AllPaintProperties,\n    AllLayoutProperties\n} from './types.g';\nimport {format} from './format';\nimport {validate} from './validate/validate';\nimport {migrate} from './migrate';\nimport {classifyRings} from './util/classify_rings';\nimport {ProjectionDefinition} from './expression/types/projection_definition';\nimport createVisibilityExpression from './expression/visibility';\n\ntype ExpressionType =\n    | 'data-driven'\n    | 'cross-faded'\n    | 'cross-faded-data-driven'\n    | 'color-ramp'\n    | 'data-constant'\n    | 'constant';\ntype ExpressionParameters = Array<\n    | 'zoom'\n    | 'feature'\n    | 'feature-state'\n    | 'heatmap-density'\n    | 'elevation'\n    | 'line-progress'\n    | 'global-state'\n>;\n\ntype ExpressionSpecificationDefinition = {\n    interpolated: boolean;\n    parameters: ExpressionParameters;\n};\n\nexport type StylePropertySpecification =\n    | {\n          type: 'number';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: number;\n      }\n    | {\n          type: 'string';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: string;\n          tokens?: boolean;\n      }\n    | {\n          type: 'boolean';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: boolean;\n      }\n    | {\n          type: 'enum';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          values: {[_: string]: {}};\n          transition: boolean;\n          default?: string;\n      }\n    | {\n          type: 'color';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: ColorSpecification;\n          overridable: boolean;\n      }\n    | {\n          type: 'array';\n          value: 'number';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          length?: number;\n          transition: boolean;\n          default?: Array<number>;\n      }\n    | {\n          type: 'array';\n          value: 'string';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          length?: number;\n          transition: boolean;\n          default?: Array<string>;\n      }\n    | {\n          type: 'padding';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: PaddingSpecification;\n      }\n    | {\n          type: 'numberArray';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: NumberArraySpecification;\n      }\n    | {\n          type: 'colorArray';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: ColorArraySpecification;\n      }\n    | {\n          type: 'variableAnchorOffsetCollection';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: VariableAnchorOffsetCollectionSpecification;\n      }\n    | {\n          type: 'projectionDefinition';\n          'property-type': ExpressionType;\n          expression?: ExpressionSpecificationDefinition;\n          transition: boolean;\n          default?: ProjectionDefinitionSpecification;\n      };\n\nconst expression = {\n    StyleExpression,\n    StylePropertyFunction,\n    ZoomConstantExpression,\n    ZoomDependentExpression,\n    createExpression,\n    createPropertyExpression,\n    isExpression,\n    isExpressionFilter,\n    isZoomExpression,\n    normalizePropertyExpression\n};\n\nconst styleFunction = {\n    convertFunction,\n    createFunction,\n    isFunction\n};\n\nconst visit = {eachLayer, eachProperty, eachSource};\n\nexport {\n    Interpolate,\n    InterpolationType,\n    ValidationError,\n    ParsingError,\n    FeatureState,\n    ProjectionDefinition,\n    Color,\n    Step,\n    CompoundExpression,\n    Padding,\n    NumberArray,\n    ColorArray,\n    VariableAnchorOffsetCollection,\n    Formatted,\n    ResolvedImage,\n    Feature,\n    EvaluationContext,\n    GlobalProperties,\n    SourceExpression,\n    CompositeExpression,\n    FormattedSection,\n    IMercatorCoordinate,\n    ICanonicalTileID,\n    ILngLat,\n    ILngLatLike,\n    StyleExpression,\n    ZoomConstantExpression,\n    Literal,\n    Type,\n    StylePropertyFunction,\n    StylePropertyExpression,\n    ZoomDependentExpression,\n    FormatExpression,\n    AllPaintProperties,\n    AllLayoutProperties,\n    latest,\n    validateStyleMin,\n    groupByLayout,\n    emptyStyle,\n    derefLayers,\n    normalizePropertyExpression,\n    isExpression,\n    isZoomExpression,\n    diff,\n    supportsPropertyExpression,\n    convertFunction,\n    createExpression,\n    isFunction,\n    createFunction,\n    createPropertyExpression,\n    createVisibilityExpression,\n    convertFilter,\n    featureFilter,\n    typeOf,\n    typeToString as toString,\n    format,\n    validate,\n    migrate,\n    classifyRings,\n    ProjectionDefinitionType,\n    ColorType,\n    interpolateFactory as interpolates,\n    v8,\n    NullType,\n    styleFunction as function,\n    visit,\n    expressions,\n    expression,\n    FormattedType\n};\n"],"names":["types","expressions","isFunction","coalesce","convertFilter","convertComparisonOp","convertInOp","convertHasOp","Reference","stringify","latest","extend","stringifyPretty"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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","x_google_ignoreList":[40,51,52,106]}