UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

54 lines 2.29 kB
import { flatten, values } from 'lodash-es'; import { getEntityIdFromGuid } from 'wikibase-sdk'; import { findSnak } from '../claim/find_snak.js'; import { formatUpdatedSnakValue } from '../claim/update.js'; import { newError } from '../error.js'; import { getEntityClaims } from '../get_entity.js'; import { validateGuid, validatePropertyId, validateSnakValue } from '../validate.js'; export async function updateQualifier(params, config, API) { const { guid, property, oldValue, newValue } = params; validateGuid(guid); validatePropertyId(property); const datatype = config.properties[property]; validateSnakValue(property, datatype, oldValue); if (oldValue === newValue) { throw newError('same value', 400, { oldValue, newValue }); } const qualifier = await getSnak(guid, property, oldValue, config); const { hash } = qualifier; const formattedNewValue = formatUpdatedSnakValue(newValue, qualifier); validateSnakValue(property, datatype, formattedNewValue); return API.qualifier.set({ guid, hash, property, value: formattedNewValue, summary: 'summary' in params ? params.summary : config.summary, baserevid: params.baserevid || config.baserevid, }, config); } async function getSnak(guid, property, oldValue, config) { const entityId = getEntityIdFromGuid(guid); const claims = await getEntityClaims(entityId, config); const claim = findClaim(claims, guid); if (!claim) throw newError('claim not found', 400, { guid }); if (!claim.qualifiers) throw newError('claim qualifiers not found', 400, { guid }); const propSnaks = claim.qualifiers[property]; const qualifier = findSnak(property, propSnaks, oldValue); if (!qualifier) { const actualValues = propSnaks ? propSnaks.map(getSnakValue) : null; throw newError('qualifier not found', 400, { guid, property, expectedValue: oldValue, actualValues }); } return qualifier; } function findClaim(claims, guid) { const flattenedClaims = flatten(values(claims)); for (const claim of flattenedClaims) { if (claim.id === guid) return claim; } } const getSnakValue = snak => snak.datavalue?.value; //# sourceMappingURL=update.js.map