Tutorial

Primate 0.42 Rilis: Virtual Route Groups, Form Terstruktur, dan Diagnostik Produksi

Primate 0.42 Rilis: Virtual Route Groups, Form Terstruktur, dan Diagnostik Produksi

Primate 0.42 tersedia sebagai rilis preview pada 3 Oktober 2026 dengan tiga tambahan utama: virtual route groups yang menyembunyikan folder dari URL, serialisasi form terstruktur lewat client.form, dan diagnostik produksi berupa source map privat untuk pelacakan kesalahan. Framework universal ini mendukung banyak frontend seperti React, Solid, Svelte, dan Marko sekaligus backend Go, Python, dan Ruby dalam satu model routing. Rilis ini juga menandai penggantian nama client.groups menjadi client.partitions.

TL;DR

  • Primate 0.42 dirilis 3 Oktober 2026 sebagai rilis preview.
  • Virtual route groups memakai nama folder dalam tanda kurung agar tidak muncul di URL.
  • client.form kini bisa menyerialkan form menjadi JSON bersarang sesuai tipe rute.
  • Build produksi menyertakan source map privat untuk memetakan posisi stack ke kode aplikasi.
  • Kunci client.groups berganti nama menjadi client.partitions, dan migrasi otomatis dihapus.

Apa Itu Virtual Route Groups dan Bagaimana Cara Pakainya?

Virtual route groups adalah direktori rute yang transparan terhadap URL. Kamu membungkus nama direktori dengan tanda kurung untuk mengelompokkan rute dan membatasi berkas khusus tanpa menambahkan segmen ke URL publik. Contohnya, berkas routes/(account)/projects.ts menyajikan halaman /projects, dan routes/[organization]/(admin)/members.ts menyajikan /:organization/members.

Direktori itu tetap bagian dari hierarki filesystem. Sebuah layout di dalam grup (account) hanya membingkai halaman grup tersebut, sedangkan hook di dalam (admin) hanya berlaku di subtree-nya. Pola ini memungkinkan berbagi layout, hook, dan perilaku error di antara sibling terpilih tanpa mengarang prefiks URL yang sebenarnya tidak kamu inginkan.

Karena grup menghilang dari URL, Primate memeriksa pola rute lengkapnya terhadap tabrakan saat startup. Tumpang tindih antara rute statis, dinamis, opsional, dan rest akan gagal dengan menyebutkan setiap path sumber yang berkonflik, bukan bergantung pada urutan penelusuran direktori. Bagi tim yang pernah mengalami bug routing yang hanya muncul karena urutan berkas, pemeriksaan eksplisit ini menghapus satu kelas masalah.

Grup juga bisa bersarang atau ditempatkan di bawah segmen statis maupun dinamis. Batasannya jelas: grup ini adalah batas organisasi dan performa, bukan batas keamanan. Asetnya bisa publik dan chunk-nya bisa dibagi, jadi data tetap harus dilindungi di sisi server.

Apa Arti Lazy Bundle Seam untuk Performa?

Untuk halaman yang dirender di klien, sebuah grup sekaligus menjadi seam bundle malas. Halaman, layout, CSS, dan dependensi rute yang dikolokasikan akan diemit di belakang entrypoint grup di dalam graf esbuild bersama milik partisi. Shell aplikasi dan runtime framework bisa tetap menjadi bagian umum, sehingga tidak perlu diunduh ulang untuk tiap grup.

Respons langsung akan memuat grup aktif terlebih dahulu. Pada transisi klien pertama ke grup lain, Primate menyiapkan JavaScript dan CSS grup tujuan sebelum membuang halaman saat ini. Kalau pemuatan gagal, URL, DOM, dan gaya saat ini tetap utuh, dan navigasi berikutnya bisa mencoba lagi. Setelah grup termuat, navigasi di dalam grup itu kembali ke jalur normal yang hanya bertukar JSON.

Ada detail pembagian yang perlu dipahami: rute bersarang menjadi milik grup terdalamnya, sementara layout leluhur tetap menjadi dependensi. Komponen di direktori views tingkat atas tetap berada di bundle aplikasi karena handler rute arbitrer bisa memilihnya saat runtime. Artinya, memindahkan komponen ke dalam grup adalah keputusan tentang kapan kode diunduh, bukan sekadar kerapian struktur folder.

Kapan Sebaiknya Memakai Virtual Route Groups?

Pakai ketika beberapa rute berbagi layout, hook, atau perilaku error yang sama, tetapi kamu tidak ingin menambah segmen URL hanya untuk menampungnya. Contoh paling umum adalah area akun, panel admin, atau bagian pemasaran yang secara struktural berbeda tetapi secara URL tetap berada di akar atau di bawah segmen dinamis.

