@juit/pgproxy-client 1.4.39 → 1.5.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/dist/websocket.cjs +5 -11
- package/dist/websocket.cjs.map +1 -1
- package/dist/websocket.d.ts +2 -26
- package/dist/websocket.mjs +5 -11
- package/dist/websocket.mjs.map +1 -1
- package/package.json +2 -2
- package/src/websocket.ts +11 -53
package/dist/websocket.cjs
CHANGED
|
@@ -25,12 +25,6 @@ __export(websocket_exports, {
|
|
|
25
25
|
module.exports = __toCommonJS(websocket_exports);
|
|
26
26
|
var import_assert = require("./assert.cjs");
|
|
27
27
|
var import_provider = require("./provider.cjs");
|
|
28
|
-
var pgWebSocketReadyState = {
|
|
29
|
-
CONNECTING: 0,
|
|
30
|
-
OPEN: 1,
|
|
31
|
-
CLOSING: 2,
|
|
32
|
-
CLOSED: 3
|
|
33
|
-
};
|
|
34
28
|
function msg(message, defaultMessage) {
|
|
35
29
|
return message || defaultMessage;
|
|
36
30
|
}
|
|
@@ -101,8 +95,8 @@ var WebSocketConnectionImpl = class {
|
|
|
101
95
|
/** Our error, set also when the websocket is closed */
|
|
102
96
|
_error;
|
|
103
97
|
close() {
|
|
104
|
-
if (this._socket.readyState ===
|
|
105
|
-
if (this._socket.readyState ===
|
|
98
|
+
if (this._socket.readyState === WebSocket.CLOSED) return;
|
|
99
|
+
if (this._socket.readyState === WebSocket.CLOSING) return;
|
|
106
100
|
this._socket.close(1e3, "Normal termination");
|
|
107
101
|
}
|
|
108
102
|
query(query, params = []) {
|
|
@@ -130,8 +124,8 @@ var WebSocketProvider = class extends import_provider.AbstractPGProvider {
|
|
|
130
124
|
*/
|
|
131
125
|
_connectWebSocket(socket) {
|
|
132
126
|
return new Promise((resolve, reject) => {
|
|
133
|
-
if (socket.readyState ===
|
|
134
|
-
if (socket.readyState !==
|
|
127
|
+
if (socket.readyState === WebSocket.OPEN) return resolve(socket);
|
|
128
|
+
if (socket.readyState !== WebSocket.CONNECTING) {
|
|
135
129
|
return reject(new Error(`Invalid WebSocket ready state ${socket.readyState}`));
|
|
136
130
|
}
|
|
137
131
|
const onopen = () => {
|
|
@@ -140,7 +134,7 @@ var WebSocketProvider = class extends import_provider.AbstractPGProvider {
|
|
|
140
134
|
};
|
|
141
135
|
const onerror = (event) => {
|
|
142
136
|
removeEventListeners();
|
|
143
|
-
if (
|
|
137
|
+
if (event.error) return reject(event.error);
|
|
144
138
|
reject(new Error("Uknown error opening WebSocket"));
|
|
145
139
|
};
|
|
146
140
|
const onclose = (event) => {
|
package/dist/websocket.cjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/websocket.ts"],
|
|
4
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAAuB;AACvB,sBAAmC;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/dist/websocket.d.ts
CHANGED
|
@@ -1,28 +1,5 @@
|
|
|
1
1
|
import { AbstractPGProvider } from './provider';
|
|
2
2
|
import type { PGProvider, PGProviderConnection, PGProviderResult } from './provider';
|
|
3
|
-
interface PGWebSocketCloseEvent {
|
|
4
|
-
readonly code: number;
|
|
5
|
-
readonly reason: string;
|
|
6
|
-
}
|
|
7
|
-
interface PGWebSocketMessageEvent {
|
|
8
|
-
readonly data?: any;
|
|
9
|
-
}
|
|
10
|
-
interface PGWebSocketErrorEvent {
|
|
11
|
-
readonly error?: any;
|
|
12
|
-
}
|
|
13
|
-
export interface PGWebSocket {
|
|
14
|
-
addEventListener(event: 'close', handler: (event: PGWebSocketCloseEvent) => void): void;
|
|
15
|
-
addEventListener(event: 'error', handler: (event: PGWebSocketErrorEvent) => void): void;
|
|
16
|
-
addEventListener(event: 'message', handler: (event: PGWebSocketMessageEvent) => void): void;
|
|
17
|
-
addEventListener(event: 'open', handler: () => void): void;
|
|
18
|
-
removeEventListener(event: 'close', handler: (event: PGWebSocketCloseEvent) => void): void;
|
|
19
|
-
removeEventListener(event: 'error', handler: (event: PGWebSocketErrorEvent) => void): void;
|
|
20
|
-
removeEventListener(event: 'message', handler: (event: PGWebSocketMessageEvent) => void): void;
|
|
21
|
-
removeEventListener(event: 'open', handler: () => void): void;
|
|
22
|
-
readonly readyState: number;
|
|
23
|
-
send(message: string): void;
|
|
24
|
-
close(code?: number, reason?: string): void;
|
|
25
|
-
}
|
|
26
3
|
/** A connection to the database backed by a `WebSocket` */
|
|
27
4
|
export interface WebSocketConnection extends PGProviderConnection {
|
|
28
5
|
/** Close this connection and the underlying `WebSocket` */
|
|
@@ -46,16 +23,15 @@ export declare abstract class WebSocketProvider extends AbstractPGProvider imple
|
|
|
46
23
|
* `close`, or `error` events before the event loop has a chance to resolve
|
|
47
24
|
* the `Promise` asynchronously.
|
|
48
25
|
*/
|
|
49
|
-
protected abstract _getWebSocket(): Promise<
|
|
26
|
+
protected abstract _getWebSocket(): Promise<WebSocket>;
|
|
50
27
|
/**
|
|
51
28
|
* Handle the initial connection of a WebSocket.
|
|
52
29
|
*
|
|
53
30
|
* This method should be called _synchronously_ by {@link WebSocketProvider._getWebSocket} as
|
|
54
31
|
* soon as the WebSocket instance is created.
|
|
55
32
|
*/
|
|
56
|
-
protected _connectWebSocket<S extends
|
|
33
|
+
protected _connectWebSocket<S extends WebSocket>(socket: S): Promise<S>;
|
|
57
34
|
acquire(): Promise<WebSocketConnection>;
|
|
58
35
|
release(connection: WebSocketConnection): Promise<void>;
|
|
59
36
|
destroy(): Promise<void>;
|
|
60
37
|
}
|
|
61
|
-
export {};
|
package/dist/websocket.mjs
CHANGED
|
@@ -1,12 +1,6 @@
|
|
|
1
1
|
// websocket.ts
|
|
2
2
|
import { assert } from "./assert.mjs";
|
|
3
3
|
import { AbstractPGProvider } from "./provider.mjs";
|
|
4
|
-
var pgWebSocketReadyState = {
|
|
5
|
-
CONNECTING: 0,
|
|
6
|
-
OPEN: 1,
|
|
7
|
-
CLOSING: 2,
|
|
8
|
-
CLOSED: 3
|
|
9
|
-
};
|
|
10
4
|
function msg(message, defaultMessage) {
|
|
11
5
|
return message || defaultMessage;
|
|
12
6
|
}
|
|
@@ -77,8 +71,8 @@ var WebSocketConnectionImpl = class {
|
|
|
77
71
|
/** Our error, set also when the websocket is closed */
|
|
78
72
|
_error;
|
|
79
73
|
close() {
|
|
80
|
-
if (this._socket.readyState ===
|
|
81
|
-
if (this._socket.readyState ===
|
|
74
|
+
if (this._socket.readyState === WebSocket.CLOSED) return;
|
|
75
|
+
if (this._socket.readyState === WebSocket.CLOSING) return;
|
|
82
76
|
this._socket.close(1e3, "Normal termination");
|
|
83
77
|
}
|
|
84
78
|
query(query, params = []) {
|
|
@@ -106,8 +100,8 @@ var WebSocketProvider = class extends AbstractPGProvider {
|
|
|
106
100
|
*/
|
|
107
101
|
_connectWebSocket(socket) {
|
|
108
102
|
return new Promise((resolve, reject) => {
|
|
109
|
-
if (socket.readyState ===
|
|
110
|
-
if (socket.readyState !==
|
|
103
|
+
if (socket.readyState === WebSocket.OPEN) return resolve(socket);
|
|
104
|
+
if (socket.readyState !== WebSocket.CONNECTING) {
|
|
111
105
|
return reject(new Error(`Invalid WebSocket ready state ${socket.readyState}`));
|
|
112
106
|
}
|
|
113
107
|
const onopen = () => {
|
|
@@ -116,7 +110,7 @@ var WebSocketProvider = class extends AbstractPGProvider {
|
|
|
116
110
|
};
|
|
117
111
|
const onerror = (event) => {
|
|
118
112
|
removeEventListeners();
|
|
119
|
-
if (
|
|
113
|
+
if (event.error) return reject(event.error);
|
|
120
114
|
reject(new Error("Uknown error opening WebSocket"));
|
|
121
115
|
};
|
|
122
116
|
const onclose = (event) => {
|
package/dist/websocket.mjs.map
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/websocket.ts"],
|
|
4
|
-
"mappings": ";AAAA,SAAS,cAAc;AACvB,SAAS,0BAA0B;
|
|
4
|
+
"mappings": "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",
|
|
5
5
|
"names": []
|
|
6
6
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@juit/pgproxy-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.5.0",
|
|
4
4
|
"main": "./dist/index.cjs",
|
|
5
5
|
"module": "./dist/index.mjs",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/juitnow/juit-pgproxy#readme",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@juit/pgproxy-types": "1.
|
|
38
|
+
"@juit/pgproxy-types": "1.5.0"
|
|
39
39
|
},
|
|
40
40
|
"directories": {
|
|
41
41
|
"test": "test"
|
package/src/websocket.ts
CHANGED
|
@@ -4,48 +4,6 @@ import { AbstractPGProvider } from './provider'
|
|
|
4
4
|
import type { Request, Response } from '@juit/pgproxy-server'
|
|
5
5
|
import type { PGProvider, PGProviderConnection, PGProviderResult } from './provider'
|
|
6
6
|
|
|
7
|
-
/* ========================================================================== *
|
|
8
|
-
* WEBSOCKET TYPES: in order to work with both WHATWG WebSockets and NodeJS's *
|
|
9
|
-
* "ws" package, let's abstract our _minimal_ requirement for implementation *
|
|
10
|
-
* ensuring type compatibility between the two variants. *
|
|
11
|
-
* ========================================================================== */
|
|
12
|
-
|
|
13
|
-
const pgWebSocketReadyState = {
|
|
14
|
-
CONNECTING: 0,
|
|
15
|
-
OPEN: 1,
|
|
16
|
-
CLOSING: 2,
|
|
17
|
-
CLOSED: 3,
|
|
18
|
-
} as const
|
|
19
|
-
|
|
20
|
-
interface PGWebSocketCloseEvent {
|
|
21
|
-
readonly code: number;
|
|
22
|
-
readonly reason: string;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
interface PGWebSocketMessageEvent {
|
|
26
|
-
readonly data?: any
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
interface PGWebSocketErrorEvent {
|
|
30
|
-
readonly error?: any
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
export interface PGWebSocket {
|
|
34
|
-
addEventListener(event: 'close', handler: (event: PGWebSocketCloseEvent) => void): void
|
|
35
|
-
addEventListener(event: 'error', handler: (event: PGWebSocketErrorEvent) => void): void
|
|
36
|
-
addEventListener(event: 'message', handler: (event: PGWebSocketMessageEvent) => void): void
|
|
37
|
-
addEventListener(event: 'open', handler: () => void): void
|
|
38
|
-
removeEventListener(event: 'close', handler: (event: PGWebSocketCloseEvent) => void): void
|
|
39
|
-
removeEventListener(event: 'error', handler: (event: PGWebSocketErrorEvent) => void): void
|
|
40
|
-
removeEventListener(event: 'message', handler: (event: PGWebSocketMessageEvent) => void): void
|
|
41
|
-
removeEventListener(event: 'open', handler: () => void): void
|
|
42
|
-
|
|
43
|
-
readonly readyState: number;
|
|
44
|
-
|
|
45
|
-
send(message: string): void
|
|
46
|
-
close(code?: number, reason?: string): void;
|
|
47
|
-
}
|
|
48
|
-
|
|
49
7
|
/* ========================================================================== *
|
|
50
8
|
* INTERNALS *
|
|
51
9
|
* ========================================================================== */
|
|
@@ -76,7 +34,7 @@ class WebSocketConnectionImpl implements WebSocketConnection {
|
|
|
76
34
|
/** Our error, set also when the websocket is closed */
|
|
77
35
|
private _error?: any
|
|
78
36
|
|
|
79
|
-
constructor(private _socket:
|
|
37
|
+
constructor(private _socket: WebSocket, private _getRequestId: () => string) {
|
|
80
38
|
/* On close, set the error to "WebSocket Closed" if none was set before */
|
|
81
39
|
_socket.addEventListener('close', (event) => {
|
|
82
40
|
/* Keep the first error we received... */
|
|
@@ -92,7 +50,7 @@ class WebSocketConnectionImpl implements WebSocketConnection {
|
|
|
92
50
|
})
|
|
93
51
|
|
|
94
52
|
/* On errors, make sure that the websocket is closed */
|
|
95
|
-
_socket.addEventListener('error', (event) => {
|
|
53
|
+
_socket.addEventListener('error', (event: Event & { error?: any }) => {
|
|
96
54
|
if (event.error) this._error = event.error
|
|
97
55
|
else this._error = new Error('Unknown WebSocket Error')
|
|
98
56
|
|
|
@@ -143,9 +101,9 @@ class WebSocketConnectionImpl implements WebSocketConnection {
|
|
|
143
101
|
}
|
|
144
102
|
|
|
145
103
|
close(): void {
|
|
146
|
-
if (this._socket.readyState ===
|
|
104
|
+
if (this._socket.readyState === WebSocket.CLOSED) return
|
|
147
105
|
/* coverage ignore if */
|
|
148
|
-
if (this._socket.readyState ===
|
|
106
|
+
if (this._socket.readyState === WebSocket.CLOSING) return
|
|
149
107
|
this._socket.close(1000, 'Normal termination')
|
|
150
108
|
}
|
|
151
109
|
|
|
@@ -204,7 +162,7 @@ export abstract class WebSocketProvider extends AbstractPGProvider implements PG
|
|
|
204
162
|
* `close`, or `error` events before the event loop has a chance to resolve
|
|
205
163
|
* the `Promise` asynchronously.
|
|
206
164
|
*/
|
|
207
|
-
protected abstract _getWebSocket(): Promise<
|
|
165
|
+
protected abstract _getWebSocket(): Promise<WebSocket>
|
|
208
166
|
|
|
209
167
|
/**
|
|
210
168
|
* Handle the initial connection of a WebSocket.
|
|
@@ -212,12 +170,12 @@ export abstract class WebSocketProvider extends AbstractPGProvider implements PG
|
|
|
212
170
|
* This method should be called _synchronously_ by {@link WebSocketProvider._getWebSocket} as
|
|
213
171
|
* soon as the WebSocket instance is created.
|
|
214
172
|
*/
|
|
215
|
-
protected _connectWebSocket<S extends
|
|
173
|
+
protected _connectWebSocket<S extends WebSocket>(socket: S): Promise<S> {
|
|
216
174
|
return new Promise<S>((resolve, reject) => {
|
|
217
175
|
/* The socket might have already connected (or failed connecting) in the
|
|
218
176
|
* time it takes for the event loop to resolve our promise... */
|
|
219
|
-
if (socket.readyState ===
|
|
220
|
-
if (socket.readyState !==
|
|
177
|
+
if (socket.readyState === WebSocket.OPEN) return resolve(socket)
|
|
178
|
+
if (socket.readyState !== WebSocket.CONNECTING) {
|
|
221
179
|
return reject(new Error(`Invalid WebSocket ready state ${socket.readyState}`))
|
|
222
180
|
}
|
|
223
181
|
|
|
@@ -226,13 +184,13 @@ export abstract class WebSocketProvider extends AbstractPGProvider implements PG
|
|
|
226
184
|
resolve(socket)
|
|
227
185
|
}
|
|
228
186
|
|
|
229
|
-
const onerror = (event:
|
|
187
|
+
const onerror = (event: Event & { error?: any }): void => {
|
|
230
188
|
removeEventListeners()
|
|
231
|
-
if (
|
|
189
|
+
if (event.error) return reject(event.error)
|
|
232
190
|
reject(new Error('Uknown error opening WebSocket'))
|
|
233
191
|
}
|
|
234
192
|
|
|
235
|
-
const onclose = (event:
|
|
193
|
+
const onclose = (event: Event & { code?: number; reason?: string }): void => {
|
|
236
194
|
removeEventListeners()
|
|
237
195
|
reject(new Error(`Connection closed with code ${event.code}: ${event.reason}`))
|
|
238
196
|
}
|