That is, as opposed to the specified versions. Includes a handy -i interactive mode so you can look at potential upgrades and then opt in to them one by one. v18.2 adds a ‘cooldown’ feature to help protect against supply chain attacks by requiring package versions to be published at least the given number of days before considering them for upgrade.
Raine Revere
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍3🔥2
CHALLENGE
let cache = new Map();
let obj = { name: 'Emma', age: 28 };
function memoize(fn) {
return function(...args) {
const key = JSON.stringify(args);
if (cache.has(key)) {
console.log('Cache hit');
return cache.get(key);
}
const result = fn.apply(this, args);
cache.set(key, result);
return result;
};
}
const process = memoize((data) => {
console.log('Processing:', data.name);
return data.age * 2;
});
process(obj);
process(obj);
obj.age = 30;
process(obj);
console.log('Cache size:', cache.size);
❤6
CHALLENGE
class CustomError extends Error {
constructor(message, code) {
super(message);
this.name = 'CustomError';
this.code = code;
}
}
try {
throw new CustomError('Something went wrong', 500);
} catch (error) {
console.log(error instanceof Error);
console.log(error instanceof CustomError);
console.log(error.name);
console.log(typeof error.code);
}
❤7
What is the output?
Anonymous Quiz
49%
true, true, CustomError, number
34%
false, false, CustomError, number
9%
true, true, Error, number
8%
true, false, Error, string
❤6👍2🔥1
CHALLENGE
class ValidationError extends Error {
constructor(message, code) {
super(message);
this.name = 'ValidationError';
this.code = code;
}
}
function processData(data) {
try {
if (!data) throw new ValidationError('Data required', 'MISSING_DATA');
return data.toUpperCase();
} catch (error) {
if (error instanceof ValidationError) {
console.log(`${error.name}: ${error.message} (${error.code})`);
} else {
console.log(`Unexpected error: ${error.message}`);
}
}
}
processData(null);
processData(42);
❤3🤣2
❤2
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣45👍4🔥2
CHALLENGE
class StateMachine {
constructor() {
this.state = 'idle';
this.transitions = {
idle: { start: 'running', reset: 'idle' },
running: { pause: 'paused', stop: 'stopped' },
paused: { resume: 'running', stop: 'stopped' },
stopped: { reset: 'idle' }
};
}
transition(action) {
const nextState = this.transitions[this.state]?.[action];
if (nextState) {
this.state = nextState;
return true;
}
return false;
}
}
const sm = new StateMachine();
console.log(sm.transition('start'));
console.log(sm.state);
console.log(sm.transition('reset'));
console.log(sm.state);
❤8👍2🤔1
What is the output?
Anonymous Quiz
22%
true running true idle
38%
true started false started
32%
true running false running
8%
false idle true idle
❤2👍2🔥2
CHALLENGE
const target = { name: 'Sarah', age: 25 };
const handler = {
get(obj, prop) {
if (prop === 'toString') {
return () => `Person: ${obj.name}`;
}
return Reflect.get(obj, prop);
},
has(obj, prop) {
return prop !== 'age' && Reflect.has(obj, prop);
}
};
const proxy = new Proxy(target, handler);
console.log(proxy.name);
console.log('age' in proxy);
console.log(proxy.toString());
🤩3🤔1
What is the output?
Anonymous Quiz
24%
Sarah false [object Object]
41%
Sarah true [object Object]
27%
Sarah false Person: Sarah
8%
undefined false Person: Sarah
❤5🔥4🤩3👍1
CHALLENGE
async function processData() {
console.log('Start');
const promise1 = new Promise(resolve => {
console.log('Promise 1 executor');
resolve('Result 1');
});
const promise2 = Promise.resolve('Result 2');
console.log('After promises created');
const result1 = await promise1;
console.log(result1);
const result2 = await promise2;
console.log(result2);
return 'Done';
}
processData().then(result => console.log(result));
❤1
What is the output?
Anonymous Quiz
35%
Start Promise 1 executor After promises created Result 1 Result 2 Done
27%
Promise 1 executor Start After promises created Result 1 Result 2 Done
17%
Start Promise 1 executor Result 1 After promises created Result 2 Done
20%
Start After promises created Promise 1 executor Result 1 Result 2 Done
❤5👍1🔥1
The Chrome team has released an MCP server for Chrome DevTools, enabling agents like Claude Code or OpenAI Codex to use the DevTools to debug and analyze the performance and behavior of your webapps (or even just to automate the use of Chrome generally). Addy does a great job of explaining the potential here.
Addy Osmani
Please open Telegram to view this post
VIEW IN TELEGRAM
❤7👍3🔥2
CHALLENGE
console.log('1');
Promise.resolve().then(() => {
console.log('2');
Promise.resolve().then(() => console.log('3'));
});
Promise.resolve().then(() => {
console.log('4');
});
setTimeout(() => console.log('5'), 0);
console.log('6');
❤7👍4
“We’ve been busy,” says Cloudflare which recently announced it’s bringing Node.js HTTP server support to its Workers function platform. This post goes deep into the technicalities, covering what areas of the standard library is supported, how the file system works (Workers doesn’t have a typical file system), how input/output streams work, and more. And you can use all of this now.
James M Snell (Cloudflare)
Please open Telegram to view this post
VIEW IN TELEGRAM
❤8🔥3👍1
CHALLENGE
function processData() {
try {
console.log('processing');
return 'success';
} catch (error) {
console.log('error caught');
return 'failed';
} finally {
console.log('cleanup');
}
}
const result = processData();
console.log('result:', result);
🔥2
What is the output?
Anonymous Quiz
13%
error caught cleanup result: failed
50%
processing cleanup result: success
19%
processing cleanup result: undefined
18%
processing result: success cleanup
❤4👍2