JavaScript
31.3K subscribers
1.21K photos
10 videos
33 files
884 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
😲 LiteParse 2: Fast, Light PDF Document Parsing

A PDF parser built in Rust with bindings for Node (plus WASM, Rust, and Python) — it worked great in my testing. It includes OCR, handles layouts/is spatially aware, and is fast (a complex 140-page PDF took ~10 seconds). Here's how to get started from Node.

LlamaIndex
Please open Telegram to view this post
VIEW IN TELEGRAM
5👍2🔥1
CHALLENGE

class Timer {
constructor() { this.seconds = 0; }
start() {
this.tick = () => { this.seconds++; return this.seconds; };
return this.tick;
}
}

const t = new Timer();
const tick = t.start();
const obj = { seconds: 100, tick };
console.log(tick(), obj.tick(), t.seconds);
👍31🔥1
What is the output?
Anonymous Quiz
33%
1 101 2
30%
1 2 2
14%
1 2 1
23%
NaN NaN NaN
4👍1🔥1
🙂 Follow a Single HTTP Request Through Its ~200ms Life

From the creator of NodeBook, a thorough guide to Node's internals, comes a scroll-driven visualization following every step a single HTTP POST request takes from the user's click to Node's event loop and on to a database behind it.

Ishtmeet Singh
Please open Telegram to view this post
VIEW IN TELEGRAM
👍42🔥1
CHALLENGE

const primArr = [1, 2, 3];
const copyArr = [...primArr];
copyArr[0] = 99;

const objArr = [{ x: 1 }, { x: 2 }];
const copyObjArr = [...objArr];
copyObjArr[0].x = 99;

console.log(primArr[0], copyArr[0], objArr[0].x, copyObjArr[0].x);
2
🔥1
CHALLENGE

const arr = [1, [2, 3], [4, [5, 6]], 7];
const a = arr.flat();
const b = arr.flat(2);
const c = arr.flatMap(x => Array.isArray(x) ? x : [x, x]);
const d = [1, 2, 3].flatMap(x => [[x]]);
console.log(JSON.stringify([a, b, c, d]));
1👍1🔥1
CHALLENGE

const source = {
_val: 1,
get val() { return this._val; }
};
const copy1 = Object.assign({}, source);
source._val = 100;
const copy2 = { ...source };
copy1._val = 999;
console.log(copy1.val, copy2.val, source.val, copy1._val);
7🤣2👍1🔥1
4👍1
CHALLENGE

function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function () {
return `${this.name} makes a sound`;
};

function Dog(name) {
Animal.call(this, name);
}
Dog.prototype = Object.create(Animal.prototype);
Dog.prototype.constructor = Dog;
Dog.prototype.speak = function () {
return `${Animal.prototype.speak.call(this)} (bark)`;
};

const d = new Dog('Rex');
console.log(
d.speak(),
d instanceof Animal,
d.constructor === Dog,
Object.getPrototypeOf(d) === Dog.prototype
);

export {};
1👍1🔥1
CHALLENGE

class Base {
static count = 0;
static #secret;
static {
Base.#secret = 10;
Base.count += 1;
}
static getSecret() {
return Base.#secret;
}
}

class Derived extends Base {
static {
Base.count += 100;
}
}

console.log(Base.count, Derived.count, Base.getSecret());
1🔥1
👍2🔥1
⛽️ The Secure Way to Release an npm Package in 2026

A practical guide to publishing npm packages more safely in 2026, written by someone who's released several popular packages (like postcss and nanoid). As well as showing how to use things like staged publishing and trusted publishing, he explains why and the security benefits of doing so.

Andrey Sitnik
Please open Telegram to view this post
VIEW IN TELEGRAM
6🔥2
CHALLENGE

function* inner() {
yield 1;
yield 2;
return 10;
}

function* outer() {
const result = yield* inner();
yield result;
yield 3;
}

const gen = outer();
const a = gen.next().value;
const b = gen.next().value;
const c = gen.next().value;
const d = gen.next().value;
console.log(a, b, c, d);
2
🥶 scriptc: Vercel's New TypeScript-to-Native Compiler

A new entry into the growing field of JS/TS native ahead-of-time compilers that makes the promise that "what compiles behaves byte-for-byte like Node." Static by default, but you can opt in to a --dynamic mode which embeds a JavaScript engine for runtime dynamism. GitHub repo.

Vercel Labs
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍1🔥1
CHALLENGE

function tag(strings, ...values) {
// strings.raw preserves literal escape sequences
const rawParts = strings.raw;
let result = rawParts.join('|');
result += '::' + values.join(',');
return result;
}

const x = 5;
const output = tag`Line1\nLine2${x}End`;
console.log(output);
4👍4🔥1