UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

52 lines 2.23 kB
import { simplifySnak } from 'wikibase-sdk'; import { newError } from '../error.js'; import { parseQuantity } from './quantity.js'; const issuesUrl = 'https://github.com/maxlath/wikibase-edit/issues'; export function propertiesDatatypesDontMatch(params) { const { movedSnaks, originDatatype, targetDatatype, instance } = params; const typeConverterKey = `${originDatatype}->${targetDatatype}`; const convertType = snakTypeConversions[typeConverterKey]; if (convertType) { for (let snak of movedSnaks) { snak = 'mainsnak' in snak ? snak.mainsnak : snak; if (snakHasValue(snak)) { try { convertType(snak, instance); } catch (err) { const errMessage = `properties datatype don't match and ${typeConverterKey} type conversion failed: ${err.message}`; params.failingSnak = snak; const customErr = newError(errMessage, 400, params); customErr.cause = err; throw customErr; } } } } else { const errMessage = `properties datatype don't match No ${typeConverterKey} type converter found If you think that should be possible, please open a ticket: ${issuesUrl}/new?template=feature_request.md&title=${encodeURIComponent(`claim.move: add a ${typeConverterKey} type converter`)}&body=%20`; throw newError(errMessage, 400, params); } } function simplifyToString(snak) { snak.datavalue.value = simplifySnak(snak, {}).toString(); snak.datatype = snak.datavalue.type = 'string'; } const snakTypeConversions = { 'string->external-id': (snak) => { snak.datatype = 'string'; }, 'string->quantity': (snak, instance) => { const { value } = snak.datavalue; snak.datavalue.value = parseQuantity(value, instance); snak.datatype = snak.datavalue.type = 'quantity'; }, 'external-id->string': simplifyToString, 'monolingualtext->string': simplifyToString, 'quantity->string': simplifyToString, }; const snakHasValue = (snak) => snak.snaktype === 'value'; //# sourceMappingURL=move_commons.js.map