UNPKG

wiki-entity

Version:
113 lines (112 loc) 4.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.exploreEntityClaims = exports.getEntities = void 0; const types_1 = require("../types"); const api_1 = require("./api"); const simplify_entity_1 = require("./simplify_entity"); const utils_1 = require("../utils"); function getEntities(params) { const claims = params.claims || "none"; const lang = params.language || "en"; return (0, api_1.getManyEntities)(params).then(function (entities) { const ids = Object.keys(entities).filter((id) => (0, utils_1.isValidWikiId)(id)); ids.forEach((id) => { entities[id] = (0, simplify_entity_1.simplifyEntity)(lang, entities[id]); }); const tasks = []; if (~["all", "property"].indexOf(claims)) { tasks.push(exploreEntitiesProperties(entities, lang)); } if (~["all", "item"].indexOf(claims)) { tasks.push((0, utils_1.eachSeries)(ids, (id) => exploreEntityClaims(entities[id].claims, { language: lang }))); } return Promise.all(tasks).then(() => entities); }); } exports.getEntities = getEntities; function exploreEntitiesProperties(entities, lang) { let ids = []; const entitiesIds = Object.keys(entities); entitiesIds.forEach((entityId) => { const entity = entities[entityId]; if (entity.claims) { ids = ids.concat(Object.keys(entity.claims)); } }); if (!ids.length) { return Promise.resolve(); } ids = (0, utils_1.uniq)(ids); return getEntities({ ids: ids, language: lang, props: [ types_1.WikidataPropsParam.info, types_1.WikidataPropsParam.labels, types_1.WikidataPropsParam.descriptions, types_1.WikidataPropsParam.datatype ], claims: "none" }).then(function (properties) { Object.keys(properties).forEach((propertyId) => { entitiesIds.forEach((entityId) => { const entity = entities[entityId]; if (entity.claims && entity.claims[propertyId]) { if (entity.claims && entity.claims[propertyId]) { for (var prop in properties[propertyId]) { if (~["label", "description"].indexOf(prop)) { entity.claims[propertyId][prop] = properties[propertyId][prop]; } } } } }); }); return entities; }); } function exploreEntityClaims(claims, params) { if (!claims) { return Promise.resolve(); } const ids = []; const paths = {}; Object.keys(claims).forEach((property) => { claims[property].values.forEach((propertyValue, index) => { if (propertyValue.datatype === "wikibase-item") { const id = propertyValue.value; paths[id] = paths[id] || []; paths[id].push({ pid: property, value: propertyValue, index }); if (ids.indexOf(id) < 0) { ids.push(id); } } }); }); if (ids.length === 0) { return Promise.resolve(); } params.ids = ids; params.props = params.props || [ types_1.WikidataPropsParam.info, types_1.WikidataPropsParam.labels, types_1.WikidataPropsParam.descriptions, types_1.WikidataPropsParam.datatype ]; params.claims = params.claims || "none"; return getEntities(params).then((entities) => { Object.keys(entities).forEach((id) => { const item = entities[id]; const pa = paths[item.id] || []; pa.forEach((pai) => { const val = claims[pai.pid].values[pai.index]; for (var prop in item) { if (~["label", "description"].indexOf(prop)) { val[prop] = item[prop]; } } }); }); }); } exports.exploreEntityClaims = exploreEntityClaims;