UNPKG

wikibase-edit

Version:

Edit Wikibase from NodeJS

35 lines 1.59 kB
// A module that turns entity ids into full mediawiki page titles, by checking // the Wikibase custom namespace configuration // ex: P1 => Property:P1, Q1 => Q1 OR Item:Q1 import { isEntityId } from 'wikibase-sdk'; import { newError } from './error.js'; import { getJson } from './request/get_json.js'; let prefixesMapPromise; export async function resolveTitle(title, instanceApiEndpoint) { if (!isEntityId(title)) throw newError('expected entity id as title'); prefixesMapPromise = prefixesMapPromise || getPrefixesMap(instanceApiEndpoint); const prefixesMap = await prefixesMapPromise; const idFirstLetter = title[0]; const prefix = prefixesMap[idFirstLetter]; return (prefix === '' ? title : `${prefix}:${title}`); } async function getPrefixesMap(instanceApiEndpoint) { const infoUrl = `${instanceApiEndpoint}?action=query&meta=siteinfo&siprop=namespaces&format=json`; const res = await getJson(infoUrl); return parsePrefixesMap(res); } function parsePrefixesMap(res) { return Object.values(res.query.namespaces) .filter(namespace => namespace.defaultcontentmodel) .filter(namespace => namespace.defaultcontentmodel.startsWith('wikibase')) .reduce(aggregatePrefixes, {}); } function aggregatePrefixes(prefixesMap, namespace) { const { defaultcontentmodel, '*': prefix } = namespace; const type = defaultcontentmodel.split('-')[1]; const firstLetter = type === 'item' ? 'Q' : type[0].toUpperCase(); prefixesMap[firstLetter] = prefix; return prefixesMap; } //# sourceMappingURL=resolve_title.js.map