JavaScript
32.1K subscribers
1.05K photos
10 videos
33 files
730 links
A resourceful newsletter featuring the latest and most important news, articles, books and updates in the world of #javascript πŸš€ Don't miss our Quizzes!

Let's chat: @nairihar
Download Telegram
A minimal CheatEngine implementation built with Rust and a terminal UI.

Do you think it’s possible to create something similar with JavaScript?
❀2πŸ‘2πŸ€”2πŸ”₯1
CHALLENGE

const Maybe = {
of: (value) => ({ value, map: f => value == null ? Maybe.nothing() : Maybe.of(f(value)) }),
nothing: () => ({ value: null, map: () => Maybe.nothing() })
};

const result = Maybe.of(5)
.map(x => x * 2)
.map(x => x > 15 ? null : x)
.map(x => x + 1)
.map(x => x.toString());

console.log(result.value);
πŸ€”7❀1πŸ‘1
What is the output?
Anonymous Quiz
21%
undefined
46%
11
25%
null
8%
NaN
πŸ€”6❀2πŸ‘2
CHALLENGE

class EventManager {
constructor() {
this.listeners = new Map();
}

addListener(event, callback) {
if (!this.listeners.has(event)) {
this.listeners.set(event, new Set());
}
this.listeners.get(event).add(callback);
}

removeAllListeners() {
this.listeners.clear();
}
}

const manager = new EventManager();
const obj = { data: new Array(1000).fill('memory') };
manager.addListener('test', () => obj.data.length);
manager.removeAllListeners();
console.log(manager.listeners.size);
What is the output?
Anonymous Quiz
16%
1
41%
0
34%
undefined
10%
1000
πŸ”₯2❀1πŸ‘1
πŸ‘€ Vitest 4.0 Released: The Vite-Native Testing Framework

The Vite-powered, Jest-compatible testing framework introduces visual regression testing, makes its β€˜Browser Mode’ stable (for running tests in a browser directly), adds Playwright Traces support, and more. Still unsure? You can compare it with other test runners here.

VoidZero and Contributors
Please open Telegram to view this post
VIEW IN TELEGRAM
❀3πŸ‘2πŸ”₯1
CHALLENGE

async function fetchData() {
return Promise.resolve('data');
}

async function processData() {
const result = await fetchData();
console.log('Processing:', result);
return result.toUpperCase();
}

const promise = processData();
console.log('Promise:', promise);

promise.then(value => {
console.log('Final:', value);
});
CHALLENGE

class DataProcessor {
constructor(transform) {
this.transform = transform;
}

process(data) {
return this.transform(data);
}
}

const multiply = x => x * 2;
const addTen = x => x + 10;
const toString = x => `Result: ${x}`;

const compose = (...fns) => x => fns.reduceRight((acc, fn) => fn(acc), x);

const processor = new DataProcessor(compose(toString, addTen, multiply));
console.log(processor.process(5));
πŸ”₯1
What is the output?
Anonymous Quiz
23%
5
44%
Result: 20
25%
Result: 25
8%
Result: 30
❀4πŸ‘2πŸ”₯1
🀟 Awesome Node: Over 500 Curated Packages, Resources and Links

It’s been more than four years since we linked to Sindre's handy resource, but it continues to get updates and tweaks (and, if you want, you can contribute a submission too – though the bar is quite high).

Sindre Sorhus
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4πŸ‘2πŸ”₯2
CHALLENGE

const target = { name: 'Sarah', age: 25 };
const handler = {
get(obj, prop) {
if (prop in obj) {
return obj[prop].toString().toUpperCase();
}
return `Property ${prop} not found`;
},
set(obj, prop, value) {
obj[prop] = value * 2;
return true;
}
};
const proxy = new Proxy(target, handler);
proxy.salary = 50000;
console.log(proxy.name);
console.log(proxy.age);
console.log(proxy.salary);
console.log(proxy.city);
CHALLENGE

function highlight(strings, ...values) {
return strings.reduce((result, string, i) => {
const value = values[i] ? `<mark>${values[i]}</mark>` : '';
return result + string + value;
}, '');
}

const name = 'Sarah';
const skill = 'React';
const template = highlight`Hello ${name}, you're great at ${skill}!`;

console.log(template);