wikibase-edit
Version:
Edit Wikibase from NodeJS
36 lines (33 loc) • 1.34 kB
JavaScript
import isMatchingSnak from './is_matching_snak.js'
export default (newClaim, matchingQualifiers) => existingClaim => {
const { mainsnak, qualifiers = {} } = existingClaim
if (!isMatchingSnak(mainsnak, newClaim.mainsnak)) return false
if (matchingQualifiers) {
for (const property of matchingQualifiers) {
const [ pid, option = 'all' ] = property.split(':')
if (newClaim.qualifiers[pid] != null && qualifiers[pid] == null) return false
if (newClaim.qualifiers[pid] == null && qualifiers[pid] != null) return false
const propertyQualifiersMatch = matchFunctions[option](newClaim.qualifiers[pid], qualifiers[pid])
if (!propertyQualifiersMatch) return false
}
}
return true
}
const matchFunctions = {
all: (newPropertyQualifiers, existingPropertyQualifiers) => {
for (const newQualifier of newPropertyQualifiers) {
for (const existingQualifier of existingPropertyQualifiers) {
if (!isMatchingSnak(existingQualifier, newQualifier)) return false
}
}
return true
},
any: (newPropertyQualifiers, existingPropertyQualifiers) => {
for (const newQualifier of newPropertyQualifiers) {
for (const existingQualifier of existingPropertyQualifiers) {
if (isMatchingSnak(existingQualifier, newQualifier)) return true
}
}
return false
},
}