อ้างอิง config
ตัวเลือกทั้งหมดของ easy-cms.config.ts แบ่งตามตำแหน่งที่ใส่ คำอธิบายและตัวอย่างดูได้จากลิงก์ไปยังคู่มือ มีเทสต์ตรวจหน้านี้กับ type ใน @easy-cms/core ทุกตัวเลือกจึงอยู่ในหน้านี้ครบ
ts
import { defineConfig } from '@easy-cms/core'
export default defineConfig({ secret, db, collections, /* … */ })ระดับบนสุด
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
secret | string | — | จำเป็น อย่างน้อย 32 ตัวอักษร ใช้เซ็น session และ preview token |
db | DatabaseAdapter | — | จำเป็น sqlite() หรือ postgres() ฐานข้อมูล |
serverURL | string | — | origin สาธารณะ (https://example.com) ทำให้ URL ของ media เป็น URL เต็ม |
cors | string[] | '*' | [] | origin ที่โค้ดใน browser เรียก API ได้ ความปลอดภัย |
cronSecret | string | CRON_SECRET | secret แบบ Bearer สำหรับ GET <api>/jobs/run การตั้งเวลา |
webhooks | WebhookConfig[] | [] | ดู webhooks |
localization | LocalizationConfig | — | ดู localization |
routes | RoutesConfig | ดู routes | |
admin | AdminConfig | ดู admin | |
upload | UploadConfig | ดู upload | |
auth | AuthConfig | ดู auth | |
collections | CollectionConfig[] | [] | ดู collections |
globals | GlobalConfig[] | [] | ดู globals |
endpoints | Endpoint[] | [] | ดู endpoints |
commands | CliCommand[] | [] | คำสั่ง easy-cms <name> เช่นจาก plugin: { name, description, help?, run({ cms, args, log }) } CLI |
apiKeys | boolean | false | API key ใต้ตั้งค่า สำหรับสคริปต์และแอปอื่น API keys |
email | EmailAdapter | — | ส่งอีเมลให้ plugin เช่น smtp() หรือ consoleEmail() อีเมล |
plugins | Plugin[] | [] | (config) => config ทำงานตามลำดับก่อนตรวจ config Plugins |
routes
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
api | string | /api/cms | ตำแหน่งของ REST API |
admin
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
path | string | /admin | ตำแหน่งของหน้า admin |
locale | 'en' | 'th' | en | ภาษาเริ่มต้นของหน้า admin ก่อนผู้ใช้เลือกเอง |
brand | AdminBrand | {} | ดู brand |
siteUrl | string | / (Nuxt, Next.js) | เว็บสาธารณะสำหรับปุ่ม "ดูเว็บไซต์": path หรือ URL แบบ http(s) |
menu | string[] | ตามลำดับใน config | slug ของ collection ตามลำดับในเมนู ที่ไม่ระบุจะตามมา และ media อยู่ท้ายสุด |
modules | string[] | [] | admin module ที่มี Web Components: export ของแพ็กเกจหรือ path Admin components |
brand
| ตัวเลือก | Type | |
|---|---|---|
name | string | แสดงในเมนู หน้า login และแท็บของ browser ค่าเริ่มต้น "Easy CMS" |
logo | string | path บนเว็บของคุณ หรือ URL แบบ https:// |
color | string | สีหลักแบบ #rrggbb ระบบสร้างเฉดสีให้ |
auth
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
roles | string[] | ['admin', 'editor'] | ต้องมี admin ผู้ใช้และการยืนยันตัวตน |
tokenExpiration | number | 604800 (7 วัน) | อายุของ session เป็นวินาที |
maxLoginAttempts | number | 5 | จำนวนครั้งที่ login ผิดได้ต่อ email (และ IP) ภายใน lockWindow |
lockWindow | number | 900 (15 นาที) | เป็นวินาที |
trustedOrigins | string[] | [] | origin อื่นที่ส่ง request ด้วย cookie ได้ |
upload
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
dir | string | uploads | โฟลเดอร์ของที่เก็บไฟล์ในเครื่อง นับจาก root ของโปรเจกต์ |
maxFileSize | number | 10485760 (10 MB) | เป็น byte |
mimeTypes | string[] | ['image/*', 'application/pdf'] | ประเภทไฟล์ที่อนุญาต ตรวจจากเนื้อไฟล์ |
storage | StorageAdapter | ดิสก์ในเครื่อง | เช่น s3Storage() จาก @easy-cms/storage-s3 อัปโหลด |
imageSizes | ImageSize[] | [] | รูปย่อ (ต้องมี sharp) ดู ขนาดรูป |
ขนาดรูป
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
name | string | — | key ใน media.sizes เช่น thumbnail |
width | number | — | ความกว้างเป็น pixel |
height | number | — | ความสูง (ไม่บังคับ) |
fit | 'cover' | 'contain' | 'inside' | cover | วิธีจัดรูปเมื่อกำหนดทั้งกว้างและสูง |
localization
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
locales | string[] | — | ภาษาของเนื้อหา เช่น ['th', 'en'] หลายภาษา |
defaultLocale | string | ภาษาแรก | ใช้เมื่อไม่ระบุภาษา และใช้เติมค่าที่ว่าง |
fallback | boolean | true | ถ้าค่าว่าง จะอ่านค่าจากภาษาเริ่มต้นแทน |
webhooks
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
url | string | — | ปลายทางที่จะ POST event Webhooks |
events | string[] | ทั้งหมด | create, update, delete, publish, unpublish, draft |
collections | string[] | ทั้งหมด | collection ที่ส่ง event ใช้ [] เพื่อไม่ส่งเลย |
globals | string[] | ทั้งหมด | global ที่ส่ง event ใช้ [] เพื่อไม่ส่งเลย |
secret | string | — | เซ็น body: x-easy-cms-signature: sha256=<hex> |
headers | Record<string, string> | — | header เพิ่มเติม |
collections
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
slug | string | — | จำเป็น URL และชื่อตาราง: ตัวพิมพ์เล็ก ตัวเลข - และ _ |
fields | Field[] | — | จำเป็น ดู อ้างอิง field |
labels | { singular?, plural? } | สร้างจาก slug | แต่ละตัวเป็น string หรือ { en, th } |
icon | AdminIcon | file-text | ไอคอนในเมนู แบรนด์ |
useAsTitle | string | — | field ระดับบนสุดที่ใช้เป็นชื่อเอกสาร |
editIn | 'page' | 'drawer' | page | drawer แก้ในแผงที่เลื่อนมาทับรายการ (ใช้ได้เมื่อไม่มี drafts, versions หรือ preview) |
drafts | boolean | false | เพิ่ม status (draft | published) ฉบับร่าง |
versions | boolean | VersionsConfig | false | เก็บเวอร์ชันทุกครั้งที่บันทึก ดู versions |
schedule | boolean | false | เผยแพร่และยกเลิกตามเวลา (ต้องมี drafts) |
preview | ({ doc, locale }) => string | null | — | หน้าที่แสดงเอกสาร สำหรับตัวอย่างสด |
access | { read?, create?, update?, delete? } | ต้อง login | การควบคุมสิทธิ์ |
hooks | CollectionHooks | — | ดู hooks |
admin | CollectionAdmin | — | ดู admin components |
versions
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
max | number | 50 | จำนวนเวอร์ชันที่เก็บต่อเอกสาร เวอร์ชันเก่ากว่านั้นจะถูกลบ |
hooks
แต่ละตัวเป็น list ของฟังก์ชัน Hooks
| Hook | อาร์กิวเมนต์ | ค่าที่คืน |
|---|---|---|
beforeValidate | data, operation, originalDoc? | data ใหม่ หรือไม่คืน |
beforeChange | data, operation, originalDoc? | data ใหม่ หรือไม่คืน |
afterChange | doc, operation, previousDoc? | — |
beforeDelete | id | — |
afterDelete | id, doc | — |
afterRead | doc | doc ใหม่ หรือไม่คืน |
ทุก hook ได้ user, cms และ slug ด้วย
Admin components
| ตัวเลือก | Type | |
|---|---|---|
sidebar | AdminComponent[] | กล่องในแถบข้างของหน้าแก้ไข Admin components |
group | 'settings' | แสดง collection ใต้ตั้งค่าในเมนู คู่กับ Users และ API keys |
list | { tree?, sort? } | หน้ารายการ: tree คือชื่อ relationship ไปหา collection เดียวกัน เพื่อแสดงเป็นต้นไม้ (เอกสารระดับบนก่อน เอกสารลูกเปิดอยู่ข้างใต้) ส่วน sort คือลำดับเริ่มต้น เช่น 'title' |
globals
| ตัวเลือก | Type | ค่าเริ่มต้น | |
|---|---|---|---|
slug | string | — | จำเป็น |
fields | Field[] | — | จำเป็น |
label | string | { en, th } | สร้างจาก slug | |
icon | AdminIcon | settings | ไอคอนในเมนู |
drafts | boolean | false | |
versions | boolean | VersionsConfig | false | |
schedule | boolean | false | ต้องมี drafts |
preview | ({ doc, locale }) => string | null | — | |
access | { read?, update? } | ต้อง login | |
hooks | GlobalHooks | — | ดูด้านล่าง |
admin | ContainerAdmin | — | { sidebar } เหมือน collection |
Hook ของ global
| Hook | อาร์กิวเมนต์ | ค่าที่คืน |
|---|---|---|
beforeChange | data, operation, originalDoc? | data ใหม่ หรือไม่คืน |
afterChange | doc, operation, previousDoc? | — |
afterRead | doc | doc ใหม่ หรือไม่คืน |
endpoints
| ตัวเลือก | Type | |
|---|---|---|
path | string | ใต้ routes.api เช่น /seo/generate หรือ /stats/:collection |
method | 'get' | 'post' | 'put' | 'patch' | 'delete' | |
handler | (request: EndpointRequest) => unknown | คืน Response หรือค่าที่ส่งเป็น JSON Endpoints |
root | boolean | เสิร์ฟ path จาก root ของเว็บ (เฉพาะ standalone server) เช่น /robots.txt ค่าเริ่มต้น false |
EndpointRequest
| Property | Type | |
|---|---|---|
request | Request | request แบบ Web |
url | URL | URL ของ request |
params | Record<string, string> | ค่าของ segment แบบ :name |
user | AuthUser | null | ผู้ใช้ที่ login อยู่ |
ip | string | undefined | IP ของ client ถ้า adapter รู้ |
cms | EasyCMS | Local API |
json | () => Promise<object> | body แบบ JSON (ต้องเป็น object ขนาดไม่เกิน 1 MB) |