WhenMounted e le prop BigInt in Inertia.js v3.8
Il team di Inertia.js ha rilasciato la v3.8.0 con un componente WhenMounted per il rendering di codice solo-browser in presenza di server-side rendering, il supporto opt-in agli interi oltre il range sicuro di JavaScript come valori BigInt nativi e altro ancora:
WhenMounted per i componenti solo-browser
Evan Burrell ha contribuito con un componente WhenMounted per gli adapter React, Vue e Svelte. Un componente che legge window o document durante il rendering manda in crash il server-side rendering con un errore "window is not defined".
Il componente WhenMounted renderizza il suo fallback sul server e i suoi children una volta che il componente è stato montato nel browser:
import { WhenMounted } from '@inertiajs/vue3'<template>
<WhenMounted>
<SalesChart />
<template #fallback>
<p>Loading chart...</p>
</template>
</WhenMounted>
</template>In React, passa i children come funzione in modo che il codice solo-browser non venga eseguito sul server, dato che i children JSX vengono valutati prima che il componente venga renderizzato:
import { WhenMounted } from '@inertiajs/react'
<WhenMounted fallback={<p>Loading chart...</p>}>
{() => <SalesChart width={window.innerWidth} />}
</WhenMounted>Il fallback viene mostrato solo durante la SSR e nel primo render di hydration, così il primo render del browser corrisponde all'HTML del server e non si verifica alcun hydration mismatch. Un WhenMounted che viene montato più tardi, ad esempio dopo una visita lato client, renderizza subito i suoi children.
Per maggiori dettagli, vedi #3218.
Interi grandi come valori BigInt nativi
Pascal Baljet ha aggiunto il supporto per gli interi al di fuori del range di interi sicuri di JavaScript. PHP invia un intero a 64 bit, come uno Snowflake ID, come numero JSON, e il browser lo arrotonda durante il parsing della pagina, così 900719925474099988 diventa 900719925474100000 senza alcun errore.
La funzionalità è opt-in sul server e richiede inertia-laravel v3.5.0. Attivala per ogni response con l'opzione preserve_big_integers in config/inertia.php (o la variabile d'ambiente INERTIA_PRESERVE_BIG_INTEGERS), oppure per una singola response:
return Inertia::render('Orders/Show', [
'id' => $order->id,
])->preserveBigIntegers();L'adapter codifica gli interi grandi come marcatori { "$bigint": "..." }, e il client li riconverte in valori BigInt. Gli interi che rientrano nel range sicuro restano numeri normali:
defineProps({ id: BigInt })<template>
<p>Order {{ id }}</p>
<!-- Order 900719925474099988 -->
</template>Funziona per la pagina iniziale, le visite, i partial reload, la history cifrata e la SSR. Un BigInt rimandato indietro attraverso il router, un form o Precognition viene inviato come stringa di cifre, che la regola di validazione integer di Laravel e $request->integer() accettano.
Per maggiori dettagli, vedi #3237.
Il componente Form inoltra i callback di errore e flash
Dale Weaver ha corretto il componente <Form> in modo che passi onHttpException, onNetworkError, onBeforeUpdate e onFlash alla visit. Questi callback facevano già parte delle prop del componente, ma gli adapter non li inoltravano mai, quindi un HTTP 500 o un errore di rete durante l'invio di un <Form> non li chiamava mai. Ora funzionano come su useForm, e restituire false da uno dei due callback di errore interrompe l'evento globale e la gestione predefinita:
<Form
action="/orders"
method="post"
@http-exception="(response) => { toast.error('Something went wrong'); return false }"
>
<!-- ... -->
</Form>Per maggiori dettagli, vedi #3262.
Risposte ottimistiche fuori ordine
Pascal Baljet ha corretto un caso in cui due aggiornamenti ottimistici erano in corso e la risposta della prima richiesta arrivava per ultima. Le sue prop venivano lette prima della seconda scrittura, quindi applicarle annullava sullo schermo il secondo aggiornamento. La pagina risultava così in disaccordo con il server fino alla visita successiva.
Ora le richieste ottimistiche portano con sé un ID, e una risposta viene ignorata quando una richiesta ottimistica successiva è già andata a buon fine. Una richiesta fallita non conta, quindi una risposta più vecchia ma riuscita aggiorna comunque la pagina dopo che una richiesta più recente fallisce e viene annullata.
Per maggiori dettagli, vedi #3245.
La history si ripristina dopo un deploy
Lazizbek Ergashev ha corretto la navigazione avanti e indietro durante un deploy. Quando il browser ricaricava il documento su una navigazione indietro o avanti, Inertia ripristinava la pagina dallo state della history senza controllare la versione degli asset. Il nuovo bundle JavaScript renderizzava quindi prop provenienti dal deploy precedente, e una prop aggiunta o rinominata nel frattempo risultava undefined. Ora Inertia confronta le versioni e renderizza la pagina appena caricata quando differiscono.
Per maggiori dettagli, vedi #3264.
Note di rilascio
Qui sotto puoi vedere l'elenco completo delle modifiche e il diff tra 3.7.1 e 3.8.0 su GitHub. Le seguenti note di rilascio provengono direttamente dalla GitHub release:
v3.8.0
- [3.x] Corretta la corruzione UTF-8 multi-byte nel parsing del body delle richieste SSR da @onk in #3248
- Aggiornato pnpm/action-setup da 6.0.10 a 6.1.0 nel gruppo github-actions da @dependabot in #3261
- [3.x] Corretti i tipi core quando Axios non è installato da @fouteox in #3258
- [3.x] Confronto delle versioni degli asset prima di ripristinare la history su un reload avanti/indietro da @lazerg in #3264
- [3.x] Impedisce a una risposta ottimistica obsoleta di annullare un aggiornamento ottimistico più recente da @pascalbaljet in #3245
- [3.x] Preferisci server.origin quando si risolvono gli URL dei link CSS della SSR da @pascalbaljet in #3268
- [3.x] Evita il top-level await nel bundle SSR generato da @ramonmalcolm10 in #3239
- [3.x] Inoltro dei callback di visit mancanti del componente Form da @daleweaver777 in #3262
- [3.x] Aggiunto il componente WhenMounted da @evan-burrell in #3218
- [3.x] Migliorati i test in CI da @pascalbaljet in #3277
- [3.x] Aggiornate le dipendenze da @pascalbaljet in #3278
- [3.x] Pulizia dei prefetch annullati ancora in corso da @gianpieropuleo in #3271
- [3.x] Gestione dei signal già abortiti nel client XHR da @gianpieropuleo in #3273
- [3.x] Correzione del salto di scroll di React InfiniteScroll su Safari e della flakiness in CI da @pascalbaljet in #3282
- [3.x] Supporto agli interi grandi come valori BigInt nativi da @pascalbaljet in #3237
- [3.x] Aggiornate le dipendenze da @pascalbaljet in #3286
- [3.x] Silenziato l'avviso
state_referenced_locallynel componenteAppdi Svelte da @pascalbaljet in #3287
Fonte originale:
https://laravel-news.com/inertia-3-8-0Altri articoli recenti
Laravel AI 1.1 e 1.2: Agent Skills, Cohere e structured output più solidi
Le release 1.1.0 e 1.2.0 di laravel/ai portano gli Agent Skills, l'approvazione obbligatoria per i tool built-in e nuovi provider come Cohere e Laya self-hosted. Sul fronte qualità arrivano i fix allo structured output per Bedrock e il supporto alle provider options. Aggiornati anche i modelli di default, con Claude 4.7+ che ignora i sampling params.
Laravel 13.35.0: scheduler più controllabile, code più flessibili e response Markdown
Laravel 13.35.0 porta Schedule::alwaysOnOneServer(), il supporto a schedule:interrupt per i comandi di lunga durata, --memory in percentuale per queue:work e il nuovo metodo markdown() sulla response factory. Tante piccole migliorie anche a test, view compilate in parallelo e dischi local.
BashBox: un interprete Bash in sandbox per agenti AI in PHP
BashBox è un interprete bash scritto in puro PHP che permette di eseguire gli script generati dagli agenti AI senza mai ricorrere a proc_open, exec o shell_exec. Ogni comando è una classe PHP che lavora su un filesystem virtuale, con limiti di esecuzione, quote disco e accesso di rete configurabili. Ideale per chi sviluppa agenti con il Laravel AI SDK o altre librerie simili.