{"version":3,"file":"validate.mjs","names":[],"sources":["../../src/validate/validate.ts"],"sourcesContent":["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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkCA,MAAM,aAAa;CACf,MAAM;EACF,OAAO,CAAC;CACZ;CACA,OAAO;CACP,SAAS;CACT,QAAQ;CACR,OAAO;CACP,WAAW;CACX,MAAM;CACN,QAAQ;CACR,UAAU;CACV,OAAO;CACP,QAAQ;CACR,QAAQ;CACR,OAAO;CACP,KAAK;CACL,SAAS;CACT,YAAY;CACZ,sBAAsB;CACtB,QAAQ;CACR,WAAW;CACX,eAAe;CACf,SAAS;CACT,aAAa;CACb,YAAY;CACZ,gCAAgC;CAChC,QAAQ;CACR,OAAO;CACP,WAAW;AACf;;;;;;;;;;;;;;;;;AAkBA,SAAgB,SAAS,SAQH;CAClB,MAAM,QAAQ,QAAQ;CACtB,MAAM,YAAY,QAAQ;CAC1B,MAAM,YAAY,QAAQ;CAC1B,QAAQ,eAAe;CAEvB,IAAI,UAAU,cAAc,WAAW,SAAS,KAAK,CAAC,GAClD,OAAO,iBAAiB,OAAO;MAC5B,IAAI,UAAU,cAAc,aAAa,aAAa,KAAK,CAAC,GAC/D,OAAO,mBAAmB,OAAO;MAC9B,IAAI,UAAU,QAAQ,WAAW,UAAU,OAC9C,OAAO,WAAW,UAAU,KAAK,CAAC,OAAO;MAOzC,OALc,eACV,SAAS,CAAC,GAAG,SAAS,EAClB,WAAW,UAAU,OAAO,UAAU,UAAU,QAAQ,UAC5D,CAAC,CAEM;AAEnB"}