wikibase-edit
Version:
Edit Wikibase from NodeJS
59 lines (52 loc) • 2.13 kB
text/typescript
import { buildClaim } from '../entity/build_claim.js'
import { newError } from '../error.js'
import { getEntityClaims } from '../get_entity.js'
import { forceArray } from '../utils.js'
import { validateGuid } from '../validate.js'
import { isMatchingClaimFactory } from './is_matching_claim.js'
import type { Reconciliation } from '../entity/validate_reconciliation_object.js'
import type { PropertiesDatatypes } from '../properties/fetch_properties_datatypes.js'
import type { AbsoluteUrl } from '../types/common.js'
import type { SerializedConfig } from '../types/config.js'
import type { SimplifiedEditableQualifiers } from '../types/edit_entity.js'
import type { Claim, EntityWithClaims, Guid, PropertyId, SimplifiedClaim } from 'wikibase-sdk'
export interface RemoveClaimParams {
id?: EntityWithClaims['id']
property?: PropertyId
guid?: Guid | Guid[]
value?: SimplifiedClaim
qualifiers?: SimplifiedEditableQualifiers
reconciliation?: Reconciliation
}
export async function removeClaim (params: RemoveClaimParams, properties: PropertiesDatatypes, instance: AbsoluteUrl, config: SerializedConfig) {
let { guid } = params
const { id, property, value, qualifiers, reconciliation = {} } = params
if (!(guid || (id && property && value))) {
throw newError('missing guid or id/property/value', params)
}
let guids: Guid[]
if (guid) {
guids = forceArray(guid)
} else {
const existingClaims = await getEntityClaims(id, config)
const claimData = { value, qualifiers }
// @ts-expect-error
const claim: Claim = buildClaim(property, properties, claimData, instance)
const { matchingQualifiers } = reconciliation
const matchingClaims = existingClaims[property].filter(isMatchingClaimFactory(claim, matchingQualifiers))
if (matchingClaims.length === 0) throw newError('claim not found', params)
guids = matchingClaims.map(({ id }) => id)
}
guids.forEach(validateGuid)
return {
action: 'wbremoveclaims',
data: {
claim: guids.join('|'),
},
}
}
export interface RemoveClaimResponse {
pageinfo: { lastrevid: number }
success: 1
claims: Guid[]
}