JavaScript
31.7K subscribers
1.16K photos
10 videos
33 files
835 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
πŸ˜‰ Evan You's State of Vue 2026 Talk

A month ago, Evan You (of Vue.js and VoidZero fame) gave his annual address. Less Vue-focused than usual (though Vapor Mode is β€œalmost ready”), the talk focuses on Vite-ecosystem updates covering Vite 8, Vite+, and Void.

Evan You / Vue.js Amsterdam
Please open Telegram to view this post
VIEW IN TELEGRAM
❀5πŸ‘2πŸ”₯1
CHALLENGE


const partial = (fn, ...presetArgs) => {
return function partiallyApplied(...laterArgs) {
return fn(...presetArgs, ...laterArgs);
};
};

const calculateTax = (taxRate, discount, price) => {
const discounted = price - (price * discount) / 100;
return parseFloat((discounted + (discounted * taxRate) / 100).toFixed(2));
};

const withVAT = partial(calculateTax, 20);
const withVATandDiscount = partial(withVAT, 15);

console.log(withVAT(0, 100));
console.log(withVATandDiscount(200));
console.log(partial(calculateTax, 10, 5)(50));
❀3
🌟 Bun v1.3.13: Smarter Testing, Streaming Installs, and Less Memory

The Bun runtime has had a great run of releases, including last week’s v1.3.12 with built-in browser automation. Now, bun test gets numerous enhancements with --isolate, --parallel, --shard and --changed options for test env isolation, parallelization, and to run only test files affected by recent changes. The runtime now uses 5% less memory, bun install gets faster, and more.

Jarred Sumner
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ”₯3❀2πŸ‘2
CHALLENGE

const values = [0.1 + 0.2, NaN, Infinity, -0, 42.6789];

const results = values.map((v, i) => {
if (i === 0) return v.toFixed(2);
if (i === 1) return Number.isFinite(v) + " " + Number.isNaN(v);
if (i === 2) return Number.isFinite(v) + " " + isFinite(v);
if (i === 3) return Object.is(v, 0) + " " + Object.is(v, -0);
if (i === 4) return v.toPrecision(4);
});

console.log(results.join(" | "));
❀3πŸ‘2πŸ”₯1
πŸ˜ƒ Git 2.54 has been released with a couple of headline features:

β€’ git history offers a new, easy way to edit commit messages or interactively split a commit into two.

β€’ You can now define hooks in config files (whether in a repo, at user level, or even system level) rather than just in .git/hooks. You can also run multiple hooks for the same event in this way.
Please open Telegram to view this post
VIEW IN TELEGRAM
❀5πŸ”₯3
CHALLENGE

async function* paginate(items, pageSize) {
for (let i = 0; i < items.length; i += pageSize) {
const page = items.slice(i, i + pageSize);
yield await Promise.resolve(page);
}
}

async function* transform(source, fn) {
for await (const chunk of source) {
yield fn(chunk);
}
}

async function run() {
const data = [10, 20, 30, 40, 50, 60];

const pages = paginate(data, 2);
const mapped = transform(pages, (page) => page.map((x) => x * 2));

const results = [];
for await (const page of mapped) {
results.push(page.reduce((a, b) => a + b, 0));
}

console.log(results);
}

run();
❀2πŸ‘2
πŸ€” aube: A New Node.js Package Manager

Yes, another one! What’s noteworthy is it comes from the developer of mise, a tool that makes managing numerous languages so much easier. aube’s selling points are raw performance and being a drop-in replacement. Its defaults are also security-focused.

Jeff Dickey
Please open Telegram to view this post
VIEW IN TELEGRAM
❀2πŸ”₯2πŸ‘1
CHALLENGE


class ValidationError extends Error {
constructor(message, field) {
super(message);
this.name = "ValidationError";
this.field = field;
}
}

class NetworkError extends ValidationError {
constructor(message, field, statusCode) {
super(message, field);
this.name = "NetworkError";
this.statusCode = statusCode;
}
}

const err = new NetworkError("Not Found", "endpoint", 404);

console.log([
err instanceof NetworkError,
err instanceof ValidationError,
err instanceof Error,
err instanceof TypeError,
].join(", "));
πŸ‘2❀1
πŸ‘€ Optique 1.0: Type-Safe Combinatorial CLI Parser

Build composable parsers for CLIs with type safety, type inference, and built-in shell completion support, plus config file integration and man page generation from the same definitions. v1.0 is the first stable release and Hong compares it to Commander.js and explains why you'd use Optique.

Hong Minhee
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4πŸ”₯1
CHALLENGE

function* counter(start, end) {
for (let i = start; i <= end; i++) {
yield i;
}
}

function* pipeline() {
const first = yield* counter(1, 3);
console.log("Counter done:", first);

yield "bridge";

const second = yield* counter(7, 9);
console.log("Counter done:", second);
}

const gen = pipeline();

const results = [];
let next = gen.next();
while (!next.done) {
results.push(next.value);
next = gen.next();
}

console.log(results);
❀3πŸ‘1
CHALLENGE


const config = {
host: "localhost",
port: 3000,
db: {
name: "mydb",
maxConnections: 10
}
};

Object.freeze(config);

config.port = 9999;
config.db.maxConnections = 99;
config.newProp = "surprise";
delete config.host;

const sealed = Object.seal({ x: 1, y: 2 });
sealed.x = 100;
sealed.z = 999;
delete sealed.y;

console.log(config.port, config.db.maxConnections, config.host);
console.log(sealed.x, sealed.y, sealed.z);
CHALLENGE


async function fetchData(id) {
if (id < 0) throw new Error("Invalid ID");
return { id, value: id * 10 };
}

async function process() {
const results = await Promise.allSettled([
fetchData(1),
fetchData(-1),
fetchData(3),
]);

results.forEach(({ status, value, reason }) => {
if (status === "fulfilled") {
console.log(`fulfilled: ${value.id} -> ${value.value}`);
} else {
console.log(`rejected: ${reason.message}`);
}
});
}

process();
❀3πŸ‘1πŸ€”1
🀟 What’s Actually New in JavaScript (And What’s Coming Next)

If you don’t read the specs or endless posts about new language features, this is a great way to catch up. Most of the features are supported in Node, like Promise.try, Set union/intersection/difference, Array.fromAsync, and using, with others soon to land, like Math.sumPrecise and Map.getOrInsert (in Node 26).

Neciu Dan
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4πŸ‘1πŸ”₯1🀩1