Tag: bun
32 รายการ
Blog
Bun 1.4.3 CompressionStream: ตั้งระดับบีบอัดให้ตรง latency budget
ใช้ CompressionStream level เลือกสมดุล CPU กับขนาดข้อมูล พร้อม Bun test แบบ round-trip โดยไม่พึ่งเครือข่าย
Bun.inspect.custom: ทำ log อ่านง่ายโดยไม่เผลอพ่น secret
กำหนด representation ของ object ด้วย Bun.inspect.custom พร้อมทดสอบ redaction และเตือนว่าไม่ใช่ security boundary
Bun.TOML.stringify: เขียน config โดยแยก data ออกจาก template
ใช้ TOML.stringify สร้าง config ที่ parse กลับได้ ตรวจ round-trip และหลีกเลี่ยงการต่อข้อความที่ escape ผิด

OpenCut Workshop #1: ติดตั้งโปรแกรมตัดต่อฟรี ใช้บนเว็บทันที หรือรันในเครื่องด้วย Bun
เริ่มซีรีส์สอน OpenCut ตั้งแต่ติดตั้งจนได้คลิปพี่โชว์คุยกับน้องกาย บทแรกเลือกเวอร์ชันที่ใช้ได้จริงวันนี้ ลองใช้บน opencut.app แล้วติดตั้งในเครื่องจาก repo ทีละคำสั่ง พร้อมผลรันจริงและ error ที่เจอระหว่างทาง
Bun.JSONL.parseChunk: อ่าน JSONL ทีละก้อนโดยไม่ทำ record ขาด
ใช้ parseChunk กับ read/done/error เพื่อเก็บ remainder ระหว่าง chunk พร้อมจำกัด buffer และหยุดเมื่อเจอ JSON เสีย
Bun.main: แยกไฟล์ที่ถูกรันตรงจากไฟล์ที่ถูก import
ใช้ Bun.main เทียบ import.meta.path เพื่อป้องกัน side effect ตอนทดสอบและ reuse module
Bun.randomUUIDv7: สร้าง UUID ที่เรียงตามเวลาได้โดยไม่ทำเป็น timestamp
ใช้ Bun.randomUUIDv7 สร้าง identifier แบบ time-ordered พร้อมทดสอบรูปแบบ ลำดับ และอธิบายข้อจำกัดด้าน privacy กับ distributed ordering
Bun.CookieMap: แยก Cookie header แล้วแก้ค่าโดยไม่ต่อสตริงเอง
ใช้ Bun.CookieMap อ่านและ serialize cookie map พร้อมแยก request Cookie จาก response Set-Cookie และไม่ใช้ parser แทน security policy
Bun Zstandard round trip: บีบ Uint8Array แล้วเปิดกลับโดยไม่เสีย byte
ใช้ Bun.zstdCompressSync และ zstdDecompressSync กับข้อมูลไบนารี พร้อมทดสอบ round trip และวางเพดานก่อนแตกข้อมูล
Bun.color: แปลง design token หลายรูปแบบโดยไม่เขียน parser สีเอง
ใช้ Bun.color แปลง HEX, RGB และ named color เป็นรูปแบบมาตรฐาน พร้อม validation ก่อนส่งค่าไป CLI หรือ renderer
Bun.peek: อ่าน Promise ที่ settle แล้วโดยไม่สร้าง await boundary ใหม่
ใช้ Bun.peek อย่างจำกัดกับสถานะที่รู้ว่า settle แล้ว พร้อมแยก pending, rejected และโค้ด portable
Bun.fileURLToPath: แปลง file URL เป็นพาธโดยไม่พังช่องว่างและอักขระ escape
ใช้ Bun.fileURLToPath แทนการอ่าน pathname ตรง ๆ เมื่อต้องเปิดไฟล์ข้างโมดูลอย่างข้ามแพลตฟอร์ม
Bun.which: หา executable จาก PATH โดยไม่เรียก shell
ใช้ Bun.which ตรวจ dependency ของ CLI แบบข้ามแพลตฟอร์ม พร้อมจัดการ PATH และ cwd อย่างปลอดภัย
Bun.nanoseconds: จับเวลาช่วงสั้นด้วยนาฬิกา monotonic
วัด elapsed time ของโค้ดด้วย Bun.nanoseconds โดยไม่สับสนกับเวลาปฏิทิน พร้อมตัวอย่างที่รันจริง
Bun.deepEquals: เทียบ config ซ้อนชั้นโดยรู้ว่า strict ต่างตรงไหน
ใช้ Bun.deepEquals ตรวจ snapshot ของ object พร้อมขอบเขต sparse array, undefined และ instance
Bun.stringWidth: จัดคอลัมน์ terminal ตามความกว้างที่มองเห็น ไม่ใช่จำนวนอักขระ
ใช้ Bun.stringWidth กับ ASCII, ตัวกว้างและ combining mark เพื่อไม่ให้ตาราง CLI เหลื่อม
Bun.Transpiler: ตรวจ import ของสคริปต์ก่อนตัดสินใจรัน
แยกการแปลง TypeScript กับการ execute และใช้ scan ดู dependency ที่มองเห็นได้
Bun.semver: เช็กช่วงเวอร์ชันก่อนเปิด Feature โดยไม่ดึง Package เพิ่ม
ใช้ Bun.semver.satisfies และ order ตรวจ compatibility ของ plugin/runtime พร้อมระวัง prerelease และการใช้เวอร์ชันเป็น safety boundary
Bun.hash ทำ cache key ได้ไว แต่ไม่ใช่เกราะสำหรับรหัสผ่าน
ทดลอง Bun.hash กับ cache key พร้อมกำหนดขอบเขต non-cryptographic hash และวิธีจัดการ collision อย่างตรงไปตรงมา
Bun.Glob: สแกนไฟล์ตาม pattern โดยตั้งขอบเขต symlink ให้ชัด
ใช้ Bun.Glob จับคู่และสแกนไฟล์ พร้อมค่า dot, followSymlinks และ onlyFiles ที่ต้องเลือกก่อนแตะ repository จริง
Bun.escapeHTML: หนีอักขระตอนส่งออก ไม่ใช่ใบอนุญาตให้เชื่อ HTML
วาง Bun.escapeHTML ที่ output boundary เพื่อแสดงข้อความผู้ใช้ พร้อมแยก escaping ออกจาก HTML sanitization
Bun.inspect.table: ได้ตารางอ่านง่ายเป็น string ก่อนส่งเข้า log หรือ snapshot
ต่างจาก console.table ตรงที่คืนค่า string ทำให้จัดเก็บ ส่งต่อ และเทสต์ output ได้ตรงๆ
Bun.password: Hash รหัสผ่านด้วย Argon2id โดยไม่ต่อ String เอง
ใช้ Bun.password.hash และ verify พร้อมเลือก cost, จำกัดอินพุต และวาง migration จาก hash เก่าอย่างปลอดภัย
Bun Terminal: แยกอายุ PTY ออกจาก subprocess ให้ถูก
ใช้ Bun.spawn กับ pseudo-terminal อย่างมี lifecycle ชัดเจน รอ proc.exited ปิด terminal และรับมือความต่างข้ามแพลตฟอร์ม
Bun 1.4.2 แก้ AsyncLocalStorage กัก context ไว้นานเกินงาน
แพตช์ regression ที่ค่าระดับ request ยังถูกอ้างถึงโดย timer และ promise พร้อม smoke test ก่อน rollout

