const axios = require("axios"); const renderError = (message) => { return ` Something went wrong! file an issue at https://git.io/JJmN9 ${message} `; }; // https://stackoverflow.com/a/48073476/10629172 function encodeHTML(str) { return str.replace(/[\u00A0-\u9999<>&](?!#)/gim, function (i) { return "&#" + i.charCodeAt(0) + ";"; }); } function kFormatter(num) { return Math.abs(num) > 999 ? Math.sign(num) * (Math.abs(num) / 1000).toFixed(1) + "k" : Math.sign(num) * Math.abs(num); } function isValidHexColor(hexColor) { return new RegExp( /^([A-Fa-f0-9]{8}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{3}|[A-Fa-f0-9]{4})$/ ).test(hexColor); } function parseBoolean(value) { if (value === "true") { return true; } else if (value === "false") { return false; } else { return value; } } function fallbackColor(color, fallbackColor) { return (isValidHexColor(color) && `#${color}`) || fallbackColor; } function request(data, headers) { return axios({ url: "https://api.github.com/graphql", method: "post", headers, data, }); } /** * * @param {String[]} items * @param {Number} gap * @param {string} direction * * @description * Auto layout utility, allows us to layout things * vertically or horizontally with proper gaping */ function FlexLayout({ items, gap, direction }) { // filter() for filtering out empty strings return items.filter(Boolean).map((item, i) => { let transform = `translate(${gap * i}, 0)`; if (direction === "column") { transform = `translate(0, ${gap * i})`; } return `${item}`; }); } module.exports = { renderError, kFormatter, encodeHTML, isValidHexColor, request, parseBoolean, fallbackColor, FlexLayout, };