thaizip

ข้อมูลและ index

โหลดชุดข้อมูลที่มากับแพ็กเกจ หรือสร้าง index จากข้อมูลของคุณเอง

ทุกฟังก์ชันรับ TrigramIndex สร้างได้จากชุดข้อมูลที่มากับแพ็กเกจ หรือจากตารางข้อมูลของคุณเอง ให้มองเป็นค่าทึบ ไม่ต้องสร้างหรือแก้ไขเอง

ชุดข้อมูลที่มากับแพ็กเกจ

thaizip/data มีชุดข้อมูลทั้งประเทศ: 77 จังหวัด พร้อมอำเภอ ตำบล และรหัสไปรษณีย์ ก้อนข้อมูลจะถูกดาวน์โหลดเมื่อเรียก loadDefaultIndex() ครั้งแรกเท่านั้น สำหรับ bundler ที่แยก chunk ตาม dynamic import (webpack, Turbopack, Vite)

import { loadDefaultIndex, getDefaultIndexIfLoaded, clearDefaultIndex } from 'thaizip/data'
ฟังก์ชันรายละเอียด
loadDefaultIndex()คืน Promise<TrigramIndex> ครั้งแรกจะสร้าง index (ราว 40 ms) ครั้งต่อไปและการเรียกพร้อมกันจะได้ index เดียวกันที่ cache ไว้
getDefaultIndexIfLoaded()คืน index ถ้าสร้างเสร็จแล้ว ไม่เช่นนั้นคืน null เป็นแบบ synchronous UI จึงข้ามสถานะกำลังโหลดได้เมื่อ index พร้อมอยู่แล้ว ไม่เริ่มการโหลดเอง
clearDefaultIndex()ล้าง index ที่ cache ไว้ เช่น ระหว่างเทสต์

ข้อมูลของคุณเอง

ใช้ buildThaiAddressIndex เมื่อมีชุดข้อมูลที่ใหม่กว่า ต้องการแค่บางจังหวัด หรือต้องการ record ของคุณเอง

import { buildThaiAddressIndex } from 'thaizip'

const index = buildThaiAddressIndex(
  { provinces, amphures, tambons },
  { onSkip: (tambon) => console.warn('skipped', tambon.name_th) },
)

ตารางใช้ฟิลด์แบบ snake_case ตามข้อมูลต้นทางของภาครัฐ:

type RawData = {
  provinces: { id: number; name_th: string; name_en: string; geography_id: number; deleted_at: string | null }[]
  amphures: { id: number; name_th: string; name_en: string; province_id: number; deleted_at: string | null }[]
  tambons: { id: number; zip_code: number | string; name_th: string; name_en: string; amphure_id: number; deleted_at: string | null }[]
  geographies?: { id: number; name: string; deleted_at: string | null }[] // ไม่ได้ใช้
}

แถวที่ deleted_at ไม่เป็น null จะถูกข้าม ตำบลที่อำเภอหรือจังหวัดไม่มีอยู่หรือถูกลบจะถูกข้ามด้วย และส่งให้ onSkip

ตัวเลือกค่าเริ่มต้นรายละเอียด
onSkip—เรียกสำหรับแต่ละตำบลที่ถูกข้าม
validatetrueตรวจชนิดของฟิลด์ก่อนสร้าง แทบไม่เสียเวลา ควรเปิดไว้สำหรับข้อมูลที่ไม่ได้สร้างเอง

ถ้าต้องการตรวจข้อมูลแยกต่างหาก เช่น ใน build step ให้เรียก validateRawData(data) ซึ่งจะ throw TypeError ที่ระบุตาราง id ของแถว ฟิลด์ และชนิดที่เจอจริง เช่น [thaizip] province 12: expected string for name_th, got number