wikibase-edit
Version:
Edit Wikibase from NodeJS
45 lines • 2.1 kB
JavaScript
import { newError } from './error.js';
import { fetchUsedPropertiesDatatypes } from './properties/fetch_used_properties_datatypes.js';
import { initializeConfigAuth } from './request/initialize_config_auth.js';
import { post } from './request/post.js';
import { resolveTitle } from './resolve_title.js';
import { isNonEmptyString } from './utils.js';
import { validateAndEnrichConfig } from './validate_and_enrich_config.js';
import validateParameters from './validate_parameters.js';
// Params could be captured with Parameters<ActionFunction>[0], but the resulting typing isn't great
export function requestWrapper(actionFn, generalConfig) {
return async function request(params, reqConfig) {
const config = validateAndEnrichConfig(generalConfig, reqConfig);
validateParameters(params);
initializeConfigAuth(config);
await fetchUsedPropertiesDatatypes(params, config);
if (!config.properties)
throw newError('properties not found', config);
const { action, data } = await actionFn(params, config.properties, config.instance, config);
const { summarySuffix } = config;
let summary = 'summary' in params ? params.summary : config.summary;
if (summarySuffix) {
if (typeof summary === 'string') {
summary = `${summary.trim()} ${summarySuffix.trim()}`;
}
else {
summary = summarySuffix;
}
}
const baserevid = 'baserevid' in params ? params.baserevid : config.baserevid;
const extraData = {};
if (isNonEmptyString(summary)) {
extraData.summary = summary.trim();
}
if (baserevid != null)
extraData.baserevid = baserevid;
if ('title' in data) {
const title = await resolveTitle(data.title, config.instanceApiEndpoint);
return post(action, { ...data, ...extraData, title }, config);
}
else {
return post(action, { ...data, ...extraData }, config);
}
};
}
//# sourceMappingURL=request_wrapper.js.map