@citation-js/plugin-wikidata
Version:
Plugin for Wikidata for Citation.js
103 lines • 2.21 kB
JavaScript
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 };