Bun 1.4: รันไทม์ที่เขียนใหม่จาก Zig เป็น Rust
สรุปจากบล็อกทางการ Bun v1.4 ว่ามีการ rewrite เป็น Rust พร้อมไฮไลต์เรื่องความเข้ากันได้กับ Node และประสิทธิภาพ
Bun 1.4 รันหลาย Script พร้อมกัน: ใช้ --parallel โดยยังอ่าน Log รู้เรื่อง
จัดงาน build และ lint ที่เป็นอิสระให้รันพร้อมกันด้วย bun run --parallel พร้อมขอบเขตที่ควรกลับไปใช้ sequential

Bun 1.4 บน Vercel Functions: เปิดใช้เองผ่าน bunVersion
สรุป changelog ของ Vercel วันที่ 20 ส.ค. 2026 ว่า Functions รองรับ Bun 1.4 แล้ว แต่ต้อง opt-in
Bun 1.4 อ่าน CPU Profile เป็น Markdown: หา Hot Function ก่อนเดา
ใช้ --cpu-prof-md สร้างรายงาน Markdown จากโปรแกรม TypeScript และอ่านสัดส่วน CPU เพื่อหา bottleneck อย่างมีหลักฐาน
Workshop Bun 1.4 Cron: นัดงาน 9 โมงกรุงเทพฯ โดยไม่ฝากไว้กับ OS
ใช้ Bun.cron.parse ตรวจตารางเวลาและ timezone แบบ deterministic ก่อนย้ายงานเข้า Bun.cron
Workshop Bun 1.4 Image: ทำ Thumbnail WebP โดยไม่เพิ่ม Native Dependency
ลงมือใช้ Bun.Image อ่าน metadata จำกัดขนาดภาพ ย่อแบบรักษาสัดส่วน และตรวจผล WebP จริงในสคริปต์เดียว

Bun 1.4 มี Markdown Parser ในตัว: เร็วและสะดวก แต่ยังต้องตั้งด่านความปลอดภัย
รู้จัก Bun.markdown ทั้ง html render และ react ผ่านมุมใช้งานจริง พร้อมตัวอย่างรันทดสอบด้วย Bun 1.4 และเหตุผลที่ห้ามส่ง HTML จากผู้ใช้เข้าเว็บตรง ๆ