Skip to content

refactor(support): break SCC-1 — decouple Support from Http & Container (task 3.3a) - #37

Open
agissept wants to merge 1 commit into
migration/3.2-macroable-conditionable-pipelinefrom
migration/3.3-support-collection-scc1
Open

refactor(support): break SCC-1 — decouple Support from Http & Container (task 3.3a)#37
agissept wants to merge 1 commit into
migration/3.2-macroable-conditionable-pipelinefrom
migration/3.3-support-collection-scc1

Conversation

@agissept

Copy link
Copy Markdown
Member

Wave 3.3slice: putus SCC-1 saja. Rewrite Collection ke signature L13 sengaja ditunda ke task terpisah (risiko seluruh-app beda kelas, ortogonal ke cycle-break). Stacked di atas #36 (retarget ke master setelah chain merge).

Tujuan

Menghapus dua satu-satunya edge konkret Support→core yang menjerat 11-node SCC-1 (support/container/http/session/cache/database/cookie/encryption/events/filesystem/redis). Setelah ini, Support tak lagi use kelas konkret Http/Container → cycle putus → prasyarat package-swap per-cluster terbuka.

Support → Container

  • CapsuleManagerTrait: typehint Contracts\Container\Container (verbatim L13), drop default ?: new Container. Database\Capsule\Manager & Queue\Capsule\Manager kini instansiasi default konkret sendiri ($container ?: new Container) — konkret pindah ke komponen yang memang berhak.
  • Container konkret kini implements Contracts\Container\Container (kontrak extends PSR ContainerInterface). Satu-satunya penyesuaian: factory() param dilebarkan (buang typehint string) agar kompatibel LSP dengan kontrak. bindMethod/beforeResolving/afterResolving sudah ada.

Support → Http

  • Support\Facades\Response jadi Facade accessor murni (→ Contracts\Routing\ResponseFactory), tak lagi use Illuminate\Http\* atau new konkret.
  • Logika dipindah ke Routing\ResponseFactory implements Contracts\Routing\ResponseFactorytrim: make/view/json/jsonp/stream/download (hanya method yang fork punya; bukan port penuh L13 yang bawa Redirector/eventStream/file/Js).
  • view di-resolve lazily dari container (persis perilaku facade statik lama) supaya make()/json() tetap jalan walau view belum bound. ponytail: note menandai upgrade path ke Contracts\View\Factory injeksi konstruktor begitu View implement kontraknya.
  • Binding di RoutingServiceProvider::registerResponseFactory().

Verifikasi

  • grep edge use Illuminate\{Http,Container}\ konkret di src/Illuminate/Support/ = 0.
  • Full suite hijau (1640); convergence-ratchet lolos.
  • Test: SupportFacadeResponseTest diadaptasi (facade + container real) + 2 test baru (make() tanpa view bound, view() lazy-resolve).

Catatan

  • Contracts\Routing\ResponseFactory sengaja di-trim ke 6 method fork; saat swap ke illuminate/routing v13, accessor tetap nunjuk kontrak yang sama (v13 bind superset) — aman.
  • Ditunda (task 3.3b): rewrite Support\Collection 951→2009 baris ke API L13 + pisah ke Collections/.

🤖 Generated with Claude Code

…er (task 3.3a)

Wave 3.3 (slice: SCC-1 break saja; Collection→sig L13 ditunda ke task terpisah).
Menghapus dua satu-satunya edge konkret Support→core yang menjerat 11-node SCC-1:

Support→Container:
- CapsuleManagerTrait: typehint `Contracts\Container\Container` (verbatim L13),
  drop default `?: new Container`. Database/Queue Capsule\Manager instansiasi
  default konkret sendiri (`$container ?: new Container`).
- Container konkret kini `implements Contracts\Container\Container` (extends PSR);
  `factory()` param dilebarkan (drop typehint `string`) supaya kompatibel kontrak.

Support→Http:
- `Support\Facades\Response` jadi Facade accessor murni (→ Contracts\Routing\
  ResponseFactory), tak lagi `use Illuminate\Http\*` / `new` konkret.
- Logika response dipindah ke `Routing\ResponseFactory implements
  Contracts\Routing\ResponseFactory` (trim: make/view/json/jsonp/stream/download —
  method yang fork punya; bukan port penuh L13). 'view' di-resolve lazily dari
  container (perilaku facade lama) supaya make()/json() jalan tanpa 'view' bound.
- Binding di `RoutingServiceProvider::registerResponseFactory()`.

Verifikasi: grep edge Support→Http/Container konkret = 0; full suite hijau (1640);
ratchet lolos. Test: SupportFacadeResponseTest diadaptasi (facade+container) + 2
test baru (make tanpa view, view lazy-resolve).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant