UNPKG

wikidata-filter

Version:

Filter and format a newline-delimited JSON stream of Wikidata entities

30 lines (27 loc) 881 B
const { isItemId } = require('wikibase-sdk') const languageCode = /^[a-z]{2,3}(-[a-z]{2,6})?$/ // ~ stands for negated properties const isPropertyId = (str) => /^~?P\d+$/.test(str) const validateClaim = claim => { const [ P, Q ] = claim.split(':') if (!(isPropertyId(P))) throw new Error(`invalid claim property: ${P}`) if (Q) { const Qs = Q.split(',') for (let q of Qs) { if (!(isItemId(q))) throw new Error(`invalid claim value: ${q}`) } } } module.exports = { value: (label, values, list) => { for (let attr of values) { if (!(list.includes(attr))) throw new Error(`invalid value for ${label}: ${attr}`) } }, languages: languages => { for (let lang of languages) { if (!(languageCode.test(lang))) throw new Error(`invalid language: ${lang}`) } }, claims: claims => claims.split(/\||&/g).forEach(validateClaim) }