@ragemp-mango/core 1.2.0 → 1.2.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.
@@ -35,7 +35,7 @@ import {
35
35
  createParamDecorator,
36
36
  createRPCDecorator,
37
37
  forwardRef
38
- } from "../chunk-BQFJLVDO.js";
38
+ } from "../chunk-GQJB43DK.js";
39
39
  import "../chunk-73LIJA6X.js";
40
40
  import "../chunk-AO6BXG54.js";
41
41
  import "../chunk-2ADQZWQE.js";
package/dist/index.js CHANGED
@@ -38,7 +38,7 @@ import {
38
38
  createParamDecorator,
39
39
  createRPCDecorator,
40
40
  forwardRef
41
- } from "./chunk-BQFJLVDO.js";
41
+ } from "./chunk-GQJB43DK.js";
42
42
  import "./chunk-73LIJA6X.js";
43
43
  import "./chunk-AO6BXG54.js";
44
44
  import "./chunk-2ADQZWQE.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  ReflectorService,
3
3
  TimerService
4
- } from "../chunk-BQFJLVDO.js";
4
+ } from "../chunk-GQJB43DK.js";
5
5
  import "../chunk-73LIJA6X.js";
6
6
  import "../chunk-AO6BXG54.js";
7
7
  import "../chunk-2ADQZWQE.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ragemp-mango/core",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "homepage": "https://github.com/kkwlkk/ragemp-mango",
