Skip to content

กำหนด Schema

Primitives

lua
prism:string()
prism:number()
prism:boolean()
prism:enum()
prism:array()
prism:object()
prism:extends()
prism:union()

Optional Field

กำหนดประเภทข้อมูลแบบไม่บังคับ

lua
prism:[TYPE].optional()

-- Example
prism:string().optional()

Nullable

กำหนดประเภทข้อมูลสามารถเป็น NULL ได้ (จากการใช้ json.decode)

lua
prism:string().nullable()
prism:number().nullable()
prism:boolean().nullable()
prism:enum().nullable()
prism:array().nullable()
prism:object().nullable()

Default

กำหนดข้อมูลเริ่มต้นก่อนการ Parse ในกรณีที่ข้อมูลส่งมาเป็น nil

lua
prism:string().default('Hello')
prism:number().default(55)
prism:boolean().default(true)
prism:enum().default('SOME_DEFAULT')
prism:array().default({})
prism:object().default({})

Transform

เปลี่ยนข้อมูลหลังจาก Validate เสร็จสิ้น (จะทำงานเมื่อ Schema ถูกต้อง)

lua
prism:string().transform(function(value) return string.lower(value) end)
prism:number().transform(function(value) return value * 1.0 end)
prism:boolean().transform(function(value) return not value end)
prism:enum().transform(function(value) return string.upper(value) end)
prism:array().transform(function(value)
  value[#value + 1] = 5
  return value
end)
prism:object().transform(function(value)
  value.validated = true
  return value
end)

Nullable, Default, Transform เฉพาะในเวอร์ชั่น 1.1.0

  • Methods นี้มีเฉพาะเวอร์ชั่น 1.1.0 ขึ้นไปเท่านั้น
  • ไม่สามารถใช้กับ Union ได้

Strings

lua
prism:string().max(5)
prism:string().min(5)
prism:string().startsWith('https://')
prism:string().endsWith('/look-up-prism')
prism:string().email()
prism:string().identifier()

Numbers

lua
prism:number().max(10)
prism:number().min(10)

Booleans

lua
prism:boolean()

Enums

lua
prism:enum({ 'NO_ENUM', 'YES_ENUM', 'WORK_ENUM' }) 
--- สามารถเป็นตัวเลือกไหนก็ได้ภายในนี้

Arrays

lua
prism:array(prism:string()).max(50)
prism:array(prism:string()).min(50)
prism:array(
  prism:object({
    index = prism:number(),
    value = prism:string()
  })
)

Objects

lua
prism:object(...).passthrough() --- เลิกใช้งานแล้ว: ให้ใช้ catchall
prism:object(...).catchall() -- ฟังก์ชั่นทดแทน passthrough

prism:object({
  type = prism:string(),
  data = prism:object().catchall()
})

Extends

lua
local person = prism:object({
  name = prism:string()
})

local nameWithAge = prism:extends(person, {
  age = prism:number()
})

Unions

lua
prism:union({ prism:string(), prism:number() })
--- สามารถเป็นประเภทของอะไรได้ก็ภายในนี้ (string หรือ number)
--- ไม่สามารถส่ง Array เข้ามาในนี้ได้