Grup juga berguna sebagai batas pengunduhan. Kalau sebuah bagian aplikasi jarang dikunjungi, menempatkannya di dalam grup membuat kode dan gayanya diemit di belakang entrypoint grup itu, sehingga kunjungan awal ke halaman lain tidak ikut membawa beban yang tidak terpakai. Untuk aplikasi yang halaman depannya harus cepat, pemisahan ini lebih mudah dipahami daripada menyebar impor dinamis secara manual.

KonsepMuncul di URLFungsi utamaBatas keamanan
Direktori rute biasaYa, menjadi segmen pathMenentukan struktur URLBukan
Virtual route groupTidak, hilang dari URLMengelompokkan rute dan membingkai layout atau hookBukan
Client partitionTidak langsungMemisahkan pohon aset yang dibangun terpisahBukan, tetap butuh proteksi server

Yang perlu diingat, ketiganya bukan pengganti otorisasi. Primate secara eksplisit menyebut virtual route groups bukan batas keamanan, dan partisi pun lebih soal isolasi aset daripada perlindungan data. Validasi akses tetap harus terjadi di server, dan pola itu tidak berubah dari versi sebelumnya.

Apa Dampaknya bagi Tim yang Sudah Memakai Primate?

Kalau proyekmu memakai kunci client.groups, perubahan nama menjadi client.partitions adalah pekerjaan mekanis yang cepat. Yang butuh perhatian lebih adalah penghapusan migrasi otomatis, karena alur deployment yang selama ini mengandalkan Primate menjalankan migrasi saat server start harus diganti menjadi langkah eksplisit sebelum server dijalankan.

Untuk tim yang belum memakai grup, tidak ada kewajiban bermigrasi ke struktur baru. Fitur ini bersifat aditif: struktur folder lama tetap berfungsi, dan grup bisa diperkenalkan bertahap pada satu area aplikasi lebih dulu. Pendekatan bertahap ini lebih aman daripada merombak seluruh pohon rute sekaligus, karena pemeriksaan tabrakan saat startup akan menolak konfigurasi yang bertentangan dan memaksamu menyelesaikannya sebelum aplikasi berjalan.

Karena statusnya rilis preview, sebaiknya uji dulu di lingkungan staging. Beberapa API baru seperti serialisasi form bersarang dan langganan penyelesaian navigasi mengubah perilaku yang sebelumnya harus ditangani sendiri oleh aplikasi, jadi ada baiknya memastikan test suite mencakup jalur tersebut sebelum dipakai di produksi.

Apa Saja Fitur Baru Lain di Primate 0.42?

Selain routing, rilis ini membawa beberapa tambahan yang berguna untuk aplikasi produksi. Salah satu yang paling praktis adalah serialisasi form terstruktur. client.form kini bisa mengubah form peramban menjadi tipe JSON bersarang yang dideklarasikan oleh rutenya. Kamu cukup meneruskan opsi serialize untuk mengubah FormData menjadi objek, array, boolean, atau struktur lain yang spesifik untuk aplikasi.

Serializer menerima kontrol yang berhasil, nilai berulang, dan tombol submit yang memulai pengiriman. Hasilnya diperiksa terhadap tipe input body rute yang diimpor, lalu melanjutkan siklus pengiriman, hasil, pengalihan, dan validasi yang normal. Masalah validasi bersarang dipetakan kembali ke nama field dengan tanda kurung siku; misalnya path /notifications/channels/0 dipetakan ke notifications[channels][0].

Untuk aplikasi Marko, dokumen head kini bisa dideklarasikan dengan model kepemilikan komponen yang sama seperti integrasi React dan Solid. Saat SSR, Primate mengumpulkan elemen title, meta, link, style, script, dan base ke dalam head dokumen, lalu hidrasi mengadopsi state itu tanpa duplikat. Navigasi klien mengganti metadata milik halaman dan layout yang ditinggalkan tanpa menyentuh elemen template aplikasi.

Integrasi peramban juga mendapat langganan penyelesaian navigasi. Lewat client.onNavigation, kode bisa berjalan setelah Primate memperbarui URL tujuan dan DOM sekaligus. Sumbernya bisa berupa navigate, form, history, atau refresh, dan setiap navigasi yang berhasil memberi tahu tepat sekali. Navigasi yang gagal, dikalahkan, dangkal, hanya hash, atau dokumen penuh tidak memberi notifikasi.

