wikibase-edit
Version:
Edit Wikibase from NodeJS
72 lines • 2.28 kB
JavaScript
import { findEntityTypeFromId } from 'wikibase-sdk';
import { getTimeObject } from './get_time_object.js';
import { parseQuantity } from './quantity.js';
// The difference in builders are due to the different expectations of the Wikibase API
export const singleClaimBuilders = {
string(str) {
return `"${str}"`;
},
entity(entityId) {
return JSON.stringify(buildEntitySnakDataValue(entityId));
},
time(value) {
return JSON.stringify(getTimeObject(value));
},
// Property type specific builders
monolingualtext(valueObj) {
return JSON.stringify(valueObj);
},
quantity(amount, instance) {
return JSON.stringify(parseQuantity(amount, instance));
},
globecoordinate(obj) {
return JSON.stringify(obj);
},
};
export const entityEditBuilders = {
string(pid, value) {
return valueStatementBase(pid, 'string', value);
},
entity(pid, value) {
const datavalue = buildEntitySnakDataValue(value);
return valueStatementBase(pid, 'wikibase-entityid', datavalue);
},
monolingualtext(pid, value) {
return valueStatementBase(pid, 'monolingualtext', value);
},
time(pid, value) {
return valueStatementBase(pid, 'time', getTimeObject(value));
},
quantity(pid, value, instance) {
return valueStatementBase(pid, 'quantity', parseQuantity(value, instance));
},
globecoordinate(pid, value) {
return valueStatementBase(pid, 'globecoordinate', value);
},
specialSnaktype(pid, snaktype) {
return statementBase(pid, snaktype);
},
};
function buildEntitySnakDataValue(entityId) {
const id = typeof entityId === 'string' ? entityId : entityId.value.id;
const type = findEntityTypeFromId(id);
// @ts-expect-error
return { id, 'entity-type': type };
}
function statementBase(pid, snaktype) {
return {
rank: 'normal',
type: 'statement',
mainsnak: {
property: pid,
snaktype,
},
};
}
function valueStatementBase(pid, type, value) {
const statement = statementBase(pid, 'value');
// @ts-expect-error
statement.mainsnak.datavalue = { type, value };
return statement;
}
//# sourceMappingURL=builders.js.map