Skip to content

Laresponse — Changelog

v0.1.5 (2026-06-19)

TL;DR

Perubahan:

  • BaseContainerFilter + resolveFilter() (High) — typed filter DTO per endpoint
  • 🔧 Custom param key mapping via $param di 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.

php
// 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 baru

Fix: 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 + @template return type inference

🟢 Medium Impact

Peningkatan:

  • Constructor $param menerima 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 $param setiap kali

Upgrade

bash
composer update bpmlib/laravel-laresponse

Breaking 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:

  • ContainerQuery DTO (High) — parsing query params standar dari utils-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) dan filterValue(string $key, mixed $default, bool $strict)

🔵 Low Impact

Perubahan:

  • PHPDoc lengkap pada semua public properties dan methods di ContainerQuery

Upgrade

bash
composer update bpmlib/laravel-laresponse

Breaking changes: Tidak ada

Opsional: Adopsi ContainerQuery untuk endpoint list yang menerima params dari utils-data-container