Ada pula observasi kegagalan request: modul bisa mendaftarkan onError untuk mengamati kegagalan tak terduga sebelum Primate merender rute error aplikasi. Observer menerima penyebab asli, fasad request, template rute yang cocok, fase pemrosesan, dan frame aplikasi yang dipetakan. Untuk membantunya, build produksi kini menyertakan build/server.js.map privat yang ditautkan, dan Primate memakainya untuk memetakan posisi stack ke lokasi sumber relatif aplikasi sebelum memanggil observer.

Di sisi database, PostgreSQL, MySQL, dan MongoDB kini mengekspos kontrol pool yang sama untuk jumlah koneksi maksimum, timeout koneksi, dan timeout idle. Ketiganya juga mendukung fork untuk pekerjaan yang butuh kapasitas dan siklus hidup sendiri. Fork mewarisi pengaturan koneksi secara privat sambil memiliki pool independen, dan menutupnya tidak menutup induknya. Terakhir, pengaturan http.timeout mengatur timeout idle HTTP yang sedang berjalan, sedangkan build.external menjaga paket terpilih tetap di luar bundle server produksi.

Bagaimana Cara Upgrade ke Primate 0.42?

Langkah pertama adalah mengganti nama kunci client.groups menjadi client.partitions, karena fitur bundle klien yang dibangun terpisah pada 0.41 kini memakai nama itu. Kunci client.routes tetap menjadi pemetaan prefiks URL. Partisi tetap menjadi batas isolasi aset yang dibangun terpisah, sementara virtual route groups adalah seam chunk yang bisa ditelusuri di dalam sebuah partisi.

Kedua, perhatikan penghapusan migrasi otomatis. Kunci db.migrations.autoapply yang sudah usang sejak 0.41 kini dihapus, dan membiarkannya terkonfigurasi akan menghasilkan error beserta instruksi migrasi. Di pengembangan, jalankan perintah migrasi secara eksplisit. Untuk deployment, terapkan artefak yang persis dihasilkan build sebelum memulai servernya, sehingga perubahan skema terlihat oleh pekerjaan rilis dan beberapa instance server tidak berlomba menjalankan migrasi saat startup.

Ketiga, perbarui dependensi. Dependensi eksternal workspace disegarkan di seluruh paket frontend, database, build, dan test. Migrasi ke @rcompat/io 0.13 mengadopsi model hasil proses yang eksplisit, sehingga perintah compiler dan tooling yang gagal tetap menghentikan operasi Primate alih-alih disalahartikan sebagai keluaran yang berhasil. Rilis ini juga memperbaiki sejumlah bug navigasi dan form, termasuk penghormatan terhadap defaultPrevented, tombol modifier, unduhan, dan target non-default.

FAQ

Apakah virtual route groups bisa dipakai sebagai batas keamanan?

Tidak. Dokumentasi menyatakan grup ini adalah batas organisasi dan performa, bukan batas keamanan. Asetnya bisa publik dan chunk-nya bisa dibagi, jadi lindungi data di sisi server atau gunakan partisi klien saat butuh pohon aset terpisah.

Apa beda virtual route group dan client partition?

Partisi adalah batas isolasi aset yang dibangun terpisah, sedangkan virtual route group adalah seam chunk yang bisa ditelusuri di dalam sebuah partisi. Keduanya sengaja dibedakan dan saling melengkapi.

Apakah migrasi database masih bisa otomatis saat server start?

Tidak. Kunci db.migrations.autoapply dihapus pada 0.42. Jalankan migrasi secara eksplisit di pengembangan, dan di deployment terapkan artefak hasil build sebelum memulai server agar tidak ada instance yang berlomba saat startup.

Apakah form bisa mengirim struktur bersarang?

Ya. client.form menerima opsi serialize yang mengubah FormData menjadi objek, array, atau boolean bersarang. Hasilnya divalidasi terhadap tipe input body rute, dan masalah validasi bersarang dipetakan kembali ke nama field dengan tanda kurung siku.

Frontend dan backend apa saja yang didukung Primate?

Primate mendukung banyak frontend seperti React, Solid, Svelte, Vue, Marko, Angular, HTMX, dan lainnya, serta backend Go, Python, dan Ruby. Semuanya memakai model routing dan konfigurasi yang sama.

Sumber utama: pengumuman Primate 0.42, dokumentasi Primate, repositori primatejs/primate di GitHub, dan situs resmi Node.js.

💬 Komentar (0)

Belum ada komentar. Jadilah yang pertama! 💬

Komentar akan muncul setelah moderasi.