Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions types/hotwired__turbo/hotwired__turbo-tests.ts
Original file line number Diff line number Diff line change
Expand Up @@ -226,7 +226,12 @@ navigator.delegate;
navigator.delegate.adapter;

// Test ProgressBar via BrowserAdapter cast
// BrowserAdapter is not a runtime export of @hotwired/turbo, only a type
// @ts-expect-error
new BrowserAdapter();
const browserAdapter = navigator.delegate.adapter as BrowserAdapter;
const browserAdapterAsAdapter: Adapter = browserAdapter;
browserAdapterAsAdapter.visitStarted;
// $ExpectType ProgressBar
browserAdapter.progressBar;
browserAdapter.progressBar.setValue(0);
Expand Down Expand Up @@ -320,16 +325,16 @@ disconnectStreamSource(webSocket);
// @ts-expect-error
connectStreamSource({});

const streamMessage = new StreamMessage(document.createDocumentFragment());
const streamMessage: StreamMessage = { fragment: document.createDocumentFragment() };
renderStreamMessage("<turbo-stream></turbo-stream>");
renderStreamMessage(streamMessage);
Turbo.renderStreamMessage("<turbo-stream></turbo-stream>");
Turbo.renderStreamMessage(streamMessage);

// $ExpectType "text/vnd.turbo-stream.html"
StreamMessage.contentType;

// $ExpectType StreamMessage
// StreamMessage is not a runtime export of @hotwired/turbo, only a type
// @ts-expect-error
new StreamMessage(document.createDocumentFragment());
// @ts-expect-error
StreamMessage.wrap("<turbo-stream></turbo-stream>");

// Test TurboHistory via session.history
Expand Down
30 changes: 15 additions & 15 deletions types/hotwired__turbo/index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,15 @@ export interface StreamSource {
): void;
}

export class StreamMessage {
static readonly contentType: "text/vnd.turbo-stream.html";
/**
* A stream message, as accepted by {@link renderStreamMessage}.
*
* Note that Turbo does not export the `StreamMessage` class at runtime, so
* this interface only describes instances (there is no constructor and no
* access to the static `wrap` method or `contentType` property).
*/
export interface StreamMessage {
readonly fragment: DocumentFragment;
static wrap(message: StreamMessage | string): StreamMessage;
constructor(fragment: DocumentFragment);
}

export interface FetchRequestHeaders {
Expand Down Expand Up @@ -141,18 +145,14 @@ export interface Adapter {
linkPrefetchingIsEnabledForLocation?(location: URL): boolean;
}

export class BrowserAdapter implements Adapter {
/**
* The default adapter installed on the session.
*
* Note that Turbo does not export the `BrowserAdapter` class at runtime —
* obtain the instance via `session.adapter` or `navigator.delegate.adapter`.
*/
export interface BrowserAdapter extends Adapter {
progressBar: ProgressBar;
visitProposedToLocation(location: URL, options?: VisitOptions): void;
visitStarted(visit: Visit): void;
visitCompleted(visit: Visit): void;
visitFailed(visit: Visit): void;
visitRequestStarted(visit: Visit): void;
visitRequestCompleted(visit: Visit): void;
visitRequestFailedWithStatusCode(visit: Visit, statusCode: number): void;
visitRequestFinished(visit: Visit): void;
visitRendered(visit: Visit): void;
pageInvalidated(reason: { reason: string }): void;
formSubmissionStarted(formSubmission: FormSubmission): void;
formSubmissionFinished(formSubmission: FormSubmission): void;
linkPrefetchingIsEnabledForLocation(location: URL): boolean;
Expand Down