UNPKG

@citation-js/plugin-quickstatements

Version:

Plugin that takes citation-js input and output QuickStatements.

66 lines (65 loc) 1.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fillCaches = fillCaches; exports.getOrcid = getOrcid; var _core = require("@citation-js/core"); var _wikidataSdk = _interopRequireDefault(require("wikidata-sdk")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const QUERY_BUILDERS = { issn: { value: '?value wdt:P236 ?key', key: items => items.map(item => item.ISSN) }, orcid: { value: '?value wdt:P496 ?key', key: items => items.flatMap(item => (item.author || []).map(getOrcid)) }, language: { value: '?value wdt:P218 ?key', key: items => items.map(item => item.language) }, languageWiki: { value: '?value ^wdt:P424/wdt:P218 ?key', key: items => items.map(item => item.language) } }; function unique(array) { return array.filter((value, index, array) => array.indexOf(value) === index); } function buildQuery(type, items) { const { key, value } = QUERY_BUILDERS[type]; const keys = '"' + unique(key(items)).join('" "') + '"'; return `{ VALUES ?key { ${keys} } . ${value} . BIND("${type}" AS ?cache) }`; } function getOrcid(author) { const orcid = author._orcid || author.ORCID || author._ORCID || author.orcid; return orcid && orcid.replace(/^https?:\/\/orcid\.org\//, ''); } function fillCaches(csl) { const caches = {}; for (const cache in QUERY_BUILDERS) { caches[cache] = {}; } const queries = Object.keys(QUERY_BUILDERS).map(type => buildQuery(type, csl)).join(' UNION '); const query = `SELECT ?key ?value ?cache WHERE { ${queries} }`; try { const url = _wikidataSdk.default.sparqlQuery(query); const response = JSON.parse(_core.util.fetchFile(url)); const results = _wikidataSdk.default.simplify.sparqlResults(response); for (const { key, value, cache } of results) { caches[cache][key] = value; } } catch (e) { _core.logger.error(e); } return caches; }