active-connect-ng2 0.0.1
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 +24 -0
- package/esm2020/active-connect-ng2.mjs +5 -0
- package/esm2020/lib/active-connect-ng2.module.mjs +16 -0
- package/esm2020/lib/websocket/client.mjs +259 -0
- package/esm2020/lib/websocket/decorators/function.mjs +49 -0
- package/esm2020/lib/websocket/decorators/websocket/handle.mjs +9 -0
- package/esm2020/lib/websocket/decorators/websocket/on-success.mjs +8 -0
- package/esm2020/lib/websocket/decorators/websocket/outbound.mjs +53 -0
- package/esm2020/lib/websocket/decorators/websocket/route.mjs +21 -0
- package/esm2020/lib/websocket/decorators/websocket/shared.mjs +10 -0
- package/esm2020/lib/websocket/decorators/websocket/websocket-route-service.mjs +2 -0
- package/esm2020/lib/websocket/index.mjs +8 -0
- package/esm2020/lib/websocket/json/json-parser.mjs +23 -0
- package/esm2020/public-api.mjs +6 -0
- package/fesm2015/active-connect-ng2.mjs +459 -0
- package/fesm2015/active-connect-ng2.mjs.map +1 -0
- package/fesm2020/active-connect-ng2.mjs +453 -0
- package/fesm2020/active-connect-ng2.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/active-connect-ng2.module.d.ts +6 -0
- package/lib/websocket/client.d.ts +44 -0
- package/lib/websocket/decorators/function.d.ts +30 -0
- package/lib/websocket/decorators/websocket/handle.d.ts +1 -0
- package/lib/websocket/decorators/websocket/on-success.d.ts +1 -0
- package/lib/websocket/decorators/websocket/outbound.d.ts +1 -0
- package/lib/websocket/decorators/websocket/route.d.ts +1 -0
- package/lib/websocket/decorators/websocket/shared.d.ts +4 -0
- package/lib/websocket/decorators/websocket/websocket-route-service.d.ts +5 -0
- package/lib/websocket/index.d.ts +7 -0
- package/lib/websocket/json/json-parser.d.ts +5 -0
- package/package.json +31 -0
- package/public-api.d.ts +2 -0
package/README.md
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# ActiveConnectNg2
|
|
2
|
+
|
|
3
|
+
This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 15.1.0.
|
|
4
|
+
|
|
5
|
+
## Code scaffolding
|
|
6
|
+
|
|
7
|
+
Run `ng generate component component-name --project active-connect-ng2` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module --project active-connect-ng2`.
|
|
8
|
+
> Note: Don't forget to add `--project active-connect-ng2` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
+
|
|
10
|
+
## Build
|
|
11
|
+
|
|
12
|
+
Run `ng build active-connect-ng2` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
+
|
|
14
|
+
## Publishing
|
|
15
|
+
|
|
16
|
+
After building your library with `ng build active-connect-ng2`, go to the dist folder `cd dist/active-connect-ng2` and run `npm publish`.
|
|
17
|
+
|
|
18
|
+
## Running unit tests
|
|
19
|
+
|
|
20
|
+
Run `ng test active-connect-ng2` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
+
|
|
22
|
+
## Further help
|
|
23
|
+
|
|
24
|
+
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.io/cli) page.
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWNvbm5lY3QtbmcyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9hY3RpdmUtY29ubmVjdC1uZzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class ActiveConnectNg2Module {
|
|
4
|
+
}
|
|
5
|
+
ActiveConnectNg2Module.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
6
|
+
ActiveConnectNg2Module.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module });
|
|
7
|
+
ActiveConnectNg2Module.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module });
|
|
8
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: ActiveConnectNg2Module, decorators: [{
|
|
9
|
+
type: NgModule,
|
|
10
|
+
args: [{
|
|
11
|
+
declarations: [],
|
|
12
|
+
imports: [],
|
|
13
|
+
exports: [],
|
|
14
|
+
}]
|
|
15
|
+
}] });
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aXZlLWNvbm5lY3QtbmcyLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvbGliL2FjdGl2ZS1jb25uZWN0LW5nMi5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFPekMsTUFBTSxPQUFPLHNCQUFzQjs7bUhBQXRCLHNCQUFzQjtvSEFBdEIsc0JBQXNCO29IQUF0QixzQkFBc0I7MkZBQXRCLHNCQUFzQjtrQkFMbEMsUUFBUTttQkFBQztvQkFDUixZQUFZLEVBQUUsRUFBRTtvQkFDaEIsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsT0FBTyxFQUFFLEVBQUU7aUJBQ1oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5ATmdNb2R1bGUoe1xuICBkZWNsYXJhdGlvbnM6IFtdLFxuICBpbXBvcnRzOiBbXSxcbiAgZXhwb3J0czogW10sXG59KVxuZXhwb3J0IGNsYXNzIEFjdGl2ZUNvbm5lY3ROZzJNb2R1bGUge31cbiJdfQ==
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { JsonParser } from './json/json-parser';
|
|
2
|
+
export class WebsocketClient {
|
|
3
|
+
constructor(url) {
|
|
4
|
+
this.url = url;
|
|
5
|
+
this.requestStack = [];
|
|
6
|
+
this._token = '';
|
|
7
|
+
this.connectionEstablishedOnce = false;
|
|
8
|
+
this.messageId = 0;
|
|
9
|
+
this.expectedMethods = new Map();
|
|
10
|
+
this.closed = false;
|
|
11
|
+
if (!url) {
|
|
12
|
+
let protocol;
|
|
13
|
+
let port;
|
|
14
|
+
switch (document.location.protocol) {
|
|
15
|
+
case 'https:': {
|
|
16
|
+
protocol = 'wss:';
|
|
17
|
+
port = ':443';
|
|
18
|
+
break;
|
|
19
|
+
}
|
|
20
|
+
default: {
|
|
21
|
+
protocol = 'ws:';
|
|
22
|
+
port = ':80';
|
|
23
|
+
break;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
this.url = protocol + '//' + document.location.hostname + port + '/wss';
|
|
27
|
+
}
|
|
28
|
+
this.connect(this.url);
|
|
29
|
+
}
|
|
30
|
+
connect(url) {
|
|
31
|
+
if (!this.subject) {
|
|
32
|
+
this.create(url);
|
|
33
|
+
}
|
|
34
|
+
return this.subject;
|
|
35
|
+
}
|
|
36
|
+
get Token() {
|
|
37
|
+
if (!this._token) {
|
|
38
|
+
if (window.localStorage)
|
|
39
|
+
this._token = window.localStorage.getItem('token') || '';
|
|
40
|
+
}
|
|
41
|
+
return this._token;
|
|
42
|
+
}
|
|
43
|
+
set Token(val) {
|
|
44
|
+
this._token = val;
|
|
45
|
+
if (window.localStorage)
|
|
46
|
+
window.localStorage.setItem('token', val);
|
|
47
|
+
}
|
|
48
|
+
set Connected(value) {
|
|
49
|
+
if (value) {
|
|
50
|
+
this.sendBrowserInfoToServer();
|
|
51
|
+
this.resetRequestedState();
|
|
52
|
+
this.auth(this.Token).then(() => {
|
|
53
|
+
this.requestStack.forEach((e) => {
|
|
54
|
+
this.sendToSocket(e.method, e.data);
|
|
55
|
+
this.requestStack = this.requestStack.filter((e1) => e1 != e);
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
if (this.pool && this.pool.WssConnected)
|
|
60
|
+
this.pool.WssConnected = value;
|
|
61
|
+
}
|
|
62
|
+
resetRequestedState() {
|
|
63
|
+
if (this.connectionEstablishedOnce) {
|
|
64
|
+
// reset requested state for outbounds
|
|
65
|
+
WebsocketClient.resetRequestedStateCallbacks.forEach((reset) => {
|
|
66
|
+
reset();
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
this.connectionEstablishedOnce = true;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
static addResetRequestingStateCallback(callback) {
|
|
74
|
+
WebsocketClient.resetRequestedStateCallbacks.push(callback);
|
|
75
|
+
}
|
|
76
|
+
create(url) {
|
|
77
|
+
// create new connection
|
|
78
|
+
this.ws = new WebSocket(url);
|
|
79
|
+
this.ws.onerror = (err) => {
|
|
80
|
+
this.ws.close();
|
|
81
|
+
console.log(err);
|
|
82
|
+
};
|
|
83
|
+
this.ws.onopen = () => {
|
|
84
|
+
this.Connected = true;
|
|
85
|
+
};
|
|
86
|
+
this.ws.onmessage = (e) => {
|
|
87
|
+
this.messageReceived(JsonParser.parse(e.data.toString()));
|
|
88
|
+
};
|
|
89
|
+
this.ws.onclose = () => {
|
|
90
|
+
if (!this.closed) {
|
|
91
|
+
if (this.pool && this.pool.WssConnected)
|
|
92
|
+
this.pool.WssConnected = false;
|
|
93
|
+
setTimeout(() => {
|
|
94
|
+
this.connect(url);
|
|
95
|
+
}, 1000);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
sendToSocket(method, data, dontEnsureTransmission) {
|
|
100
|
+
const messageId = ++this.messageId;
|
|
101
|
+
if (this.ws.readyState != this.ws.OPEN) {
|
|
102
|
+
if (!dontEnsureTransmission)
|
|
103
|
+
this.requestStack.push({ method, data, messageId });
|
|
104
|
+
else
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
this.ws.send(JsonParser.stringify({ method, value: data, messageId }));
|
|
109
|
+
}
|
|
110
|
+
return messageId;
|
|
111
|
+
}
|
|
112
|
+
async auth(token) {
|
|
113
|
+
return this.sendToSocket('auth.token', token);
|
|
114
|
+
}
|
|
115
|
+
send(method, data, dontEnsureTransmission) {
|
|
116
|
+
const messageId = this.sendToSocket(method, data, dontEnsureTransmission || false);
|
|
117
|
+
if (messageId) {
|
|
118
|
+
return this.expectMethod(`m.${method}`, messageId);
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
return new Promise((resolve) => {
|
|
122
|
+
resolve(false);
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
expectMethod(method, messageId) {
|
|
127
|
+
return new Promise((resolve) => {
|
|
128
|
+
if (messageId) {
|
|
129
|
+
this.expectedMethods.set(messageId, [resolve]);
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
if (this.expectedMethods.has(method)) {
|
|
133
|
+
let arr = this.expectedMethods.get(method);
|
|
134
|
+
arr.push(resolve);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
this.expectedMethods.set(method, [resolve]);
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
messageReceived({ method, value, messageId, }) {
|
|
143
|
+
if (messageId) {
|
|
144
|
+
const callback = this.expectedMethods.get(messageId);
|
|
145
|
+
if (callback) {
|
|
146
|
+
const func = callback.shift();
|
|
147
|
+
if (func)
|
|
148
|
+
func(value);
|
|
149
|
+
this.invokeSuccessHandlers(method);
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
const callback = this.expectedMethods.get(method);
|
|
153
|
+
if (callback && callback.length > 0) {
|
|
154
|
+
const func = callback.shift();
|
|
155
|
+
if (func)
|
|
156
|
+
func(value);
|
|
157
|
+
}
|
|
158
|
+
else {
|
|
159
|
+
const out = WebsocketClient.outbounds.get(method);
|
|
160
|
+
if (out) {
|
|
161
|
+
out(value);
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
const handle = WebsocketClient.handles.get(method);
|
|
165
|
+
if (handle) {
|
|
166
|
+
handle.Func(value);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
else {
|
|
173
|
+
throw Error('No MessageId was provided, the connection is not supported.');
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
static expectOutbound(method, callback) {
|
|
177
|
+
WebsocketClient.outbounds.set(method, callback);
|
|
178
|
+
}
|
|
179
|
+
static registerHandle(method, callback) {
|
|
180
|
+
WebsocketClient.handles.set(method, callback);
|
|
181
|
+
}
|
|
182
|
+
get isConnected() {
|
|
183
|
+
if (this.ws)
|
|
184
|
+
return this.ws.readyState == WebSocket.OPEN;
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
sendBrowserInfoToServer() {
|
|
188
|
+
// send browser / os information
|
|
189
|
+
const browser = this.getBrowser();
|
|
190
|
+
const os = this.getOS();
|
|
191
|
+
this.send('___browser', {
|
|
192
|
+
browser: `${browser.name} ${browser.version} ${os}`,
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
getBrowser() {
|
|
196
|
+
// https://www.gregoryvarghese.com/how-to-get-browser-name-and-version-via-javascript/
|
|
197
|
+
var ua = navigator.userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
|
|
198
|
+
if (/trident/i.test(M[1])) {
|
|
199
|
+
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
|
|
200
|
+
return { name: 'IE ', version: tem[1] || '' };
|
|
201
|
+
}
|
|
202
|
+
if (M[1] === 'Chrome') {
|
|
203
|
+
tem = ua.match(/\bOPR\/(\d+)/);
|
|
204
|
+
if (tem != null) {
|
|
205
|
+
return { name: 'Opera', version: tem[1] };
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
|
|
209
|
+
if ((tem = ua.match(/version\/(\d+)/i)) != null) {
|
|
210
|
+
M.splice(1, 1, tem[1]);
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
name: M[0],
|
|
214
|
+
version: M[1],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
getOS() {
|
|
218
|
+
var userAgent = window.navigator.userAgent, platform = window.navigator.platform, macosPlatforms = ['Macintosh', 'MacIntel', 'MacPPC', 'Mac68K'], windowsPlatforms = ['Win32', 'Win64', 'Windows', 'WinCE'], iosPlatforms = ['iPhone', 'iPad', 'iPod'], os = null;
|
|
219
|
+
if (macosPlatforms.indexOf(platform) !== -1) {
|
|
220
|
+
os = 'Mac OS';
|
|
221
|
+
}
|
|
222
|
+
else if (iosPlatforms.indexOf(platform) !== -1) {
|
|
223
|
+
os = 'iOS';
|
|
224
|
+
}
|
|
225
|
+
else if (windowsPlatforms.indexOf(platform) !== -1) {
|
|
226
|
+
os = 'Windows';
|
|
227
|
+
}
|
|
228
|
+
else if (/Android/.test(userAgent)) {
|
|
229
|
+
os = 'Android';
|
|
230
|
+
}
|
|
231
|
+
else if (!os && /Linux/.test(platform)) {
|
|
232
|
+
os = 'Linux';
|
|
233
|
+
}
|
|
234
|
+
return os || '';
|
|
235
|
+
}
|
|
236
|
+
static onSuccess(callback, regexp) {
|
|
237
|
+
this.onSuccessHandlers.push({ callback, regexp });
|
|
238
|
+
}
|
|
239
|
+
invokeSuccessHandlers(method) {
|
|
240
|
+
WebsocketClient.onSuccessHandlers
|
|
241
|
+
.filter((e) => e.regexp.test(method))
|
|
242
|
+
.forEach((e) => {
|
|
243
|
+
var res = e.callback.Func();
|
|
244
|
+
if (res && res.then) {
|
|
245
|
+
res.then();
|
|
246
|
+
}
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
disconnect(restart) {
|
|
250
|
+
if (!restart)
|
|
251
|
+
this.closed = true;
|
|
252
|
+
this.ws.close();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
WebsocketClient.resetRequestedStateCallbacks = [];
|
|
256
|
+
WebsocketClient.outbounds = new Map();
|
|
257
|
+
WebsocketClient.handles = new Map();
|
|
258
|
+
WebsocketClient.onSuccessHandlers = [];
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2NsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFaEQsTUFBTSxPQUFPLGVBQWU7SUFJMUIsWUFBb0IsR0FBWTtRQUFaLFFBQUcsR0FBSCxHQUFHLENBQVM7UUE4QnhCLGlCQUFZLEdBQVUsRUFBRSxDQUFDO1FBRXpCLFdBQU0sR0FBRyxFQUFFLENBQUM7UUE0QlosOEJBQXlCLEdBQVksS0FBSyxDQUFDO1FBc0MzQyxjQUFTLEdBQVcsQ0FBQyxDQUFDO1FBd0N0QixvQkFBZSxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBcUpwRSxXQUFNLEdBQUcsS0FBSyxDQUFDO1FBOVJwQixJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ1IsSUFBSSxRQUFRLENBQUM7WUFDYixJQUFJLElBQUksQ0FBQztZQUNULFFBQVEsUUFBUSxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUU7Z0JBQ2xDLEtBQUssUUFBUSxDQUFDLENBQUM7b0JBQ2IsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFDbEIsSUFBSSxHQUFHLE1BQU0sQ0FBQztvQkFDZCxNQUFNO2lCQUNQO2dCQUNELE9BQU8sQ0FBQyxDQUFDO29CQUNQLFFBQVEsR0FBRyxLQUFLLENBQUM7b0JBQ2pCLElBQUksR0FBRyxLQUFLLENBQUM7b0JBQ2IsTUFBTTtpQkFDUDthQUNGO1lBQ0QsSUFBSSxDQUFDLEdBQUcsR0FBRyxRQUFRLEdBQUcsSUFBSSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsUUFBUSxHQUFHLElBQUksR0FBRyxNQUFNLENBQUM7U0FDekU7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFhLENBQUMsQ0FBQztJQUNuQyxDQUFDO0lB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MUMsSUFBSSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQkFDbkIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQ1o7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFHTSxVQUFVLENBQUMsT0FBaUI7UUFDakMsSUFBSSxDQUFDLE9BQU87WUFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQztRQUNqQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO0lBQ2xCLENBQUM7O0FBeE9jLDRDQUE0QixHQUFlLEVBQUUsQ0FBQztBQXNJOUMseUJBQVMsR0FBcUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUt4RCx1QkFBTyxHQUFtQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBc0VwRCxpQ0FBaUIsR0FHMUIsRUFBRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuL2RlY29yYXRvcnMvZnVuY3Rpb24nO1xyXG5pbXBvcnQgeyBKc29uUGFyc2VyIH0gZnJvbSAnLi9qc29uL2pzb24tcGFyc2VyJztcclxuXHJcbmV4cG9ydCBjbGFzcyBXZWJzb2NrZXRDbGllbnQge1xyXG4gIHdzITogV2ViU29ja2V0O1xyXG4gIHBvb2whOiB7IFdzc0Nvbm5lY3RlZDogYm9vbGVhbiB9IHwgbnVsbDtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSB1cmw/OiBzdHJpbmcpIHtcclxuICAgIGlmICghdXJsKSB7XHJcbiAgICAgIGxldCBwcm90b2NvbDtcclxuICAgICAgbGV0IHBvcnQ7XHJcbiAgICAgIHN3aXRjaCAoZG9jdW1lbnQubG9jYXRpb24ucHJvdG9jb2wpIHtcclxuICAgICAgICBjYXNlICdodHRwczonOiB7XHJcbiAgICAgICAgICBwcm90b2NvbCA9ICd3c3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjQ0Myc7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgZGVmYXVsdDoge1xyXG4gICAgICAgICAgcHJvdG9jb2wgPSAnd3M6JztcclxuICAgICAgICAgIHBvcnQgPSAnOjgwJztcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLnVybCA9IHByb3RvY29sICsgJy8vJyArIGRvY3VtZW50LmxvY2F0aW9uLmhvc3RuYW1lICsgcG9ydCArICcvd3NzJztcclxuICAgIH1cclxuICAgIHRoaXMuY29ubmVjdCh0aGlzLnVybCBhcyBzdHJpbmcpO1xyXG4gIH1cclxuXHJcbiAgc3ViamVjdDogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbm5lY3QodXJsOiBzdHJpbmcpIHtcclxuICAgIGlmICghdGhpcy5zdWJqZWN0KSB7XHJcbiAgICAgIHRoaXMuY3JlYXRlKHVybCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcy5zdWJqZWN0O1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXF1ZXN0U3RhY2s6IGFueVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgX3Rva2VuID0gJyc7XHJcbiAgcHVibGljIGdldCBUb2tlbigpOiBzdHJpbmcge1xyXG4gICAgaWYgKCF0aGlzLl90b2tlbikge1xyXG4gICAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSlcclxuICAgICAgICB0aGlzLl90b2tlbiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2UuZ2V0SXRlbSgndG9rZW4nKSB8fCAnJztcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLl90b2tlbjtcclxuICB9XHJcbiAgcHVibGljIHNldCBUb2tlbih2YWw6IHN0cmluZykge1xyXG4gICAgdGhpcy5fdG9rZW4gPSB2YWw7XHJcbiAgICBpZiAod2luZG93LmxvY2FsU3RvcmFnZSkgd2luZG93LmxvY2FsU3RvcmFnZS5zZXRJdGVtKCd0b2tlbicsIHZhbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNldCBDb25uZWN0ZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICB0aGlzLnNlbmRCcm93c2VySW5mb1RvU2VydmVyKCk7XHJcblxyXG4gICAgICB0aGlzLnJlc2V0UmVxdWVzdGVkU3RhdGUoKTtcclxuICAgICAgdGhpcy5hdXRoKHRoaXMuVG9rZW4pLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLmZvckVhY2goKGUpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2VuZFRvU29ja2V0KGUubWV0aG9kLCBlLmRhdGEpO1xyXG4gICAgICAgICAgdGhpcy5yZXF1ZXN0U3RhY2sgPSB0aGlzLnJlcXVlc3RTdGFjay5maWx0ZXIoKGUxKSA9PiBlMSAhPSBlKTtcclxuICAgICAgICB9KTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBpZiAodGhpcy5wb29sICYmIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQpIHRoaXMucG9vbC5Xc3NDb25uZWN0ZWQgPSB2YWx1ZTtcclxuICB9XHJcbiAgcHJpdmF0ZSBzdGF0aWMgcmVzZXRSZXF1ZXN0ZWRTdGF0ZUNhbGxiYWNrczogRnVuY3Rpb25bXSA9IFtdO1xyXG4gIHByaXZhdGUgY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHByaXZhdGUgcmVzZXRSZXF1ZXN0ZWRTdGF0ZSgpIHtcclxuICAgIGlmICh0aGlzLmNvbm5lY3Rpb25Fc3RhYmxpc2hlZE9uY2UpIHtcclxuICAgICAgLy8gcmVzZXQgcmVxdWVzdGVkIHN0YXRlIGZvciBvdXRib3VuZHNcclxuICAgICAgV2Vic29ja2V0Q2xpZW50LnJlc2V0UmVxdWVzdGVkU3RhdGVDYWxsYmFja3MuZm9yRWFjaCgocmVzZXQpID0+IHtcclxuICAgICAgICByZXNldCgpO1xyXG4gICAgICB9KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuY29ubmVjdGlvbkVzdGFibGlzaGVkT25jZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHB1YmxpYyBzdGF0aWMgYWRkUmVzZXRSZXF1ZXN0aW5nU3RhdGVDYWxsYmFjayhjYWxsYmFjazogRnVuY3Rpb24pIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5yZXNldFJlcXVlc3RlZFN0YXRlQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGUodXJsOiBzdHJpbmcpIHtcclxuICAgIC8vIGNyZWF0ZSBuZXcgY29ubmVjdGlvblxyXG4gICAgdGhpcy53cyA9IG5ldyBXZWJTb2NrZXQodXJsKTtcclxuICAgIHRoaXMud3Mub25lcnJvciA9IChlcnIpID0+IHtcclxuICAgICAgdGhpcy53cy5jbG9zZSgpO1xyXG4gICAgICBjb25zb2xlLmxvZyhlcnIpO1xyXG4gICAgfTtcclxuICAgIHRoaXMud3Mub25vcGVuID0gKCkgPT4ge1xyXG4gICAgICB0aGlzLkNvbm5lY3RlZCA9IHRydWU7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbm1lc3NhZ2UgPSAoZSkgPT4ge1xyXG4gICAgICB0aGlzLm1lc3NhZ2VSZWNlaXZlZChKc29uUGFyc2VyLnBhcnNlKGUuZGF0YS50b1N0cmluZygpKSk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy53cy5vbmNsb3NlID0gKCkgPT4ge1xyXG4gICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMucG9vbCAmJiB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkKSB0aGlzLnBvb2wuV3NzQ29ubmVjdGVkID0gZmFsc2U7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmNvbm5lY3QodXJsKTtcclxuICAgICAgICB9LCAxMDAwKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZUlkOiBudW1iZXIgPSAwO1xyXG4gIHByb3RlY3RlZCBzZW5kVG9Tb2NrZXQoXHJcbiAgICBtZXRob2Q6IHN0cmluZyxcclxuICAgIGRhdGE6IGFueSxcclxuICAgIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbiAgKSB7XHJcbiAgICBjb25zdCBtZXNzYWdlSWQgPSArK3RoaXMubWVzc2FnZUlkO1xyXG4gICAgaWYgKHRoaXMud3MucmVhZHlTdGF0ZSAhPSB0aGlzLndzLk9QRU4pIHtcclxuICAgICAgaWYgKCFkb250RW5zdXJlVHJhbnNtaXNzaW9uKVxyXG4gICAgICAgIHRoaXMucmVxdWVzdFN0YWNrLnB1c2goeyBtZXRob2QsIGRhdGEsIG1lc3NhZ2VJZCB9KTtcclxuICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLndzLnNlbmQoSnNvblBhcnNlci5zdHJpbmdpZnkoeyBtZXRob2QsIHZhbHVlOiBkYXRhLCBtZXNzYWdlSWQgfSkpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1lc3NhZ2VJZDtcclxuICB9XHJcblxyXG4gIGFzeW5jIGF1dGgodG9rZW46IHN0cmluZyk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZW5kVG9Tb2NrZXQoJ2F1dGgudG9rZW4nLCB0b2tlbik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc2VuZChcclxuICAgIG1ldGhvZDogc3RyaW5nLFxyXG4gICAgZGF0YTogYW55LFxyXG4gICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbj86IGJvb2xlYW5cclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgY29uc3QgbWVzc2FnZUlkID0gdGhpcy5zZW5kVG9Tb2NrZXQoXHJcbiAgICAgIG1ldGhvZCxcclxuICAgICAgZGF0YSxcclxuICAgICAgZG9udEVuc3VyZVRyYW5zbWlzc2lvbiB8fCBmYWxzZVxyXG4gICAgKTtcclxuICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuZXhwZWN0TWV0aG9kKGBtLiR7bWV0aG9kfWAsIG1lc3NhZ2VJZCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcclxuICAgICAgICByZXNvbHZlKGZhbHNlKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGV4cGVjdGVkTWV0aG9kczogTWFwPHN0cmluZyB8IG51bWJlciwgQXJyYXk8RnVuY3Rpb24+PiA9IG5ldyBNYXAoKTtcclxuICBwcml2YXRlIGV4cGVjdE1ldGhvZChtZXRob2Q6IHN0cmluZywgbWVzc2FnZUlkPzogbnVtYmVyIHwgbnVsbCkge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGlmIChtZXNzYWdlSWQpIHtcclxuICAgICAgICB0aGlzLmV4cGVjdGVkTWV0aG9kcy5zZXQobWVzc2FnZUlkLCBbcmVzb2x2ZV0pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGlmICh0aGlzLmV4cGVjdGVkTWV0aG9kcy5oYXMobWV0aG9kKSkge1xyXG4gICAgICAgICAgbGV0IGFyciA9IHRoaXMuZXhwZWN0ZWRNZXRob2RzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgKGFyciBhcyBBcnJheTxGdW5jdGlvbj4pLnB1c2gocmVzb2x2ZSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZXhwZWN0ZWRNZXRob2RzLnNldChtZXRob2QsIFtyZXNvbHZlXSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbWVzc2FnZVJlY2VpdmVkKHtcclxuICAgIG1ldGhvZCxcclxuICAgIHZhbHVlLFxyXG4gICAgbWVzc2FnZUlkLFxyXG4gIH06IHtcclxuICAgIG1ldGhvZDogc3RyaW5nO1xyXG4gICAgdmFsdWU6IGFueTtcclxuICAgIG1lc3NhZ2VJZDogbnVtYmVyIHwgbnVsbDtcclxuICB9KSB7XHJcbiAgICBpZiAobWVzc2FnZUlkKSB7XHJcbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1lc3NhZ2VJZCk7XHJcbiAgICAgIGlmIChjYWxsYmFjaykge1xyXG4gICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgIGlmIChmdW5jKSBmdW5jKHZhbHVlKTtcclxuICAgICAgICB0aGlzLmludm9rZVN1Y2Nlc3NIYW5kbGVycyhtZXRob2QpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IGNhbGxiYWNrID0gdGhpcy5leHBlY3RlZE1ldGhvZHMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgaWYgKGNhbGxiYWNrICYmIGNhbGxiYWNrLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgIGNvbnN0IGZ1bmMgPSBjYWxsYmFjay5zaGlmdCgpO1xyXG4gICAgICAgICAgaWYgKGZ1bmMpIGZ1bmModmFsdWUpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBvdXQgPSBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLmdldChtZXRob2QpO1xyXG4gICAgICAgICAgaWYgKG91dCkge1xyXG4gICAgICAgICAgICBvdXQodmFsdWUpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaGFuZGxlID0gV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuZ2V0KG1ldGhvZCk7XHJcbiAgICAgICAgICAgIGlmIChoYW5kbGUpIHtcclxuICAgICAgICAgICAgICAoaGFuZGxlLkZ1bmMgYXMgRnVuY3Rpb24pKHZhbHVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhyb3cgRXJyb3IoXHJcbiAgICAgICAgJ05vIE1lc3NhZ2VJZCB3YXMgcHJvdmlkZWQsIHRoZSBjb25uZWN0aW9uIGlzIG5vdCBzdXBwb3J0ZWQuJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBzdGF0aWMgb3V0Ym91bmRzOiBNYXA8c3RyaW5nLCAoZGF0YTogYW55KSA9PiB2b2lkPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgZXhwZWN0T3V0Ym91bmQobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiAoZGF0YTogYW55KSA9PiB2b2lkKSB7XHJcbiAgICBXZWJzb2NrZXRDbGllbnQub3V0Ym91bmRzLnNldChtZXRob2QsIGNhbGxiYWNrKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIGhhbmRsZXM6IE1hcDxzdHJpbmcsIERlY29yYWJsZUZ1bmN0aW9uPiA9IG5ldyBNYXAoKTtcclxuICBzdGF0aWMgcmVnaXN0ZXJIYW5kbGUobWV0aG9kOiBzdHJpbmcsIGNhbGxiYWNrOiBEZWNvcmFibGVGdW5jdGlvbikge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50LmhhbmRsZXMuc2V0KG1ldGhvZCwgY2FsbGJhY2spO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldCBpc0Nvbm5lY3RlZCgpOiBib29sZWFuIHtcclxuICAgIGlmICh0aGlzLndzKSByZXR1cm4gdGhpcy53cy5yZWFkeVN0YXRlID09IFdlYlNvY2tldC5PUEVOO1xyXG4gICAgcmV0dXJuIHRydWU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHNlbmRCcm93c2VySW5mb1RvU2VydmVyKCkge1xyXG4gICAgLy8gc2VuZCBicm93c2VyIC8gb3MgaW5mb3JtYXRpb25cclxuICAgIGNvbnN0IGJyb3dzZXIgPSB0aGlzLmdldEJyb3dzZXIoKTtcclxuICAgIGNvbnN0IG9zID0gdGhpcy5nZXRPUygpO1xyXG4gICAgdGhpcy5zZW5kKCdfX19icm93c2VyJywge1xyXG4gICAgICBicm93c2VyOiBgJHticm93c2VyLm5hbWV9ICR7YnJvd3Nlci52ZXJzaW9ufSAke29zfWAsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRCcm93c2VyKCk6IHsgbmFtZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmcgfSB7XHJcbiAgICAvLyBodHRwczovL3d3dy5ncmVnb3J5dmFyZ2hlc2UuY29tL2hvdy10by1nZXQtYnJvd3Nlci1uYW1lLWFuZC12ZXJzaW9uLXZpYS1qYXZhc2NyaXB0L1xyXG4gICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgdGVtLFxyXG4gICAgICBNID1cclxuICAgICAgICB1YS5tYXRjaChcclxuICAgICAgICAgIC8ob3BlcmF8Y2hyb21lfHNhZmFyaXxmaXJlZm94fG1zaWV8dHJpZGVudCg/PVxcLykpXFwvP1xccyooXFxkKykvaVxyXG4gICAgICAgICkgfHwgW107XHJcbiAgICBpZiAoL3RyaWRlbnQvaS50ZXN0KE1bMV0pKSB7XHJcbiAgICAgIHRlbSA9IC9cXGJydlsgOl0rKFxcZCspL2cuZXhlYyh1YSkgfHwgW107XHJcbiAgICAgIHJldHVybiB7IG5hbWU6ICdJRSAnLCB2ZXJzaW9uOiB0ZW1bMV0gfHwgJycgfTtcclxuICAgIH1cclxuICAgIGlmIChNWzFdID09PSAnQ2hyb21lJykge1xyXG4gICAgICB0ZW0gPSB1YS5tYXRjaCgvXFxiT1BSXFwvKFxcZCspLyk7XHJcbiAgICAgIGlmICh0ZW0gIT0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiB7IG5hbWU6ICdPcGVyYScsIHZlcnNpb246IHRlbVsxXSB9O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBNID0gTVsyXSA/IFtNWzFdLCBNWzJdXSA6IFtuYXZpZ2F0b3IuYXBwTmFtZSwgbmF2aWdhdG9yLmFwcFZlcnNpb24sICctPyddO1xyXG4gICAgaWYgKCh0ZW0gPSB1YS5tYXRjaCgvdmVyc2lvblxcLyhcXGQrKS9pKSkgIT0gbnVsbCkge1xyXG4gICAgICBNLnNwbGljZSgxLCAxLCB0ZW1bMV0pO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHtcclxuICAgICAgbmFtZTogTVswXSxcclxuICAgICAgdmVyc2lvbjogTVsxXSxcclxuICAgIH07XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0T1MoKTogc3RyaW5nIHtcclxuICAgIHZhciB1c2VyQWdlbnQgPSB3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCxcclxuICAgICAgcGxhdGZvcm0gPSB3aW5kb3cubmF2aWdhdG9yLnBsYXRmb3JtLFxyXG4gICAgICBtYWNvc1BsYXRmb3JtcyA9IFsnTWFjaW50b3NoJywgJ01hY0ludGVsJywgJ01hY1BQQycsICdNYWM2OEsnXSxcclxuICAgICAgd2luZG93c1BsYXRmb3JtcyA9IFsnV2luMzInLCAnV2luNjQnLCAnV2luZG93cycsICdXaW5DRSddLFxyXG4gICAgICBpb3NQbGF0Zm9ybXMgPSBbJ2lQaG9uZScsICdpUGFkJywgJ2lQb2QnXSxcclxuICAgICAgb3MgPSBudWxsO1xyXG5cclxuICAgIGlmIChtYWNvc1BsYXRmb3Jtcy5pbmRleE9mKHBsYXRmb3JtKSAhPT0gLTEpIHtcclxuICAgICAgb3MgPSAnTWFjIE9TJztcclxuICAgIH0gZWxzZSBpZiAoaW9zUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdpT1MnO1xyXG4gICAgfSBlbHNlIGlmICh3aW5kb3dzUGxhdGZvcm1zLmluZGV4T2YocGxhdGZvcm0pICE9PSAtMSkge1xyXG4gICAgICBvcyA9ICdXaW5kb3dzJztcclxuICAgIH0gZWxzZSBpZiAoL0FuZHJvaWQvLnRlc3QodXNlckFnZW50KSkge1xyXG4gICAgICBvcyA9ICdBbmRyb2lkJztcclxuICAgIH0gZWxzZSBpZiAoIW9zICYmIC9MaW51eC8udGVzdChwbGF0Zm9ybSkpIHtcclxuICAgICAgb3MgPSAnTGludXgnO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvcyB8fCAnJztcclxuICB9XHJcblxyXG4gIHByaXZhdGUgc3RhdGljIG9uU3VjY2Vzc0hhbmRsZXJzOiB7XHJcbiAgICBjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb247XHJcbiAgICByZWdleHA6IFJlZ0V4cDtcclxuICB9W10gPSBbXTtcclxuICBwdWJsaWMgc3RhdGljIG9uU3VjY2VzcyhjYWxsYmFjazogRGVjb3JhYmxlRnVuY3Rpb24sIHJlZ2V4cDogUmVnRXhwKSB7XHJcbiAgICB0aGlzLm9uU3VjY2Vzc0hhbmRsZXJzLnB1c2goeyBjYWxsYmFjaywgcmVnZXhwIH0pO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpbnZva2VTdWNjZXNzSGFuZGxlcnMobWV0aG9kOiBzdHJpbmcpIHtcclxuICAgIFdlYnNvY2tldENsaWVudC5vblN1Y2Nlc3NIYW5kbGVyc1xyXG4gICAgICAuZmlsdGVyKChlKSA9PiBlLnJlZ2V4cC50ZXN0KG1ldGhvZCkpXHJcbiAgICAgIC5mb3JFYWNoKChlKSA9PiB7XHJcbiAgICAgICAgdmFyIHJlcyA9IChlLmNhbGxiYWNrLkZ1bmMgYXMgRnVuY3Rpb24pKCk7XHJcbiAgICAgICAgaWYgKHJlcyAmJiByZXMudGhlbikge1xyXG4gICAgICAgICAgcmVzLnRoZW4oKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGNsb3NlZCA9IGZhbHNlO1xyXG4gIHB1YmxpYyBkaXNjb25uZWN0KHJlc3RhcnQ/OiBib29sZWFuKSB7XHJcbiAgICBpZiAoIXJlc3RhcnQpIHRoaXMuY2xvc2VkID0gdHJ1ZTtcclxuICAgIHRoaXMud3MuY2xvc2UoKTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the reference to an object method used for websocket routes and outbounds.
|
|
3
|
+
*/
|
|
4
|
+
export class DecorableFunction {
|
|
5
|
+
/**
|
|
6
|
+
* Creates an instance of DecorableFunction.
|
|
7
|
+
* @param objConfig - The configuration object for the object method.
|
|
8
|
+
* @param objConfig.target - The target object.
|
|
9
|
+
* @param objConfig.propertyKey - The property key of the target object.
|
|
10
|
+
*/
|
|
11
|
+
constructor(objConfig) {
|
|
12
|
+
this.objConfig = objConfig;
|
|
13
|
+
// singelton service - fetch from angular
|
|
14
|
+
const prototype = this.objConfig.target.prototype || this.objConfig.target;
|
|
15
|
+
if (!prototype.___constructorOverridden) {
|
|
16
|
+
prototype.___constructorOverridden = true;
|
|
17
|
+
const oldConstructor = this.objConfig.target.constructor;
|
|
18
|
+
this.objConfig.target.constructor = (...data) => {
|
|
19
|
+
const object = oldConstructor(...data);
|
|
20
|
+
if (!prototype.___data) {
|
|
21
|
+
prototype.___data = {};
|
|
22
|
+
}
|
|
23
|
+
prototype.___data._obj = object;
|
|
24
|
+
return object;
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Returns the decorated function.
|
|
30
|
+
* @returns - The decorated function.
|
|
31
|
+
*/
|
|
32
|
+
get Func() {
|
|
33
|
+
if (this.objConfig?.target &&
|
|
34
|
+
this.objConfig.target[this.objConfig.propertyKey]) {
|
|
35
|
+
return this.objConfig.target[this.objConfig.propertyKey].bind(this.getBindObject());
|
|
36
|
+
}
|
|
37
|
+
return null;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Returns the bind object.
|
|
41
|
+
* @private
|
|
42
|
+
* @returns - The bind object.
|
|
43
|
+
*/
|
|
44
|
+
getBindObject() {
|
|
45
|
+
const prototype = this.objConfig.target.prototype || this.objConfig.target;
|
|
46
|
+
return prototype.___data._obj;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnVuY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy9mdW5jdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sT0FBTyxpQkFBaUI7SUFDNUI7Ozs7O09BS0c7SUFDSCxZQUFzQixTQUErQztRQUEvQyxjQUFTLEdBQVQsU0FBUyxDQUFzQztRQUNuRSx5Q0FBeUM7UUFDekMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzNFLElBQUksQ0FBQyxTQUFTLENBQUMsd0JBQXdCLEVBQUU7WUFDdkMsU0FBUyxDQUFDLHdCQUF3QixHQUFHLElBQUksQ0FBQztZQUMxQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUM7WUFDekQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsV0FBVyxHQUFHLENBQUMsR0FBRyxJQUFXLEVBQUUsRUFBRTtnQkFDckQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFO29CQUN0QixTQUFTLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztpQkFDeEI7Z0JBQ0QsU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO2dCQUNoQyxPQUFPLE1BQU0sQ0FBQztZQUNoQixDQUFDLENBQUM7U0FDSDtJQUNILENBQUM7SUFFRDs7O09BR0c7SUFDSCxJQUFXLElBQUk7UUFDYixJQUNFLElBQUksQ0FBQyxTQUFTLEVBQUUsTUFBTTtZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxFQUNqRDtZQUNBLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxJQUFJLENBQzNELElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDckIsQ0FBQztTQUNIO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNLLGFBQWE7UUFDbkIsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsU0FBUyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDO1FBQzNFLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7SUFDaEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXHJcbiAqIFJlcHJlc2VudHMgdGhlIHJlZmVyZW5jZSB0byBhbiBvYmplY3QgbWV0aG9kIHVzZWQgZm9yIHdlYnNvY2tldCByb3V0ZXMgYW5kIG91dGJvdW5kcy5cclxuICovXHJcbmV4cG9ydCBjbGFzcyBEZWNvcmFibGVGdW5jdGlvbiB7XHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBhbiBpbnN0YW5jZSBvZiBEZWNvcmFibGVGdW5jdGlvbi5cclxuICAgKiBAcGFyYW0gb2JqQ29uZmlnIC0gVGhlIGNvbmZpZ3VyYXRpb24gb2JqZWN0IGZvciB0aGUgb2JqZWN0IG1ldGhvZC5cclxuICAgKiBAcGFyYW0gb2JqQ29uZmlnLnRhcmdldCAtIFRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAqIEBwYXJhbSBvYmpDb25maWcucHJvcGVydHlLZXkgLSBUaGUgcHJvcGVydHkga2V5IG9mIHRoZSB0YXJnZXQgb2JqZWN0LlxyXG4gICAqL1xyXG4gIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBvYmpDb25maWc6IHsgdGFyZ2V0OiBhbnk7IHByb3BlcnR5S2V5OiBzdHJpbmcgfSkge1xyXG4gICAgLy8gc2luZ2VsdG9uIHNlcnZpY2UgLSBmZXRjaCBmcm9tIGFuZ3VsYXJcclxuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMub2JqQ29uZmlnLnRhcmdldC5wcm90b3R5cGUgfHwgdGhpcy5vYmpDb25maWcudGFyZ2V0O1xyXG4gICAgaWYgKCFwcm90b3R5cGUuX19fY29uc3RydWN0b3JPdmVycmlkZGVuKSB7XHJcbiAgICAgIHByb3RvdHlwZS5fX19jb25zdHJ1Y3Rvck92ZXJyaWRkZW4gPSB0cnVlO1xyXG4gICAgICBjb25zdCBvbGRDb25zdHJ1Y3RvciA9IHRoaXMub2JqQ29uZmlnLnRhcmdldC5jb25zdHJ1Y3RvcjtcclxuICAgICAgdGhpcy5vYmpDb25maWcudGFyZ2V0LmNvbnN0cnVjdG9yID0gKC4uLmRhdGE6IGFueVtdKSA9PiB7XHJcbiAgICAgICAgY29uc3Qgb2JqZWN0ID0gb2xkQ29uc3RydWN0b3IoLi4uZGF0YSk7XHJcbiAgICAgICAgaWYgKCFwcm90b3R5cGUuX19fZGF0YSkge1xyXG4gICAgICAgICAgcHJvdG90eXBlLl9fX2RhdGEgPSB7fTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcHJvdG90eXBlLl9fX2RhdGEuX29iaiA9IG9iamVjdDtcclxuICAgICAgICByZXR1cm4gb2JqZWN0O1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZGVjb3JhdGVkIGZ1bmN0aW9uLlxyXG4gICAqIEByZXR1cm5zIC0gVGhlIGRlY29yYXRlZCBmdW5jdGlvbi5cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0IEZ1bmMoKTogKCguLi5kYXRhOiBhbnlbXSkgPT4gUHJvbWlzZTxhbnk+IHwgYW55KSB8IG51bGwge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLm9iakNvbmZpZz8udGFyZ2V0ICYmXHJcbiAgICAgIHRoaXMub2JqQ29uZmlnLnRhcmdldFt0aGlzLm9iakNvbmZpZy5wcm9wZXJ0eUtleV1cclxuICAgICkge1xyXG4gICAgICByZXR1cm4gdGhpcy5vYmpDb25maWcudGFyZ2V0W3RoaXMub2JqQ29uZmlnLnByb3BlcnR5S2V5XS5iaW5kKFxyXG4gICAgICAgIHRoaXMuZ2V0QmluZE9iamVjdCgpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIGJpbmQgb2JqZWN0LlxyXG4gICAqIEBwcml2YXRlXHJcbiAgICogQHJldHVybnMgLSBUaGUgYmluZCBvYmplY3QuXHJcbiAgICovXHJcbiAgcHJpdmF0ZSBnZXRCaW5kT2JqZWN0KCk6IGFueSB7XHJcbiAgICBjb25zdCBwcm90b3R5cGUgPSB0aGlzLm9iakNvbmZpZy50YXJnZXQucHJvdG90eXBlIHx8IHRoaXMub2JqQ29uZmlnLnRhcmdldDtcclxuICAgIHJldHVybiBwcm90b3R5cGUuX19fZGF0YS5fb2JqO1xyXG4gIH1cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
import { DecorableFunction } from '../function';
|
|
3
|
+
export function Handle(method) {
|
|
4
|
+
return function _Handle(target, propertyKey) {
|
|
5
|
+
// method annotation
|
|
6
|
+
WebsocketClient.registerHandle(method, new DecorableFunction({ target, propertyKey }));
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFuZGxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2RlY29yYXRvcnMvd2Vic29ja2V0L2hhbmRsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUVoRCxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQWM7SUFDbkMsT0FBTyxTQUFTLE9BQU8sQ0FBQyxNQUFXLEVBQUUsV0FBbUI7UUFDdEQsb0JBQW9CO1FBQ3BCLGVBQWUsQ0FBQyxjQUFjLENBQzVCLE1BQU0sRUFDTixJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLENBQy9DLENBQUM7SUFDSixDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgV2Vic29ja2V0Q2xpZW50IH0gZnJvbSAnLi4vLi4vY2xpZW50JztcclxuaW1wb3J0IHsgRGVjb3JhYmxlRnVuY3Rpb24gfSBmcm9tICcuLi9mdW5jdGlvbic7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gSGFuZGxlKG1ldGhvZDogc3RyaW5nKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIF9IYW5kbGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gbWV0aG9kIGFubm90YXRpb25cclxuICAgIFdlYnNvY2tldENsaWVudC5yZWdpc3RlckhhbmRsZShcclxuICAgICAgbWV0aG9kLFxyXG4gICAgICBuZXcgRGVjb3JhYmxlRnVuY3Rpb24oeyB0YXJnZXQsIHByb3BlcnR5S2V5IH0pXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
import { DecorableFunction } from '../function';
|
|
3
|
+
export function OnSuccess(regexp) {
|
|
4
|
+
return function _Route(target, propertyKey) {
|
|
5
|
+
WebsocketClient.onSuccess(new DecorableFunction({ target, propertyKey }), regexp);
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib24tc3VjY2Vzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvbGliL3dlYnNvY2tldC9kZWNvcmF0b3JzL3dlYnNvY2tldC9vbi1zdWNjZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDL0MsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRWhELE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBYztJQUN0QyxPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQVcsRUFBRSxXQUFtQjtRQUNyRCxlQUFlLENBQUMsU0FBUyxDQUN2QixJQUFJLGlCQUFpQixDQUFDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxDQUFDLEVBQzlDLE1BQU0sQ0FDUCxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uLy4uL2NsaWVudCc7XHJcbmltcG9ydCB7IERlY29yYWJsZUZ1bmN0aW9uIH0gZnJvbSAnLi4vZnVuY3Rpb24nO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE9uU3VjY2VzcyhyZWdleHA6IFJlZ0V4cCkge1xyXG4gIHJldHVybiBmdW5jdGlvbiBfUm91dGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgV2Vic29ja2V0Q2xpZW50Lm9uU3VjY2VzcyhcclxuICAgICAgbmV3IERlY29yYWJsZUZ1bmN0aW9uKHsgdGFyZ2V0LCBwcm9wZXJ0eUtleSB9KSxcclxuICAgICAgcmVnZXhwXHJcbiAgICApO1xyXG4gIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { WebsocketClient } from '../../client';
|
|
2
|
+
export function Outbound(method, requestingRequired) {
|
|
3
|
+
return function _Outbound(target, propertyKey) {
|
|
4
|
+
target.loading = new Map();
|
|
5
|
+
// property annotation
|
|
6
|
+
WebsocketClient.expectOutbound(method, function setOutbound(data) {
|
|
7
|
+
if (!target.___received)
|
|
8
|
+
target.___received = {};
|
|
9
|
+
if (!target.___data)
|
|
10
|
+
target.___data = {};
|
|
11
|
+
target.___received[propertyKey] = true;
|
|
12
|
+
target.___data[propertyKey] = data;
|
|
13
|
+
target.loading.set(propertyKey, false);
|
|
14
|
+
});
|
|
15
|
+
if (requestingRequired) {
|
|
16
|
+
WebsocketClient.addResetRequestingStateCallback(function callback() {
|
|
17
|
+
if (target.___requested) {
|
|
18
|
+
target.___requested[propertyKey] = false;
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
return {
|
|
23
|
+
configurable: true,
|
|
24
|
+
writeable: true,
|
|
25
|
+
get() {
|
|
26
|
+
if (!target.___received)
|
|
27
|
+
target.___received = {};
|
|
28
|
+
if (!target.___requested)
|
|
29
|
+
target.___requested = {};
|
|
30
|
+
if (requestingRequired && !target.___requested[propertyKey]) {
|
|
31
|
+
target.___requested[propertyKey] = true;
|
|
32
|
+
this.client.send('request.' + method, null).then();
|
|
33
|
+
}
|
|
34
|
+
if (!target.___data)
|
|
35
|
+
target.___data = {};
|
|
36
|
+
if (!target.___data[propertyKey]) {
|
|
37
|
+
target.loading.set(propertyKey, true);
|
|
38
|
+
}
|
|
39
|
+
else if (target.loading[propertyKey]) {
|
|
40
|
+
target.loading.set(propertyKey, false);
|
|
41
|
+
}
|
|
42
|
+
return target.___data[propertyKey];
|
|
43
|
+
},
|
|
44
|
+
set(val) {
|
|
45
|
+
if (!target.___data)
|
|
46
|
+
target.___data = {};
|
|
47
|
+
target.loading.set(propertyKey, false);
|
|
48
|
+
return (target.___data[propertyKey] = val);
|
|
49
|
+
},
|
|
50
|
+
};
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3V0Ym91bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvb3V0Ym91bmQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUvQyxNQUFNLFVBQVUsUUFBUSxDQUFDLE1BQWMsRUFBRSxrQkFBNEI7SUFDbkUsT0FBTyxTQUFTLFNBQVMsQ0FBQyxNQUFXLEVBQUUsV0FBbUI7UUFDeEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBbUIsQ0FBQztRQUM1QyxzQkFBc0I7UUFDdEIsZUFBZSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxXQUFXLENBQUMsSUFBUztZQUNuRSxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7Z0JBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7WUFDakQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPO2dCQUFFLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLE1BQU0sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQ25DLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN6QyxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksa0JBQWtCLEVBQUU7WUFDdEIsZUFBZSxDQUFDLCtCQUErQixDQUFDLFNBQVMsUUFBUTtnQkFDL0QsSUFBSSxNQUFNLENBQUMsWUFBWSxFQUFFO29CQUN2QixNQUFNLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDMUM7WUFDSCxDQUFDLENBQUMsQ0FBQztTQUNKO1FBQ0QsT0FBTztZQUNMLFlBQVksRUFBRSxJQUFJO1lBQ2xCLFNBQVMsRUFBRSxJQUFJO1lBQ2YsR0FBRztnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLFdBQVc7b0JBQUUsTUFBTSxDQUFDLFdBQVcsR0FBRyxFQUFFLENBQUM7Z0JBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsWUFBWTtvQkFBRSxNQUFNLENBQUMsWUFBWSxHQUFHLEVBQUUsQ0FBQztnQkFDbkQsSUFBSSxrQkFBa0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQzNELE1BQU0sQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUN4QyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDO2lCQUNwRDtnQkFDRCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU87b0JBQUUsTUFBTSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7Z0JBQ3pDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFO29CQUNoQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ3ZDO3FCQUFNLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRTtvQkFDdEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2lCQUN4QztnQkFDRCxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDckMsQ0FBQztZQUNELEdBQUcsQ0FBQyxHQUFRO2dCQUNWLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTztvQkFBRSxNQUFNLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztnQkFDekMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUN2QyxPQUFPLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztZQUM3QyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBXZWJzb2NrZXRDbGllbnQgfSBmcm9tICcuLi8uLi9jbGllbnQnO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIE91dGJvdW5kKG1ldGhvZDogc3RyaW5nLCByZXF1ZXN0aW5nUmVxdWlyZWQ/OiBib29sZWFuKSB7XHJcbiAgcmV0dXJuIGZ1bmN0aW9uIF9PdXRib3VuZCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZyk6IGFueSB7XHJcbiAgICB0YXJnZXQubG9hZGluZyA9IG5ldyBNYXA8c3RyaW5nLCBib29sZWFuPigpO1xyXG4gICAgLy8gcHJvcGVydHkgYW5ub3RhdGlvblxyXG4gICAgV2Vic29ja2V0Q2xpZW50LmV4cGVjdE91dGJvdW5kKG1ldGhvZCwgZnVuY3Rpb24gc2V0T3V0Ym91bmQoZGF0YTogYW55KSB7XHJcbiAgICAgIGlmICghdGFyZ2V0Ll9fX3JlY2VpdmVkKSB0YXJnZXQuX19fcmVjZWl2ZWQgPSB7fTtcclxuICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YSkgdGFyZ2V0Ll9fX2RhdGEgPSB7fTtcclxuICAgICAgdGFyZ2V0Ll9fX3JlY2VpdmVkW3Byb3BlcnR5S2V5XSA9IHRydWU7XHJcbiAgICAgIHRhcmdldC5fX19kYXRhW3Byb3BlcnR5S2V5XSA9IGRhdGE7XHJcbiAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgfSk7XHJcbiAgICBpZiAocmVxdWVzdGluZ1JlcXVpcmVkKSB7XHJcbiAgICAgIFdlYnNvY2tldENsaWVudC5hZGRSZXNldFJlcXVlc3RpbmdTdGF0ZUNhbGxiYWNrKGZ1bmN0aW9uIGNhbGxiYWNrKCkge1xyXG4gICAgICAgIGlmICh0YXJnZXQuX19fcmVxdWVzdGVkKSB7XHJcbiAgICAgICAgICB0YXJnZXQuX19fcmVxdWVzdGVkW3Byb3BlcnR5S2V5XSA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXHJcbiAgICAgIHdyaXRlYWJsZTogdHJ1ZSxcclxuICAgICAgZ2V0KCkge1xyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX3JlY2VpdmVkKSB0YXJnZXQuX19fcmVjZWl2ZWQgPSB7fTtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19yZXF1ZXN0ZWQpIHRhcmdldC5fX19yZXF1ZXN0ZWQgPSB7fTtcclxuICAgICAgICBpZiAocmVxdWVzdGluZ1JlcXVpcmVkICYmICF0YXJnZXQuX19fcmVxdWVzdGVkW3Byb3BlcnR5S2V5XSkge1xyXG4gICAgICAgICAgdGFyZ2V0Ll9fX3JlcXVlc3RlZFtwcm9wZXJ0eUtleV0gPSB0cnVlO1xyXG4gICAgICAgICAgdGhpcy5jbGllbnQuc2VuZCgncmVxdWVzdC4nICsgbWV0aG9kLCBudWxsKS50aGVuKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGFyZ2V0Ll9fX2RhdGEpIHRhcmdldC5fX19kYXRhID0ge307XHJcbiAgICAgICAgaWYgKCF0YXJnZXQuX19fZGF0YVtwcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgdHJ1ZSk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQubG9hZGluZ1twcm9wZXJ0eUtleV0pIHtcclxuICAgICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldO1xyXG4gICAgICB9LFxyXG4gICAgICBzZXQodmFsOiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRhcmdldC5fX19kYXRhKSB0YXJnZXQuX19fZGF0YSA9IHt9O1xyXG4gICAgICAgIHRhcmdldC5sb2FkaW5nLnNldChwcm9wZXJ0eUtleSwgZmFsc2UpO1xyXG4gICAgICAgIHJldHVybiAodGFyZ2V0Ll9fX2RhdGFbcHJvcGVydHlLZXldID0gdmFsKTtcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export function Route(method, loadingKey, dontEnsureTransmission) {
|
|
2
|
+
return function _Route(target, propertyKey) {
|
|
3
|
+
// method annotation
|
|
4
|
+
const original = target[propertyKey];
|
|
5
|
+
target[propertyKey] = async function execRoute(...data) {
|
|
6
|
+
if (loadingKey)
|
|
7
|
+
this.loadingElements[loadingKey]++;
|
|
8
|
+
const promise = original.bind(this)(...data);
|
|
9
|
+
let res = null;
|
|
10
|
+
if (this.client) {
|
|
11
|
+
res = await this.client.send(method, data[0], dontEnsureTransmission);
|
|
12
|
+
}
|
|
13
|
+
await promise;
|
|
14
|
+
if (loadingKey)
|
|
15
|
+
this.loadingElements[loadingKey]--;
|
|
16
|
+
return res;
|
|
17
|
+
};
|
|
18
|
+
return target;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxVQUFVLEtBQUssQ0FDbkIsTUFBYyxFQUNkLFVBQW1CLEVBQ25CLHNCQUFnQztJQUVoQyxPQUFPLFNBQVMsTUFBTSxDQUFDLE1BQVcsRUFBRSxXQUFtQjtRQUNyRCxvQkFBb0I7UUFDcEIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxLQUFLLFVBQVUsU0FBUyxDQUFDLEdBQUcsSUFBUztZQUN6RCxJQUFJLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25ELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztZQUM3QyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUM7WUFDZixJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQ2YsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO2FBQ3ZFO1lBQ0QsTUFBTSxPQUFPLENBQUM7WUFDZCxJQUFJLFVBQVU7Z0JBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDO1lBQ25ELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQyxDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBmdW5jdGlvbiBSb3V0ZShcclxuICBtZXRob2Q6IHN0cmluZyxcclxuICBsb2FkaW5nS2V5Pzogc3RyaW5nLFxyXG4gIGRvbnRFbnN1cmVUcmFuc21pc3Npb24/OiBib29sZWFuXHJcbikge1xyXG4gIHJldHVybiBmdW5jdGlvbiBfUm91dGUodGFyZ2V0OiBhbnksIHByb3BlcnR5S2V5OiBzdHJpbmcpOiBhbnkge1xyXG4gICAgLy8gbWV0aG9kIGFubm90YXRpb25cclxuICAgIGNvbnN0IG9yaWdpbmFsID0gdGFyZ2V0W3Byb3BlcnR5S2V5XTtcclxuICAgIHRhcmdldFtwcm9wZXJ0eUtleV0gPSBhc3luYyBmdW5jdGlvbiBleGVjUm91dGUoLi4uZGF0YTogYW55KTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgaWYgKGxvYWRpbmdLZXkpIHRoaXMubG9hZGluZ0VsZW1lbnRzW2xvYWRpbmdLZXldKys7XHJcbiAgICAgIGNvbnN0IHByb21pc2UgPSBvcmlnaW5hbC5iaW5kKHRoaXMpKC4uLmRhdGEpO1xyXG4gICAgICBsZXQgcmVzID0gbnVsbDtcclxuICAgICAgaWYgKHRoaXMuY2xpZW50KSB7XHJcbiAgICAgICAgcmVzID0gYXdhaXQgdGhpcy5jbGllbnQuc2VuZChtZXRob2QsIGRhdGFbMF0sIGRvbnRFbnN1cmVUcmFuc21pc3Npb24pO1xyXG4gICAgICB9XHJcbiAgICAgIGF3YWl0IHByb21pc2U7XHJcbiAgICAgIGlmIChsb2FkaW5nS2V5KSB0aGlzLmxvYWRpbmdFbGVtZW50c1tsb2FkaW5nS2V5XS0tO1xyXG4gICAgICByZXR1cm4gcmVzO1xyXG4gICAgfTtcclxuICAgIHJldHVybiB0YXJnZXQ7XHJcbiAgfTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @deprecated
|
|
3
|
+
*/
|
|
4
|
+
export function Shared(defaultValue) {
|
|
5
|
+
if (defaultValue) {
|
|
6
|
+
throw Error("Active-Connect/@Shared: defaultValue is no longer supported, please assign the value to the variable itself.");
|
|
7
|
+
}
|
|
8
|
+
return function _Shared(target, propertyKey) { };
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYWN0aXZlLWNvbm5lY3QtbmcyL3NyYy9saWIvd2Vic29ja2V0L2RlY29yYXRvcnMvd2Vic29ja2V0L3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sVUFBVSxNQUFNLENBQUksWUFBZ0I7SUFDeEMsSUFBSSxZQUFZLEVBQUU7UUFDaEIsTUFBTSxLQUFLLENBQ1QsOEdBQThHLENBQy9HLENBQUM7S0FDSDtJQUNELE9BQU8sU0FBUyxPQUFPLENBQUMsTUFBVyxFQUFFLFdBQW1CLElBQUcsQ0FBQyxDQUFDO0FBQy9ELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcclxuICogQGRlcHJlY2F0ZWRcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiBTaGFyZWQ8VD4oZGVmYXVsdFZhbHVlPzogVCkge1xyXG4gIGlmIChkZWZhdWx0VmFsdWUpIHtcclxuICAgIHRocm93IEVycm9yKFxyXG4gICAgICBcIkFjdGl2ZS1Db25uZWN0L0BTaGFyZWQ6IGRlZmF1bHRWYWx1ZSBpcyBubyBsb25nZXIgc3VwcG9ydGVkLCBwbGVhc2UgYXNzaWduIHRoZSB2YWx1ZSB0byB0aGUgdmFyaWFibGUgaXRzZWxmLlwiXHJcbiAgICApO1xyXG4gIH1cclxuICByZXR1cm4gZnVuY3Rpb24gX1NoYXJlZCh0YXJnZXQ6IGFueSwgcHJvcGVydHlLZXk6IHN0cmluZykge307XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LXJvdXRlLXNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvZGVjb3JhdG9ycy93ZWJzb2NrZXQvd2Vic29ja2V0LXJvdXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFdlYnNvY2tldENsaWVudCB9IGZyb20gJy4uLy4uL2NsaWVudCc7XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFdlYnNvY2tldFJvdXRlU2VydmljZSB7XHJcbiAgbG9hZGluZ0VsZW1lbnRzOiBzdHJpbmdbXTtcclxuICBjbGllbnQ6IFdlYnNvY2tldENsaWVudDtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './client';
|
|
2
|
+
export * from './decorators/websocket/handle';
|
|
3
|
+
export * from './decorators/websocket/on-success';
|
|
4
|
+
export * from './decorators/websocket/outbound';
|
|
5
|
+
export * from './decorators/websocket/route';
|
|
6
|
+
export * from './decorators/websocket/shared';
|
|
7
|
+
export * from './decorators/websocket/websocket-route-service';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLG1DQUFtQyxDQUFDO0FBQ2xELGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLCtCQUErQixDQUFDO0FBQzlDLGNBQWMsZ0RBQWdELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NsaWVudCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy93ZWJzb2NrZXQvaGFuZGxlJztcclxuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL3dlYnNvY2tldC9vbi1zdWNjZXNzJztcclxuZXhwb3J0ICogZnJvbSAnLi9kZWNvcmF0b3JzL3dlYnNvY2tldC9vdXRib3VuZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy93ZWJzb2NrZXQvcm91dGUnO1xyXG5leHBvcnQgKiBmcm9tICcuL2RlY29yYXRvcnMvd2Vic29ja2V0L3NoYXJlZCc7XHJcbmV4cG9ydCAqIGZyb20gJy4vZGVjb3JhdG9ycy93ZWJzb2NrZXQvd2Vic29ja2V0LXJvdXRlLXNlcnZpY2UnO1xyXG4iXX0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export class JsonParser {
|
|
2
|
+
static stringify(obj) {
|
|
3
|
+
return JSON.stringify(obj);
|
|
4
|
+
}
|
|
5
|
+
static parsingFunction(key, value) {
|
|
6
|
+
var a;
|
|
7
|
+
if (typeof value === "string") {
|
|
8
|
+
a =
|
|
9
|
+
/^[0-9]{4}\-[0-9]{2}\-[0-9]{2}T[0-9]{2}\:[0-9]{2}\:[0-9]{2}\.[0-9]{3}Z$/.exec(value);
|
|
10
|
+
if (a) {
|
|
11
|
+
return new Date(a);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
return value;
|
|
15
|
+
}
|
|
16
|
+
static parse(str) {
|
|
17
|
+
if (str && str != "undefined") {
|
|
18
|
+
return JSON.parse(str, JsonParser.parsingFunction);
|
|
19
|
+
}
|
|
20
|
+
return str;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbi1wYXJzZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hY3RpdmUtY29ubmVjdC1uZzIvc3JjL2xpYi93ZWJzb2NrZXQvanNvbi9qc29uLXBhcnNlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sVUFBVTtJQUNyQixNQUFNLENBQUMsU0FBUyxDQUFDLEdBQVE7UUFDdkIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQVEsRUFBRSxLQUFVO1FBQ3pDLElBQUksQ0FBQyxDQUFDO1FBQ04sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUU7WUFDN0IsQ0FBQztnQkFDQyx3RUFBd0UsQ0FBQyxJQUFJLENBQzNFLEtBQUssQ0FDTixDQUFDO1lBQ0osSUFBSSxDQUFDLEVBQUU7Z0JBQ0wsT0FBTyxJQUFJLElBQUksQ0FBQyxDQUFRLENBQUMsQ0FBQzthQUMzQjtTQUNGO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDZixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxHQUFXO1FBQ3RCLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxXQUFXLEVBQUU7WUFDN0IsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDcEQ7UUFDRCxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBKc29uUGFyc2VyIHtcclxuICBzdGF0aWMgc3RyaW5naWZ5KG9iajogYW55KSB7XHJcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqKTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXJzaW5nRnVuY3Rpb24oa2V5OiBhbnksIHZhbHVlOiBhbnkpIHtcclxuICAgIHZhciBhO1xyXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG4gICAgICBhID1cclxuICAgICAgICAvXlswLTldezR9XFwtWzAtOV17Mn1cXC1bMC05XXsyfVRbMC05XXsyfVxcOlswLTldezJ9XFw6WzAtOV17Mn1cXC5bMC05XXszfVokLy5leGVjKFxyXG4gICAgICAgICAgdmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICBpZiAoYSkge1xyXG4gICAgICAgIHJldHVybiBuZXcgRGF0ZShhIGFzIGFueSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBwYXJzZShzdHI6IHN0cmluZykge1xyXG4gICAgaWYgKHN0ciAmJiBzdHIgIT0gXCJ1bmRlZmluZWRcIikge1xyXG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShzdHIsIEpzb25QYXJzZXIucGFyc2luZ0Z1bmN0aW9uKTtcclxuICAgIH1cclxuICAgIHJldHVybiBzdHI7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of active-connect-ng2
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/active-connect-ng2.module';
|
|
5
|
+
export * from './lib/websocket';
|
|
6
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FjdGl2ZS1jb25uZWN0LW5nMi9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsaUNBQWlDLENBQUM7QUFDaEQsY0FBYyxpQkFBaUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2YgYWN0aXZlLWNvbm5lY3QtbmcyXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9saWIvYWN0aXZlLWNvbm5lY3QtbmcyLm1vZHVsZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi93ZWJzb2NrZXQnO1xuIl19
|