UNPKG

wiki-entity

Version:
101 lines (100 loc) 3.31 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.simplifyClaim = exports.simplifyPropertyClaims = exports.simplifyClaims = void 0; function simplifyClaims(claims) { const simpleClaims = {}; for (let id in claims) { let propClaims = claims[id]; simpleClaims[id] = simplifyPropertyClaims(propClaims, id); if (simpleClaims[id].values.length === 0) { delete simpleClaims[id]; } } return simpleClaims; } exports.simplifyClaims = simplifyClaims; function simplifyPropertyClaims(propClaims, id) { const prop = { id, values: propClaims .map((claim) => simplifyClaim(claim)) .filter((item) => item && (item.value_string || item.value !== null)) }; return prop; } exports.simplifyPropertyClaims = simplifyPropertyClaims; function simplifyClaim(claim) { const { mainsnak, qualifiers } = claim; if (mainsnak === null) return null; const { datatype, datavalue } = mainsnak; if (datavalue === null || datavalue === undefined || datavalue.value === null) return null; let value = null; let value_string; switch (datatype) { case "string": case "commonsMedia": case "url": case "external-id": value = datavalue.value; break; case "monolingualtext": value = datavalue.value.text; break; case "wikibase-item": value = datavalue.value.id; break; case "wikibase-property": value = datavalue.value; break; case "time": value = datavalue.value; value_string = stringDatetime(datavalue.value); break; case "quantity": value = datavalue.value; value_string = parseFloat(datavalue.value.amount).toString(); break; case "globe-coordinate": value = datavalue.value; value_string = getLatLngFromCoordinates(datavalue.value).join(","); break; } const simpleQualifiers = {}; for (let qualifierProp in qualifiers) { simpleQualifiers[qualifierProp] = qualifiers[qualifierProp].map(prepareQualifierClaim); } const result = { datatype, value, qualifiers: simplifyClaims(simpleQualifiers) }; if (value_string) { result["value_string"] = value_string; } return result; } exports.simplifyClaim = simplifyClaim; const getLatLngFromCoordinates = (value) => [ value.latitude.toFixed(4).replace(/[0]+$/, "").replace(/\.$/, ""), value.longitude.toFixed(4).replace(/[0]+$/, "").replace(/\.$/, "") ]; const prepareQualifierClaim = (claim) => ({ mainsnak: claim }); const stringDatetime = (value) => { let date = value.time; const p = value.precision; if (p >= 9) { date = date.substr(1); if (p < 12) { date = date.split("T")[0]; if (p === 10) { date = date.split("-").slice(0, 2).join("-"); } else if (p === 9) { date = date.split("-")[0]; } } } return date; };