@maplibre/maplibre-gl-style-spec
Version:
a specification for maplibre styles
56 lines (45 loc) • 1.73 kB
text/typescript
import {validateObject} from './validate_object';
import {validateString} from './validate_string';
import {ValidationError} from '../error/validation_error';
interface ValidateSpriteOptions {
key: 'sprite';
value: unknown; // we don't know how the user defined the "sprite"
validateSpec: Function;
}
export function validateSprite(options: ValidateSpriteOptions) {
let errors = [];
const sprite = options.value;
const key = options.key;
if (!Array.isArray(sprite)) {
return validateString({
key,
value: sprite
});
} else {
const allSpriteIds = [];
const allSpriteURLs = [];
for (const i in sprite) {
if (sprite[i].id && allSpriteIds.includes(sprite[i].id)) errors.push(new ValidationError(key, sprite, `all the sprites' ids must be unique, but ${sprite[i].id} is duplicated`));
allSpriteIds.push(sprite[i].id);
if (sprite[i].url && allSpriteURLs.includes(sprite[i].url)) errors.push(new ValidationError(key, sprite, `all the sprites' URLs must be unique, but ${sprite[i].url} is duplicated`));
allSpriteURLs.push(sprite[i].url);
const pairSpec = {
id: {
type: 'string',
required: true,
},
url: {
type: 'string',
required: true,
}
};
errors = errors.concat(validateObject({
key: `${key}[${i}]`,
value: sprite[i],
valueSpec: pairSpec,
validateSpec: options.validateSpec,
}));
}
return errors;
}
}