wikibase-cli
Version:
A command-line interface to Wikibase
43 lines (35 loc) • 1.35 kB
JavaScript
import { pick } from 'lodash-es'
export default (entity, requestedPropsAndSubProps) => {
if (!requestedPropsAndSubProps || Object.keys(requestedPropsAndSubProps).length === 0) return entity
if (requestedPropsAndSubProps.claims && entity.statements) {
requestedPropsAndSubProps.statements = requestedPropsAndSubProps.claims
delete requestedPropsAndSubProps.claims
}
const trimedEntity = {
id: entity.id,
}
// Preserve info key/values, as some are needed downstream
// Ex: type is required by simplifyEntity
for (const key of Object.keys(entity)) {
if (!requestedPropsAndSubProps[key] && !key.includes(omittableProps)) {
trimedEntity[key] = entity[key]
}
}
const requestedProps = Object.keys(requestedPropsAndSubProps)
for (const prop of requestedProps) {
const subkeys = Object.keys(requestedPropsAndSubProps[prop])
if (subkeys && subkeys.length > 0) {
trimedEntity[prop] = pick(entity[prop], subkeys)
subkeys.forEach(subkey => {
if (!entity[prop]?.[subkey]) {
trimedEntity[prop] = trimedEntity[prop] || {}
trimedEntity[prop][subkey] = null
}
})
} else {
trimedEntity[prop] = entity[prop]
}
}
return trimedEntity
}
const omittableProps = [ 'info', 'sitelinks', 'aliases', 'labels', 'descriptions', 'claims', 'datatype' ]