JavaScript
31.6K subscribers
1.17K photos
10 videos
33 files
847 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
What is the output?
Anonymous Quiz
28%
D A B C
31%
A B D C
24%
A D B C
18%
A B C D
❀4πŸ€”3
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;
}
}

const emitter = new EventEmitter();
const log = [];

emitter
.on("data", val => log.push(`A:${val}`))
.on("data", val => log.push(`B:${val * 2}`))
.on("end", () => log.push("done"));

emitter.emit("data", 5).emit("data", 3).emit("end");

console.log(log.join(","));
πŸ‘2
Please open Telegram to view this post
VIEW IN TELEGRAM
❀5πŸ”₯2πŸ‘1
⛽️ RFC: It’s Time for npm to Make Install Scripts Opt-In

npm is the only major package manager that runs dependency install scripts (e.g. postinstall) by default, and they’ve become too much of a security weakness, says Jamie, who works for GitHub (maintainers of npm). This RFC features further discussion of the idea and the tradeoffs involved.

Jamie Magee
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4
CHALLENGE


const createModule = (() => {
const privateCache = new WeakMap();

return function(name) {
const state = { name, version: 1, active: true };
privateCache.set(state, { accessCount: 0 });

return {
getInfo() {
const meta = privateCache.get(state);
meta.accessCount++;
return `${state.name}@v${state.version}`;
},
getAccessCount() {
return privateCache.get(state).accessCount;
},
upgrade() {
state.version++;
return this;
}
};
};
})();

const mod = createModule("auth");
mod.upgrade().upgrade();
console.log(mod.getInfo());
console.log(mod.getAccessCount());
❀2πŸ‘2
πŸ€– Mark Erikson's Agent Setup, Workflow, and Tools

Mark, well known for maintaining Redux and creating Redux Toolkit, goes deep into his daily development workflow, including his use of OpenCode (an open source JavaScript-powered coding agent), how he manages his knowledge base, tasks, and more.

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


const str = "JavaScript is Awesome!";

const result = str
.split(" ")
.map((word, i) =>
i % 2 === 0
? word.toUpperCase()
: word.toLowerCase()
)
.join("-");

const reversed = result
.split("")
.reduce((acc, char) => char + acc, "");

console.log(reversed);
πŸ‘€ Orval: Generate Type-Safe Clients from OpenAPI/Swagger Specs

Given a valid OpenAPI v3 or Swagger v2 spec, generate models, requests, hooks, and mocks for React, Vue, Svelte, Solid, and Hono apps, or even plain fetch.

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

const delay = (ms, val) => new Promise(res => setTimeout(res, ms, val));

async function* asyncGen() {
yield await delay(10, "alpha");
yield await delay(10, "beta");
yield await delay(10, "gamma");
}

async function run() {
const results = [];

const gen = asyncGen();
const [first, , third] = await Promise.all([
gen.next(),
gen.next(),
gen.next()
]);

results.push(first.value, third.value);

const p1 = Promise.resolve("x").then(v => v + "1");
const p2 = Promise.reject("err").catch(e => e + "2");

results.push(...(await Promise.all([p1, p2])));
console.log(results);
}

run();
❀3πŸ‘1
✌️ Andrea Giammarchi proposes JSONRegistry (above), an alternative to JSON that lets you define a registry for serializing and reviving custom/branded types.
Please open Telegram to view this post
VIEW IN TELEGRAM
❀2πŸ‘1πŸ”₯1