Skip to content
This repository was archived by the owner on Nov 6, 2018. It is now read-only.

Commit 65bbd98

Browse files
committed
feat: remove unnecessary InitializationFailedHandler
Now that initialization is trivial, a special handler and retry logic is not necessary for initialization errors. BREAKING CHANGE: The `InitializationFailedHandler` was removed.
1 parent c26b65d commit 65bbd98

File tree

4 files changed

+11
-60
lines changed

4 files changed

+11
-60
lines changed

src/client/client.test.ts

-21
Original file line numberDiff line numberDiff line change
@@ -260,27 +260,6 @@ describe('Client', () => {
260260
})
261261
})
262262

263-
describe('initializationFailedHandler', () => {
264-
it('calls the initializationFailedHandler when initialization fails', async () => {
265-
let initializationFailedHandlerCalled: () => void
266-
const done = new Promise<void>(resolve => (initializationFailedHandlerCalled = resolve))
267-
const client = new ConnectionTestClient({
268-
createMessageTransports: () =>
269-
createClientTransportsForTestServer(server => {
270-
server.onRequest('initialize', () => {
271-
throw new Error('test')
272-
})
273-
}),
274-
initializationFailedHandler: () => {
275-
initializationFailedHandlerCalled()
276-
return false
277-
},
278-
})
279-
client.activate()
280-
await done
281-
})
282-
})
283-
284263
describe('errorHandler', () => {
285264
const create = async (errorHandler: ErrorHandler) => {
286265
const clientTransports = createClientTransportsForTestServer(server => {

src/client/client.ts

+10-26
Original file line numberDiff line numberDiff line change
@@ -21,22 +21,13 @@ import {
2121
import { DocumentSelector } from '../types/document'
2222
import { isFunction, tryCatchPromise } from '../util'
2323
import { Connection, createConnection } from './connection'
24-
import {
25-
CloseAction,
26-
DefaultErrorHandler,
27-
ErrorAction,
28-
ErrorHandler,
29-
InitializationFailedHandler,
30-
} from './errorHandler'
24+
import { CloseAction, DefaultErrorHandler, ErrorAction, ErrorHandler } from './errorHandler'
3125
import { DynamicFeature, RegistrationData, StaticFeature } from './features/common'
3226

3327
/** Options for creating a new client. */
3428
export interface ClientOptions {
3529
documentSelector?: DocumentSelector
3630

37-
/** Called when initialization fails to determine how to proceed. */
38-
initializationFailedHandler?: InitializationFailedHandler
39-
4031
/** Called when an error or close occurs to determine how to proceed. */
4132
errorHandler?: ErrorHandler
4233

@@ -59,7 +50,6 @@ export interface ClientOptions {
5950

6051
/** The client options, after defaults have been set that make certain fields required. */
6152
interface ResolvedClientOptions extends Pick<ClientOptions, Exclude<keyof ClientOptions, 'trace'>> {
62-
initializationFailedHandler: InitializationFailedHandler
6353
errorHandler: ErrorHandler
6454
tracer: Tracer
6555
experimentalClientCapabilities: any
@@ -117,7 +107,6 @@ export class Client implements Unsubscribable {
117107
public constructor(public readonly id: string, { trace, ...options }: ClientOptions) {
118108
this.options = {
119109
...options,
120-
initializationFailedHandler: options.initializationFailedHandler || (() => Promise.resolve(false)),
121110
errorHandler: options.errorHandler || new DefaultErrorHandler(),
122111
tracer: options.tracer || noopTracer,
123112
experimentalClientCapabilities: options.experimentalClientCapabilities || {},
@@ -142,10 +131,9 @@ export class Client implements Unsubscribable {
142131

143132
/**
144133
* Activates the client, which causes it to start connecting (and to reestablish the connection when it drops,
145-
* as directed by the initializationFailedHandler).
134+
* as directed by the error handler).
146135
*
147-
* To watch client state, use Client#state. To log client errors, provide an initializationFailedHandler and
148-
* errorHandler in ClientOptions.
136+
* To watch client state, use Client#state. To log client errors, provide errorHandler in ClientOptions.
149137
*/
150138
public activate(): void {
151139
// Callers should subscribe to Client#state instead of awaiting the activation.
@@ -238,17 +226,13 @@ export class Client implements Unsubscribable {
238226

239227
this._state.next(ClientState.Active)
240228
})
241-
.then(null, err =>
242-
Promise.resolve(this.options.initializationFailedHandler(err)).then(reinitialize => {
243-
if (reinitialize) {
244-
return this.initialize(connection)
245-
}
246-
if (connection) {
247-
connection.unsubscribe()
248-
}
249-
return this.stopAtState(ClientState.ActivateFailed)
250-
})
251-
)
229+
.then(null, err => {
230+
this.options.errorHandler.error(err, undefined, undefined)
231+
if (connection) {
232+
connection.unsubscribe()
233+
}
234+
return this.stopAtState(ClientState.ActivateFailed)
235+
})
252236
}
253237

254238
protected handleConnectionClosed(): void {

src/client/errorHandler.ts

-7
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,5 @@
11
import { Message } from '../jsonrpc2/messages'
22

3-
/**
4-
* Called by the client when initialization fails to determine how to proceed.
5-
*
6-
* @returns true to attempt reinitialization, false otherwise
7-
*/
8-
export type InitializationFailedHandler = (error: Error) => boolean | Promise<boolean>
9-
103
/**
114
* A pluggable error handler that is invoked when the connection encounters an error or is closed.
125
*/

src/environment/controller.ts

+1-6
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,7 @@ export interface ControllerOptions<X extends Extension, C extends ConfigurationC
7474
extension: X
7575
) => Pick<
7676
ClientOptions,
77-
| 'createMessageTransports'
78-
| 'errorHandler'
79-
| 'initializationFailedHandler'
80-
| 'trace'
81-
| 'tracer'
82-
| 'experimentalClientCapabilities'
77+
'createMessageTransports' | 'errorHandler' | 'trace' | 'tracer' | 'experimentalClientCapabilities'
8378
>
8479

8580
/**

0 commit comments

Comments
 (0)