JavaScript
31.6K subscribers
1.17K photos
10 videos
33 files
844 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
Please open Telegram to view this post
VIEW IN TELEGRAM
πŸ‘5πŸ”₯2❀1
CHALLENGE

function Vehicle(make, model, year) {
this.make = make;
this.model = model;
this.year = year;
this.speed = 0;
}

Vehicle.prototype.accelerate = function (amount) {
this.speed += amount;
return this;
};

Vehicle.prototype.describe = function () {
return `${this.year} ${this.make} ${this.model} going ${this.speed}km/h`;
};

function ElectricVehicle(make, model, year, range) {
Vehicle.call(this, make, model, year);
this.range = range;
}

ElectricVehicle.prototype = Object.create(Vehicle.prototype);
ElectricVehicle.prototype.constructor = ElectricVehicle;

ElectricVehicle.prototype.describe = function () {
return Vehicle.prototype.describe.call(this) + ` | Range: ${this.range}km`;
};

const car = new ElectricVehicle("Tesla", "Model 3", 2023, 500);
car.accelerate(60).accelerate(40);

console.log(car.describe());
console.log(car instanceof ElectricVehicle);
console.log(car instanceof Vehicle);
console.log(car.constructor === ElectricVehicle);
❀2
✌️ JSIR: A High-Level IR for JavaScript from Google

Google has open sourced a new tool (JSIR) and proposed an industry-standard IR (Intermediate Representation – if an AST tells you what the code looks like, an IR tells you what it does) for JavaScript. Already used at Google for analysis and code transformation, the underlying idea could form a foundation for a new generation of tooling.

Zhixun Tan (Google)
Please open Telegram to view this post
VIEW IN TELEGRAM
❀4πŸ‘4πŸ”₯2
CHALLENGE


function createUser(
name,
role = "viewer",
permissions = [role],
metadata = { createdBy: name, level: permissions.length }
) {
return { name, role, permissions, metadata };
}

const user1 = createUser("Carlos");
const user2 = createUser("Diana", "admin", ["read", "write", "delete"]);
const user3 = createUser("Eve", "editor", undefined, { createdBy: "system", level: 99 });

console.log(user1.role, user1.permissions, user1.metadata.level);
console.log(user2.metadata.createdBy, user2.permissions.length);
console.log(user3.permissions[0], user3.metadata.level);
❀1πŸ‘1πŸ”₯1
In CSS is DOOMed, Niels Leenheer shows off how he implemented a version of 1993's Doom using purely CSS rendering (with the game logic in JavaScript). Play it for yourself or check out the code.
πŸ”₯7❀4
CHALLENGE


const name = "Carlos";
const age = 28;
const score = 95;

const player = {
name,
age,
score,
greet() {
return `${this.name} (${this.age}) scored ${this.score}`;
},
get rank() {
return this.score >= 90 ? "Gold" : "Silver";
}
};

const { name: playerName, rank, greet } = player;

console.log(`${playerName} | ${rank} | ${greet.call(player)}`);
πŸ€”5❀2πŸ‘1
πŸ‘€ Fuse.js 7.3: Lightweight Fuzzy-Search

Want a search feature tolerant to ambiguous input without a dedicated backend? v7.3 adds per-term fuzzy matching and a static method for single string matching, while v7.4 beta adds worker-based distributed search for tackling huge datasets. A demo shows off the basics.

Kiro Risk
Please open Telegram to view this post
VIEW IN TELEGRAM
❀9πŸ”₯1
CHALLENGE


const config = {
host: "localhost",
port: 3000,
db: {
name: "mydb",
retries: 5
}
};

Object.freeze(config);

config.port = 9999;
config.newProp = "injected";
config.db.retries = 99;
delete config.host;

console.log(
config.port,
config.newProp,
config.db.retries,
config.host
);
❀2πŸ”₯2πŸ‘1
✌️ V8 Exploitation: From Libc Pwn to Browser Bugs

For the past few years I've been doing pwn challenges - starting from basic stack overflows, progressing through libc heap exploitation, writing a CheatEngine clone in Rust, and prototyping an eBPF-based record-replay tool that required bypassing vDSO. I felt fairly comfortable with systems programming and userspace exploitation.

But challenges like QEMU escape or browser exploitation always seemed like a different league. Something I wasn't "ready for yet." That feeling created an artificial barrier - I kept telling myself I needed more preparation before even attempting them.

....

D4RK7ET (Varik Matevosyan)
Please open Telegram to view this post
VIEW IN TELEGRAM
❀9πŸ‘7πŸ”₯2
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(3, 4));
console.log(expensiveMultiply(3, 4));
console.log(expensiveMultiply(2, 5));
console.log(expensiveMultiply(3, 4));
console.log(`calls: ${callCount}`);
❀6πŸ”₯4πŸ‘2
CHALLENGE


const config = {
version: 1,
settings: { theme: "dark", fontSize: 14 },
tags: ["beta", "v1"],
};

Object.seal(config);
Object.freeze(config.settings);

config.version = 99;
config.newProp = "ignored";
delete config.tags;

config.settings.theme = "light";
config.settings.newKey = "ignored";

config.tags.push("v2");
config.tags[0] = "stable";

console.log(
config.version,
config.newProp,
config.settings.theme,
config.tags
);
πŸ”₯4πŸ‘1
CHALLENGE


"use strict";

function createCounter() {
let count = 0;

return {
increment() { count++; },
get value() { return count; },
reset: function() { count = 0; }
};
}

const counter = createCounter();
counter.increment();
counter.increment();
counter.increment();

const { value, reset } = counter;
reset();

console.log(counter.value, value);
❀4πŸ”₯2
πŸ”₯5πŸ‘2
CHALLENGE


const delay = (val) => Promise.resolve(val);

async function pipeline(input) {
const result = await delay(input)
.then((v) => v * 2)
.then((v) => v + 10)
.then((v) => {
if (v > 20) throw new Error(`Too large: ${v}`);
return v;
})
.catch((e) => `Caught: ${e.message}`)
.then((v) => (typeof v === "string" ? v.toUpperCase() : v * 3));

return result;
}

Promise.all([pipeline(4), pipeline(8)]).then(([a, b]) => {
console.log(a);
console.log(b);
});
❀2πŸ‘1