@@ -109,20 +109,71 @@ export class FetchResponse {
109109 succeeded : boolean ;
110110}
111111
112+ export interface Visit {
113+ readonly action : Action ;
114+ readonly location : URL ;
115+ hasCachedSnapshot ( ) : boolean ;
116+ complete ( ) : void ;
117+ cancel ( ) : void ;
118+ }
119+
120+ export interface Adapter {
121+ visitProposedToLocation ( location : URL , options ?: VisitOptions ) : void ;
122+ visitStarted ( visit : Visit ) : void ;
123+ visitCompleted ( visit : Visit ) : void ;
124+ visitFailed ( visit : Visit ) : void ;
125+ visitRequestStarted ( visit : Visit ) : void ;
126+ visitRequestCompleted ( visit : Visit ) : void ;
127+ visitRequestFailedWithStatusCode ( visit : Visit , statusCode : number ) : void ;
128+ visitRequestFinished ( visit : Visit ) : void ;
129+ visitRendered ( visit : Visit ) : void ;
130+ pageInvalidated ( reason : { reason : string } ) : void ;
131+ formSubmissionStarted ?( formSubmission : FormSubmission ) : void ;
132+ formSubmissionFinished ?( formSubmission : FormSubmission ) : void ;
133+ linkPrefetchingIsEnabledForLocation ?( location : URL ) : boolean ;
134+ }
135+
136+ export class BrowserAdapter implements Adapter {
137+ progressBar : ProgressBar ;
138+ visitProposedToLocation ( location : URL , options ?: VisitOptions ) : void ;
139+ visitStarted ( visit : Visit ) : void ;
140+ visitCompleted ( visit : Visit ) : void ;
141+ visitFailed ( visit : Visit ) : void ;
142+ visitRequestStarted ( visit : Visit ) : void ;
143+ visitRequestCompleted ( visit : Visit ) : void ;
144+ visitRequestFailedWithStatusCode ( visit : Visit , statusCode : number ) : void ;
145+ visitRequestFinished ( visit : Visit ) : void ;
146+ visitRendered ( visit : Visit ) : void ;
147+ pageInvalidated ( reason : { reason : string } ) : void ;
148+ formSubmissionStarted ( formSubmission : FormSubmission ) : void ;
149+ formSubmissionFinished ( formSubmission : FormSubmission ) : void ;
150+ linkPrefetchingIsEnabledForLocation ( location : URL ) : boolean ;
151+ }
152+
153+ export interface ProgressBar {
154+ hiding : boolean ;
155+ value : number ;
156+ visible : boolean ;
157+ show ( ) : void ;
158+ hide ( ) : void ;
159+ setValue ( value : number ) : void ;
160+ }
161+
112162/**
113- * Interface for accessing the browser adapter .
114- * The adapter handles form submission lifecycle events .
163+ * The delegate for the Turbo navigator — in practice, the active session .
164+ * Provides access to the current adapter .
115165 */
116- export interface BrowserAdapter {
117- formSubmissionStarted ( formSubmission ?: FormSubmission ) : void ;
118- formSubmissionFinished ( formSubmission ?: FormSubmission ) : void ;
166+ export interface NavigatorDelegate {
167+ adapter : Adapter ;
119168}
120169
121170/**
122171 * Interface for the Turbo navigator.
123172 * Provides methods for programmatic navigation and form submission.
124173 */
125174export interface Navigator {
175+ /** The delegate for this navigator (the active Turbo session). */
176+ delegate : NavigatorDelegate ;
126177 /**
127178 * Submits a form programmatically through Turbo Drive.
128179 *
@@ -231,7 +282,7 @@ export interface TurboSession {
231282 disconnectStreamSource ( source : StreamSource ) : void ;
232283 renderStreamMessage ( message : StreamMessage | string ) : void ;
233284 drive : boolean ;
234- adapter : BrowserAdapter ;
285+ adapter : Adapter ;
235286}
236287
237288export const StreamActions : {
@@ -256,7 +307,7 @@ export function start(): void;
256307 *
257308 * @param adapter Adapter to register
258309 */
259- export function registerAdapter ( adapter : unknown ) : void ;
310+ export function registerAdapter ( adapter : Adapter ) : void ;
260311
261312/**
262313 * Sets the form mode for Turbo Drive.
0 commit comments