Skip to content

Commit c1d55ba

Browse files
authored
Merge pull request kubernetes-client#823 from uesyn/improve-informer-interface
Make the Informer interface more strict
2 parents 62ef490 + d941d5c commit c1d55ba

File tree

2 files changed

+34
-20
lines changed

2 files changed

+34
-20
lines changed

src/cache.ts

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,16 @@ export class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, In
6060
this._stop();
6161
}
6262

63-
public on(verb: 'add' | 'update' | 'delete' | 'change', cb: ObjectCallback<T>): void;
64-
public on(verb: 'error' | 'connect', cb: ErrorCallback): void;
65-
public on(verb: string, cb: any): void {
63+
public on(verb: ADD | UPDATE | DELETE | CHANGE, cb: ObjectCallback<T>): void;
64+
public on(verb: ERROR | CONNECT, cb: ErrorCallback): void;
65+
public on(
66+
verb: ADD | UPDATE | DELETE | CHANGE | ERROR | CONNECT,
67+
cb: ObjectCallback<T> | ErrorCallback,
68+
): void {
6669
if (verb === CHANGE) {
67-
this.on('add', cb);
68-
this.on('update', cb);
69-
this.on('delete', cb);
70+
this.on(ADD, cb);
71+
this.on(UPDATE, cb);
72+
this.on(DELETE, cb);
7073
return;
7174
}
7275
if (this.callbackCache[verb] === undefined) {
@@ -75,13 +78,16 @@ export class ListWatch<T extends KubernetesObject> implements ObjectCache<T>, In
7578
this.callbackCache[verb].push(cb);
7679
}
7780

78-
public off(verb: 'add' | 'update' | 'delete' | 'change', cb: ObjectCallback<T>): void;
79-
public off(verb: 'error' | 'connect', cb: ErrorCallback): void;
80-
public off(verb: string, cb: any): void {
81+
public off(verb: ADD | UPDATE | DELETE | CHANGE, cb: ObjectCallback<T>): void;
82+
public off(verb: ERROR | CONNECT, cb: ErrorCallback): void;
83+
public off(
84+
verb: ADD | UPDATE | DELETE | CHANGE | ERROR | CONNECT,
85+
cb: ObjectCallback<T> | ErrorCallback,
86+
): void {
8187
if (verb === CHANGE) {
82-
this.off('add', cb);
83-
this.off('update', cb);
84-
this.off('delete', cb);
88+
this.off(ADD, cb);
89+
this.off(UPDATE, cb);
90+
this.off(DELETE, cb);
8591
return;
8692
}
8793
if (this.callbackCache[verb] === undefined) {

src/informer.ts

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,19 +14,27 @@ export type ListPromise<T extends KubernetesObject> = () => Promise<{
1414
}>;
1515

1616
// These are issued per object
17-
export const ADD: string = 'add';
18-
export const UPDATE: string = 'update';
19-
export const CHANGE: string = 'change';
20-
export const DELETE: string = 'delete';
17+
export const ADD = 'add';
18+
export type ADD = typeof ADD;
19+
export const UPDATE = 'update';
20+
export type UPDATE = typeof UPDATE;
21+
export const CHANGE = 'change';
22+
export type CHANGE = typeof CHANGE;
23+
export const DELETE = 'delete';
24+
export type DELETE = typeof DELETE;
2125

2226
// This is issued when a watch connects or reconnects
23-
export const CONNECT: string = 'connect';
27+
export const CONNECT = 'connect';
28+
export type CONNECT = typeof CONNECT;
2429
// This is issued when there is an error
25-
export const ERROR: string = 'error';
30+
export const ERROR = 'error';
31+
export type ERROR = typeof ERROR;
2632

2733
export interface Informer<T> {
28-
on(verb: string, fn: ObjectCallback<T>): void;
29-
off(verb: string, fn: ObjectCallback<T>): void;
34+
on(verb: ADD | UPDATE | DELETE | CHANGE, cb: ObjectCallback<T>): void;
35+
on(verb: ERROR | CONNECT, cb: ErrorCallback): void;
36+
off(verb: ADD | UPDATE | DELETE | CHANGE, cb: ObjectCallback<T>): void;
37+
off(verb: ERROR | CONNECT, cb: ErrorCallback): void;
3038
start(): Promise<void>;
3139
stop(): Promise<void>;
3240
}

0 commit comments

Comments
 (0)