Laresponse — Changelog
v0.1.5 (2026-06-19)
TL;DR
Perubahan:
- ✨
BaseContainerFilter+resolveFilter()(High) — typed filter DTO per endpoint - 🔧 Custom param key mapping via
$paramdi constructor (Medium) — override nama query param - 🔧
protected defaultParamKeys()(Medium) — extension point untuk subclass - 🔥 Constructor param rename:
$searchParam→$param(Breaking) — hanya berdampak pada named argument
Impact: 🔴 Breaking: 1 | 🟡 High: 1 | 🟢 Medium: 2
Backward Compatible: ❌ Tidak (named argument saja)
🔴 Breaking Changes
Constructor param rename: $searchParam → $param
Parameter kedua di ContainerQuery dan fromRequest() diganti dari string $searchParam ke string|array $param untuk mendukung full param key mapping. Hanya berdampak jika menggunakan named argument.
// Before — tidak bekerja lagi jika pakai named arg
new ContainerQuery($request, searchParam: 'keyword');
// After
new ContainerQuery($request, 'keyword'); // string tetap sama
new ContainerQuery($request, param: 'keyword'); // named arg baruFix: Hapus nama argument atau ganti ke param:.
🟡 High Impact
BaseContainerFilter & resolveFilter()
BaseContainerFilter adalah abstract class untuk mendefinisikan typed filter DTO per endpoint. Implementasikan mapFilterFields() untuk mapping raw filter[] array ke named constructor params — hasilnya akses filter via properties bertipe, bukan filterValue() dengan magic strings. resolveFilter() di ContainerQuery menghidrasinya dari $this->filter yang sudah dibersihkan.
Poin utama:
- Typed properties per endpoint:
$filter->status,$filter->categoryId - Key remapping otomatis (snake_case → camelCase, rename bebas)
- IDE autocomplete +
@templatereturn type inference
🟢 Medium Impact
Peningkatan:
- Constructor
$parammenerima array untuk override nama query param mana saja (['sortBy' => 'orderBy']) — key tidak didefinisikan tetap pakai default protected defaultParamKeys()bisa di-override di subclass untuk mengubah default secara permanen tanpa pass$paramsetiap kali
Upgrade
composer update bpmlib/laravel-laresponseBreaking changes: 1 item — rename named argument searchParam: → param: (atau drop named arg, pakai positional)
Opsional: Adopsi BaseContainerFilter + resolveFilter() untuk endpoint dengan filter spesifik
v0.1.4 (2026-06-19)
TL;DR
Perubahan:
- ✨
ContainerQueryDTO (High) — parsing query params standar dariutils-data-container - 📝 PHPDoc pada semua public API di
ContainerQuery(Low)
Impact: 🟡 High: 1 | 🔵 Low: 1
Backward Compatible: ✅ Ya
🟡 High Impact
ContainerQuery DTO
ContainerQuery adalah DTO baru yang mem-parse query params yang dihasilkan utils-data-container (getterUrlStringAttribute / getterObjectAttribute) menjadi properties bertipe, sehingga backend developer tidak perlu lagi menulis $request->input() secara ad-hoc. Filter di-clean otomatis (null, string kosong, array kosong dibuang), sortDir dinormalisasi ke 'asc'/'desc', dan tersedia helper boolean untuk tiap aspek query.
Poin utama:
- Properties readonly:
$perPage,$page,$cursor,$useCursor,$sortBy,$sortDir,$filter,$search,$searchParam paginationMode()→'numeric'|'cursor'|'none'- Boolean helpers:
isNumericPagination(),isCursorPagination(),isNotPaginated(),hasSort(),hasSearch(),hasCursor(),hasFilter() effectivePerPage(int $default = 15)danfilterValue(string $key, mixed $default, bool $strict)
🔵 Low Impact
Perubahan:
- PHPDoc lengkap pada semua public properties dan methods di
ContainerQuery
Upgrade
composer update bpmlib/laravel-laresponseBreaking changes: Tidak ada
Opsional: Adopsi ContainerQuery untuk endpoint list yang menerima params dari utils-data-container