wikibase-sdk
Version:
utils functions to query a Wikibase instance and simplify its results
51 lines • 2.22 kB
JavaScript
import * as validate from '../helpers/validate.js';
import { forceArray, rejectObsoleteInterface } from '../utils/utils.js';
export function getRevisionsFactory(buildUrl) {
/**
* Uses [MediaWiki Revision API](https://www.mediawiki.org/wiki/API:Revisions) to get entities revisions, generating URLs of the kind: https://www.wikidata.org/w/api.php?action=query&prop=revisions&titles=Q3548931&format=json&rvstart=1497020505&rvlimit=max
* API Help page: https://www.wikidata.org/w/api.php?action=help&modules=query+revisions
*/
return function getRevisions({ ids, format, limit, start, end, prop, user, excludeuser, tag }) {
// eslint-disable-next-line prefer-rest-params
rejectObsoleteInterface(arguments);
ids = forceArray(ids);
ids.forEach(o => validate.entityPageTitle(o));
const uniqueId = ids.length === 1;
const query = {
action: 'query',
prop: 'revisions',
};
query.titles = ids.join('|');
query.format = format || 'json';
if (uniqueId)
query.rvlimit = limit || 'max';
if (uniqueId && start)
query.rvstart = getEpochSeconds(start);
if (uniqueId && end)
query.rvend = getEpochSeconds(end);
if (prop) {
query.rvprop = forceArray(prop).join('|');
}
else {
query.rvprop = 'ids|flags|timestamp|user|userid|size|slotsize|sha1|slotsha1|contentmodel|comment|parsedcomment|content|tags|roles|oresscores';
}
query.rvslots = '*';
if (user)
query.rvuser = user;
if (excludeuser)
query.rvexcludeuser = excludeuser;
if (tag)
query.rvtag = tag;
return buildUrl(query);
};
}
const getEpochSeconds = (date) => {
// Return already formatted epoch seconds:
// if a date in milliseconds appear to be earlier than 2000-01-01, that's probably
// already seconds actually
if (typeof date === 'number' && date < earliestPointInMs)
return date;
return Math.trunc(new Date(date).getTime() / 1000);
};
const earliestPointInMs = new Date('2000-01-01').getTime();
//# sourceMappingURL=get_revisions.js.map