wikibase-sdk
Version:
utils functions to query a Wikibase instance and simplify its results
114 lines • 4.97 kB
JavaScript
import { buildClient } from './client.js';
import * as helpers from './helpers/helpers.js';
import * as parse from './helpers/parse_responses.js';
import * as rankHelpers from './helpers/rank.js';
import * as simplify from './helpers/simplify.js';
import * as sitelinksHelpers from './helpers/sitelinks.js';
import * as timeHelpers from './helpers/time.js';
import { cirrusSearchPagesFactory } from './queries/cirrus_search.js';
import { getEntitiesFactory } from './queries/get_entities.js';
import { getEntitiesFromSitelinksFactory } from './queries/get_entities_from_sitelinks.js';
import { getEntityRevisionFactory } from './queries/get_entity_revision.js';
import { getManyEntitiesFactory } from './queries/get_many_entities.js';
import { getReverseClaimsFactory } from './queries/get_reverse_claims.js';
import { getRevisionsFactory } from './queries/get_revisions.js';
import { searchEntitiesFactory } from './queries/search_entities.js';
import { sparqlQueryFactory } from './queries/sparql_query.js';
import { buildSimpleClient } from './simple_client.js';
import { buildUrlFactory } from './utils/build_url.js';
import { isPlainObject } from './utils/utils.js';
const tip = `Tip: if you just want to access functions that don't need an instance or a sparqlEndpoint,
those are also exposed directly on the module object. Exemple:
import { isItemId, simplify } from 'wikibase-sdk'`;
const common = {
simplify,
parse,
...helpers,
...sitelinksHelpers,
...rankHelpers,
...timeHelpers,
};
export function WBK(config) {
if (!isPlainObject(config))
throw new Error('invalid config');
const { instance, sparqlEndpoint, userAgent, simplifyEntityOptions } = config;
let { wgScriptPath = 'w' } = config;
wgScriptPath = wgScriptPath.replace(/^\//, '');
if (!(instance || sparqlEndpoint)) {
throw new Error(`one of instance or sparqlEndpoint should be set at initialization.\n${tip}`);
}
const clientOptions = { userAgent };
let wikibaseApiFunctions;
let instanceRoot;
let instanceApiEndpoint;
if (instance) {
validateEndpoint('instance', instance);
instanceRoot = instance
.replace(/\/$/, '')
.replace(`/${wgScriptPath}/api.php`, '');
instanceApiEndpoint = `${instanceRoot}/${wgScriptPath}/api.php`;
const buildUrl = buildUrlFactory(instanceApiEndpoint);
wikibaseApiFunctions = {
searchEntities: searchEntitiesFactory(buildUrl),
cirrusSearchPages: cirrusSearchPagesFactory(buildUrl),
getEntities: getEntitiesFactory(buildUrl),
getManyEntities: getManyEntitiesFactory(buildUrl),
getRevisions: getRevisionsFactory(buildUrl),
getEntityRevision: getEntityRevisionFactory(instance, wgScriptPath),
getEntitiesFromSitelinks: getEntitiesFromSitelinksFactory(buildUrl),
};
}
else {
wikibaseApiFunctions = {
searchEntities: missingInstance('searchEntities'),
cirrusSearchPages: missingInstance('cirrusSearchPages'),
getEntities: missingInstance('getEntities'),
getManyEntities: missingInstance('getManyEntities'),
getRevisions: missingInstance('getRevisions'),
getEntityRevision: missingInstance('getEntityRevision'),
getEntitiesFromSitelinks: missingInstance('getEntitiesFromSitelinks'),
};
}
let wikibaseQueryServiceFunctions;
if (sparqlEndpoint) {
validateEndpoint('sparqlEndpoint', sparqlEndpoint);
wikibaseQueryServiceFunctions = {
sparqlQuery: sparqlQueryFactory(sparqlEndpoint),
getReverseClaims: getReverseClaimsFactory(sparqlEndpoint),
};
}
else {
wikibaseQueryServiceFunctions = {
sparqlQuery: missingSparqlEndpoint('sparqlQuery'),
getReverseClaims: missingSparqlEndpoint('getReverseClaims'),
};
}
return {
instance: {
root: instanceRoot,
apiEndpoint: instanceApiEndpoint,
},
client: buildClient({
...wikibaseApiFunctions,
...wikibaseQueryServiceFunctions,
}, clientOptions),
simpleClient: buildSimpleClient({
...wikibaseApiFunctions,
...wikibaseQueryServiceFunctions,
}, clientOptions, simplifyEntityOptions),
...common,
...wikibaseApiFunctions,
...wikibaseQueryServiceFunctions,
};
}
const validateEndpoint = (name, url) => {
if (!(typeof url === 'string' && url.startsWith('http'))) {
throw new Error(`invalid ${name}: ${url}`);
}
};
const missingConfig = (missingParameter) => (name) => () => {
throw new Error(`${name} requires ${missingParameter} to be set at initialization`);
};
const missingSparqlEndpoint = missingConfig('a sparqlEndpoint');
const missingInstance = missingConfig('an instance');
//# sourceMappingURL=wikibase-sdk.js.map