wikibase-edit
Version:
Edit Wikibase from NodeJS
76 lines • 2.59 kB
JavaScript
const stringNumberPattern = /^(-|\+)?\d+(\.\d+)?$/;
const signedStringNumberPattern = /^(-|\+)\d+(\.\d+)?$/;
export function stringifyQuery(query) {
// @ts-expect-error
return new URLSearchParams(query).toString();
}
export function isNonEmptyString(str) {
return typeof str === 'string' && str.length > 0;
}
export function buildUrl(base, query) {
return `${base}?${stringifyQuery(query)}`;
}
// helpers to simplify polymorphisms
export function forceArray(obj) {
if (obj == null)
return [];
if (!(obj instanceof Array))
return [obj];
return obj;
}
export const isString = (str) => typeof str === 'string';
export const isNumber = (num) => typeof num === 'number';
export function isStringNumber(str) {
return stringNumberPattern.test(str);
}
export function isSignedStringNumber(str) {
return typeof str === 'string' && signedStringNumberPattern.test(str);
}
export const isArray = (array) => array instanceof Array;
export function isPlainObject(obj) {
if (obj instanceof Array)
return false;
if (obj === null)
return false;
return typeof obj === 'object';
}
export function isntEmpty(value) {
return value != null;
}
export function mapValues(obj, fn) {
function aggregator(index, key) {
index[key] = fn(key, obj[key]);
return index;
}
return Object.keys(obj).reduce(aggregator, {});
}
export const wait = (ms) => new Promise(resolve => setTimeout(resolve, ms));
// Work around the TS2345 error when using Array include method
// https://stackoverflow.com/questions/55906553/typescript-unexpected-error-when-using-includes-with-a-typed-array/70532727#70532727
// Implementation inspired by https://8hob.io/posts/elegant-safe-solution-for-typing-array-includes/#elegant-and-safe-solution
export function arrayIncludes(array, value) {
const arrayT = array;
return arrayT.includes(value);
}
// Same as `arrayIncludes` but for sets
export function setHas(set, value) {
const setT = set;
return setT.has(value);
}
export function objectEntries(obj) {
return Object.entries(obj);
}
export function objectFromEntries(entries) {
return Object.fromEntries(entries);
}
export function objectValues(obj) {
return Object.values(obj);
}
// Source: https://www.totaltypescript.com/tips/create-your-own-objectkeys-function-using-generics-and-the-keyof-operator
export function objectKeys(obj) {
return Object.keys(obj);
}
export function hasTruthy(params, attribute) {
return attribute in params && params[attribute];
}
//# sourceMappingURL=utils.js.map