71 lines
2.0 KiB
TypeScript
71 lines
2.0 KiB
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;
|
|
}
|
|
}
|