Another mammoth Bun release. Bun.Image is a new built-in image processing API which can replace Sharp in many cases. Bunβs package manager has added a global virtual store (akin to pnpmβs), Bun.serve has experimental HTTP/3 over QUIC support, and fetch gets HTTP/2 and HTTP/3 support. Plus the usual raft of Node.js compatibility improvements.
Jarred Sumner
Please open Telegram to view this post
VIEW IN TELEGRAM
β€6π4π€1
CHALLENGE
const handler = {
get(target, prop, receiver) {
if (prop in target) {
const value = Reflect.get(target, prop, receiver);
return typeof value === "number" ? value * 2 : value;
}
return `Property "${prop}" not found`;
},
set(target, prop, value) {
if (typeof value !== "number") {
throw new TypeError("Only numbers allowed");
}
Reflect.set(target, prop, value ** 2);
return true;
},
has(target, prop) {
return prop.startsWith("_") ? false : prop in target;
},
};
const store = new Proxy({ _secret: 99, score: 5 }, handler);
store.level = 3;
console.log(store.score);
console.log(store.level);
console.log("_secret" in store);
console.log("score" in store);
console.log(store._secret);π₯2
What is the output?
Anonymous Quiz
31%
10 18 false true 198
36%
5 9 false true 198
30%
10 9 false true Property "_secret" not found
3%
10 9 true false 198
CHALLENGE
class Range {
constructor(start, end, step = 1) {
this.start = start;
this.end = end;
this.step = step;
}
[Symbol.iterator]() {
let current = this.start;
const { end, step } = this;
return {
next() {
if (current <= end) {
const value = current;
current += step;
return { value, done: false };
}
return { value: undefined, done: true };
}
};
}
}
const range = new Range(1, 10, 3);
const result = [...range].map(n => n ** 2);
console.log(result);
β€4π₯2
What is the output?
Anonymous Quiz
20%
[ 1, 9, 25, 49 ]
51%
[ 1, 16, 49, 100 ]
17%
[ 1, 9, 49 ]
12%
[ 1, 9, 25, 49, 81 ]
β€4π€1
CHALLENGE
const p1 = new Promise((resolve) => {
console.log("A");
resolve("B");
});
const p2 = p1.then((val) => {
console.log(val);
return "C";
});
p2.then((val) => console.log(val));
console.log("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
What is the output?
Anonymous Quiz
36%
A:5,B:10,A:3,B:6,done
34%
A:5,A:3,B:6,B:10,done
26%
A:5,B:10,done,A:3,B:6
4%
A:5,B:25,A:3,B:9,done
β€4
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
β€3
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, 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);
What is the output?
Anonymous Quiz
40%
!EMOSEWA-si-TPIRCSAVAJ
23%
!emosewa-is-tpircsavaj
23%
!EMOSEWA-IS-TPIRCSAVAJ
15%
!emosewa-IS-tpircsavaj
β€2π₯1
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
What is the output?
Anonymous Quiz
17%
[ 'alpha', 'gamma', 'x1', 'err' ]
31%
[ 'alpha', 'beta', 'x1', 'err2' ]
19%
[ 'alpha', 'beta', 'x1', 'err' ]
33%
[ 'alpha', 'gamma', 'x1', 'err2' ]
β€1