UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

38 lines 1.85 kB
import { isPropertyId } from 'wikibase-sdk'; import { newError } from '../error.js'; import { arrayIncludes } from '../utils.js'; const validReconciliationKeys = ['mode', 'matchingQualifiers', 'matchingReferences']; const validReconciliationModes = ['skip-on-value-match', 'skip-on-any-value', 'merge']; const validOptions = ['all', 'any']; export function validateReconciliationObject(reconciliation, claim) { if (typeof reconciliation !== 'object') throw newError('reconciliation should be an object', { reconciliation }); for (const key of Object.keys(reconciliation)) { if (!arrayIncludes(validReconciliationKeys, key)) { throw newError('invalid reconciliation object key', { key, reconciliation, validReconciliationKeys }); } } const { mode, matchingQualifiers, matchingReferences } = reconciliation; if (!claim.remove && !validReconciliationModes.includes(mode)) { throw newError('invalid reconciliation mode', { mode, validReconciliationModes }); } validateMatchingPropertyArray('matchingQualifiers', matchingQualifiers); validateMatchingPropertyArray('matchingReferences', matchingReferences); } function validateMatchingPropertyArray(name, array) { if (array) { if (!(array instanceof Array)) { throw newError(`invalid ${name} array`, { [name]: array }); } for (const id of array) { const [pid, option] = id.split(':'); if (!isPropertyId(pid)) { throw newError(`invalid ${name} property id`, { property: pid }); } if (option && !arrayIncludes(validOptions, option)) { throw newError(`invalid ${name} property id option: ${option}`, { id, pid, option }); } } } } //# sourceMappingURL=validate_reconciliation_object.js.map