websocket-ts 2.3.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +134 -9
- package/dist/cjs/{src/backoff → backoff}/backoff.d.ts +6 -3
- package/dist/{esm/src → cjs}/backoff/backoff.d.ts.map +1 -1
- package/dist/{esm/src → cjs}/backoff/backoff.js.map +1 -1
- package/dist/cjs/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
- package/dist/cjs/backoff/constantbackoff.d.ts.map +1 -0
- package/dist/cjs/backoff/constantbackoff.js +34 -0
- package/dist/cjs/backoff/constantbackoff.js.map +1 -0
- package/dist/{esm/src → cjs}/backoff/exponentialbackoff.d.ts +2 -2
- package/dist/cjs/backoff/exponentialbackoff.d.ts.map +1 -0
- package/dist/cjs/{src/backoff → backoff}/exponentialbackoff.js +19 -27
- package/dist/cjs/backoff/exponentialbackoff.js.map +1 -0
- package/dist/{esm/src → cjs}/backoff/linearbackoff.d.ts +1 -1
- package/dist/cjs/backoff/linearbackoff.d.ts.map +1 -0
- package/dist/cjs/{src/backoff → backoff}/linearbackoff.js +23 -31
- package/dist/cjs/backoff/linearbackoff.js.map +1 -0
- package/dist/cjs/index.d.ts +14 -0
- package/dist/cjs/index.d.ts.map +1 -0
- package/dist/cjs/index.js +20 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/{esm/src → cjs}/queue/array_queue.d.ts +1 -1
- package/dist/cjs/queue/array_queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/array_queue.js +17 -18
- package/dist/cjs/queue/array_queue.js.map +1 -0
- package/dist/cjs/queue/queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/queue.js.map +1 -1
- package/dist/cjs/{src/queue → queue}/ring_queue.d.ts +1 -1
- package/dist/cjs/queue/ring_queue.d.ts.map +1 -0
- package/dist/cjs/{src/queue → queue}/ring_queue.js +25 -22
- package/dist/cjs/queue/ring_queue.js.map +1 -0
- package/dist/cjs/{src/websocket.d.ts → websocket.d.ts} +75 -17
- package/dist/cjs/websocket.d.ts.map +1 -0
- package/dist/cjs/websocket.js +588 -0
- package/dist/cjs/websocket.js.map +1 -0
- package/dist/cjs/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
- package/dist/cjs/websocket_buffer.d.ts.map +1 -0
- package/dist/cjs/websocket_buffer.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_builder.d.ts +14 -5
- package/dist/cjs/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
- package/dist/cjs/websocket_builder.js +236 -0
- package/dist/cjs/websocket_builder.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_event.d.ts +20 -5
- package/dist/cjs/websocket_event.d.ts.map +1 -0
- package/dist/cjs/{src/websocket_event.js → websocket_event.js} +7 -1
- package/dist/cjs/websocket_event.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_options.d.ts +6 -5
- package/dist/cjs/websocket_options.d.ts.map +1 -0
- package/dist/cjs/websocket_options.js.map +1 -0
- package/dist/{esm/src → cjs}/websocket_retry_options.d.ts +3 -2
- package/dist/cjs/websocket_retry_options.d.ts.map +1 -0
- package/dist/cjs/websocket_retry_options.js.map +1 -0
- package/dist/esm/{src/backoff → backoff}/backoff.d.ts +6 -3
- package/dist/{cjs/src → esm}/backoff/backoff.d.ts.map +1 -1
- package/dist/{cjs/src → esm}/backoff/backoff.js.map +1 -1
- package/dist/esm/{src/backoff → backoff}/constantbackoff.d.ts +2 -2
- package/dist/esm/backoff/constantbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/constantbackoff.js +3 -3
- package/dist/esm/backoff/constantbackoff.js.map +1 -0
- package/dist/{cjs/src → esm}/backoff/exponentialbackoff.d.ts +2 -2
- package/dist/esm/backoff/exponentialbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/exponentialbackoff.js +6 -5
- package/dist/esm/backoff/exponentialbackoff.js.map +1 -0
- package/dist/{cjs/src → esm}/backoff/linearbackoff.d.ts +1 -1
- package/dist/esm/backoff/linearbackoff.d.ts.map +1 -0
- package/dist/esm/{src/backoff → backoff}/linearbackoff.js +8 -7
- package/dist/esm/backoff/linearbackoff.js.map +1 -0
- package/dist/esm/index.d.ts +14 -0
- package/dist/esm/index.d.ts.map +1 -0
- package/dist/esm/index.js +9 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/package.json +1 -0
- package/dist/{cjs/src → esm}/queue/array_queue.d.ts +1 -1
- package/dist/esm/queue/array_queue.d.ts.map +1 -0
- package/dist/esm/queue/array_queue.js.map +1 -0
- package/dist/esm/queue/queue.d.ts.map +1 -0
- package/dist/esm/{src/queue → queue}/queue.js.map +1 -1
- package/dist/esm/{src/queue → queue}/ring_queue.d.ts +1 -1
- package/dist/esm/queue/ring_queue.d.ts.map +1 -0
- package/dist/esm/{src/queue → queue}/ring_queue.js +7 -3
- package/dist/esm/queue/ring_queue.js.map +1 -0
- package/dist/esm/{src/websocket.d.ts → websocket.d.ts} +75 -17
- package/dist/esm/websocket.d.ts.map +1 -0
- package/dist/esm/websocket.js +584 -0
- package/dist/esm/websocket.js.map +1 -0
- package/dist/esm/{src/websocket_buffer.d.ts → websocket_buffer.d.ts} +1 -1
- package/dist/esm/websocket_buffer.d.ts.map +1 -0
- package/dist/esm/websocket_buffer.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_builder.d.ts +14 -5
- package/dist/esm/{src/websocket_builder.d.ts.map → websocket_builder.d.ts.map} +1 -1
- package/dist/esm/{src/websocket_builder.js → websocket_builder.js} +36 -17
- package/dist/esm/websocket_builder.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_event.d.ts +20 -5
- package/dist/esm/websocket_event.d.ts.map +1 -0
- package/dist/esm/{src/websocket_event.js → websocket_event.js} +7 -1
- package/dist/esm/websocket_event.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_options.d.ts +6 -5
- package/dist/esm/websocket_options.d.ts.map +1 -0
- package/dist/esm/websocket_options.js.map +1 -0
- package/dist/{cjs/src → esm}/websocket_retry_options.d.ts +3 -2
- package/dist/esm/websocket_retry_options.d.ts.map +1 -0
- package/dist/esm/websocket_retry_options.js.map +1 -0
- package/package.json +35 -16
- package/src/backoff/backoff.ts +6 -3
- package/src/backoff/constantbackoff.ts +4 -4
- package/src/backoff/exponentialbackoff.ts +7 -6
- package/src/backoff/linearbackoff.ts +9 -8
- package/src/index.ts +14 -13
- package/src/queue/array_queue.ts +1 -1
- package/src/queue/ring_queue.ts +12 -8
- package/src/websocket.ts +333 -79
- package/src/websocket_buffer.ts +1 -3
- package/src/websocket_builder.ts +24 -13
- package/src/websocket_event.ts +25 -6
- package/src/websocket_options.ts +6 -5
- package/src/websocket_retry_options.ts +3 -2
- package/dist/cjs/src/backoff/constantbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/constantbackoff.js +0 -43
- package/dist/cjs/src/backoff/constantbackoff.js.map +0 -1
- package/dist/cjs/src/backoff/exponentialbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/exponentialbackoff.js.map +0 -1
- package/dist/cjs/src/backoff/linearbackoff.d.ts.map +0 -1
- package/dist/cjs/src/backoff/linearbackoff.js.map +0 -1
- package/dist/cjs/src/index.d.ts +0 -14
- package/dist/cjs/src/index.d.ts.map +0 -1
- package/dist/cjs/src/index.js +0 -20
- package/dist/cjs/src/index.js.map +0 -1
- package/dist/cjs/src/queue/array_queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/array_queue.js.map +0 -1
- package/dist/cjs/src/queue/queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/ring_queue.d.ts.map +0 -1
- package/dist/cjs/src/queue/ring_queue.js.map +0 -1
- package/dist/cjs/src/websocket.d.ts.map +0 -1
- package/dist/cjs/src/websocket.js +0 -439
- package/dist/cjs/src/websocket.js.map +0 -1
- package/dist/cjs/src/websocket_buffer.d.ts.map +0 -1
- package/dist/cjs/src/websocket_buffer.js.map +0 -1
- package/dist/cjs/src/websocket_builder.js +0 -263
- package/dist/cjs/src/websocket_builder.js.map +0 -1
- package/dist/cjs/src/websocket_event.d.ts.map +0 -1
- package/dist/cjs/src/websocket_event.js.map +0 -1
- package/dist/cjs/src/websocket_options.d.ts.map +0 -1
- package/dist/cjs/src/websocket_options.js.map +0 -1
- package/dist/cjs/src/websocket_retry_options.d.ts.map +0 -1
- package/dist/cjs/src/websocket_retry_options.js.map +0 -1
- package/dist/esm/src/backoff/constantbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/constantbackoff.js.map +0 -1
- package/dist/esm/src/backoff/exponentialbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/exponentialbackoff.js.map +0 -1
- package/dist/esm/src/backoff/linearbackoff.d.ts.map +0 -1
- package/dist/esm/src/backoff/linearbackoff.js.map +0 -1
- package/dist/esm/src/index.d.ts +0 -14
- package/dist/esm/src/index.d.ts.map +0 -1
- package/dist/esm/src/index.js +0 -9
- package/dist/esm/src/index.js.map +0 -1
- package/dist/esm/src/queue/array_queue.d.ts.map +0 -1
- package/dist/esm/src/queue/array_queue.js.map +0 -1
- package/dist/esm/src/queue/queue.d.ts.map +0 -1
- package/dist/esm/src/queue/ring_queue.d.ts.map +0 -1
- package/dist/esm/src/queue/ring_queue.js.map +0 -1
- package/dist/esm/src/websocket.d.ts.map +0 -1
- package/dist/esm/src/websocket.js +0 -361
- package/dist/esm/src/websocket.js.map +0 -1
- package/dist/esm/src/websocket_buffer.d.ts.map +0 -1
- package/dist/esm/src/websocket_buffer.js.map +0 -1
- package/dist/esm/src/websocket_builder.js.map +0 -1
- package/dist/esm/src/websocket_event.d.ts.map +0 -1
- package/dist/esm/src/websocket_event.js.map +0 -1
- package/dist/esm/src/websocket_options.d.ts.map +0 -1
- package/dist/esm/src/websocket_options.js.map +0 -1
- package/dist/esm/src/websocket_retry_options.d.ts.map +0 -1
- package/dist/esm/src/websocket_retry_options.js.map +0 -1
- package/eslint.config.mjs +0 -43
- package/tsconfig.cjs.json +0 -74
- package/tsconfig.esm.json +0 -74
- /package/dist/cjs/{src/backoff → backoff}/backoff.js +0 -0
- /package/dist/cjs/{src/queue → queue}/queue.d.ts +0 -0
- /package/dist/cjs/{src/queue → queue}/queue.js +0 -0
- /package/dist/cjs/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
- /package/dist/cjs/{src/websocket_options.js → websocket_options.js} +0 -0
- /package/dist/cjs/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
- /package/dist/esm/{src/backoff → backoff}/backoff.js +0 -0
- /package/dist/esm/{src/queue → queue}/array_queue.js +0 -0
- /package/dist/esm/{src/queue → queue}/queue.d.ts +0 -0
- /package/dist/esm/{src/queue → queue}/queue.js +0 -0
- /package/dist/esm/{src/websocket_buffer.js → websocket_buffer.js} +0 -0
- /package/dist/esm/{src/websocket_options.js → websocket_options.js} +0 -0
- /package/dist/esm/{src/websocket_retry_options.js → websocket_retry_options.js} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"websocket_builder.d.ts","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"websocket_builder.d.ts","sourceRoot":"","sources":["../../src/websocket_builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EACL,cAAc,EACd,sBAAsB,EACtB,6BAA6B,EAC9B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAc;IAEnC,OAAO,CAAC,UAAU,CAAC,CAAoB;IACvC,OAAO,CAAC,QAAQ,CAAC,CAAmB;IAEpC;;;;OAIG;gBACS,GAAG,EAAE,WAAW;IAI5B;;;;OAIG;IACH,IAAI,GAAG,IAAI,WAAW,CAErB;IAED;;;;OAIG;IACI,aAAa,CAClB,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,GACvC,gBAAgB;IAKnB;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAE7C;IAED;;;;;OAKG;IACI,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,gBAAgB;IAQvE;;;;OAIG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED;;;;OAIG;IACI,oBAAoB,CACzB,gBAAgB,EAAE,OAAO,GAAG,SAAS,GACpC,gBAAgB;IAQnB;;;;OAIG;IACH,IAAI,gBAAgB,IAAI,OAAO,GAAG,SAAS,CAE1C;IAED;;;;OAIG;IACI,WAAW,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,GAAG,gBAAgB;IAQlE;;;;OAIG;IACH,IAAI,OAAO,IAAI,OAAO,GAAG,SAAS,CAEjC;IAED;;;;OAIG;IACI,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,SAAS,GAAG,gBAAgB;IAKxE;;;;OAIG;IACH,IAAI,MAAM,IAAI,eAAe,GAAG,SAAS,CAExC;IAED;;;;;;OAMG;IACI,MAAM,CACX,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,IAAI,CAAC,EACrD,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,OAAO,CACZ,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,EACtD,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,OAAO,CACZ,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,EACtD,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,SAAS,CACd,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,OAAO,CAAC,EACxD,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,OAAO,CACZ,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,KAAK,CAAC,EACtD,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,WAAW,CAChB,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,SAAS,CAAC,EAC1D,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;;;OAMG;IACI,WAAW,CAChB,QAAQ,EAAE,sBAAsB,CAAC,cAAc,CAAC,SAAS,CAAC,EAC1D,OAAO,CAAC,EAAE,6BAA6B,GACtC,gBAAgB;IAKnB;;;;OAIG;IACI,KAAK,IAAI,SAAS;IAIzB;;;;;;OAMG;IACH,OAAO,CAAC,WAAW;CAiBpB"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { WebsocketEvent, } from "./websocket_event";
|
|
2
|
-
import { Websocket } from "./websocket";
|
|
1
|
+
import { WebsocketEvent, } from "./websocket_event.js";
|
|
2
|
+
import { Websocket } from "./websocket.js";
|
|
3
3
|
/**
|
|
4
4
|
* Builder for websockets.
|
|
5
5
|
*/
|
|
@@ -38,13 +38,17 @@ export class WebsocketBuilder {
|
|
|
38
38
|
return this._protocols;
|
|
39
39
|
}
|
|
40
40
|
/**
|
|
41
|
-
* Sets the maximum number of retries before giving up. No limit if undefined.
|
|
41
|
+
* Sets the maximum number of retries before giving up. No limit if undefined or Infinity.
|
|
42
|
+
* Must be Infinity or a non-negative integer, otherwise build() will throw.
|
|
42
43
|
*
|
|
43
44
|
* @param maxRetries the maximum number of retries before giving up
|
|
44
45
|
*/
|
|
45
46
|
withMaxRetries(maxRetries) {
|
|
46
47
|
var _a;
|
|
47
|
-
this._options =
|
|
48
|
+
this._options = {
|
|
49
|
+
...this._options,
|
|
50
|
+
retry: { ...(_a = this._options) === null || _a === void 0 ? void 0 : _a.retry, maxRetries },
|
|
51
|
+
};
|
|
48
52
|
return this;
|
|
49
53
|
}
|
|
50
54
|
/**
|
|
@@ -63,7 +67,10 @@ export class WebsocketBuilder {
|
|
|
63
67
|
*/
|
|
64
68
|
withInstantReconnect(instantReconnect) {
|
|
65
69
|
var _a;
|
|
66
|
-
this._options =
|
|
70
|
+
this._options = {
|
|
71
|
+
...this._options,
|
|
72
|
+
retry: { ...(_a = this._options) === null || _a === void 0 ? void 0 : _a.retry, instantReconnect },
|
|
73
|
+
};
|
|
67
74
|
return this;
|
|
68
75
|
}
|
|
69
76
|
/**
|
|
@@ -82,7 +89,10 @@ export class WebsocketBuilder {
|
|
|
82
89
|
*/
|
|
83
90
|
withBackoff(backoff) {
|
|
84
91
|
var _a;
|
|
85
|
-
this._options =
|
|
92
|
+
this._options = {
|
|
93
|
+
...this._options,
|
|
94
|
+
retry: { ...(_a = this._options) === null || _a === void 0 ? void 0 : _a.retry, backoff },
|
|
95
|
+
};
|
|
86
96
|
return this;
|
|
87
97
|
}
|
|
88
98
|
/**
|
|
@@ -100,7 +110,7 @@ export class WebsocketBuilder {
|
|
|
100
110
|
* @param buffer the buffer to add
|
|
101
111
|
*/
|
|
102
112
|
withBuffer(buffer) {
|
|
103
|
-
this._options =
|
|
113
|
+
this._options = { ...this._options, buffer };
|
|
104
114
|
return this;
|
|
105
115
|
}
|
|
106
116
|
/**
|
|
@@ -178,6 +188,17 @@ export class WebsocketBuilder {
|
|
|
178
188
|
this.addListener(WebsocketEvent.reconnect, listener, options);
|
|
179
189
|
return this;
|
|
180
190
|
}
|
|
191
|
+
/**
|
|
192
|
+
* Adds an 'exhausted' event listener to the websocket. Subsequent calls to this method will add additional listeners that will be
|
|
193
|
+
* called in the order they were added.
|
|
194
|
+
*
|
|
195
|
+
* @param listener the listener to add
|
|
196
|
+
* @param options the listener options
|
|
197
|
+
*/
|
|
198
|
+
onExhausted(listener, options) {
|
|
199
|
+
this.addListener(WebsocketEvent.exhausted, listener, options);
|
|
200
|
+
return this;
|
|
201
|
+
}
|
|
181
202
|
/**
|
|
182
203
|
* Builds the websocket.
|
|
183
204
|
*
|
|
@@ -194,19 +215,17 @@ export class WebsocketBuilder {
|
|
|
194
215
|
* @param options the listener options
|
|
195
216
|
*/
|
|
196
217
|
addListener(event, listener, options) {
|
|
197
|
-
var _a, _b, _c, _d
|
|
198
|
-
this._options =
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
message: (_m = (_l = (_k = this._options) === null || _k === void 0 ? void 0 : _k.listeners) === null || _l === void 0 ? void 0 : _l.message) !== null && _m !== void 0 ? _m : [],
|
|
203
|
-
retry: (_q = (_p = (_o = this._options) === null || _o === void 0 ? void 0 : _o.listeners) === null || _p === void 0 ? void 0 : _p.retry) !== null && _q !== void 0 ? _q : [],
|
|
204
|
-
reconnect: (_t = (_s = (_r = this._options) === null || _r === void 0 ? void 0 : _r.listeners) === null || _s === void 0 ? void 0 : _s.reconnect) !== null && _t !== void 0 ? _t : [],
|
|
218
|
+
var _a, _b, _c, _d;
|
|
219
|
+
this._options = {
|
|
220
|
+
...this._options,
|
|
221
|
+
listeners: {
|
|
222
|
+
...(_a = this._options) === null || _a === void 0 ? void 0 : _a.listeners,
|
|
205
223
|
[event]: [
|
|
206
|
-
...((
|
|
224
|
+
...((_d = (_c = (_b = this._options) === null || _b === void 0 ? void 0 : _b.listeners) === null || _c === void 0 ? void 0 : _c[event]) !== null && _d !== void 0 ? _d : []),
|
|
207
225
|
{ listener, options },
|
|
208
226
|
],
|
|
209
|
-
}
|
|
227
|
+
},
|
|
228
|
+
};
|
|
210
229
|
return this;
|
|
211
230
|
}
|
|
212
231
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_builder.js","sourceRoot":"","sources":["../../src/websocket_builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Websocket } from "./websocket";
|
|
1
|
+
import { Websocket } from "./websocket.js";
|
|
2
2
|
/**
|
|
3
3
|
* Events that can be fired by the websocket.
|
|
4
4
|
*/
|
|
@@ -7,7 +7,11 @@ export declare const WebsocketEvent: {
|
|
|
7
7
|
readonly open: "open";
|
|
8
8
|
/** Fired when the connection is closed. */
|
|
9
9
|
readonly close: "close";
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Fired when the connection has been closed because of an error, such as when some data couldn't be sent.
|
|
12
|
+
* Also fired when an automatic retry fails because the URL provider or the WebSocket constructor threw;
|
|
13
|
+
* that event is an ErrorEvent whose 'error' is the thrown value.
|
|
14
|
+
*/
|
|
11
15
|
readonly error: "error";
|
|
12
16
|
/** Fired when a message is received. */
|
|
13
17
|
readonly message: "message";
|
|
@@ -15,6 +19,8 @@ export declare const WebsocketEvent: {
|
|
|
15
19
|
readonly retry: "retry";
|
|
16
20
|
/** Fired when the websocket successfully reconnects after a connection loss. */
|
|
17
21
|
readonly reconnect: "reconnect";
|
|
22
|
+
/** Fired when the websocket gives up reconnecting after exceeding maxRetries. */
|
|
23
|
+
readonly exhausted: "exhausted";
|
|
18
24
|
};
|
|
19
25
|
/** Union of all event type strings, allowing plain strings like "open" as event types. */
|
|
20
26
|
export type WebsocketEvent = (typeof WebsocketEvent)[keyof typeof WebsocketEvent];
|
|
@@ -26,6 +32,7 @@ export declare namespace WebsocketEvent {
|
|
|
26
32
|
type message = typeof WebsocketEvent.message;
|
|
27
33
|
type retry = typeof WebsocketEvent.retry;
|
|
28
34
|
type reconnect = typeof WebsocketEvent.reconnect;
|
|
35
|
+
type exhausted = typeof WebsocketEvent.exhausted;
|
|
29
36
|
}
|
|
30
37
|
/***
|
|
31
38
|
* Details/properties of a retry-event.
|
|
@@ -35,13 +42,18 @@ export type RetryEventDetail = {
|
|
|
35
42
|
readonly retries: number;
|
|
36
43
|
/** Time (ms) waited since the last connection-retry. */
|
|
37
44
|
readonly backoff: number;
|
|
38
|
-
/** Timestamp of
|
|
45
|
+
/** Timestamp of the last successful connection ('open' event) or undefined if the connection has never been established. */
|
|
39
46
|
readonly lastConnection: Date | undefined;
|
|
40
47
|
};
|
|
41
48
|
/**
|
|
42
49
|
* Properties of a reconnect-event.
|
|
43
50
|
*/
|
|
44
51
|
export type ReconnectEventDetail = Omit<RetryEventDetail, "backoff">;
|
|
52
|
+
/**
|
|
53
|
+
* Properties of an exhausted-event. The 'retries' field holds the number of
|
|
54
|
+
* retries that were performed before giving up, i.e. the configured maxRetries.
|
|
55
|
+
*/
|
|
56
|
+
export type ExhaustedEventDetail = Omit<RetryEventDetail, "backoff">;
|
|
45
57
|
/**
|
|
46
58
|
* Maps websocket events to their corresponding event.
|
|
47
59
|
*/
|
|
@@ -52,6 +64,7 @@ export type WebsocketEventMap = {
|
|
|
52
64
|
[WebsocketEvent.message]: MessageEvent;
|
|
53
65
|
[WebsocketEvent.retry]: CustomEvent<RetryEventDetail>;
|
|
54
66
|
[WebsocketEvent.reconnect]: CustomEvent<ReconnectEventDetail>;
|
|
67
|
+
[WebsocketEvent.exhausted]: CustomEvent<ExhaustedEventDetail>;
|
|
55
68
|
};
|
|
56
69
|
/**
|
|
57
70
|
* Listener for websocket events.
|
|
@@ -59,9 +72,11 @@ export type WebsocketEventMap = {
|
|
|
59
72
|
export type WebsocketEventListener<K extends WebsocketEvent> = (instance: Websocket, ev: WebsocketEventMap[K]) => unknown;
|
|
60
73
|
export type WebsocketEventListenerParams<K extends WebsocketEvent> = Parameters<WebsocketEventListener<K>>;
|
|
61
74
|
/**
|
|
62
|
-
* Options for websocket
|
|
75
|
+
* Options for websocket event listeners. Only 'once' and 'signal' are
|
|
76
|
+
* supported: a websocket has no capture/bubble phases and its events are not
|
|
77
|
+
* cancelable, so the remaining AddEventListenerOptions have no meaning here.
|
|
63
78
|
*/
|
|
64
|
-
export type WebsocketEventListenerOptions =
|
|
79
|
+
export type WebsocketEventListenerOptions = Pick<AddEventListenerOptions, "once" | "signal">;
|
|
65
80
|
/**
|
|
66
81
|
* Listener for websocket events with options.
|
|
67
82
|
*/
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_event.d.ts","sourceRoot":"","sources":["../../src/websocket_event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB,2CAA2C;;IAG3C,2CAA2C;;IAG3C;;;;OAIG;;IAGH,wCAAwC;;IAGxC,2EAA2E;;IAG3E,gFAAgF;;IAGhF,iFAAiF;;CAEzE,CAAC;AAEX,0FAA0F;AAC1F,MAAM,MAAM,cAAc,GACxB,CAAC,OAAO,cAAc,CAAC,CAAC,MAAM,OAAO,cAAc,CAAC,CAAC;AAEvD,0FAA0F;AAE1F,yBAAiB,cAAc,CAAC;IAC9B,KAAY,IAAI,GAAG,OAAO,cAAc,CAAC,IAAI,CAAC;IAC9C,KAAY,KAAK,GAAG,OAAO,cAAc,CAAC,KAAK,CAAC;IAChD,KAAY,KAAK,GAAG,OAAO,cAAc,CAAC,KAAK,CAAC;IAChD,KAAY,OAAO,GAAG,OAAO,cAAc,CAAC,OAAO,CAAC;IACpD,KAAY,KAAK,GAAG,OAAO,cAAc,CAAC,KAAK,CAAC;IAChD,KAAY,SAAS,GAAG,OAAO,cAAc,CAAC,SAAS,CAAC;IACxD,KAAY,SAAS,GAAG,OAAO,cAAc,CAAC,SAAS,CAAC;CACzD;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,wDAAwD;IACxD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IAEzB,4HAA4H;IAC5H,QAAQ,CAAC,cAAc,EAAE,IAAI,GAAG,SAAS,CAAC;CAC3C,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;AAErE;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC;IAC7B,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,UAAU,CAAC;IACnC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;IAC9B,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,YAAY,CAAC;IACvC,CAAC,cAAc,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,gBAAgB,CAAC,CAAC;IACtD,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;IAC9D,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,oBAAoB,CAAC,CAAC;CAC/D,CAAC;AAEF;;KAEK;AACL,MAAM,MAAM,sBAAsB,CAAC,CAAC,SAAS,cAAc,IAAI,CAC7D,QAAQ,EAAE,SAAS,EACnB,EAAE,EAAE,iBAAiB,CAAC,CAAC,CAAC,KACrB,OAAO,CAAC;AAEb,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,cAAc,IAAI,UAAU,CAC7E,sBAAsB,CAAC,CAAC,CAAC,CAC1B,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,6BAA6B,GAAG,IAAI,CAC9C,uBAAuB,EACvB,MAAM,GAAG,QAAQ,CAClB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iCAAiC,CAAC,CAAC,SAAS,cAAc,IAAI;IACxE,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,CAAC,EAAE,6BAA6B,CAAC;CAClD,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,uBAAuB,GAAG;KACnC,CAAC,IAAI,cAAc,GAAG,iCAAiC,CAAC,CAAC,CAAC,EAAE;CAC9D,CAAC"}
|
|
@@ -6,7 +6,11 @@ export const WebsocketEvent = {
|
|
|
6
6
|
open: "open",
|
|
7
7
|
/** Fired when the connection is closed. */
|
|
8
8
|
close: "close",
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Fired when the connection has been closed because of an error, such as when some data couldn't be sent.
|
|
11
|
+
* Also fired when an automatic retry fails because the URL provider or the WebSocket constructor threw;
|
|
12
|
+
* that event is an ErrorEvent whose 'error' is the thrown value.
|
|
13
|
+
*/
|
|
10
14
|
error: "error",
|
|
11
15
|
/** Fired when a message is received. */
|
|
12
16
|
message: "message",
|
|
@@ -14,5 +18,7 @@ export const WebsocketEvent = {
|
|
|
14
18
|
retry: "retry",
|
|
15
19
|
/** Fired when the websocket successfully reconnects after a connection loss. */
|
|
16
20
|
reconnect: "reconnect",
|
|
21
|
+
/** Fired when the websocket gives up reconnecting after exceeding maxRetries. */
|
|
22
|
+
exhausted: "exhausted",
|
|
17
23
|
};
|
|
18
24
|
//# sourceMappingURL=websocket_event.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_event.js","sourceRoot":"","sources":["../../src/websocket_event.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,2CAA2C;IAC3C,IAAI,EAAE,MAAM;IAEZ,2CAA2C;IAC3C,KAAK,EAAE,OAAO;IAEd;;;;OAIG;IACH,KAAK,EAAE,OAAO;IAEd,wCAAwC;IACxC,OAAO,EAAE,SAAS;IAElB,2EAA2E;IAC3E,KAAK,EAAE,OAAO;IAEd,gFAAgF;IAChF,SAAS,EAAE,WAAW;IAEtB,iFAAiF;IACjF,SAAS,EAAE,WAAW;CACd,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { WebsocketBuffer } from "./websocket_buffer";
|
|
2
|
-
import { WebsocketConnectionRetryOptions } from "./websocket_retry_options";
|
|
3
|
-
import { WebsocketEventListeners } from "./websocket_event";
|
|
1
|
+
import { WebsocketBuffer } from "./websocket_buffer.js";
|
|
2
|
+
import { WebsocketConnectionRetryOptions } from "./websocket_retry_options.js";
|
|
3
|
+
import { WebsocketEventListeners } from "./websocket_event.js";
|
|
4
4
|
/**
|
|
5
5
|
* Options that can be passed to the Websocket constructor.
|
|
6
6
|
*/
|
|
@@ -14,8 +14,9 @@ export interface WebsocketOptions {
|
|
|
14
14
|
*/
|
|
15
15
|
readonly retry?: WebsocketConnectionRetryOptions;
|
|
16
16
|
/**
|
|
17
|
-
* The initial listeners to add to the websocket.
|
|
17
|
+
* The initial listeners to add to the websocket. Event-types without
|
|
18
|
+
* listeners can be omitted.
|
|
18
19
|
*/
|
|
19
|
-
readonly listeners?: WebsocketEventListeners
|
|
20
|
+
readonly listeners?: Partial<WebsocketEventListeners>;
|
|
20
21
|
}
|
|
21
22
|
//# sourceMappingURL=websocket_options.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_options.d.ts","sourceRoot":"","sources":["../../src/websocket_options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,+BAA+B,EAAE,MAAM,8BAA8B,CAAC;AAC/E,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC;IAElC;;OAEG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,+BAA+B,CAAC;IAEjD;;;OAGG;IACH,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,uBAAuB,CAAC,CAAC;CACvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_options.js","sourceRoot":"","sources":["../../src/websocket_options.ts"],"names":[],"mappings":""}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
import { Backoff } from "./backoff/backoff";
|
|
1
|
+
import { Backoff } from "./backoff/backoff.js";
|
|
2
2
|
/**
|
|
3
3
|
* Options for the websockets retry-strategy.
|
|
4
4
|
*/
|
|
5
5
|
export interface WebsocketConnectionRetryOptions {
|
|
6
6
|
/**
|
|
7
|
-
* The maximum number of retries before giving up. No limit if undefined.
|
|
7
|
+
* The maximum number of retries before giving up. No limit if undefined or Infinity.
|
|
8
|
+
* Must be Infinity or a non-negative integer; zero means no retry is ever made.
|
|
8
9
|
*/
|
|
9
10
|
readonly maxRetries?: number;
|
|
10
11
|
/**
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_retry_options.d.ts","sourceRoot":"","sources":["../../src/websocket_retry_options.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE/C;;GAEG;AACH,MAAM,WAAW,+BAA+B;IAC9C;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAE7B;;;OAGG;IACH,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAEpC;;OAEG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocket_retry_options.js","sourceRoot":"","sources":["../../src/websocket_retry_options.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
|
@@ -1,10 +1,27 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "websocket-ts",
|
|
3
3
|
"description": "A WebSocket client library with optional reconnecting and buffering capabilities.",
|
|
4
|
-
"version": "
|
|
5
|
-
"main": "dist/cjs/
|
|
6
|
-
"types": "dist/cjs/
|
|
7
|
-
"module": "dist/esm/
|
|
4
|
+
"version": "3.0.0",
|
|
5
|
+
"main": "dist/cjs/index.js",
|
|
6
|
+
"types": "dist/cjs/index.d.ts",
|
|
7
|
+
"module": "dist/esm/index.js",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": {
|
|
11
|
+
"types": "./dist/esm/index.d.ts",
|
|
12
|
+
"default": "./dist/esm/index.js"
|
|
13
|
+
},
|
|
14
|
+
"require": {
|
|
15
|
+
"types": "./dist/cjs/index.d.ts",
|
|
16
|
+
"default": "./dist/cjs/index.js"
|
|
17
|
+
}
|
|
18
|
+
},
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"files": [
|
|
22
|
+
"dist",
|
|
23
|
+
"src"
|
|
24
|
+
],
|
|
8
25
|
"license": "MIT",
|
|
9
26
|
"keywords": [
|
|
10
27
|
"websocket",
|
|
@@ -19,30 +36,32 @@
|
|
|
19
36
|
"url": "github:jjxxs/websocket-ts"
|
|
20
37
|
},
|
|
21
38
|
"scripts": {
|
|
22
|
-
"build": "npm run build:cjs && npm run build:esm",
|
|
39
|
+
"build": "npm run typecheck && npm run build:cjs && npm run build:esm && npm run build:finalize",
|
|
23
40
|
"build:cjs": "tsc -p tsconfig.cjs.json",
|
|
24
41
|
"build:esm": "tsc -p tsconfig.esm.json",
|
|
25
|
-
"
|
|
42
|
+
"build:finalize": "node -e \"const fs=require('fs');fs.writeFileSync('dist/esm/package.json',JSON.stringify({type:'module'}));fs.writeFileSync('dist/cjs/package.json',JSON.stringify({type:'commonjs'}))\"",
|
|
43
|
+
"typecheck": "tsc -p tsconfig.json",
|
|
44
|
+
"lint": "eslint \"./src/**/*.ts\" \"./tests/**/*.ts\"",
|
|
26
45
|
"test": "vitest",
|
|
27
|
-
"test:coverage": "vitest --coverage"
|
|
46
|
+
"test:coverage": "vitest --coverage",
|
|
47
|
+
"docs": "typedoc"
|
|
28
48
|
},
|
|
29
49
|
"devDependencies": {
|
|
30
50
|
"@eslint/eslintrc": "^3.3.5",
|
|
31
|
-
"@eslint/js": "^
|
|
51
|
+
"@eslint/js": "^10.0.1",
|
|
32
52
|
"@types/ws": "^8.18.1",
|
|
33
53
|
"@typescript-eslint/eslint-plugin": "^8.57.2",
|
|
34
54
|
"@typescript-eslint/parser": "^8.57.2",
|
|
35
|
-
"@vitest/coverage-v8": "^
|
|
36
|
-
"
|
|
37
|
-
"cross-env": "^10.1.0",
|
|
38
|
-
"eslint": "^9.39.4",
|
|
55
|
+
"@vitest/coverage-v8": "^4.1.11",
|
|
56
|
+
"eslint": "^10.6.0",
|
|
39
57
|
"eslint-config-prettier": "^10.1.8",
|
|
40
58
|
"eslint-plugin-prettier": "^5.5.5",
|
|
41
|
-
"globals": "^
|
|
59
|
+
"globals": "^17.7.0",
|
|
42
60
|
"jsdom": "^26.1.0",
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
61
|
+
"prettier": "^3.9.4",
|
|
62
|
+
"typedoc": "^0.28.20",
|
|
63
|
+
"typescript": "^6.0.3",
|
|
64
|
+
"vitest": "^4.1.11",
|
|
46
65
|
"ws": "^8.20.0"
|
|
47
66
|
}
|
|
48
67
|
}
|
package/src/backoff/backoff.ts
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* A Backoff produces a series of numbers that are used to determine
|
|
3
3
|
* the delay between connection-retries. Values are expected to be in milliseconds.
|
|
4
|
+
*
|
|
5
|
+
* Implementations must not call back into the websocket (e.g. close() or reconnect()):
|
|
6
|
+
* the websocket calls them in the middle of its lifecycle transitions.
|
|
4
7
|
*/
|
|
5
8
|
export interface Backoff {
|
|
6
9
|
/**
|
|
@@ -9,13 +12,13 @@ export interface Backoff {
|
|
|
9
12
|
readonly retries: number;
|
|
10
13
|
|
|
11
14
|
/**
|
|
12
|
-
* Current number in the series.
|
|
15
|
+
* Current number in the series, i.e. the value that the next call to next() will return.
|
|
13
16
|
*/
|
|
14
17
|
readonly current: number;
|
|
15
18
|
|
|
16
19
|
/**
|
|
17
|
-
*
|
|
18
|
-
* @return the
|
|
20
|
+
* Returns the current number in the series and advances the series by one step.
|
|
21
|
+
* @return the current number in the series
|
|
19
22
|
*/
|
|
20
23
|
next(): number;
|
|
21
24
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Backoff } from "./backoff";
|
|
1
|
+
import { Backoff } from "./backoff.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* ConstantBackoff always returns the same backoff-time.
|
|
@@ -9,11 +9,11 @@ export class ConstantBackoff implements Backoff {
|
|
|
9
9
|
|
|
10
10
|
/**
|
|
11
11
|
* Creates a new ConstantBackoff.
|
|
12
|
-
* @param backoff the backoff-time to return
|
|
12
|
+
* @param backoff the backoff-time (in milliseconds) to return
|
|
13
13
|
*/
|
|
14
14
|
constructor(backoff: number) {
|
|
15
|
-
if (!Number.
|
|
16
|
-
throw new Error("Backoff must be a
|
|
15
|
+
if (!Number.isFinite(backoff) || backoff < 0) {
|
|
16
|
+
throw new Error("Backoff must be a finite, non-negative number");
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
this.backoff = backoff;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Backoff } from "./backoff";
|
|
1
|
+
import { Backoff } from "./backoff.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* ExponentialBackoff increases the backoff-time exponentially.
|
|
@@ -38,15 +38,15 @@ export class ExponentialBackoff implements Backoff {
|
|
|
38
38
|
|
|
39
39
|
/**
|
|
40
40
|
* Creates a new ExponentialBackoff.
|
|
41
|
-
* @param base the base of the exponentiation
|
|
41
|
+
* @param base the base of the exponentiation (in milliseconds)
|
|
42
42
|
* @param expMax the maximum exponent, no bound if undefined
|
|
43
43
|
*/
|
|
44
44
|
constructor(base: number, expMax?: number) {
|
|
45
|
-
if (!Number.
|
|
46
|
-
throw new Error("Base must be a
|
|
45
|
+
if (!Number.isFinite(base) || base < 0) {
|
|
46
|
+
throw new Error("Base must be a finite, non-negative number");
|
|
47
47
|
}
|
|
48
48
|
if (expMax !== undefined && (!Number.isInteger(expMax) || expMax < 0)) {
|
|
49
|
-
throw new Error("ExpMax must be undefined
|
|
49
|
+
throw new Error("ExpMax must be undefined or a non-negative integer");
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
this.base = base;
|
|
@@ -63,12 +63,13 @@ export class ExponentialBackoff implements Backoff {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
next(): number {
|
|
66
|
+
const backoff = this.current;
|
|
66
67
|
this._retries++;
|
|
67
68
|
this.i =
|
|
68
69
|
this.expMax === undefined
|
|
69
70
|
? this.i + 1
|
|
70
71
|
: Math.min(this.i + 1, this.expMax);
|
|
71
|
-
return
|
|
72
|
+
return backoff;
|
|
72
73
|
}
|
|
73
74
|
|
|
74
75
|
reset(): void {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Backoff } from "./backoff";
|
|
1
|
+
import { Backoff } from "./backoff.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* LinearBackoff returns a backoff-time that is incremented by a fixed amount
|
|
@@ -45,14 +45,14 @@ export class LinearBackoff implements Backoff {
|
|
|
45
45
|
* @param max the maximum backoff-time (in milliseconds), no bound if undefined
|
|
46
46
|
*/
|
|
47
47
|
constructor(initial: number, increment: number, max?: number) {
|
|
48
|
-
if (initial < 0) {
|
|
49
|
-
throw new Error("Initial must be a
|
|
48
|
+
if (!Number.isFinite(initial) || initial < 0) {
|
|
49
|
+
throw new Error("Initial must be a finite, non-negative number");
|
|
50
50
|
}
|
|
51
|
-
if (increment < 0) {
|
|
52
|
-
throw new Error("Increment must be a
|
|
51
|
+
if (!Number.isFinite(increment) || increment < 0) {
|
|
52
|
+
throw new Error("Increment must be a finite, non-negative number");
|
|
53
53
|
}
|
|
54
|
-
if (max !== undefined && max < 0) {
|
|
55
|
-
throw new Error("Max must be undefined
|
|
54
|
+
if (max !== undefined && (!Number.isFinite(max) || max < 0)) {
|
|
55
|
+
throw new Error("Max must be undefined or a finite, non-negative number");
|
|
56
56
|
}
|
|
57
57
|
if (max !== undefined && max < initial) {
|
|
58
58
|
throw new Error(
|
|
@@ -76,9 +76,10 @@ export class LinearBackoff implements Backoff {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
next(): number {
|
|
79
|
+
const backoff = this.current;
|
|
79
80
|
this._retries++;
|
|
80
81
|
this.i++;
|
|
81
|
-
return
|
|
82
|
+
return backoff;
|
|
82
83
|
}
|
|
83
84
|
|
|
84
85
|
reset(): void {
|
package/src/index.ts
CHANGED
|
@@ -1,23 +1,24 @@
|
|
|
1
|
-
export { Backoff } from "./backoff/backoff";
|
|
2
|
-
export { ConstantBackoff } from "./backoff/constantbackoff";
|
|
3
|
-
export { ExponentialBackoff } from "./backoff/exponentialbackoff";
|
|
4
|
-
export { LinearBackoff } from "./backoff/linearbackoff";
|
|
5
|
-
export { Queue } from "./queue/queue";
|
|
6
|
-
export { ArrayQueue } from "./queue/array_queue";
|
|
7
|
-
export { RingQueue } from "./queue/ring_queue";
|
|
8
|
-
export { UrlProvider, Websocket } from "./websocket";
|
|
9
|
-
export { WebsocketBuffer } from "./websocket_buffer";
|
|
10
|
-
export { WebsocketBuilder } from "./websocket_builder";
|
|
1
|
+
export { Backoff } from "./backoff/backoff.js";
|
|
2
|
+
export { ConstantBackoff } from "./backoff/constantbackoff.js";
|
|
3
|
+
export { ExponentialBackoff } from "./backoff/exponentialbackoff.js";
|
|
4
|
+
export { LinearBackoff } from "./backoff/linearbackoff.js";
|
|
5
|
+
export { Queue } from "./queue/queue.js";
|
|
6
|
+
export { ArrayQueue } from "./queue/array_queue.js";
|
|
7
|
+
export { RingQueue } from "./queue/ring_queue.js";
|
|
8
|
+
export { UrlProvider, Websocket } from "./websocket.js";
|
|
9
|
+
export { WebsocketBuffer } from "./websocket_buffer.js";
|
|
10
|
+
export { WebsocketBuilder } from "./websocket_builder.js";
|
|
11
11
|
export {
|
|
12
12
|
WebsocketEvent,
|
|
13
13
|
RetryEventDetail,
|
|
14
14
|
ReconnectEventDetail,
|
|
15
|
+
ExhaustedEventDetail,
|
|
15
16
|
WebsocketEventMap,
|
|
16
17
|
WebsocketEventListener,
|
|
17
18
|
WebsocketEventListenerParams,
|
|
18
19
|
WebsocketEventListenerOptions,
|
|
19
20
|
WebsocketEventListenerWithOptions,
|
|
20
21
|
WebsocketEventListeners,
|
|
21
|
-
} from "./websocket_event";
|
|
22
|
-
export { WebsocketOptions } from "./websocket_options";
|
|
23
|
-
export { WebsocketConnectionRetryOptions } from "./websocket_retry_options";
|
|
22
|
+
} from "./websocket_event.js";
|
|
23
|
+
export { WebsocketOptions } from "./websocket_options.js";
|
|
24
|
+
export { WebsocketConnectionRetryOptions } from "./websocket_retry_options.js";
|
package/src/queue/array_queue.ts
CHANGED
package/src/queue/ring_queue.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Queue } from "./queue";
|
|
1
|
+
import { Queue } from "./queue.js";
|
|
2
2
|
|
|
3
3
|
/**
|
|
4
4
|
* A ring queue is a queue that has a fixed capacity. When the queue is full, the oldest element is
|
|
@@ -6,7 +6,7 @@ import { Queue } from "./queue";
|
|
|
6
6
|
* element and effectively remove it from the queue.
|
|
7
7
|
*/
|
|
8
8
|
export class RingQueue<E> implements Queue<E> {
|
|
9
|
-
private readonly elements: E[];
|
|
9
|
+
private readonly elements: (E | undefined)[]; // unoccupied positions hold undefined so read elements can be garbage-collected
|
|
10
10
|
private head: number; // index of the next position to write to
|
|
11
11
|
private tail: number; // index of the next position to read from
|
|
12
12
|
|
|
@@ -15,7 +15,7 @@ export class RingQueue<E> implements Queue<E> {
|
|
|
15
15
|
throw new Error("Capacity must be a positive integer");
|
|
16
16
|
}
|
|
17
17
|
|
|
18
|
-
this.elements = new Array<E>(capacity + 1); // +1 to distinguish between full and empty
|
|
18
|
+
this.elements = new Array<E | undefined>(capacity + 1); // +1 to distinguish between full and empty
|
|
19
19
|
this.head = 0;
|
|
20
20
|
this.tail = 0;
|
|
21
21
|
}
|
|
@@ -24,11 +24,13 @@ export class RingQueue<E> implements Queue<E> {
|
|
|
24
24
|
this.elements[this.head] = element;
|
|
25
25
|
this.head = (this.head + 1) % this.elements.length;
|
|
26
26
|
if (this.head === this.tail) {
|
|
27
|
+
this.elements[this.tail] = undefined; // drop the reference of the overwritten oldest element
|
|
27
28
|
this.tail = (this.tail + 1) % this.elements.length;
|
|
28
29
|
}
|
|
29
30
|
}
|
|
30
31
|
|
|
31
32
|
clear() {
|
|
33
|
+
this.elements.fill(undefined); // drop all references so elements can be garbage-collected
|
|
32
34
|
this.head = 0;
|
|
33
35
|
this.tail = 0;
|
|
34
36
|
}
|
|
@@ -39,7 +41,7 @@ export class RingQueue<E> implements Queue<E> {
|
|
|
39
41
|
i !== this.head;
|
|
40
42
|
i = (i + 1) % this.elements.length
|
|
41
43
|
) {
|
|
42
|
-
fn(this.elements[i]);
|
|
44
|
+
fn(this.elements[i] as E);
|
|
43
45
|
}
|
|
44
46
|
}
|
|
45
47
|
|
|
@@ -56,14 +58,16 @@ export class RingQueue<E> implements Queue<E> {
|
|
|
56
58
|
}
|
|
57
59
|
|
|
58
60
|
peek(): E | undefined {
|
|
59
|
-
return this.isEmpty() ? undefined : this.elements[this.tail];
|
|
61
|
+
return this.isEmpty() ? undefined : (this.elements[this.tail] as E);
|
|
60
62
|
}
|
|
61
63
|
|
|
62
64
|
read(): E | undefined {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
this.tail = (this.tail + 1) % this.elements.length;
|
|
65
|
+
if (this.isEmpty()) {
|
|
66
|
+
return undefined; // empty is determined by the indices, so stored 'undefined' elements read correctly
|
|
66
67
|
}
|
|
68
|
+
const e = this.elements[this.tail] as E;
|
|
69
|
+
this.elements[this.tail] = undefined; // drop the reference so the element can be garbage-collected
|
|
70
|
+
this.tail = (this.tail + 1) % this.elements.length;
|
|
67
71
|
return e;
|
|
68
72
|
}
|
|
69
73
|
}
|