Skip to content

Instantly share code, notes, and snippets.

View ekrem-aktas's full-sized avatar

Ekrem ekrem-aktas

View GitHub Profile
// Returns a function which runs given checkFn against a value.
const createRule = (checkFn, errorMessage) => {
return async (value) => await Promise.resolve(checkFn(value)) ? null : errorMessage;
}
// Returns a function which accepts a value to validate and runs all passed rules.
const defineValidator = (...rules) => {
return async (value) => {
for (const rule of rules) {
const errorMessage = await rule(value);
async function isUsernameAvailable(username) {
const response = await fetch(`/api/checkusername/${username}`); // returns { available: true | false }
return (await response.json()).available;
}
async function validateUsername(username, usernameUniquenessCheckFn) {
if (typeof username !== "string" || username.trim() === "") {
return { valid: false, reason: "Username is needed" };
}
async function validateUsername(username) {
if (typeof username !== "string" || username.trim() === "") {
return { valid: false, reason: "Username is needed" };
}
if (!username.match(/^\w+$/)) {
return { valid: false, reason: "Username must consist of characters and numbers" };
}
const response = await fetch(`/api/checkusername/${username}`); // returns { available: true | false }
async function validateUsername(username) {
const errorNode = document.getElementById("error-text");
// Check if username is a non-empty string
if (typeof username !== "string" || username.trim() === "") {
errorNode.innerText = "Username is required";
return false;
}
// Check if username format is valid
function groupBy(arr, func){
let grouped = Object.create(null);
arr.forEach((item) => {
const key = func(item);
if (!grouped[key]) {
grouped[key] = [];
}
grouped[key].push(item);
});
function groupBy(arr, func){
return arr
.reduce((acc, item) => {
const key = func(item);
if (!acc[key]) {
acc[key] = [];
}
acc[key].push(item);
return acc;
}, Object.create(null));
const members = [["name", "apple"], ["type", "fruit"]];
const obj = Object.create(null);
members.forEach(([key, value]) => obj[key] = value);
console.log(obj); // { name: "apple", type: "fruit" }
const members = [["name", "apple"], ["type", "fruit"]];
const food = members.reduce((obj, [key, value]) => {
obj[key] = value;
return obj;
}, Object.create(null));
console.log(food); // { name: "apple", type: "fruit" }
const numbers = [1, 2, 3];
let total = 0;
numbers.forEach(num => total += num);
console.log(total) // 6
const numbers = [1, 2, 3];
const total = numbers.reduce((sum, num) => sum + num);
console.log(total); // 6