extra-native-websocket 0.5.1 → 0.5.3
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/lib/extra-native-websocket.js +32 -12
- package/lib/extra-native-websocket.js.map +1 -1
- package/lib/utils/auto-reconnect-with-exponential-back-off.js +0 -1
- package/lib/utils/auto-reconnect-with-exponential-back-off.js.map +1 -1
- package/lib/utils/auto-reconnect.js.map +1 -1
- package/package.json +2 -1
- package/src/extra-native-websocket.ts +39 -13
- package/src/utils/auto-reconnect-with-exponential-back-off.ts +1 -1
- package/src/utils/auto-reconnect.ts +1 -0
|
@@ -2,6 +2,7 @@ import { assert } from '@blackglory/prelude';
|
|
|
2
2
|
import { WebSocketError } from './websocket-error.js';
|
|
3
3
|
import { Queue, Emitter } from '@blackglory/structures';
|
|
4
4
|
import { SyncDestructor } from 'extra-defer';
|
|
5
|
+
import { assertNever } from 'assert-never';
|
|
5
6
|
export var BinaryType;
|
|
6
7
|
(function (BinaryType) {
|
|
7
8
|
BinaryType[BinaryType["Blob"] = 0] = "Blob";
|
|
@@ -49,13 +50,15 @@ export class ExtraNativeWebSocket extends Emitter {
|
|
|
49
50
|
this.binaryType = val;
|
|
50
51
|
if (this.instance) {
|
|
51
52
|
switch (val) {
|
|
52
|
-
case BinaryType.Blob:
|
|
53
|
+
case BinaryType.Blob: {
|
|
53
54
|
this.instance.binaryType = 'blob';
|
|
54
55
|
break;
|
|
55
|
-
|
|
56
|
+
}
|
|
57
|
+
case BinaryType.ArrayBuffer: {
|
|
56
58
|
this.instance.binaryType = 'arraybuffer';
|
|
57
59
|
break;
|
|
58
|
-
|
|
60
|
+
}
|
|
61
|
+
default: assertNever(val, 'Unknown binary type');
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
64
|
}
|
|
@@ -99,19 +102,24 @@ export class ExtraNativeWebSocket extends Emitter {
|
|
|
99
102
|
assert(signal);
|
|
100
103
|
destructor.execute();
|
|
101
104
|
ws.close();
|
|
105
|
+
if (self.instance === ws)
|
|
106
|
+
self.instance = undefined;
|
|
102
107
|
reject(signal.reason);
|
|
103
108
|
}
|
|
104
109
|
function errorListener(event) {
|
|
105
110
|
ws.addEventListener('close', closeListener, { once: true });
|
|
106
111
|
function closeListener(event) {
|
|
107
112
|
destructor.execute();
|
|
113
|
+
if (self.instance === ws)
|
|
114
|
+
self.instance = undefined;
|
|
108
115
|
reject(new WebSocketError(event.code, event.reason));
|
|
109
116
|
}
|
|
110
117
|
}
|
|
111
118
|
function openListener(event) {
|
|
112
119
|
ws.removeEventListener('error', errorListener);
|
|
113
|
-
|
|
114
|
-
self.
|
|
120
|
+
while (self.unsentMessages.size) {
|
|
121
|
+
const message = self.unsentMessages.dequeue();
|
|
122
|
+
self.send(message);
|
|
115
123
|
}
|
|
116
124
|
resolve();
|
|
117
125
|
}
|
|
@@ -119,22 +127,34 @@ export class ExtraNativeWebSocket extends Emitter {
|
|
|
119
127
|
}
|
|
120
128
|
close(code, reason) {
|
|
121
129
|
return new Promise(resolve => {
|
|
122
|
-
|
|
130
|
+
const self = this;
|
|
131
|
+
const ws = this.instance;
|
|
132
|
+
if (!ws)
|
|
133
|
+
return resolve();
|
|
123
134
|
switch (this.getState()) {
|
|
124
|
-
case State.Closed:
|
|
135
|
+
case State.Closed: {
|
|
125
136
|
resolve();
|
|
126
137
|
break;
|
|
127
|
-
|
|
128
|
-
|
|
138
|
+
}
|
|
139
|
+
case State.Closing: {
|
|
140
|
+
ws.addEventListener('close', closeListener, { once: true });
|
|
129
141
|
break;
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
142
|
+
}
|
|
143
|
+
default: {
|
|
144
|
+
ws.addEventListener('close', closeListener, { once: true });
|
|
145
|
+
ws.close(code, reason);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
function closeListener() {
|
|
149
|
+
if (self.instance === ws)
|
|
150
|
+
self.instance = undefined;
|
|
151
|
+
resolve();
|
|
133
152
|
}
|
|
134
153
|
});
|
|
135
154
|
}
|
|
136
155
|
send(data) {
|
|
137
156
|
if (this.getState() === State.Connected) {
|
|
157
|
+
assert(this.instance, 'WebSocket is not created');
|
|
138
158
|
this.instance.send(data);
|
|
139
159
|
}
|
|
140
160
|
else {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../src/extra-native-websocket.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"extra-native-websocket.js","sourceRoot":"","sources":["../src/extra-native-websocket.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9E,MAAM,UAAU,mCAAmC,CACjD,EAAwB,EACxB,EACE,YAAY,EACZ,WAAW,GAAG,QAAQ,EACtB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd,EACD,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAElB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,kCAAkC,CAAC;gBAC7C,OAAO;gBACP,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,WAAW;gBACvB,MAAM;gBACN,MAAM;aACP,CAAC,CAAC,CAAA;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,gBAAgB,CAAC;oBACf,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC;oBAC/C,UAAU,CAAC,MAAM;iBAClB,CAAC,CACH,CAAA;gBAED,mBAAmB,EAAE,CAAA;gBACrB,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-reconnect-with-exponential-back-off.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect-with-exponential-back-off.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,kCAAkC,EAAE,MAAM,cAAc,CAAA;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAE9E,MAAM,UAAU,mCAAmC,CACjD,EAAwB,EACxB,EACE,YAAY,EACZ,WAAW,GAAG,QAAQ,EACtB,MAAM,GAAG,CAAC,EACV,MAAM,GAAG,IAAI,EAMd,EACD,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAElB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,IAAI,OAAO,GAAG,CAAC,CAAA;QACf,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,kCAAkC,CAAC;gBAC7C,OAAO;gBACP,WAAW,EAAE,YAAY;gBACzB,UAAU,EAAE,WAAW;gBACvB,MAAM;gBACN,MAAM;aACP,CAAC,CAAC,CAAA;YACH,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,gBAAgB,CAAC;oBACf,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC;oBAC/C,UAAU,CAAC,MAAM;iBAClB,CAAC,CACH,CAAA;gBAED,mBAAmB,EAAE,CAAA;gBACrB,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBAErD,MAAK;YACP,CAAC;YAAC,WAAM,CAAC;gBACP,OAAO,EAAE,CAAA;YACX,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAC3B,EAAwB,EACxB,oBAA4B,CAAC,EAC7B,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAElB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,gBAAgB,CAAC;oBACf,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC;oBAC/C,UAAU,CAAC,MAAM;iBAClB,CAAC,CACH,CAAA;gBAED,mBAAmB,EAAE,CAAA;gBACrB,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"auto-reconnect.js","sourceRoot":"","sources":["../../src/utils/auto-reconnect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,EAAE,qCAAsC;AAC5E,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,UAAU,aAAa,CAC3B,EAAwB,EACxB,oBAA4B,CAAC,EAC7B,cAAuB;IAEvB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IAExC,iFAAiF;IACjF,MAAM,mBAAmB,GAAG,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAChD,IAAI,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;IAEzD,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,EAAE,CAAA;QAElB,mBAAmB,EAAE,CAAA;QACrB,mBAAmB,EAAE,CAAA;IACvB,CAAC,CAAA;IAED,KAAK,UAAU,aAAa;QAC1B,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,MAAM,KAAK,CAAC,iBAAiB,CAAC,CAAA;YAC9B,IAAI,UAAU,CAAC,MAAM,CAAC,OAAO;gBAAE,OAAM;YAErC,IAAI,CAAC;gBACH,MAAM,eAAe,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,KAAK,CAAC,MAAM,CAAC,CAAA;gBAC3D,MAAM,EAAE,CAAC,OAAO,CACd,gBAAgB,CAAC;oBACf,cAAc,IAAI,aAAa,CAAC,cAAc,CAAC;oBAC/C,UAAU,CAAC,MAAM;iBAClB,CAAC,CACH,CAAA;gBAED,mBAAmB,EAAE,CAAA;gBACrB,mBAAmB,GAAG,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC,CAAA;gBAErD,MAAK;YACP,CAAC;YAAC,WAAM,CAAC;gBACP,IAAI,EAAE,CAAA;YACR,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "extra-native-websocket",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.3",
|
|
4
4
|
"description": "",
|
|
5
5
|
"keywords": [],
|
|
6
6
|
"files": [
|
|
@@ -60,6 +60,7 @@
|
|
|
60
60
|
"@blackglory/prelude": "^0.4.0",
|
|
61
61
|
"@blackglory/structures": "^0.14.10",
|
|
62
62
|
"@blackglory/wait-for": "^0.8.1",
|
|
63
|
+
"assert-never": "^1.4.0",
|
|
63
64
|
"extra-abort": "^0.4.0",
|
|
64
65
|
"extra-defer": "^0.3.1",
|
|
65
66
|
"extra-promise": "^7.0.0"
|
|
@@ -2,6 +2,7 @@ import { assert } from '@blackglory/prelude'
|
|
|
2
2
|
import { WebSocketError } from './websocket-error.js'
|
|
3
3
|
import { Queue, Emitter } from '@blackglory/structures'
|
|
4
4
|
import { SyncDestructor } from 'extra-defer'
|
|
5
|
+
import { assertNever } from 'assert-never'
|
|
5
6
|
|
|
6
7
|
export enum BinaryType {
|
|
7
8
|
Blob
|
|
@@ -61,13 +62,17 @@ export class ExtraNativeWebSocket extends Emitter<{
|
|
|
61
62
|
|
|
62
63
|
if (this.instance) {
|
|
63
64
|
switch (val) {
|
|
64
|
-
case BinaryType.Blob:
|
|
65
|
+
case BinaryType.Blob: {
|
|
65
66
|
this.instance.binaryType = 'blob'
|
|
67
|
+
|
|
66
68
|
break
|
|
67
|
-
|
|
69
|
+
}
|
|
70
|
+
case BinaryType.ArrayBuffer: {
|
|
68
71
|
this.instance.binaryType = 'arraybuffer'
|
|
72
|
+
|
|
69
73
|
break
|
|
70
|
-
|
|
74
|
+
}
|
|
75
|
+
default: assertNever(val, 'Unknown binary type')
|
|
71
76
|
}
|
|
72
77
|
}
|
|
73
78
|
}
|
|
@@ -121,6 +126,8 @@ export class ExtraNativeWebSocket extends Emitter<{
|
|
|
121
126
|
destructor.execute()
|
|
122
127
|
ws.close()
|
|
123
128
|
|
|
129
|
+
if (self.instance === ws) self.instance = undefined
|
|
130
|
+
|
|
124
131
|
reject(signal.reason)
|
|
125
132
|
}
|
|
126
133
|
|
|
@@ -130,6 +137,8 @@ export class ExtraNativeWebSocket extends Emitter<{
|
|
|
130
137
|
function closeListener(event: CloseEvent): void {
|
|
131
138
|
destructor.execute()
|
|
132
139
|
|
|
140
|
+
if (self.instance === ws) self.instance = undefined
|
|
141
|
+
|
|
133
142
|
reject(new WebSocketError(event.code, event.reason))
|
|
134
143
|
}
|
|
135
144
|
}
|
|
@@ -137,8 +146,9 @@ export class ExtraNativeWebSocket extends Emitter<{
|
|
|
137
146
|
function openListener(event: Event): void {
|
|
138
147
|
ws.removeEventListener('error', errorListener)
|
|
139
148
|
|
|
140
|
-
|
|
141
|
-
self.
|
|
149
|
+
while (self.unsentMessages.size) {
|
|
150
|
+
const message = self.unsentMessages.dequeue()!
|
|
151
|
+
self.send(message)
|
|
142
152
|
}
|
|
143
153
|
resolve()
|
|
144
154
|
}
|
|
@@ -147,25 +157,41 @@ export class ExtraNativeWebSocket extends Emitter<{
|
|
|
147
157
|
|
|
148
158
|
close(code?: number, reason?: string): Promise<void> {
|
|
149
159
|
return new Promise<void>(resolve => {
|
|
150
|
-
|
|
160
|
+
const self = this
|
|
161
|
+
|
|
162
|
+
const ws = this.instance
|
|
163
|
+
if (!ws) return resolve()
|
|
151
164
|
|
|
152
165
|
switch (this.getState()) {
|
|
153
|
-
case State.Closed:
|
|
166
|
+
case State.Closed: {
|
|
154
167
|
resolve()
|
|
168
|
+
|
|
155
169
|
break
|
|
156
|
-
|
|
157
|
-
|
|
170
|
+
}
|
|
171
|
+
case State.Closing: {
|
|
172
|
+
ws.addEventListener('close', closeListener, { once: true })
|
|
173
|
+
|
|
158
174
|
break
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
175
|
+
}
|
|
176
|
+
default: {
|
|
177
|
+
ws.addEventListener('close', closeListener, { once: true })
|
|
178
|
+
ws.close(code, reason)
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function closeListener(): void {
|
|
183
|
+
if (self.instance === ws) self.instance = undefined
|
|
184
|
+
|
|
185
|
+
resolve()
|
|
162
186
|
}
|
|
163
187
|
})
|
|
164
188
|
}
|
|
165
189
|
|
|
166
190
|
send(data: Data): void {
|
|
167
191
|
if (this.getState() === State.Connected) {
|
|
168
|
-
this.instance
|
|
192
|
+
assert(this.instance, 'WebSocket is not created')
|
|
193
|
+
|
|
194
|
+
this.instance.send(data)
|
|
169
195
|
} else {
|
|
170
196
|
this.unsentMessages.enqueue(data)
|
|
171
197
|
}
|