π5π₯4β€1
I bet some readers have strong feelings about the idea of mixing PHP and Node.js, but this is a neat project. php-node is a native module for Node that enables the running of PHP apps within the Node environment. Why? For migrating legacy apps, building hybrid PHP/JS apps, or Node apps that simply need to call out to PHP for some reason (WordPress, maybe, as we see in this post).
Matteo Collina et al.
Please open Telegram to view this post
VIEW IN TELEGRAM
π6π€4π₯3β€2
CHALLENGE
class EventEmitter {
constructor() {
this.events = {};
}
on(event, listener) {
if (!this.events[event]) {
this.events[event] = [];
}
this.events[event].push(listener);
return () => this.off(event, listener);
}
off(event, listener) {
if (!this.events[event]) return;
this.events[event] = this.events[event].filter(l => l !== listener);
}
emit(event, ...args) {
if (!this.events[event]) return false;
this.events[event].forEach(listener => listener(...args));
return true;
}
}
const emitter = new EventEmitter();
const unsubscribe = emitter.on('message', data => console.log(data));
emitter.emit('message', 'Hello');
emitter.emit('message', 'World');
unsubscribe();
emitter.emit('message', 'Ignored');
console.log(emitter.emit('message', 'Still ignored'));
β€5π5π€4π€©2π₯1
What is the output?
Anonymous Quiz
33%
Hello World false
31%
Hello World true
21%
Hello World Ignored false
15%
Hello World Ignored true
π€8β€2π₯1
If youβve ever been overwhelmed by whatβs in node_modules, this tool lets you dig around with some guidance as to what is what. You can use fuzzy search to find specific things as well as see which modules are using the most space (you can try it right now with `npx qnm doctor`).
Ran Yitzhaki
Please open Telegram to view this post
VIEW IN TELEGRAM
β€4π2π₯1π€©1
CHALLENGE
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const result = numbers
.filter(num => num % 2 === 0)
.map(num => num * 2)
.reduce((acc, num, index, array) => {
if (index === array.length - 1) {
return (acc + num) / array.length;
}
return acc + num;
}, 0);
console.log(result);
β€3
π€£13β€1π€1
Why let Python developers have all the fun? Now you can harness the full power of Googleβs Gemini API (and Vertex platform) from Node too. v1.0 landed a few days ago, but today we also get v1.1 which includes CommonJS support. The Gemini docs and examples now use it too (if you select JavaScript).
Please open Telegram to view this post
VIEW IN TELEGRAM
β€12π7π₯2
CHALLENGE
const user = {
details: {
name: 'Alex',
contact: null,
preferences: {
theme: 'dark'
}
},
getInfo() {
return this?.details?.contact?.email ||
this?.details?.preferences?.theme ||
this?.details?.name ||
'Unknown';
}
};
console.log(user.getInfo());
π9β€3
π€£10π€5π3β€2
A monorepo is like a BMW: it requires constant maintenance and attention. You canβt just set it up once and expect it to work smoothly for the next five years.
nairihar
Please open Telegram to view this post
VIEW IN TELEGRAM
β€10π€£3
CHALLENGE
function createCounter() {
let count = 0;
return {
increment: () => ++count,
getCount: () => count
};
}
function compose(...fns) {
return (x) => fns.reduceRight((acc, fn) => fn(acc), x);
}
const counter = createCounter();
const double = x => x * 2;
const addOne = x => x + 1;
const incrementAndProcess = compose(double, addOne, counter.increment);
counter.increment();
const result = incrementAndProcess();
console.log(result);
π9π₯1
π€£9π₯6β€5π2π€1
TypeScript 5.5 introduces support for new ECMAScript methods on the Set object: union, intersection, difference, and symmetricDifference. These methods allow for more intuitive and readable operations on sets.
π10β€4π₯4π€£1
CHALLENGE
const products = [
{ id: 1, name: 'Laptop', price: 1200, category: 'Electronics' },
{ id: 2, name: 'Headphones', price: 100, category: 'Electronics' },
{ id: 3, name: 'Book', price: 15, category: 'Books' },
{ id: 4, name: 'Shirt', price: 25, category: 'Clothing' },
{ id: 5, name: 'Coffee Mug', price: 10, category: 'Kitchen' }
];
const result = products
.filter(p => p.price > 20)
.map(p => ({ name: p.name, value: p.price * 0.9 }))
.reduce((acc, item) => {
acc.names.push(item.name);
acc.total += item.value;
return acc;
}, { names: [], total: 0 });
console.log(result);
β€9π2π₯1
What is the output?
Anonymous Quiz
20%
{ names: ['Laptop', 'Headphones', 'Book', 'Shirt'], total: 1214 }
49%
{ names: ['Laptop', 'Headphones', 'Shirt'], total: 1192.5 }
16%
{ total: 1192.5, names: ['Laptop', 'Headphones', 'Shirt'] }
16%
{names: ['Laptop', 'Headphones', 'Shirt'], total: 1192.5}
π₯9π€6π5β€3π€£1
CHALLENGE
const person = {
name: 'Alice',
greet() {
return `Hello, I'm ${this.name}`;
},
farewell: () => `Goodbye from ${this.name}`
};
const greetFn = person.greet;
const farewellFn = person.farewell;
console.log(person.greet());
console.log(greetFn());
console.log(farewellFn());
β€5
What is the output?
Anonymous Quiz
28%
Hello, I'm Alice TypeError: Cannot read property 'name' of undefined Goodbye from undefined
40%
Hello, I'm Alice Hello, I'm undefined Goodbye from undefined
22%
Hello, I'm Alice Hello, I'm Goodbye from Alice
10%
Hello, I'm Alice Hello, I'm undefined Goodbye from Alice
β€7π3π₯1π€1
Matteo Collina notes the Node.js ecosystem is βat a critical junctureβ, with v18 and earlier now βEnd-of-Lifeβ. He breaks down what that really means for users of legacy versions, and why you should skip Active LTS v20 and leap straight to v22 for maximum future-proofing. If you have to stay on older versions, though, Matteo shares an option to consider.
Matteo Collina
Please open Telegram to view this post
VIEW IN TELEGRAM
β€8π2π₯1
CHALLENGE
function task1() {
console.log('A');
setTimeout(() => console.log('B'), 0);
Promise.resolve().then(() => console.log('C'));
Promise.resolve().then(() => setTimeout(() => console.log('D'), 0));
Promise.resolve().then(() => console.log('E'));
setTimeout(() => console.log('F'), 0);
console.log('G');
}
task1();
// What is the order of the console output?