If youβre tired of Web animations, maybe Anime.js will refresh your appetite. This is a major upgrade to a mature library for animating CSS properties, SVGs, the DOM, and JS objects. Itβs smooth, well-built, and now complete with fresh documentation.
Julian Garner
Please open Telegram to view this post
VIEW IN TELEGRAM
β€6π5π₯4
CHALLENGE
const p1 = Promise.resolve(1);
const p2 = new Promise(resolve => resolve(2));
const p3 = new Promise(resolve => setTimeout(() => resolve(3), 0));
const p4 = Promise.reject(4).catch(err => err);
Promise.all([p1, p2, p3, p4])
.then(values => {
const result = values.reduce((acc, val) => {
return acc + val;
}, 0);
console.log(result);
})
.catch(err => console.log('Error:', err));
β€5π1
β€7π€5π2
CHALLENGE
const obj = {
[Symbol('a')]: 'hidden',
[Symbol.for('b')]: 'registered',
c: 'normal'
};
const symbols = Object.getOwnPropertySymbols(obj);
const keys = Object.keys(obj);
const allProps = Reflect.ownKeys(obj);
console.log(symbols.length, keys.length, allProps.length);
π3β€2
π8β€5π₯2π€£2π€1
A detailed guide to modern testing in Node from a group of developers who know all about it. Itβs on GitHub but is essentially written like a free book covering over 50 battle-tested tips covering areas as diverse as the βTesting Diamondβ, testing microservices, checking contracts, verifying OpenAPI correctness, and simulating flaky network conditions.
Goldberg, Salomon, and Gluskin
Please open Telegram to view this post
VIEW IN TELEGRAM
π9π₯3β€2
CHALLENGE
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
counter1();
counter1();
counter2();
const result = counter1() + counter2();
console.log(result);
π8π€8β€4
π€10
Please open Telegram to view this post
VIEW IN TELEGRAM
π6π€4β€2
CHALLENGE
// What will be logged when this code runs?
const counter = (() => {
let count = 0;
return {
increment() {
count += 1;
return this;
},
reset() {
count = 0;
return this;
},
get value() {
return count;
}
};
})();
const { increment, value } = counter;
increment();
counter.increment();
console.log(value);
π€£11π7β€6π€3
π8π€8π€£2
CHALLENGE
function processConfig(config) {
const defaultPort = 8080;
const defaultTimeout = 5000;
const port = config?.port ?? defaultPort;
const timeout = config?.timeout ?? defaultTimeout;
const debug = config?.debug ?? false;
return {
summary: `Port: ${port}, Timeout: ${timeout}, Debug: ${debug ? 'enabled' : 'disabled'}`,
isUsingDefaults: port === defaultPort && timeout === defaultTimeout
};
}
const result = processConfig({ port: 0, timeout: null });
console.log(result.summary);
π€4π3β€2π₯1
What is the output?
Anonymous Quiz
29%
Port: 8080, Timeout: 5000, Debug: disabled
27%
Port: 0, Timeout: null, Debug: disabled
38%
Port: 0, Timeout: 5000, Debug: disabled
7%
Port: undefined, Timeout: null, Debug: disabled
β€4π4π€3
Buzzing from the success of Gemini 2.5 Pro for dev tasks, Googleβs Firebase team gets in on the AI development action with a Cursor/v0/Lovable-a-like of its own for building apps in the browser.
Please open Telegram to view this post
VIEW IN TELEGRAM
π8π₯4β€1
CHALLENGE
function processUserData(data) {
const settings = {
theme: data.preferences?.theme ?? 'light',
notifications: data.preferences?.notifications ?? true,
fontSize: data.preferences?.fontSize ?? 16
};
let status = data.status ?? 'active';
let reputation = data.reputation ?? 0;
console.log(reputation || 'No reputation yet');
return settings;
}
processUserData({ status: '', reputation: 0 });
β€3π3π€1
β€5π4π€4π₯1
Electron is a natural choice for building JS and HTML-powered cross-platform desktop apps but numerous alternatives have appeared like Neutralinojs and the Rust-based Tauri. This post does a good job of quickly showing how Tauri differs and why you might choose it.
Costa Alexoglou
Please open Telegram to view this post
VIEW IN TELEGRAM
π4π₯2β€1
CHALLENGE
type User = {
id: number;
name: string;
email?: string;
};
function processUser<T extends User>(user: T): T & { processed: boolean } {
return { ...user, processed: true };
}
const partialUser = { id: 1, name: 'Alice' };
const result = processUser(partialUser);
console.log(typeof result.email);
π8π₯3β€1
What is the output?
Anonymous Quiz
19%
object
26%
string
28%
Error: Property 'email' does not exist on type 'User'
27%
undefined
β€4π2π₯2π€©1
Cursor's new "pay as you go" strategy with better models drives 20-30% more code generation than you would typically do. For all of the "vibe coders" out there, this is becoming an exponential "coding tax" for products because more code equals more token consumption, which generates more code...
Tigran Bayburtsyan
Please open Telegram to view this post
VIEW IN TELEGRAM
π€£17π4β€3π€1