CHALLENGE
function* range(start, end) {
while (start < end) {
yield start++;
}
}
function* labeled(prefix, gen) {
for (const val of gen) {
yield `${prefix}:${val}`;
}
}
function* pipeline() {
yield* labeled("A", range(1, 4));
yield* labeled("B", range(10, 12));
}
const results = [...pipeline()];
console.log(results.length, results[0], results[results.length - 1]);π₯2π1
β€3
CHALLENGE
function Vehicle(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
this.describe = function () {
return `${this.year} ${this.make} ${this.model}`;
};
}
Vehicle.prototype.age = function (currentYear) {
return currentYear - this.year;
};
const car = new Vehicle("Toyota", "Supra", 1998);
const truck = new Vehicle("Ford", "Raptor", 2021);
console.log(car.describe());
console.log(truck.age(2025));
console.log(car.constructor === Vehicle);
console.log(Object.getPrototypeOf(car) === Vehicle.prototype);
β€5π2π₯2
What is the output?
Anonymous Quiz
30%
Toyota Supra 1998 4 false true
41%
1998 Toyota Supra 4 true true
20%
1998 Toyota Supra 27 true true
10%
1998 Toyota Supra 4 true false
β€6π1
CHALLENGE
const balance = 9007199254740991n; // Number.MAX_SAFE_INTEGER as BigInt
const fee = 1n;
const multiplier = 2n;
const total = (balance + fee) * multiplier;
const asNumber = Number(total);
const isSafe = Number.isSafeInteger(asNumber);
const isExact = BigInt(asNumber) === total;
console.log(`${total}n | safe: ${isSafe} | exact: ${isExact}`);
β€2π1π₯1
CHALLENGE
console.log('1: start');
setTimeout(() => console.log('2: setTimeout'), 0);
Promise.resolve()
.then(() => {
console.log('3: promise 1');
return Promise.resolve('chained');
})
.then((val) => console.log(`4: ${val}`));
queueMicrotask(() => console.log('5: microtask'));
new Promise((resolve) => {
console.log('6: executor');
resolve();
}).then(() => console.log('7: promise 2'));
console.log('8: end');β€3π₯2π1
π3β€2π€1
CHALLENGE
class BankAccount {
#balance;
#transactionHistory = [];
constructor(initialBalance) {
this.#balance = initialBalance;
}
deposit(amount) {
this.#balance += amount;
this.#transactionHistory.push(`+${amount}`);
return this;
}
withdraw(amount) {
this.#balance -= amount;
this.#transactionHistory.push(`-${amount}`);
return this;
}
get summary() {
return `Balance: ${this.#balance} | Transactions: ${this.#transactionHistory.join(", ")}`;
}
static hasPrivateBalance(obj) {
return #balance in obj;
}
}
const account = new BankAccount(100);
account.deposit(50).deposit(25).withdraw(30);
console.log(account.summary);
console.log(BankAccount.hasPrivateBalance(account));
console.log(BankAccount.hasPrivateBalance({}));β€5π₯1π€1
CHALLENGE
class EventEmitter {
#listeners = new Map();
on(event, listener) {
if (!this.#listeners.has(event)) {
this.#listeners.set(event, []);
}
this.#listeners.get(event).push(listener);
return this;
}
emit(event, ...args) {
const handlers = this.#listeners.get(event) ?? [];
handlers.forEach(fn => fn(...args));
return this;
}
once(event, listener) {
const wrapper = (...args) => {
listener(...args);
this.off(event, wrapper);
};
return this.on(event, wrapper);
}
off(event, listener) {
const updated = (this.#listeners.get(event) ?? []).filter(fn => fn !== listener);
this.#listeners.set(event, updated);
return this;
}
}
const emitter = new EventEmitter();
const log = [];
emitter.on("data", val => log.push(`on:${val}`));
emitter.once("data", val => log.push(`once:${val}`));
emitter.on("data", val => log.push(`on2:${val}`));
emitter.emit("data", "A");
emitter.emit("data", "B");
console.log(log.join(", "));
β€4π3π₯3
What is the output?
Anonymous Quiz
21%
on:A, on2:A, on:B, once:B, on2:B
30%
on:A, on2:A, once:A, on:B, on2:B
33%
on:A, once:A, on2:A, on:B, once:B, on2:B
15%
on:A, once:A, on2:A, on:B, on2:B
β€2π€2π₯1
A minor release whose headline feature is the (experimental) implementation of package maps (which let Node resolve packages from a static JSON file rather than walking node_modules). Matteo Collinaβs node:vfs subsystem also begins to make an appearance.
Antoine du Hamel
Please open Telegram to view this post
VIEW IN TELEGRAM
β€4π2π₯2
A new framework from Vercel that provides Next.js-esque structure for building AI-powered agents using TypeScript and Markdown. It's quite Vercel-flavored by default, but I found you can run it entirely independently of Vercel with a few settings tweaks and your own keys. Project homepage.
Vercel
Please open Telegram to view this post
VIEW IN TELEGRAM
π7β€6π₯3
CHALLENGE
function makeCounter(start = 0, step = 1) {
let count = start;
const history = [];
return {
increment() {
count += step;
history.push(count);
return this;
},
decrement() {
count -= step;
history.push(count);
return this;
},
getHistory: () => history,
getCount: () => count,
};
}
const counter = makeCounter(10, 3);
counter.increment().increment().decrement();
console.log(counter.getCount());
console.log(counter.getHistory());β€5π2π₯2
What is the output?
Anonymous Quiz
24%
13 [13, 16, 10]
28%
10 [13, 16, 13]
43%
13 [ 13, 16, 13 ]
5%
16 [13, 16, 13]
Deno 2.9 (or the 'canary' build now) can turn JavaScript projects into self-contained apps on macOS, Windows, and Linux. Unlike Electron, you can opt to use the default OS WebView or a bundled Chromium backend, plus you get cross-compilation and automatic support for apps built on frameworks like Next.js and SvelteKit.
The Deno Project
Please open Telegram to view this post
VIEW IN TELEGRAM
β€7π6π₯2
CHALLENGE
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
async function processQueue(items) {
const results = [];
await items.reduce(async (prevPromise, item) => {
await prevPromise;
await delay(0);
results.push(item * 2);
}, Promise.resolve());
return results;
}
processQueue([1, 2, 3, 4])
.then((data) => console.log("Result:", data))
.catch((err) => console.log("Error:", err.message));
Promise.resolve()
.then(() => console.log("Microtask A"))
.then(() => console.log("Microtask B"));
β€4
Please open Telegram to view this post
VIEW IN TELEGRAM
π€£35π2β€1π₯1