You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
2.7 KiB
68 lines
2.7 KiB
// @flow
|
|
import validate from './validate/validate.js';
|
|
import latestStyleSpec from './reference/latest.js';
|
|
import validateGlyphsURL from './validate/validate_glyphs_url.js';
|
|
|
|
import _validateSource from './validate/validate_source.js';
|
|
import _validateLight from './validate/validate_light.js';
|
|
import _validateTerrain from './validate/validate_terrain.js';
|
|
import _validateFog from './validate/validate_fog.js';
|
|
import _validateLayer from './validate/validate_layer.js';
|
|
import _validateFilter from './validate/validate_filter.js';
|
|
import _validatePaintProperty from './validate/validate_paint_property.js';
|
|
import _validateLayoutProperty from './validate/validate_layout_property.js';
|
|
|
|
import type {StyleSpecification} from './types.js';
|
|
|
|
export type ValidationError = {
|
|
message: string;
|
|
identifier?: ?string;
|
|
line?: ?number;
|
|
};
|
|
export type ValidationErrors = $ReadOnlyArray<ValidationError>;
|
|
export type Validator = (Object) => ValidationErrors;
|
|
|
|
/**
|
|
* Validate a Mapbox GL style against the style specification. This entrypoint,
|
|
* `mapbox-gl-style-spec/lib/validate_style.min`, is designed to produce as
|
|
* small a browserify bundle as possible by omitting unnecessary functionality
|
|
* and legacy style specifications.
|
|
*
|
|
* @private
|
|
* @param {Object} style The style to be validated.
|
|
* @param {Object} [styleSpec] The style specification to validate against.
|
|
* If omitted, the latest style spec is used.
|
|
* @returns {Array<ValidationError>}
|
|
* @example
|
|
* var validate = require('mapbox-gl-style-spec/lib/validate_style.min');
|
|
* var errors = validate(style);
|
|
*/
|
|
export function validateStyle(style: StyleSpecification, styleSpec: Object = latestStyleSpec): ValidationErrors {
|
|
|
|
const errors = validate({
|
|
key: '',
|
|
value: style,
|
|
valueSpec: styleSpec.$root,
|
|
styleSpec,
|
|
style,
|
|
objectElementValidators: {
|
|
glyphs: validateGlyphsURL,
|
|
'*': () => []
|
|
}
|
|
});
|
|
return sortErrors(errors);
|
|
}
|
|
|
|
export const validateSource: Validator = opts => sortErrors(_validateSource(opts));
|
|
export const validateLight: Validator = opts => sortErrors(_validateLight(opts));
|
|
export const validateTerrain: Validator = opts => sortErrors(_validateTerrain(opts));
|
|
export const validateFog: Validator = opts => sortErrors(_validateFog(opts));
|
|
export const validateLayer: Validator = opts => sortErrors(_validateLayer(opts));
|
|
export const validateFilter: Validator = opts => sortErrors(_validateFilter(opts));
|
|
export const validatePaintProperty: Validator = opts => sortErrors(_validatePaintProperty(opts));
|
|
export const validateLayoutProperty: Validator = opts => sortErrors(_validateLayoutProperty(opts));
|
|
|
|
function sortErrors(errors) {
|
|
return errors.slice().sort((a, b) => a.line && b.line ? a.line - b.line : 0);
|
|
}
|