@opra/socketio 1.20.0 → 1.21.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/cjs/socketio-adapter.js +60 -42
- package/esm/socketio-adapter.js +60 -42
- package/package.json +3 -3
package/cjs/socketio-adapter.js
CHANGED
|
@@ -32,6 +32,32 @@ class SocketioAdapter extends core_1.PlatformAdapter {
|
|
|
32
32
|
this._initSocket(socket);
|
|
33
33
|
this.emit('connection', socket, this);
|
|
34
34
|
});
|
|
35
|
+
}
|
|
36
|
+
get api() {
|
|
37
|
+
return this.document.getWsApi();
|
|
38
|
+
}
|
|
39
|
+
get scope() {
|
|
40
|
+
return this._scope;
|
|
41
|
+
}
|
|
42
|
+
async close() {
|
|
43
|
+
return this.server.close().finally(() => {
|
|
44
|
+
this._controllerInstances.clear();
|
|
45
|
+
this._eventsRegByName.clear();
|
|
46
|
+
this._eventsRegByPattern = [];
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Attaches socket.io to a server or port.
|
|
51
|
+
*
|
|
52
|
+
* @param srv - server or port
|
|
53
|
+
* @param opts - options passed to engine.io
|
|
54
|
+
* @return self
|
|
55
|
+
*/
|
|
56
|
+
listen(srv, opts) {
|
|
57
|
+
if (this.server.httpServer?.listening)
|
|
58
|
+
throw new Error('Server is already listening');
|
|
59
|
+
if (opts?.path)
|
|
60
|
+
this.server.path(opts?.path);
|
|
35
61
|
for (const contDef of this.api.controllers.values()) {
|
|
36
62
|
for (const oprDef of contDef.operations.values()) {
|
|
37
63
|
const fn = contDef.instance[oprDef.name];
|
|
@@ -50,8 +76,8 @@ class SocketioAdapter extends core_1.PlatformAdapter {
|
|
|
50
76
|
this._eventsRegByPattern.push(reg);
|
|
51
77
|
/** Generate decoders */
|
|
52
78
|
if (oprDef.arguments?.length) {
|
|
53
|
-
for (const
|
|
54
|
-
reg.decoders.push(
|
|
79
|
+
for (const arg of oprDef.arguments) {
|
|
80
|
+
reg.decoders.push(arg.type.generateCodec('decode', {
|
|
55
81
|
scope: this.scope,
|
|
56
82
|
ignoreReadonlyFields: true,
|
|
57
83
|
}));
|
|
@@ -66,28 +92,6 @@ class SocketioAdapter extends core_1.PlatformAdapter {
|
|
|
66
92
|
}
|
|
67
93
|
}
|
|
68
94
|
}
|
|
69
|
-
}
|
|
70
|
-
get api() {
|
|
71
|
-
return this.document.getWsApi();
|
|
72
|
-
}
|
|
73
|
-
get scope() {
|
|
74
|
-
return this._scope;
|
|
75
|
-
}
|
|
76
|
-
close() {
|
|
77
|
-
return this.server.close();
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* Attaches socket.io to a server or port.
|
|
81
|
-
*
|
|
82
|
-
* @param srv - server or port
|
|
83
|
-
* @param opts - options passed to engine.io
|
|
84
|
-
* @return self
|
|
85
|
-
*/
|
|
86
|
-
listen(srv, opts) {
|
|
87
|
-
if (this.server.httpServer?.listening)
|
|
88
|
-
throw new Error('Server is already listening');
|
|
89
|
-
if (opts?.path)
|
|
90
|
-
this.server.path(opts?.path);
|
|
91
95
|
this.server.listen(srv, opts);
|
|
92
96
|
return this;
|
|
93
97
|
}
|
|
@@ -104,26 +108,40 @@ class SocketioAdapter extends core_1.PlatformAdapter {
|
|
|
104
108
|
this._eventsRegByPattern.find(r => r.event.test(event));
|
|
105
109
|
if (!reg) {
|
|
106
110
|
if (callback)
|
|
107
|
-
callback(new
|
|
111
|
+
callback(new common_1.OpraException(`Unknown event "${event}"`));
|
|
108
112
|
return;
|
|
109
113
|
}
|
|
110
|
-
const parameters = callback ? args.slice(0, -1) : args;
|
|
111
114
|
Promise.resolve().then(async () => {
|
|
112
|
-
const ctx = new socketio_context_js_1.SocketioContext({
|
|
113
|
-
__adapter: this,
|
|
114
|
-
__contDef: reg.contDef,
|
|
115
|
-
__oprDef: reg.oprDef,
|
|
116
|
-
__controller: reg.contDef.instance,
|
|
117
|
-
__handler: reg.handler,
|
|
118
|
-
socket,
|
|
119
|
-
event,
|
|
120
|
-
parameters,
|
|
121
|
-
});
|
|
122
115
|
try {
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
116
|
+
const inputParameters = callback ? args.slice(0, -1) : args;
|
|
117
|
+
const ctx = new socketio_context_js_1.SocketioContext({
|
|
118
|
+
__adapter: this,
|
|
119
|
+
__contDef: reg.contDef,
|
|
120
|
+
__oprDef: reg.oprDef,
|
|
121
|
+
__controller: reg.contDef.instance,
|
|
122
|
+
__handler: reg.handler,
|
|
123
|
+
socket,
|
|
124
|
+
event,
|
|
125
|
+
});
|
|
126
|
+
const callArgs = [ctx];
|
|
127
|
+
let i = 0;
|
|
128
|
+
for (const prm of inputParameters) {
|
|
129
|
+
try {
|
|
130
|
+
const v = reg.decoders[i](prm);
|
|
131
|
+
const arg = reg.oprDef.arguments[i];
|
|
132
|
+
ctx.parameters.push(v);
|
|
133
|
+
if (arg.parameterIndex != null)
|
|
134
|
+
callArgs[arg.parameterIndex] = v;
|
|
135
|
+
else
|
|
136
|
+
callArgs.push(v);
|
|
137
|
+
}
|
|
138
|
+
catch (err) {
|
|
139
|
+
err.message = `Failed to decode parameter ${i} of event "${event}": ${err.message}`;
|
|
140
|
+
throw err;
|
|
141
|
+
}
|
|
142
|
+
i++;
|
|
143
|
+
}
|
|
144
|
+
let x = await reg.handler.apply(reg.contDef.instance, callArgs);
|
|
127
145
|
if (reg.encoder)
|
|
128
146
|
x = reg.encoder(x);
|
|
129
147
|
if (x != null && typeof x !== 'string')
|
|
@@ -131,8 +149,8 @@ class SocketioAdapter extends core_1.PlatformAdapter {
|
|
|
131
149
|
callback(x);
|
|
132
150
|
}
|
|
133
151
|
catch (err) {
|
|
134
|
-
const error = new common_1.OpraException(err);
|
|
135
|
-
callback(error);
|
|
152
|
+
const error = err instanceof common_1.OpraException ? err : new common_1.OpraException(err);
|
|
153
|
+
callback({ error });
|
|
136
154
|
}
|
|
137
155
|
});
|
|
138
156
|
});
|
package/esm/socketio-adapter.js
CHANGED
|
@@ -28,6 +28,32 @@ export class SocketioAdapter extends PlatformAdapter {
|
|
|
28
28
|
this._initSocket(socket);
|
|
29
29
|
this.emit('connection', socket, this);
|
|
30
30
|
});
|
|
31
|
+
}
|
|
32
|
+
get api() {
|
|
33
|
+
return this.document.getWsApi();
|
|
34
|
+
}
|
|
35
|
+
get scope() {
|
|
36
|
+
return this._scope;
|
|
37
|
+
}
|
|
38
|
+
async close() {
|
|
39
|
+
return this.server.close().finally(() => {
|
|
40
|
+
this._controllerInstances.clear();
|
|
41
|
+
this._eventsRegByName.clear();
|
|
42
|
+
this._eventsRegByPattern = [];
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Attaches socket.io to a server or port.
|
|
47
|
+
*
|
|
48
|
+
* @param srv - server or port
|
|
49
|
+
* @param opts - options passed to engine.io
|
|
50
|
+
* @return self
|
|
51
|
+
*/
|
|
52
|
+
listen(srv, opts) {
|
|
53
|
+
if (this.server.httpServer?.listening)
|
|
54
|
+
throw new Error('Server is already listening');
|
|
55
|
+
if (opts?.path)
|
|
56
|
+
this.server.path(opts?.path);
|
|
31
57
|
for (const contDef of this.api.controllers.values()) {
|
|
32
58
|
for (const oprDef of contDef.operations.values()) {
|
|
33
59
|
const fn = contDef.instance[oprDef.name];
|
|
@@ -46,8 +72,8 @@ export class SocketioAdapter extends PlatformAdapter {
|
|
|
46
72
|
this._eventsRegByPattern.push(reg);
|
|
47
73
|
/** Generate decoders */
|
|
48
74
|
if (oprDef.arguments?.length) {
|
|
49
|
-
for (const
|
|
50
|
-
reg.decoders.push(
|
|
75
|
+
for (const arg of oprDef.arguments) {
|
|
76
|
+
reg.decoders.push(arg.type.generateCodec('decode', {
|
|
51
77
|
scope: this.scope,
|
|
52
78
|
ignoreReadonlyFields: true,
|
|
53
79
|
}));
|
|
@@ -62,28 +88,6 @@ export class SocketioAdapter extends PlatformAdapter {
|
|
|
62
88
|
}
|
|
63
89
|
}
|
|
64
90
|
}
|
|
65
|
-
}
|
|
66
|
-
get api() {
|
|
67
|
-
return this.document.getWsApi();
|
|
68
|
-
}
|
|
69
|
-
get scope() {
|
|
70
|
-
return this._scope;
|
|
71
|
-
}
|
|
72
|
-
close() {
|
|
73
|
-
return this.server.close();
|
|
74
|
-
}
|
|
75
|
-
/**
|
|
76
|
-
* Attaches socket.io to a server or port.
|
|
77
|
-
*
|
|
78
|
-
* @param srv - server or port
|
|
79
|
-
* @param opts - options passed to engine.io
|
|
80
|
-
* @return self
|
|
81
|
-
*/
|
|
82
|
-
listen(srv, opts) {
|
|
83
|
-
if (this.server.httpServer?.listening)
|
|
84
|
-
throw new Error('Server is already listening');
|
|
85
|
-
if (opts?.path)
|
|
86
|
-
this.server.path(opts?.path);
|
|
87
91
|
this.server.listen(srv, opts);
|
|
88
92
|
return this;
|
|
89
93
|
}
|
|
@@ -100,26 +104,40 @@ export class SocketioAdapter extends PlatformAdapter {
|
|
|
100
104
|
this._eventsRegByPattern.find(r => r.event.test(event));
|
|
101
105
|
if (!reg) {
|
|
102
106
|
if (callback)
|
|
103
|
-
callback(new
|
|
107
|
+
callback(new OpraException(`Unknown event "${event}"`));
|
|
104
108
|
return;
|
|
105
109
|
}
|
|
106
|
-
const parameters = callback ? args.slice(0, -1) : args;
|
|
107
110
|
Promise.resolve().then(async () => {
|
|
108
|
-
const ctx = new SocketioContext({
|
|
109
|
-
__adapter: this,
|
|
110
|
-
__contDef: reg.contDef,
|
|
111
|
-
__oprDef: reg.oprDef,
|
|
112
|
-
__controller: reg.contDef.instance,
|
|
113
|
-
__handler: reg.handler,
|
|
114
|
-
socket,
|
|
115
|
-
event,
|
|
116
|
-
parameters,
|
|
117
|
-
});
|
|
118
111
|
try {
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
112
|
+
const inputParameters = callback ? args.slice(0, -1) : args;
|
|
113
|
+
const ctx = new SocketioContext({
|
|
114
|
+
__adapter: this,
|
|
115
|
+
__contDef: reg.contDef,
|
|
116
|
+
__oprDef: reg.oprDef,
|
|
117
|
+
__controller: reg.contDef.instance,
|
|
118
|
+
__handler: reg.handler,
|
|
119
|
+
socket,
|
|
120
|
+
event,
|
|
121
|
+
});
|
|
122
|
+
const callArgs = [ctx];
|
|
123
|
+
let i = 0;
|
|
124
|
+
for (const prm of inputParameters) {
|
|
125
|
+
try {
|
|
126
|
+
const v = reg.decoders[i](prm);
|
|
127
|
+
const arg = reg.oprDef.arguments[i];
|
|
128
|
+
ctx.parameters.push(v);
|
|
129
|
+
if (arg.parameterIndex != null)
|
|
130
|
+
callArgs[arg.parameterIndex] = v;
|
|
131
|
+
else
|
|
132
|
+
callArgs.push(v);
|
|
133
|
+
}
|
|
134
|
+
catch (err) {
|
|
135
|
+
err.message = `Failed to decode parameter ${i} of event "${event}": ${err.message}`;
|
|
136
|
+
throw err;
|
|
137
|
+
}
|
|
138
|
+
i++;
|
|
139
|
+
}
|
|
140
|
+
let x = await reg.handler.apply(reg.contDef.instance, callArgs);
|
|
123
141
|
if (reg.encoder)
|
|
124
142
|
x = reg.encoder(x);
|
|
125
143
|
if (x != null && typeof x !== 'string')
|
|
@@ -127,8 +145,8 @@ export class SocketioAdapter extends PlatformAdapter {
|
|
|
127
145
|
callback(x);
|
|
128
146
|
}
|
|
129
147
|
catch (err) {
|
|
130
|
-
const error = new OpraException(err);
|
|
131
|
-
callback(error);
|
|
148
|
+
const error = err instanceof OpraException ? err : new OpraException(err);
|
|
149
|
+
callback({ error });
|
|
132
150
|
}
|
|
133
151
|
});
|
|
134
152
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opra/socketio",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.21.0",
|
|
4
4
|
"description": "Opra Socket.IO adapter",
|
|
5
5
|
"author": "Panates",
|
|
6
6
|
"license": "MIT",
|
|
@@ -14,8 +14,8 @@
|
|
|
14
14
|
"valgen": "^5.18.2"
|
|
15
15
|
},
|
|
16
16
|
"peerDependencies": {
|
|
17
|
-
"@opra/common": "^1.
|
|
18
|
-
"@opra/core": "^1.
|
|
17
|
+
"@opra/common": "^1.21.0",
|
|
18
|
+
"@opra/core": "^1.21.0",
|
|
19
19
|
"socket.io": ">=4.0.0"
|
|
20
20
|
},
|
|
21
21
|
"type": "module",
|