5
5
  "repository": {
6
6
  "type": "git",
@@ -1,170 +0,0 @@
1
- import {
2
- RPC_RESULT_HANDLER_NOT_FOUND,
3
- RPC_RESULT_TIMEOUT,
4
- RPC_RESULT_UNKNOWN
5
- } from "./chunk-HK7QTFPA.js";
6
- import {
7
- MangoError
8
- } from "./chunk-6YEWPMZJ.js";
9
- import {
10
- ErrorMessage,
11
- RPCResultStatus
12
- } from "./chunk-DXPVUDXD.js";
13
- import {
14
- LOGGER_SERVICE
15
- } from "./chunk-DJZCOYB3.js";
16
- import {
17
- __name
18
- } from "./chunk-7QVYU63E.js";
19
-
20
- // src/app/services/base-event.service.ts
21
- import { injectable } from "inversify";
22
- function _ts_decorate(decorators, target, key, desc) {
23
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
- return c > 3 && r && Object.defineProperty(target, key, r), r;
27
- }
28
- __name(_ts_decorate, "_ts_decorate");
29
- function _ts_metadata(k, v) {
30
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31
- }
32
- __name(_ts_metadata, "_ts_metadata");
33
- var BaseEventService = class {
34
- static {
35
- __name(this, "BaseEventService");
36
- }
37
- $eventEmmiter;
38
- $localHandlers = /* @__PURE__ */ new Set();
39
- $internalHandlers = /* @__PURE__ */ new Set();
40
- $remoteHandlers = /* @__PURE__ */ new Set();
41
- $internalEventNames = /* @__PURE__ */ new Set();
42
- constructor($eventEmmiter) {
43
- this.$eventEmmiter = $eventEmmiter;
44
- }
45
- on(eventName, callback) {
46
- const wrapper = /* @__PURE__ */ __name((...args) => callback(args[0]), "wrapper");
47
- const eventHandler = this.$eventEmmiter.on(eventName, wrapper);
48
- this.$localHandlers.add(eventHandler);
49
- return eventHandler;
50
- }
51
- once(eventName, callback) {
52
- const wrapper = /* @__PURE__ */ __name((...args) => callback(args[0]), "wrapper");
53
- const eventHandler = this.$eventEmmiter.once(eventName, wrapper);
54
- this.$localHandlers.add(eventHandler);
55
- return eventHandler;
56
- }
57
- emit(eventName, body) {
58
- this.$eventEmmiter.emit(eventName, body);
59
- }
60
- $onInternal(eventName, handler) {
61
- if (!this.$internalEventNames.has(eventName)) {
62
- throw new Error(ErrorMessage.InvalidInternalEventName);
63
- }
64
- const eventHandler = this.$eventEmmiter.on(eventName, handler);
65
- this.$internalHandlers.add(eventHandler);
66
- return eventHandler;
67
- }
68
- $onceInternal(eventName, handler) {
69
- if (!this.$internalEventNames.has(eventName)) {
70
- throw new Error(ErrorMessage.InvalidInternalEventName);
71
- }
72
- const eventHandler = this.$eventEmmiter.once(eventName, handler);
73
- this.$internalHandlers.add(eventHandler);
74
- return eventHandler;
75
- }
76
- };
77
- BaseEventService = _ts_decorate([
78
- injectable(),
79
- _ts_metadata("design:type", Function),
80
- _ts_metadata("design:paramtypes", [
81
- typeof EventEmmiter === "undefined" ? Object : EventEmmiter
82
- ])
83
- ], BaseEventService);
84
-
85
- // src/app/services/base-rpc.service.ts
86
- import { inject, injectable as injectable2 } from "inversify";
87
- function _ts_decorate2(decorators, target, key, desc) {
88
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
89
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
90
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
91
- return c > 3 && r && Object.defineProperty(target, key, r), r;
92
- }
93
- __name(_ts_decorate2, "_ts_decorate");
94
- function _ts_metadata2(k, v) {
95
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
96
- }
97
- __name(_ts_metadata2, "_ts_metadata");
98
- var BaseRPCService = class {
99
- static {
100
- __name(this, "BaseRPCService");
101
- }
102
- $loggerService;
103
- $TIMEOUT = 2e3;
104
- $localHandlers = /* @__PURE__ */ new Map();
105
- async call(rpcName, body, options = {
106
- timeout: this.$TIMEOUT
107
- }) {
108
- return new Promise(async (resolve) => {
109
- const handler = this.$localHandlers.get(rpcName)?.handler;
110
- if (!handler) {
111
- return resolve(RPC_RESULT_HANDLER_NOT_FOUND);
112
- }
113
- const timeoutId = setTimeout(() => {
114
- resolve(RPC_RESULT_TIMEOUT);
115
- }, options.timeout ?? this.$TIMEOUT);
116
- try {
117
- const result = await handler(body);
118
- clearTimeout(timeoutId);
119
- resolve({
120
- success: true,
121
- status: RPCResultStatus.Success,
122
- body: result
123
- });
124
- } catch (error) {
125
- clearTimeout(timeoutId);
126
- if (error instanceof MangoError) {
127
- return resolve({
128
- success: false,
129
- status: error.status,
130
- error: {
131
- message: error.message,
132
- details: error.details
133
- }
134
- });
135
- }
136
- resolve(RPC_RESULT_UNKNOWN);
137
- }
138
- });
139
- }
140
- onRequest(rpcName, handler) {
141
- if (this.$localHandlers.has(rpcName)) {
142
- this.$loggerService.error("An error occurred while trying to register RPC.");
143
- throw new Error(ErrorMessage.RPCHandlerAlreadyExists);
144
- }
145
- const rpcHandler = {
146
- destroy: /* @__PURE__ */ __name(() => {
147
- rpcHandler.valid = false;
148
- this.$localHandlers.delete(rpcName);
149
- }, "destroy"),
150
- rpcName,
151
- handler,
152
- valid: true
153
- };
154
- this.$localHandlers.set(rpcName, rpcHandler);
155
- return rpcHandler;
156
- }
157
- };
158
- _ts_decorate2([
159
- inject(LOGGER_SERVICE),
160
- _ts_metadata2("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
161
- ], BaseRPCService.prototype, "$loggerService", void 0);
162
- BaseRPCService = _ts_decorate2([
163
- injectable2()
164
- ], BaseRPCService);
165
-
166
- export {
167
- BaseEventService,
168
- BaseRPCService
169
- };
170
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLWV2ZW50LnNlcnZpY2UudHMiLCAiLi4vc3JjL2FwcC9zZXJ2aWNlcy9iYXNlLXJwYy5zZXJ2aWNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJpbXBvcnQgeyBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB0eXBlIHsgRXZlbnRFbW1pdGVyLCBTY3JpcHRFdmVudEhhbmRsZXIgfSBmcm9tICcuLi9pbnRlcmZhY2VzJztcbmltcG9ydCB0eXBlIHsgRXZlbnRIYW5kbGVyIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcyc7XG5cbkBpbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRXZlbnRTZXJ2aWNlPFQgZXh0ZW5kcyBSZWNvcmQ8c3RyaW5nLCBhbnk+PiB7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRsb2NhbEhhbmRsZXJzOiBTZXQ8U2NyaXB0RXZlbnRIYW5kbGVyPiA9IG5ldyBTZXQoKTtcbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgJGludGVybmFsSGFuZGxlcnM6IFNldDxTY3JpcHRFdmVudEhhbmRsZXI+ID0gbmV3IFNldCgpO1xuICAgIHByb3RlY3RlZCByZWFkb25seSAkcmVtb3RlSGFuZGxlcnM6IFNldDxTY3JpcHRFdmVudEhhbmRsZXI+ID0gbmV3IFNldCgpO1xuICAgIHByb3RlY3RlZCAkaW50ZXJuYWxFdmVudE5hbWVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG4gICAgY29uc3RydWN0b3IocHJvdGVjdGVkICRldmVudEVtbWl0ZXI6IEV2ZW50RW1taXRlcikge31cblxuICAgIHB1YmxpYyBvbjxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBjYWxsYmFjazogKGJvZHk6IFBhcmFtZXRlcnM8VFtFXT5bMF0pID0+IFJldHVyblR5cGU8VFtFXT4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPik6IFNjcmlwdEV2ZW50SGFuZGxlcjtcbiAgICBwdWJsaWMgb248RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KSB7XG4gICAgICAgIGNvbnN0IHdyYXBwZXIgPSAoLi4uYXJnczogYW55W10pID0+IGNhbGxiYWNrKGFyZ3NbMF0pO1xuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSA8U2NyaXB0RXZlbnRIYW5kbGVyPnRoaXMuJGV2ZW50RW1taXRlci5vbihldmVudE5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cbiAgICBwdWJsaWMgb25jZTxFIGV4dGVuZHMga2V5b2YgVD4oZXZlbnROYW1lOiBFLCBjYWxsYmFjazogKGJvZHk6IFBhcmFtZXRlcnM8VFtFXT5bMF0pID0+IFJldHVyblR5cGU8VFtFXT4pOiBTY3JpcHRFdmVudEhhbmRsZXI7XG4gICAgcHVibGljIG9uY2U8RSBleHRlbmRzIHN0cmluZz4oZXZlbnROYW1lOiBFeGNsdWRlPEUsIGtleW9mIFQ+LCBjYWxsYmFjazogKGJvZHk6IHVua25vd24pID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KTogU2NyaXB0RXZlbnRIYW5kbGVyO1xuICAgIHB1YmxpYyBvbmNlPEUgZXh0ZW5kcyBzdHJpbmc+KGV2ZW50TmFtZTogRXhjbHVkZTxFLCBrZXlvZiBUPiwgY2FsbGJhY2s6IChib2R5OiB1bmtub3duKSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikge1xuICAgICAgICBjb25zdCB3cmFwcGVyID0gKC4uLmFyZ3M6IGFueVtdKSA9PiBjYWxsYmFjayhhcmdzWzBdKTtcbiAgICAgICAgY29uc3QgZXZlbnRIYW5kbGVyID0gPFNjcmlwdEV2ZW50SGFuZGxlcj50aGlzLiRldmVudEVtbWl0ZXIub25jZShldmVudE5hbWUsIHdyYXBwZXIpO1xuICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHB1YmxpYyBlbWl0PEUgZXh0ZW5kcyBrZXlvZiBUPihldmVudE5hbWU6IEUsIGJvZHk/OiBUW0VdKTogdm9pZDtcbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEUsIGJvZHk/OiB1bmtub3duKTogdm9pZDtcbiAgICBwdWJsaWMgZW1pdDxFIGV4dGVuZHMgc3RyaW5nPihldmVudE5hbWU6IEUsIGJvZHk/OiB1bmtub3duKSB7XG4gICAgICAgIHRoaXMuJGV2ZW50RW1taXRlci5lbWl0KGV2ZW50TmFtZSwgYm9keSk7XG4gICAgfVxuXG4gICAgcHJvdGVjdGVkICRvbkludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRpbnRlcm5hbEV2ZW50TmFtZXMuaGFzKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEludGVybmFsRXZlbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSA8RXZlbnRIYW5kbGVyPnRoaXMuJGV2ZW50RW1taXRlci5vbihldmVudE5hbWUsIGhhbmRsZXIpO1xuICAgICAgICB0aGlzLiRpbnRlcm5hbEhhbmRsZXJzLmFkZChldmVudEhhbmRsZXIpO1xuICAgICAgICByZXR1cm4gZXZlbnRIYW5kbGVyO1xuICAgIH1cblxuICAgIHByb3RlY3RlZCAkb25jZUludGVybmFsKGV2ZW50TmFtZTogc3RyaW5nLCBoYW5kbGVyOiAoYm9keTogdW5rbm93bikgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHtcbiAgICAgICAgaWYgKCF0aGlzLiRpbnRlcm5hbEV2ZW50TmFtZXMuaGFzKGV2ZW50TmFtZSkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEludGVybmFsRXZlbnROYW1lKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBldmVudEhhbmRsZXIgPSA8U2NyaXB0RXZlbnRIYW5kbGVyPnRoaXMuJGV2ZW50RW1taXRlci5vbmNlKGV2ZW50TmFtZSwgaGFuZGxlcik7XG4gICAgICAgIHRoaXMuJGludGVybmFsSGFuZGxlcnMuYWRkKGV2ZW50SGFuZGxlcik7XG4gICAgICAgIHJldHVybiBldmVudEhhbmRsZXI7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IGluamVjdCwgaW5qZWN0YWJsZSB9IGZyb20gJ2ludmVyc2lmeSc7XG5pbXBvcnQgdHlwZSB7IFJQQ1Jlc3VsdCwgUlBDQ2FsbE9wdGlvbnMsIFNjcmlwdFJQQ0hhbmRsZXIsIExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzJztcbmltcG9ydCB7IFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQsIFJQQ19SRVNVTFRfVElNRU9VVCwgUlBDX1JFU1VMVF9VTktOT1dOIH0gZnJvbSAnLi4vLi4vYXBwL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBFcnJvck1lc3NhZ2UsIFJQQ1Jlc3VsdFN0YXR1cyB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IE1hbmdvRXJyb3IgfSBmcm9tICcuLi8uLi9lcnJvcnMnO1xuaW1wb3J0IHsgTE9HR0VSX1NFUlZJQ0UgfSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuXG5AaW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQmFzZVJQQ1NlcnZpY2U8VCBleHRlbmRzIFJlY29yZDxzdHJpbmcsIGFueT4+IHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcm90ZWN0ZWQgcmVhZG9ubHkgJGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5ICRUSU1FT1VUID0gMjAwMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5ICRsb2NhbEhhbmRsZXJzID0gbmV3IE1hcDxzdHJpbmcsIFNjcmlwdFJQQ0hhbmRsZXI+KCk7XG5cbiAgICBwdWJsaWMgYXN5bmMgY2FsbDxFIGV4dGVuZHMga2V5b2YgVD4oXG4gICAgICAgIHJwY05hbWU6IEUsXG4gICAgICAgIGJvZHk/OiBQYXJhbWV0ZXJzPFRbRV0+WzBdLFxuICAgICAgICBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMsXG4gICAgKTogUHJvbWlzZTxSUENSZXN1bHQ8UmV0dXJuVHlwZTxUW0VdPj4+O1xuICAgIHB1YmxpYyBhc3luYyBjYWxsPEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGJvZHk/OiB1bmtub3duLCBvcHRpb25zPzogUlBDQ2FsbE9wdGlvbnMpOiBQcm9taXNlPFJQQ1Jlc3VsdDx1bmtub3duPj47XG4gICAgcHVibGljIGFzeW5jIGNhbGw8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgYm9keT86IHVua25vd24sIG9wdGlvbnM6IFJQQ0NhbGxPcHRpb25zID0geyB0aW1lb3V0OiB0aGlzLiRUSU1FT1VUIH0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVyID0gdGhpcy4kbG9jYWxIYW5kbGVycy5nZXQoPHN0cmluZz5ycGNOYW1lKT8uaGFuZGxlcjtcbiAgICAgICAgICAgIGlmICghaGFuZGxlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXNvbHZlKFJQQ19SRVNVTFRfSEFORExFUl9OT1RfRk9VTkQpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZXNvbHZlKFJQQ19SRVNVTFRfVElNRU9VVCk7XG4gICAgICAgICAgICB9LCBvcHRpb25zLnRpbWVvdXQgPz8gdGhpcy4kVElNRU9VVCk7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgaGFuZGxlcihib2R5KTtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcbiAgICAgICAgICAgICAgICByZXNvbHZlKHsgc3VjY2VzczogdHJ1ZSwgc3RhdHVzOiBSUENSZXN1bHRTdGF0dXMuU3VjY2VzcywgYm9keTogcmVzdWx0IH0pO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZW91dElkKTtcblxuICAgICAgICAgICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1hbmdvRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoe1xuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXM6IGVycm9yLnN0YXR1cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB7IG1lc3NhZ2U6IGVycm9yLm1lc3NhZ2UsIGRldGFpbHM6IGVycm9yLmRldGFpbHMgfSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmVzb2x2ZShSUENfUkVTVUxUX1VOS05PV04pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcHVibGljIG9uUmVxdWVzdDxFIGV4dGVuZHMga2V5b2YgVD4ocnBjTmFtZTogRSwgaGFuZGxlcjogKGJvZHk6IFBhcmFtZXRlcnM8VFtFXT5bMF0pID0+IFJldHVyblR5cGU8VFtFXT4pOiBTY3JpcHRSUENIYW5kbGVyO1xuICAgIHB1YmxpYyBvblJlcXVlc3Q8RSBleHRlbmRzIHN0cmluZz4ocnBjTmFtZTogRSwgaGFuZGxlcjogKGJvZHk6IHVua25vd24pID0+IHVua25vd24gfCBQcm9taXNlPHVua25vd24+KTogU2NyaXB0UlBDSGFuZGxlcjtcbiAgICBwdWJsaWMgb25SZXF1ZXN0PEUgZXh0ZW5kcyBzdHJpbmc+KHJwY05hbWU6IEUsIGhhbmRsZXI6IChib2R5OiB1bmtub3duKSA9PiB1bmtub3duIHwgUHJvbWlzZTx1bmtub3duPikge1xuICAgICAgICBpZiAodGhpcy4kbG9jYWxIYW5kbGVycy5oYXMocnBjTmFtZSkpIHtcbiAgICAgICAgICAgIHRoaXMuJGxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHRyeWluZyB0byByZWdpc3RlciBSUEMuJyk7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLlJQQ0hhbmRsZXJBbHJlYWR5RXhpc3RzKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHJwY0hhbmRsZXI6IFNjcmlwdFJQQ0hhbmRsZXIgPSB7XG4gICAgICAgICAgICBkZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgIHJwY0hhbmRsZXIudmFsaWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLiRsb2NhbEhhbmRsZXJzLmRlbGV0ZShycGNOYW1lKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBycGNOYW1lOiBycGNOYW1lLFxuICAgICAgICAgICAgaGFuZGxlcixcbiAgICAgICAgICAgIHZhbGlkOiB0cnVlLFxuICAgICAgICB9O1xuXG4gICAgICAgIHRoaXMuJGxvY2FsSGFuZGxlcnMuc2V0KHJwY05hbWUsIHJwY0hhbmRs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O2NBQUVFLFNBQVNGLE1BQU1FO2NBQVNDLFNBQVNILE1BQU1HO1lBQVE7VUFDNUQsQ0FBQTtRQUNKO0FBRUFoQixnQkFBUWlCLGtCQUFBQTtNQUNaO0lBQ0osQ0FBQTtFQUNKO0VBR09DLFVBQTRCdkIsU0FBWU0sU0FBd0Q7QUFDbkcsUUFBSSxLQUFLVCxlQUFlMkIsSUFBSXhCLE9BQUFBLEdBQVU7QUFDbEMsV0FBS0wsZUFBZXVCLE1BQU0saURBQUE7QUFDMUIsWUFBTSxJQUFJTyxNQUFNQyxhQUFhQyx1QkFBdUI7SUFDeEQ7QUFFQSxVQUFNQyxhQUErQjtNQUNqQ0MsU0FBUyw2QkFBQTtBQUVMRCxtQkFBV0UsUUFBUTtBQUNuQixhQUFLakMsZUFBZWtDLE9BQU8vQixPQUFBQTtNQUMvQixHQUpTO01BS1RBO01BQ0FNO01BQ0F3QixPQUFPO0lBQ1g7QUFFQSxTQUFLakMsZUFBZW1DLElBQUloQyxTQUFTNEIsVUFBQUE7QUFFakMsV0FBT0E7RUFDWDtBQUNKOzs7Ozs7OzsiLAogICJuYW1lcyI6IFsiaW5qZWN0YWJsZSIsICJCYXNlRXZlbnRTZXJ2aWNlIiwgIiRsb2NhbEhhbmRsZXJzIiwgIlNldCIsICIkaW50ZXJuYWxIYW5kbGVycyIsICIkcmVtb3RlSGFuZGxlcnMiLCAiJGludGVybmFsRXZlbnROYW1lcyIsICIkZXZlbnRFbW1pdGVyIiwgIm9uIiwgImV2ZW50TmFtZSIsICJjYWxsYmFjayIsICJ3cmFwcGVyIiwgImFyZ3MiLCAiZXZlbnRIYW5kbGVyIiwgImFkZCIsICJvbmNlIiwgImVtaXQiLCAiYm9keSIsICIkb25JbnRlcm5hbCIsICJoYW5kbGVyIiwgImhhcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZEludGVybmFsRXZlbnROYW1lIiwgIiRvbmNlSW50ZXJuYWwiLCAiaW5qZWN0IiwgImluamVjdGFibGUiLCAiQmFzZVJQQ1NlcnZpY2UiLCAiJGxvZ2dlclNlcnZpY2UiLCAiJFRJTUVPVVQiLCAiJGxvY2FsSGFuZGxlcnMiLCAiTWFwIiwgImNhbGwiLCAicnBjTmFtZSIsICJib2R5IiwgIm9wdGlvbnMiLCAidGltZW91dCIsICJQcm9taXNlIiwgInJlc29sdmUiLCAiaGFuZGxlciIsICJnZXQiLCAiUlBDX1JFU1VMVF9IQU5ETEVSX05PVF9GT1VORCIsICJ0aW1lb3V0SWQiLCAic2V0VGltZW91dCIsICJSUENfUkVTVUxUX1RJTUVPVVQiLCAicmVzdWx0IiwgImNsZWFyVGltZW91dCIsICJzdWNjZXNzIiwgInN0YXR1cyIsICJSUENSZXN1bHRTdGF0dXMiLCAiU3VjY2VzcyIsICJlcnJvciIsICJNYW5nb0Vycm9yIiwgIm1lc3NhZ2UiLCAiZGV0YWlscyIsICJSUENfUkVTVUxUX1VOS05PV04iLCAib25SZXF1ZXN0IiwgImhhcyIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiUlBDSGFuZGxlckFscmVhZHlFeGlzdHMiLCAicnBjSGFuZGxlciIsICJkZXN0cm95IiwgInZhbGlkIiwgImRlbGV0ZSIsICJzZXQiXQp9Cg==
@@ -1,176 +0,0 @@
1
- import {
2
- CoreMetadataKey
3
- } from "./chunk-TBWHLT75.js";
4
- import {
5
- ErrorMessage
6
- } from "./chunk-DXPVUDXD.js";
7
- import {
8
- isFunction,
9
- isNil,
10
- isString,
11
- isSymbol
12
- } from "./chunk-E6IQL4S6.js";
13
- import {
14
- LOGGER_SERVICE
15
- } from "./chunk-DJZCOYB3.js";
16
- import {
17
- __name
18
- } from "./chunk-7QVYU63E.js";
19
-
20
- // src/app/module/module-metadata.reader.ts
21
- import { inject, injectable } from "inversify";
22
- function _ts_decorate(decorators, target, key, desc) {
23
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
24
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
25
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
26
- return c > 3 && r && Object.defineProperty(target, key, r), r;
27
- }
28
- __name(_ts_decorate, "_ts_decorate");
29
- function _ts_metadata(k, v) {
30
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
31
- }
32
- __name(_ts_metadata, "_ts_metadata");
33
- var ModuleMetadataReader = class {
34
- static {
35
- __name(this, "ModuleMetadataReader");
36
- }
37
- loggerService;
38
- async read(module) {
39
- if (isFunction(module)) {
40
- const options2 = Reflect.getMetadata(CoreMetadataKey.Module, module) ?? {};
41
- const exportTokens2 = this.getExportTokens(options2.exports);
42
- const separatedProviders2 = this.separateProviders(options2.providers, exportTokens2);
43
- return {
44
- controllers: options2.controllers,
45
- imports: options2.imports,
46
- ...this.getPipeline(module),
47
- ...separatedProviders2,
48
- classRef: module,
49
- global: Reflect.getMetadata(CoreMetadataKey.GlobalModule, module) ?? false,
50
- container: options2.container
51
- };
52
- }
53
- if (module instanceof Promise) module = await module;
54
- if (!("module" in module)) {
55
- this.loggerService.error("An error occurred while reading module metadata.");
56
- throw new Error(ErrorMessage.InvalidModuleDefinition);
57
- }
58
- const { module: classRef, global, ...options } = module;
59
- const exportTokens = this.getExportTokens(options.exports);
60
- const separatedProviders = this.separateProviders(options.providers, exportTokens);
61
- return {
62
- controllers: options.controllers,
63
- imports: options.imports,
64
- ...this.getPipeline(classRef),
65
- ...separatedProviders,
66
- classRef,
67
- global: global ?? false,
68
- container: options.container
69
- };
70
- }
71
- getPipeline(classRef) {
72
- const guards = Reflect.getMetadata(CoreMetadataKey.Guards, classRef) ?? [];
73
- const interceptors = Reflect.getMetadata(CoreMetadataKey.Interceptors, classRef) ?? [];
74
- const pipes = Reflect.getMetadata(CoreMetadataKey.Pipes, classRef) ?? [];
75
- const errorFilters = Reflect.getMetadata(CoreMetadataKey.ErrorFilters, classRef) ?? [];
76
- return {
77
- guards,
78
- interceptors,
79
- pipes,
80
- errorFilters
81
- };
82
- }
83
- getExportTokens(exports) {
84
- return exports.map((providerExport) => {
85
- if (isFunction(providerExport)) {
86
- if (!Reflect.hasOwnMetadata(CoreMetadataKey.Injectable, providerExport)) {
87
- this.loggerService.error("An error occurred while reading module metadata.");
88
- throw new Error(ErrorMessage.InvalidExportDefinition);
89
- }
90
- return providerExport;
91
- } else if (isString(providerExport) || isSymbol(providerExport)) {
92
- return providerExport;
93
- } else if ("provide" in providerExport) {
94
- return providerExport.provide;
95
- }
96
- this.loggerService.error("An error occurred while reading module metadata.");
97
- throw new Error(ErrorMessage.InvalidExportDefinition);
98
- });
99
- }
100
- separateProviders(providers, exportTokens) {
101
- return providers.map((provider) => {
102
- if (isFunction(provider)) {
103
- const injectableMetadata = Reflect.getMetadata(CoreMetadataKey.Injectable, provider);
104
- if (isNil(injectableMetadata)) {
105
- this.loggerService.error("An error occurred while reading module metadata.");
106
- throw new Error(ErrorMessage.InvalidProviderDefinition);
107
- }
108
- return {
109
- provide: provider,
110
- useClass: provider,
111
- scope: injectableMetadata.scope
112
- };
113
- } else if ("useClass" in provider || "useValue" in provider || "useFactory" in provider || "useExisting" in provider) {
114
- return provider;
115
- }
116
- this.loggerService.error("An error occurred while reading module metadata.");
117
- throw new Error(ErrorMessage.InvalidProviderDefinition);
118
- }).reduce((acc, provider) => {
119
- if (exportTokens.includes(provider.provide)) {
120
- acc.externalProviders.set(provider.provide, provider);
121
- } else {
122
- acc.internalProviders.set(provider.provide, provider);
123
- }
124
- return acc;
125
- }, {
126
- internalProviders: /* @__PURE__ */ new Map(),
127
- externalProviders: /* @__PURE__ */ new Map()
128
- });
129
- }
130
- };
131
- _ts_decorate([
132
- inject(LOGGER_SERVICE),
133
- _ts_metadata("design:type", typeof LoggerService === "undefined" ? Object : LoggerService)
134
- ], ModuleMetadataReader.prototype, "loggerService", void 0);
135
- ModuleMetadataReader = _ts_decorate([
136
- injectable()
137
- ], ModuleMetadataReader);
138
-
139
- // src/app/module/module-container.ts
140
- import { Container } from "inversify";
141
- var ModuleContainer = class extends Container {
142
- static {
143
- __name(this, "ModuleContainer");
144
- }
145
- };
146
-
147
- // src/app/module/module.ts
148
- import { injectable as injectable2 } from "inversify";
149
- function _ts_decorate2(decorators, target, key, desc) {
150
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
151
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
152
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
153
- return c > 3 && r && Object.defineProperty(target, key, r), r;
154
- }
155
- __name(_ts_decorate2, "_ts_decorate");
156
- var Module = class {
157
- static {
158
- __name(this, "Module");
159
- }
160
- controllers = [];
161
- container;
162
- parent;
163
- metadata;
164
- instance;
165
- repetitiveImports = /* @__PURE__ */ new Set();
166
- };
167
- Module = _ts_decorate2([
168
- injectable2()
169
- ], Module);
170
-
171
- export {
172
- ModuleMetadataReader,
173
- ModuleContainer,
174
- Module
175
- };
176
- //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FwcC9tb2R1bGUvbW9kdWxlLW1ldGFkYXRhLnJlYWRlci50cyIsICIuLi9zcmMvYXBwL21vZHVsZS9tb2R1bGUtY29udGFpbmVyLnRzIiwgIi4uL3NyYy9hcHAvbW9kdWxlL21vZHVsZS50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsiaW1wb3J0IHsgaW5qZWN0LCBpbmplY3RhYmxlIH0gZnJvbSAnaW52ZXJzaWZ5JztcbmltcG9ydCB0eXBlIHsgSW5qZWN0aW9uVG9rZW4sIE5ld2FibGUgfSBmcm9tICcuLi8uLi90eXBlcyc7XG5pbXBvcnQgeyBDb3JlTWV0YWRhdGFLZXkgfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgdHlwZSB7IEluamVjdGFibGVNZXRhZGF0YSwgRXJyb3JGaWx0ZXIsIEd1YXJkLCBJbnRlcmNlcHRvciB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHR5cGUgeyBDbGFzc1Byb3ZpZGVyLCBEeW5hbWljTW9kdWxlLCBMb2dnZXJTZXJ2aWNlLCBNb2R1bGVPcHRpb25zLCBQaXBlLCBQcm92aWRlciB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgaXNGdW5jdGlvbiwgaXNOaWwsIGlzU3RyaW5nLCBpc1N5bWJvbCB9IGZyb20gJy4uLy4uL3V0aWxzJztcbmltcG9ydCB7IEVycm9yTWVzc2FnZSB9IGZyb20gJy4uLy4uL2VudW1zJztcbmltcG9ydCB7IExPR0dFUl9TRVJWSUNFIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZHVsZU1ldGFkYXRhUmVhZGVyIHtcbiAgICBAaW5qZWN0KExPR0dFUl9TRVJWSUNFKSBwcml2YXRlIHJlYWRvbmx5IGxvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XG5cbiAgICBwdWJsaWMgYXN5bmMgcmVhZChtb2R1bGU6IE5ld2FibGUgfCBEeW5hbWljTW9kdWxlIHwgUHJvbWlzZTxEeW5hbWljTW9kdWxlPikge1xuICAgICAgICAvLyBDbGFzcyByZWZlcmVuY2VcbiAgICAgICAgaWYgKGlzRnVuY3Rpb24obW9kdWxlKSkge1xuICAgICAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFJlZmxlY3QuZ2V0TWV0YWRhdGE8UmVxdWlyZWQ8TW9kdWxlT3B0aW9ucz4+KENvcmVNZXRhZGF0YUtleS5Nb2R1bGUsIG1vZHVsZSkgPz8gPFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+Pnt9O1xuICAgICAgICAgICAgY29uc3QgZXhwb3J0VG9rZW5zID0gdGhpcy5nZXRFeHBvcnRUb2tlbnMob3B0aW9ucy5leHBvcnRzKTtcbiAgICAgICAgICAgIGNvbnN0IHNlcGFyYXRlZFByb3ZpZGVycyA9IHRoaXMuc2VwYXJhdGVQcm92aWRlcnMob3B0aW9ucy5wcm92aWRlcnMsIGV4cG9ydFRva2Vucyk7XG5cbiAgICAgICAgICAgIHJldHVybiA8TW9kdWxlTWV0YWRhdGE+e1xuICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJzOiBvcHRpb25zLmNvbnRyb2xsZXJzLFxuICAgICAgICAgICAgICAgIGltcG9ydHM6IG9wdGlvbnMuaW1wb3J0cyxcbiAgICAgICAgICAgICAgICAuLi50aGlzLmdldFBpcGVsaW5lKG1vZHVsZSksXG4gICAgICAgICAgICAgICAgLi4uc2VwYXJhdGVkUHJvdmlkZXJzLFxuICAgICAgICAgICAgICAgIGNsYXNzUmVmOiBtb2R1bGUsXG4gICAgICAgICAgICAgICAgZ2xvYmFsOiBSZWZsZWN0LmdldE1ldGFkYXRhPGJvb2xlYW4+KENvcmVNZXRhZGF0YUtleS5HbG9iYWxNb2R1bGUsIG1vZHVsZSkgPz8gZmFsc2UsXG4gICAgICAgICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLmNvbnRhaW5lcixcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgLy8gRHluYW1pYyBtb2R1bGVcbiAgICAgICAgaWYgKG1vZHVsZSBpbnN0YW5jZW9mIFByb21pc2UpIG1vZHVsZSA9IGF3YWl0IG1vZHVsZTtcbiAgICAgICAgaWYgKCEoJ21vZHVsZScgaW4gbW9kdWxlKSkge1xuICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZE1vZHVsZURlZmluaXRpb24pO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBtb2R1bGU6IGNsYXNzUmVmLCBnbG9iYWwsIC4uLm9wdGlvbnMgfSA9IDxSZXF1aXJlZDxEeW5hbWljTW9kdWxlPj5tb2R1bGU7XG4gICAgICAgIGNvbnN0IGV4cG9ydFRva2VucyA9IHRoaXMuZ2V0RXhwb3J0VG9rZW5zKG9wdGlvbnMuZXhwb3J0cyk7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRlZFByb3ZpZGVycyA9IHRoaXMuc2VwYXJhdGVQcm92aWRlcnMob3B0aW9ucy5wcm92aWRlcnMsIGV4cG9ydFRva2Vucyk7XG5cbiAgICAgICAgcmV0dXJuIDxNb2R1bGVNZXRhZGF0YT57XG4gICAgICAgICAgICBjb250cm9sbGVyczogb3B0aW9ucy5jb250cm9sbGVycyxcbiAgICAgICAgICAgIGltcG9ydHM6IG9wdGlvbnMuaW1wb3J0cyxcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0UGlwZWxpbmUoY2xhc3NSZWYpLFxuICAgICAgICAgICAgLi4uc2VwYXJhdGVkUHJvdmlkZXJzLFxuICAgICAgICAgICAgY2xhc3NSZWYsXG4gICAgICAgICAgICBnbG9iYWw6IGdsb2JhbCA/PyBmYWxzZSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy5jb250YWluZXIsXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRQaXBlbGluZShjbGFzc1JlZjogTmV3YWJsZSkge1xuICAgICAgICBjb25zdCBndWFyZHMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8R3VhcmQ+W10+KENvcmVNZXRhZGF0YUtleS5HdWFyZHMsIGNsYXNzUmVmKSA/PyBbXTtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3JzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPEludGVyY2VwdG9yPltdPihDb3JlTWV0YWRhdGFLZXkuSW50ZXJjZXB0b3JzLCBjbGFzc1JlZikgPz8gW107XG4gICAgICAgIGNvbnN0IHBpcGVzID0gUmVmbGVjdC5nZXRNZXRhZGF0YTxOZXdhYmxlPFBpcGU+W10+KENvcmVNZXRhZGF0YUtleS5QaXBlcywgY2xhc3NSZWYpID8/IFtdO1xuICAgICAgICBjb25zdCBlcnJvckZpbHRlcnMgPSBSZWZsZWN0LmdldE1ldGFkYXRhPE5ld2FibGU8RXJyb3JGaWx0ZXI+W10+KENvcmVNZXRhZGF0YUtleS5FcnJvckZpbHRlcnMsIGNsYXNzUmVmKSA/PyBbXTtcblxuICAgICAgICByZXR1cm4geyBndWFyZHMsIGludGVyY2VwdG9ycywgcGlwZXMsIGVycm9yRmlsdGVycyB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RXhwb3J0VG9rZW5zKGV4cG9ydHM6IFJlcXVpcmVkPE1vZHVsZU9wdGlvbnM+WydleHBvcnRzJ10pIHtcbiAgICAgICAgcmV0dXJuIGV4cG9ydHMubWFwPEluamVjdGlvblRva2VuPigocHJvdmlkZXJFeHBvcnQpID0+IHtcbiAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ZpZGVyRXhwb3J0KSkge1xuICAgICAgICAgICAgICAgIGlmICghUmVmbGVjdC5oYXNPd25NZXRhZGF0YShDb3JlTWV0YWRhdGFLZXkuSW5qZWN0YWJsZSwgcHJvdmlkZXJFeHBvcnQpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFcnJvck1lc3NhZ2UuSW52YWxpZEV4cG9ydERlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJFeHBvcnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nKHByb3ZpZGVyRXhwb3J0KSB8fCBpc1N5bWJvbChwcm92aWRlckV4cG9ydCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXJFeHBvcnQ7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCdwcm92aWRlJyBpbiBwcm92aWRlckV4cG9ydCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcm92aWRlckV4cG9ydC5wcm92aWRlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmxvZ2dlclNlcnZpY2UuZXJyb3IoJ0FuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlYWRpbmcgbW9kdWxlIG1ldGFkYXRhLicpO1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVycm9yTWVzc2FnZS5JbnZhbGlkRXhwb3J0RGVmaW5pdGlvbik7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2VwYXJhdGVQcm92aWRlcnMocHJvdmlkZXJzOiBSZXF1aXJlZDxNb2R1bGVPcHRpb25zPlsncHJvdmlkZXJzJ10sIGV4cG9ydFRva2VuczogSW5qZWN0aW9uVG9rZW5bXSkge1xuICAgICAgICByZXR1cm4gcHJvdmlkZXJzXG4gICAgICAgICAgICAubWFwKChwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHByb3ZpZGVyKSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmplY3RhYmxlTWV0YWRhdGEgPSBSZWZsZWN0LmdldE1ldGFkYXRhPEluamVjdGFibGVNZXRhZGF0YT4oQ29yZU1ldGFkYXRhS2V5LkluamVjdGFibGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzTmlsKGluamVjdGFibGVNZXRhZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubG9nZ2VyU2VydmljZS5lcnJvcignQW4gZXJyb3Igb2NjdXJyZWQgd2hpbGUgcmVhZGluZyBtb2R1bGUgbWV0YWRhdGEuJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQcm92aWRlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiA8Q2xhc3NQcm92aWRlcj57IHByb3ZpZGU6IHByb3ZpZGVyLCB1c2VDbGFzczogcHJvdmlkZXIsIHNjb3BlOiBpbmplY3RhYmxlTWV0YWRhdGEuc2NvcGUgfTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCd1c2VDbGFzcycgaW4gcHJvdmlkZXIgfHwgJ3VzZVZhbHVlJyBpbiBwcm92aWRlciB8fCAndXNlRmFjdG9yeScgaW4gcHJvdmlkZXIgfHwgJ3VzZUV4aXN0aW5nJyBpbiBwcm92aWRlcikge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvdmlkZXI7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgdGhpcy5sb2dnZXJTZXJ2aWNlLmVycm9yKCdBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSByZWFkaW5nIG1vZHVsZSBtZXRhZGF0YS4nKTtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRXJyb3JNZXNzYWdlLkludmFsaWRQcm92aWRlckRlZmluaXRpb24pO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgKGFjYywgcHJvdmlkZXIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGV4cG9ydFRva2Vucy5pbmNsdWRlcyhwcm92aWRlci5wcm92aWRlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYWNjLmV4dGVybmFsUHJvdmlkZXJzLnNldChwcm92aWRlci5wcm92aWRlLCBwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhY2MuaW50ZXJuYWxQcm92aWRlcnMuc2V0KHByb3ZpZGVyLnByb3ZpZGUsIHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbFByb3ZpZGVyczogbmV3IE1hcDxJbmplY3Rpb25Ub2tlbiwgRXhjbHVkZTxQcm92aWRlciwgTmV3YWJsZT4+KCksXG4gICAgICAgICAgICAgICAgICAgIGV4dGVybmFsUHJvdmlkZXJzOiBuZXcgTWFwPEluamVjdGlvblRva2VuLCBFeGNsdWRlPFByb3ZpZGVyLCBOZXdhYmxlPj4oKSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgKTtcbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgQ29udGFpbmVyIH0gZnJvbSAnaW52ZXJzaWZ5JztcblxuZXhwb3J0IGNsYXNzIE1vZHVsZUNvbnRhaW5lciBleHRlbmRzIENvbnRhaW5lciB7fVxuIiwgImltcG9ydCB7IGluamVjdGFibGUgfSBmcm9tICdpbnZlcnNpZnknO1xuaW1wb3J0IHsgQ29udHJvbGxlciB9IGZyb20gJy4uL2NvbnRyb2xsZXInO1xuaW1wb3J0IHR5cGUgeyBNb2R1bGVNZXRhZGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgTW9kdWxlQ29udGFpbmVyIH0gZnJvbSAnLi9tb2R1bGUtY29udGFpbmVyJztcblxuQGluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE1vZHVsZSB7XG4gICAgcHVibGljIHJlYWRvbmx5IGNvbnRyb2xsZXJzOiBDb250cm9sbGVyW10gPSBbXTtcbiAgICBwdWJsaWMgY29udGFpbmVyOiBNb2R1bGVDb250YWluZXI7XG4gICAgcHVibGljIHBhcmVudDogTW9kdWxlIHwgdW5kZWZpbmVkO1xuICAgIHB1YmxpYyBtZXRhZGF0YTogTW9kdWxlTWV0YWRhdGE7XG4gICAgcHVibGljIGluc3RhbmNlOiB7IFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uIH07XG4gICAgcHVibGljIHJlcGV0aXRpdmVJbXBvcnRzOiBTZXQ8TW9kdWxlPiA9IG5ldyBTZXQoKTtcbn1cbiJdLAogICJtYXBwaW5ncyI6ICI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsU0FBU0EsUUFBUUMsa0JBQWtCOzs7Ozs7Ozs7Ozs7QUFXNUIsSUFBTUMsdUJBQU4sTUFBTUE7U0FBQUE7OztFQUNnQ0M7RUFFekMsTUFBYUMsS0FBS0MsUUFBMEQ7QUFFeEUsUUFBSUMsV0FBV0QsTUFBQUEsR0FBUztBQUNwQixZQUFNRSxXQUFVQyxRQUFRQyxZQUFxQ0MsZ0JBQWdCQyxRQUFRTixNQUFBQSxLQUFvQyxDQUFDO0FBQzFILFlBQU1PLGdCQUFlLEtBQUtDLGdCQUFnQk4sU0FBUU8sT0FBTztBQUN6RCxZQUFNQyxzQkFBcUIsS0FBS0Msa0JBQWtCVCxTQUFRVSxXQUFXTCxhQUFBQTtBQUVyRSxhQUF1QjtRQUNuQk0sYUFBYVgsU0FBUVc7UUFDckJDLFNBQVNaLFNBQVFZO1FBQ2pCLEdBQUcsS0FBS0MsWUFBWWYsTUFBQUE7UUFDcEIsR0FBR1U7UUFDSE0sVUFBVWhCO1FBQ1ZpQixRQUFRZCxRQUFRQyxZQUFxQkMsZ0JBQWdCYSxjQUFjbEIsTUFBQUEsS0FBVztRQUM5RW1CLFdBQVdqQixTQUFRaUI7TUFDdkI7SUFDSjtBQUVBLFFBQUluQixrQkFBa0JvQixRQUFTcEIsVUFBUyxNQUFNQTtBQUM5QyxRQUFJLEVBQUUsWUFBWUEsU0FBUztBQUN2QixXQUFLRixjQUFjdUIsTUFBTSxrREFBQTtBQUN6QixZQUFNLElBQUlDLE1BQU1DLGFBQWFDLHVCQUF1QjtJQUN4RDtBQUVBLFVBQU0sRUFBRXhCLFFBQVFn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QThCQyxVQUFBQTtFQUZyQyxPQUVxQ0E7OztBQUFXOzs7QUNGaEQsU0FBU0MsY0FBQUEsbUJBQWtCOzs7Ozs7OztBQU1wQixJQUFNQyxTQUFOLE1BQU1BO1NBQUFBOzs7RUFDT0MsY0FBNEIsQ0FBQTtFQUNyQ0M7RUFDQUM7RUFDQUM7RUFDQUM7RUFDQUMsb0JBQWlDLG9CQUFJQyxJQUFBQTtBQUNoRDs7OzsiLAogICJuYW1lcyI6IFsiaW5qZWN0IiwgImluamVjdGFibGUiLCAiTW9kdWxlTWV0YWRhdGFSZWFkZXIiLCAibG9nZ2VyU2VydmljZSIsICJyZWFkIiwgIm1vZHVsZSIsICJpc0Z1bmN0aW9uIiwgIm9wdGlvbnMiLCAiUmVmbGVjdCIsICJnZXRNZXRhZGF0YSIsICJDb3JlTWV0YWRhdGFLZXkiLCAiTW9kdWxlIiwgImV4cG9ydFRva2VucyIsICJnZXRFeHBvcnRUb2tlbnMiLCAiZXhwb3J0cyIsICJzZXBhcmF0ZWRQcm92aWRlcnMiLCAic2VwYXJhdGVQcm92aWRlcnMiLCAicHJvdmlkZXJzIiwgImNvbnRyb2xsZXJzIiwgImltcG9ydHMiLCAiZ2V0UGlwZWxpbmUiLCAiY2xhc3NSZWYiLCAiZ2xvYmFsIiwgIkdsb2JhbE1vZHVsZSIsICJjb250YWluZXIiLCAiUHJvbWlzZSIsICJlcnJvciIsICJFcnJvciIsICJFcnJvck1lc3NhZ2UiLCAiSW52YWxpZE1vZHVsZURlZmluaXRpb24iLCAiZ3VhcmRzIiwgIkd1YXJkcyIsICJpbnRlcmNlcHRvcnMiLCAiSW50ZXJjZXB0b3JzIiwgInBpcGVzIiwgIlBpcGVzIiwgImVycm9yRmlsdGVycyIsICJFcnJvckZpbHRlcnMiLCAibWFwIiwgInByb3ZpZGVyRXhwb3J0IiwgImhhc093bk1ldGFkYXRhIiwgIkluamVjdGFibGUiLCAiSW52YWxpZEV4cG9ydERlZmluaXRpb24iLCAiaXNTdHJpbmciLCAiaXNTeW1ib2wiLCAicHJvdmlkZSIsICJwcm92aWRlciIsICJpbmplY3RhYmxlTWV0YWRhdGEiLCAiaXNOaWwiLCAiSW52YWxpZFByb3ZpZGVyRGVmaW5pdGlvbiIsICJ1c2VDbGFzcyIsICJzY29wZSIsICJyZWR1Y2UiLCAiYWNjIiwgImluY2x1ZGVzIiwgImV4dGVybmFsUHJvdmlkZXJzIiwgInNldCIsICJpbnRlcm5hbFByb3ZpZGVycyIsICJNYXAiLCAiQ29udGFpbmVyIiwgIk1vZHVsZUNvbnRhaW5lciIsICJDb250YWluZXIiLCAiaW5qZWN0YWJsZSIsICJNb2R1bGUiLCAiY29udHJvbGxlcnMiLCAiY29udGFpbmVyIiwgInBhcmVudCIsICJtZXRhZGF0YSIsICJpbnN0YW5jZSIsICJyZXBldGl0aXZlSW1wb3J0cyIsICJTZXQiXQp9Cg==