👍3
Like the look of Ink but don't like React? TermDOM implements a DOM, cascade and layout engine that paints to the terminal, so you can write a TUI with HTML and CSS. Pure JS, no native or WASM dependencies, and the official TodoMVC runs with only a stylesheet swap. Early days, but I like the idea!
Brian Kim
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👍3🤔2
CHALLENGE
const log = [];
Promise.resolve(1)
.then(v => { log.push('a'+v); return v+1; })
.then(v => { throw new Error('e'+v); })
.catch(e => { log.push(e.message); return 10; })
.then(v => { log.push('b'+v); });
Promise.resolve()
.then(() => log.push('c'))
.then(() => log.push('d'));
setTimeout(() => console.log(log.join(',')), 0);
🔥4
What is the output?
Anonymous Quiz
16%
c,d,a1,e2,b10
44%
a1,c,d,e2,b10
25%
a1,c,d,b10,e2
15%
a1,c,e2,d,b10
👍1
Today, the popular Chinese model lab unveiled its own Claude Code-alike and already racked up 30k stars. It's not a typical CLI harness, though, but runs through a web UI. Curiously, everything is a plugin, built atop Cordis, an existing Node plugin system whose author DeepSeek has hired. GitHub repo.
DeepSeek
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1🤔1
CHALLENGE
function Person(name) {
if (!(this instanceof Person)) {
return new Person(name);
}
this.name = name;
}
Person.prototype.greet = function () {
return `Hi ${this.name}`;
};
function Widget(id) {
this.id = id;
return { id: id * 2 };
}
Widget.prototype.getId = function () {
return this.id;
};
const p1 = Person('Zed');
const p2 = new Person('Nova');
const w = new Widget(5);
console.log(p1.greet(), p2.greet(), w.id, w.getId);❤1👍1
What is the output?
Anonymous Quiz
23%
Hi Zed Hi Nova undefined undefined
37%
Hi Zed Hi Nova 10 [Function]
25%
Hi undefined Hi Nova 10 undefined
15%
Hi Zed Hi Nova 10 undefined
❤1👍1
CHALLENGE
class EventBus {
#listeners = new Map();
on(event, fn) {
if (!this.#listeners.has(event)) this.#listeners.set(event, new Set());
this.#listeners.get(event).add(fn);
return () => this.#listeners.get(event).delete(fn);
}
emit(event, payload) {
this.#listeners.get(event)?.forEach(fn => fn(payload));
}
}
const bus = new EventBus();
const log = [];
const unsub = bus.on('data', v => log.push(`A:${v}`));
bus.on('data', v => log.push(`B:${v}`));
bus.emit('data', 1);
unsub();
bus.on('data', v => log.push(`C:${v}`));
bus.emit('data', 2);
console.log(log.join(','));❤1👍1
What is the output?
Anonymous Quiz
19%
A:1,B:1,C:2
35%
B:1,A:1,B:2,C:2
31%
A:1,B:1,A:2,B:2,C:2
15%
A:1,B:1,B:2,C:2
CHALLENGE
function makeCounters() {
const counters = [];
for (var i = 0; i < 3; i++) {
let j = i;
counters.push(() => `${i}-${j}`);
}
return counters;
}
const [a, b, c] = makeCounters();
console.log(a(), b(), c());
export {};What is the output?
Anonymous Quiz
38%
0-0 1-1 2-2
38%
3-0 3-1 3-2
20%
undefined-0 undefined-1 undefined-2
5%
3-0 3-1 3-3