wikibase-edit
Version:
Edit Wikibase from NodeJS
40 lines (33 loc) • 1.2 kB
text/typescript
import { uniq } from 'lodash-es'
import { formatBadges } from '../entity/format.js'
import { newError } from '../error.js'
import { getEntitySitelinks } from '../get_entity.js'
import { validateEntityId, validateSite } from '../validate.js'
import type { WikibaseEditAPI } from '../index.js'
import type { SetSitelinkResponse } from '../sitelink/set.js'
import type { SerializedConfig } from '../types/config.js'
import type { EntityWithSitelinks, ItemId } from 'wikibase-sdk'
export interface AddBadgeParams {
id: EntityWithSitelinks['id']
site: string
badges: ItemId | ItemId[]
}
export async function addBadge (params: AddBadgeParams, config: SerializedConfig, API: WikibaseEditAPI) {
let { id, site, badges } = params
validateEntityId(id)
validateSite(site)
badges = formatBadges(badges)
const sitelinks = await getEntitySitelinks(id, config)
const siteObj = sitelinks[site]
if (!siteObj) {
throw newError('sitelink does not exist', 400, params)
}
const { title, badges: currentBadges } = siteObj
return API.sitelink.set({
id,
site,
title,
badges: uniq(currentBadges.concat(badges)),
})
}
export type AddBadgeResponse = SetSitelinkResponse