UNPKG

@citation-js/plugin-wikidata

Version:

Plugin for Wikidata for Citation.js

103 lines 2.21 kB
import { plugins } from '@citation-js/core'; import * as id from './id.js'; import * as entity from './entity.js'; import * as prop from './prop.js'; import * as url from './url.js'; import * as api from './api.js'; import config from './config.json'; const ref = '@wikidata'; const parsers = { id, entity, prop, url, api }; const formats = { '@wikidata/id': { parse: id.parse, parseType: { dataType: 'String', predicate: /^Q\d+$/ } }, '@wikidata/list+text': { parse(data) { return data.trim().split(/(?:[\s,]\s*)/g); }, parseType: { dataType: 'String', predicate: /^\s*((?:Q\d+(?:[\s,]\s*))*Q\d+)\s*$/ } }, '@wikidata/api': { parse: api.parse, parseAsync: api.parseAsync, parseType: { dataType: 'String', predicate: /^(https?:\/\/(?:www\.)?wikidata.org\/w\/api\.php(?:\?.*)?)$/, extends: '@else/url' } }, '@wikidata/array+api': { parse: api.parse, parseAsync: api.parseAsync, parseType: { dataType: 'Array', elementConstraint: '@wikidata/api' } }, '@wikidata/url': { parse: url.parse, parseType: { dataType: 'String', predicate: /\/(Q\d+)(?:[#?/]|\s*$)/, extends: '@else/url' } }, '@wikidata/list+object': { parse: id.parse, parseType: { dataType: 'Array', elementConstraint: '@wikidata/id' } }, '@wikidata/object': { parse: entity.parse, parseAsync: entity.parseAsync, parseType: { dataType: 'SimpleObject', propertyConstraint: { props: 'entities' } } }, '@wikidata/array+object': { parse(responses) { return responses.reduce((combined, { success, entities }) => { combined.success &= success; Object.assign(combined.entities, entities); return combined; }); }, parseType: { dataType: 'Array', elementConstraint: '@wikidata/object' }, outputs: '@wikidata/object' }, '@wikidata/prop': { parse: prop.parseProp }, '@wikidata/type': { parse: prop.parseType } }; plugins.add(ref, { input: formats, config }); export { ref, parsers, formats };