𝗗𝗲𝗳𝗶𝗻𝗲 𝗢𝗻𝗰𝗲, 𝗧𝗿𝘂𝘀𝘁 𝗘𝘃𝗲𝗿𝘆𝘄𝗵𝗲𝗿𝗲: 𝗖𝘁𝗿𝗼𝗘𝗻𝘃 𝗗𝗲𝗲𝗽 𝗗𝗶𝘃𝗲
Core API ของ CtroEnv ใช้ validator factory สี่รูปแบบ คุณสามารถใช้สิ่งเหล่านี้เพื่อรักษาความปลอดภัยให้กับ environment variables ของคุณได้อย่างง่ายดาย
นี่คือวิธีการทำงานของพวกมัน:
• string() — ใช้สำหรับข้อความ คุณสามารถเพิ่มกฎสำหรับ URL, อีเมล, พอร์ต หรือความยาวที่กำหนดได้ รองรับ regex สำหรับรูปแบบที่กำหนดเอง
• number() — ใช้สำหรับค่าตัวเลข โดยจะแปลงสตริงอย่าง "3000" ให้เป็นตัวเลขจริง คุณสามารถกำหนดให้เป็นจำนวนเต็ม, ค่าบวก หรือช่วงตัวเลขที่เฉพาะเจาะจงได้
• boolean() — ใช้สำหรับค่า true/false โดยจะจัดการกับสตริงอย่าง "true" หรือตัวเลขอย่าง "1" ให้โดยอัตโนมัติ เหมาะอย่างยิ่งสำหรับ feature flags
• pick() — ใช้เพื่อจำกัดค่าให้อยู่ในรายการที่กำหนด ช่วยสร้าง literal types เพื่อให้โค้ดของคุณทราบแน่ชัดว่าสตริงใดบ้างที่อนุญาต และยังช่วยแนะนำการแก้ไขหากคุณพิมพ์ผิดอีกด้วย
เมธอดที่มีประโยชน์สำหรับทุก validator:
.default(value)— กำหนดค่าเริ่มต้น (fallback) หากไม่พบตัวแปร.optional()— อนุญาตให้ค่าเป็นundefinedได้.describe(text)— เพิ่มคำอธิบายสำหรับข้อความแสดงข้อผิดพลาดและเอกสารประกอบ.secret()— ปิดบังค่าที่สำคัญ (sensitive values) ในการแสดงผลบน terminal.validate(fn)— ช่วยให้คุณเขียน logic เฉพาะตัวสำหรับกฎที่ใช้งานเพียงครั้งเดียวได้
CtroEnv ทำงานได้ในสภาพแวดล้อมที่หลากหลาย:
- Node.js: ใช้
nodeSource()หรือloadEnv()เพื่ออ่านprocess.envหรือไฟล์.env - Vite: ใช้ vite plugin เพื่อให้การ build ล้มเหลวหากตัวแปรไม่ถูกต้อง
- Next.js: ใช้การรองรับที่มีมาให้ในตัวเพื่อแยกตัวแปรฝั่ง server และ client ออกจากกัน ซึ่งจะช่วยป้องกันไม่ให้ความลับ (secrets) รั่วไหลไปยังเบราว์เซอร์โดยไม่ตั้งใจ
เมื่อการตรวจสอบ (validation) ล้มเหลว CtroEnv จะไม่หยุดทำงานทันที แต่จะรวบรวมข้อผิดพลาดทั้งหมดและแสดงออกมาพร้อมกันในคราวเดียว คุณจะได้รับรายงานที่ชัดเจนซึ่งประกอบด้วย key, ข้อความแจ้งเตือน และแม้กระทั่งคำแนะนำในการแก้ไข
ผลลัพธ์สุดท้ายจะเป็น object ที่ถูก freeze ไว้ ซึ่งหมายความว่าการตั้งค่าของคุณจะเป็นแบบ read-only และปลอดภัยจากการเปลี่ยนแปลงโดยไม่ตั้งใจในระหว่าง runtime
ที่มา: https://dev.to/ctrotech/define-once-trust-everywhere-ctroenv-deep-dive-3bjl