JavaScript
31.4K subscribers
1.18K photos
10 videos
33 files
858 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
Programming language legend ๐Ÿ˜‰ Anders Hejlsberg was on The Pragmatic Engineer talking about his background, work on TypeScript, JavaScript's strengths and weaknesses, and how he uses AI.
Please open Telegram to view this post
VIEW IN TELEGRAM
๐Ÿ‘6โค4๐Ÿ”ฅ2
CHALLENGE

const person = {
name: "Marcus",
greet: function () {
const inner = () => `Hello, I am ${this.name}`;
return inner();
},
greetArrow: () => {
return `Hello, I am ${this.name}`;
},
};

const detached = person.greet;

console.log(person.greet());
console.log(person.greetArrow());
console.log(detached?.());
๐Ÿ‘2
CHALLENGE


const transactions = [
{ type: "credit", amount: 200, category: "salary" },
{ type: "debit", amount: 50, category: "food" },
{ type: "debit", amount: 30, category: "food" },
{ type: "credit", amount: 100, category: "bonus" },
{ type: "debit", amount: 70, category: "transport" },
];

const summary = transactions.reduce((acc, { type, amount, category }) => {
acc.balance += type === "credit" ? amount : -amount;
acc.byCategory[category] = (acc.byCategory[category] ?? 0) + amount;
acc.count[type] = (acc.count[type] ?? 0) + 1;
return acc;
}, { balance: 0, byCategory: {}, count: {} });

console.log(summary.balance);
console.log(JSON.stringify(summary.byCategory));
console.log(JSON.stringify(summary.count));
โค2
๐Ÿ˜ฎ replacements.fyi: Find Replacements for npm Packages

Type in a package name and get suggestions of lighter alternatives or Node APIs and code snippets that do the same task. For example: is-number leads to a one-liner, axios turns into fetch, and chalk recommends util.styleText. A neat idea itโ€™d be cool to see grow further.

e18e
Please open Telegram to view this post
VIEW IN TELEGRAM
โค6๐Ÿค”1
CHALLENGE

class Pipeline {
#value;
#log = [];

constructor(value) {
this.#value = value;
}

map(fn) {
this.#value = fn(this.#value);
this.#log.push(`map:${this.#value}`);
return this;
}

filter(fn) {
if (Array.isArray(this.#value)) {
this.#value = this.#value.filter(fn);
this.#log.push(`filter:${this.#value}`);
}
return this;
}

reduce(fn, init) {
this.#value = this.#value.reduce(fn, init);
this.#log.push(`reduce:${this.#value}`);
return this;
}

result() {
console.log(this.#log.join(' | '));
return this.#value;
}
}

const output = new Pipeline([1, 2, 3, 4, 5, 6])
.filter(x => x % 2 === 0)
.map(arr => arr.map(x => x ** 2))
.reduce((acc, x) => acc + x, 0)
.result();

console.log(output);
โค3๐Ÿ‘1
๐ŸŒช GitHub Copilot SDK Now Generally Available

Available for several platforms, including Node, this SDK lets you wield the agentic engine behind Copilot in your own apps (coupled with your own custom-built tools) and it uses an existing Copilot subscription. The getting started tutorial provides a good intro and the cookbook includes some sample apps.

GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
๐Ÿ‘5โค4๐Ÿค”3๐Ÿ”ฅ1
CHALLENGE


const memoize = (fn) => {
const cache = new Map();
return (...args) => {
const key = JSON.stringify(args);
if (cache.has(key)) {
return cache.get(key);
}
const result = fn(...args);
cache.set(key, result);
return result;
};
};

let callCount = 0;

const expensiveMultiply = memoize((a, b) => {
callCount++;
return a * b;
});

console.log(expensiveMultiply(4, 5));
console.log(expensiveMultiply(4, 5));
console.log(expensiveMultiply(3, 7));
console.log(expensiveMultiply(4, 5));
console.log(`calls: ${callCount}`);
โค2๐Ÿ‘2๐Ÿ”ฅ1
โค4๐Ÿ‘1๐Ÿ”ฅ1
CHALLENGE

class Registry {
static #instances = new Map();
static #count = 0;
static defaultTTL;
static maxSize;

static {
Registry.defaultTTL = 3600;
Registry.maxSize = 100;
Registry.#instances.set("__init__", { ts: 0 });
Registry.#count = Registry.#instances.size;
}

static register(key) {
if (Registry.#count >= Registry.maxSize) return false;
Registry.#instances.set(key, { ts: Registry.defaultTTL });
Registry.#count++;
return true;
}

static info() {
return `count=${Registry.#count}, ttl=${Registry.defaultTTL}, max=${Registry.maxSize}`;
}
}

Registry.register("service-a");
Registry.register("service-b");
console.log(Registry.info());
๐Ÿค”3โค1
๐Ÿ‘€ VoidZero is Joining Cloudflare

One of the yearโ€™s big moves in JS tooling, as told by Evan himself. The company he founded to build Vite, Vitest, Rolldown, Oxc, etc. is joining Cloudflare. Heโ€™s candid about why (monetization is hard). Good news: all projects stay MIT-licensed, and Evan and co remain in charge.

Evan You
Please open Telegram to view this post
VIEW IN TELEGRAM
๐Ÿ”ฅ2โค1๐Ÿ‘1
CHALLENGE

const handler = {
get(target, prop, receiver) {
if (prop in target) {
return Reflect.get(target, prop, receiver) * 2;
}
return `missing:${prop}`;
},
set(target, prop, value) {
if (typeof value !== "number") {
throw new TypeError("Only numbers allowed");
}
Reflect.set(target, prop, value + 10);
return true;
},
has(target, prop) {
return prop.startsWith("x") ? false : prop in target;
},
};

const store = new Proxy({ xray: 5, zoom: 8 }, handler);

store.nova = 3;
console.log(store.xray);
console.log(store.nova);
console.log(store.ghost);
console.log("zoom" in store);
console.log("xray" in store);
โค1
๐Ÿ˜ฎ Geometric.js: A Library for Doing Geometry

Created by someone who works on graphics for the NYT, this elegant library lets you work with polygons, bounding boxes, reflection, interpolation, rotation, and the like (examples). Does one polygon intersect with another? Thereโ€™s a function for that.

Harry Stevens (The New York Times)
Please open Telegram to view this post
VIEW IN TELEGRAM
โค1๐Ÿ”ฅ1
CHALLENGE

class BankAccount {
#balance;
#transactionLog = [];

constructor(initialBalance) {
this.#balance = initialBalance;
}

deposit(amount) {
this.#balance += amount;
this.#transactionLog.push(`+${amount}`);
return this;
}

withdraw(amount) {
if (amount > this.#balance) throw new Error("Insufficient funds");
this.#balance -= amount;
this.#transactionLog.push(`-${amount}`);
return this;
}

get summary() {
return `Balance: ${this.#balance} | Txns: ${this.#transactionLog.join(", ")}`;
}
}

const account = new BankAccount(100);
account.deposit(50).deposit(25).withdraw(30);
console.log(account.summary);
console.log(account.hasOwnProperty("#balance"));
โค2
๐Ÿค” Oxide Computer Company's Mitos ASCII Tool (above) converts images into ASCII text illustrations and animations, by way of a built-in livecoding environment (built upon the fantastic play.core).
Please open Telegram to view this post
VIEW IN TELEGRAM
โค2