1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const Emitter = require("component-emitter");
|
4 | /**
|
5 | * 所有服务模块的父类
|
6 | */
|
7 | class BaseServiceModule extends Emitter {
|
8 | constructor() {
|
9 | super(...arguments);
|
10 | /**
|
11 | * 简化对其他注册服务的获取
|
12 | */
|
13 | this.services = new Proxy({}, {
|
14 | get: (_, property) => {
|
15 | if (this._servicesManager !== undefined) {
|
16 | const rs = this._servicesManager.services.get(property);
|
17 | if (rs !== undefined)
|
18 | return rs.service;
|
19 | }
|
20 | }
|
21 | });
|
22 | }
|
23 | /**
|
24 | * 获取当前服务的名称(默认是类名)
|
25 | */
|
26 | get name() {
|
27 | return this.constructor.name;
|
28 | }
|
29 | /**
|
30 | * 当前模块的运行状态
|
31 | */
|
32 | get runningStatus() {
|
33 | return this._runningStatus;
|
34 | }
|
35 | set runningStatus(v) {
|
36 | this._runningStatus = v;
|
37 | }
|
38 | /**
|
39 | * 对于服务管理器的引用。
|
40 | * 当服务注册之后,服务管理器会自动对该属性进行绑定
|
41 | */
|
42 | get servicesManager() {
|
43 | return this._servicesManager;
|
44 | }
|
45 | set servicesManager(v) {
|
46 | //确保只能被设置一次
|
47 | if (this._servicesManager === undefined)
|
48 | this._servicesManager = v;
|
49 | else
|
50 | throw new Error(`模块:${this.name}:不允许重复设置ServicesManager`);
|
51 | }
|
52 | /**
|
53 | * 停止服务
|
54 | * 注意:停止过程中出现的错误直接通过Promise.reject()来处理。停止过程中不要出现未捕获异常
|
55 | *
|
56 | * @returns {Promise<void>}
|
57 | */
|
58 | onStop() {
|
59 | return Promise.resolve();
|
60 | }
|
61 | /**
|
62 | * 当服务发生异常时,这个方法会在全局错误处理方法(BaseServicesManager的onError)之前被调用。
|
63 | * 注意:该方法只有当服务在运行过程中发生错误时(通过this.emit('error')触发的错误),该方法才会被调用。
|
64 | *
|
65 | * 返回false、undefined或null :错误将继续交由全局错误处理方法处理
|
66 | * 返回true :错误不再交由全局错误处理方法处理
|
67 | * 返回{errName: string | undefined, err: Error} :替换错误的内容,将新的Error交由全局错误处理方法继续处理
|
68 | *
|
69 | * @param errName 错误消息的名称
|
70 | * @param err 错误消息
|
71 | */
|
72 | onError(errName, err) {
|
73 | return Promise.resolve();
|
74 | }
|
75 | /**
|
76 | * 检查当前服务运行是否正常。
|
77 | * 如果正常直接Promise.resolve(),如果出现问题直接Promise.reject(new Error())
|
78 | *
|
79 | * @returns {Promise<void>}
|
80 | */
|
81 | onHealthCheck() {
|
82 | return Promise.resolve();
|
83 | }
|
84 | on(event, listener) {
|
85 | super.on(event, listener);
|
86 | return this;
|
87 | }
|
88 | once(event, listener) {
|
89 | super.once(event, listener);
|
90 | return this;
|
91 | }
|
92 | emit(event, ...args) {
|
93 | if (event === 'error') {
|
94 | let errName, err;
|
95 | if (args[0] instanceof Error) {
|
96 | err = args[0];
|
97 | }
|
98 | else {
|
99 | errName = args[0];
|
100 | err = args[1];
|
101 | }
|
102 | return super.emit(event, errName, err);
|
103 | }
|
104 | else {
|
105 | return super.emit(event, ...args);
|
106 | }
|
107 | }
|
108 | }
|
109 | exports.BaseServiceModule = BaseServiceModule;
|
110 |
|
111 | //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1vbi9CYXNlU2VydmljZU1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBLDZDQUE2QztBQUU3Qzs7R0FFRztBQUNILHVCQUF3QyxTQUFRLE9BQU87SUFBdkQ7O1FBb0NJOztXQUVHO1FBQ00sYUFBUSxHQUFRLElBQUksS0FBSyxDQUFDLEVBQUUsRUFBRTtZQUNuQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBZ0I7Z0JBQ3JCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDO29CQUN0QyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQztvQkFDeEQsRUFBRSxDQUFDLENBQUMsRUFBRSxLQUFLLFNBQVMsQ0FBQzt3QkFDakIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUM7Z0JBQzFCLENBQUM7WUFDTCxDQUFDO1NBQ0osQ0FBQyxDQUFDO0lBZ0dQLENBQUM7SUE3SUc7O09BRUc7SUFDSCxJQUFJLElBQUk7UUFDSixNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBSSxhQUFhO1FBQ2IsTUFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDL0IsQ0FBQztJQUNELElBQUksYUFBYSxDQUFDLENBQWdCO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFHRDs7O09BR0c7SUFDSCxJQUFJLGVBQWU7UUFDZixNQUFNLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDO0lBQ2pDLENBQUM7SUFDRCxJQUFJLGVBQWUsQ0FBQyxDQUFzQjtRQUN0QyxXQUFXO1FBQ1gsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLGdCQUFnQixLQUFLLFNBQVMsQ0FBQztZQUNwQyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsQ0FBQyxDQUFDO1FBQzlCLElBQUk7WUFDQSxNQUFNLElBQUksS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUkseUJBQXlCLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBMkJEOzs7OztPQUtHO0lBQ0gsTUFBTTtRQUNGLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7Ozs7Ozs7O09BVUc7SUFDSCxPQUFPLENBQUMsT0FBMkIsRUFBRSxHQUFVO1FBQzNDLE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0gsYUFBYTtRQUNULE1BQU0sQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQztJQU1ELEVBQUUsQ0FBQyxLQUFhLEVBQUUsUUFBa0I7UUFDaEMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLElBQUksQ0FBQztJQUNoQixDQUFDO0lBR0QsSUFBSSxDQUFDLEtBQWEsRUFBRSxRQUFrQjtRQUNsQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFxQkQsSUFBSSxDQUFDLEtBQWEsRUFBRSxHQUFHLElBQVc7UUFDOUIsRUFBRSxDQUFDLENBQUMsS0FBSyxLQUFLLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDcEIsSUFBSSxPQUFPLEVBQUUsR0FBRyxDQUFDO1lBQ2pCLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDO2dCQUMzQixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFBQyxJQUFJLENBQUMsQ0FBQztnQkFDSixPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUNsQixHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2xCLENBQUM7WUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBQzNDLENBQUM7UUFBQyxJQUFJLENBQUMsQ0FBQztZQUNKLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ3RDLENBQUM7SUFDTCxDQUFDO0NBQ0o7QUEvSUQsOENBK0lDIiwiZmlsZSI6ImNvbW1vbi9CYXNlU2VydmljZU1vZHVsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJhc2VTZXJ2aWNlc01hbmFnZXIgfSBmcm9tIFwiLi9CYXNlU2VydmljZXNNYW5hZ2VyXCI7XHJcbmltcG9ydCB7IFJ1bm5pbmdTdGF0dXMgfSBmcm9tICcuL1J1bm5pbmdTdGF0dXMnO1xyXG5pbXBvcnQgKiBhcyBFbWl0dGVyIGZyb20gJ2NvbXBvbmVudC1lbWl0dGVyJztcclxuXHJcbi8qKlxyXG4gKiDmiYDmnInmnI3liqHmqKHlnZfnmoTniLbnsbsgICAgXHJcbiAqL1xyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2VNb2R1bGUgZXh0ZW5kcyBFbWl0dGVyIHtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPluW9k+WJjeacjeWKoeeahOWQjeensO+8iOm7mOiupOaYr+exu+WQje+8iVxyXG4gICAgICovXHJcbiAgICBnZXQgbmFtZSgpOiBzdHJpbmcge1xyXG4gICAgICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLm5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlvZPliY3mqKHlnZfnmoTov5DooYznirbmgIFcclxuICAgICAqL1xyXG4gICAgZ2V0IHJ1bm5pbmdTdGF0dXMoKTogUnVubmluZ1N0YXR1cyB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3J1bm5pbmdTdGF0dXM7XHJcbiAgICB9XHJcbiAgICBzZXQgcnVubmluZ1N0YXR1cyh2OiBSdW5uaW5nU3RhdHVzKSB7XHJcbiAgICAgICAgdGhpcy5fcnVubmluZ1N0YXR1cyA9IHY7XHJcbiAgICB9XHJcbiAgICBwcml2YXRlIF9ydW5uaW5nU3RhdHVzOiBSdW5uaW5nU3RhdHVzO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5a+55LqO5pyN5Yqh566h55CG5Zmo55qE5byV55So44CCICAgIFxyXG4gICAgICog5b2T5pyN5Yqh5rOo5YaM5LmL5ZCO77yM5pyN5Yqh566h55CG5Zmo5Lya6Ieq5Yqo5a+56K+l5bGe5oCn6L+b6KGM57uR5a6aXHJcbiAgICAgKi9cclxuICAgIGdldCBzZXJ2aWNlc01hbmFnZXIoKTogQmFzZVNlcnZpY2VzTWFuYWdlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX3NlcnZpY2VzTWFuYWdlcjtcclxuICAgIH1cclxuICAgIHNldCBzZXJ2aWNlc01hbmFnZXIodjogQmFzZVNlcnZpY2VzTWFuYWdlcikge1xyXG4gICAgICAgIC8v56Gu5L+d5Y+q6IO96KKr6K6+572u5LiA5qyhXHJcbiAgICAgICAgaWYgKHRoaXMuX3NlcnZpY2VzTWFuYWdlciA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICAgICAgICB0aGlzLl9zZXJ2aWNlc01hbmFnZXIgPSB2O1xyXG4gICAgICAgIGVsc2VcclxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGDmqKHlnZfvvJoke3RoaXMubmFtZX3vvJrkuI3lhYHorrjph43lpI3orr7nva5TZXJ2aWNlc01hbmFnZXJgKTtcclxuICAgIH1cclxuICAgIHByaXZhdGUgX3NlcnZpY2VzTWFuYWdlcjogQmFzZVNlcnZpY2VzTWFuYWdlcjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIOeugOWMluWvueWFtuS7luazqOWGjOacjeWKoeeahOiOt+WPllxyXG4gICAgICovXHJcbiAgICByZWFkb25seSBzZXJ2aWNlczogYW55ID0gbmV3IFByb3h5KHt9LCB7XHJcbiAgICAgICAgZ2V0OiAoXywgcHJvcGVydHk6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc2VydmljZXNNYW5hZ2VyICE9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJzID0gdGhpcy5fc2VydmljZXNNYW5hZ2VyLnNlcnZpY2VzLmdldChwcm9wZXJ0eSk7XHJcbiAgICAgICAgICAgICAgICBpZiAocnMgIT09IHVuZGVmaW5lZClcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcnMuc2VydmljZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICog5ZCv5Yqo5pyN5YqhICAgICBcclxuICAgICAqIOazqOaEj++8muWQr+WKqOi/h+eoi+S4reWHuueOsOeahOmUmeivr+ebtOaOpemAmui/h1Byb21pc2UucmVqZWN0KCnmnaXlpITnkIbjgIJcclxuICAgICAqIOWQr+WKqOS5i+WQjijov5DooYzov4fnqIvkuK0p5Ye6546w55qE6ZSZ6K+v77yM6YCa6L+HdGhpcy5lbWl0KCdlcnJvcicp5p2l5aSE55CG44CCXHJcbiAgICAgKiDlsL3lj6/og73lpJrlnLDmjZXmjYnlvILluLjvvIznhLblkI7lnKhvbkVycm9y5Lit5aSE55CG77yM5pyq5o2V5o2J55qE5byC5bi45qC55o2u5bmz5Y+w55qE5LiN5ZCM5Y+v6IO95Lya5a+86Ie056iL5bqP55u05o6l6KKr5YWz6Zet44CCXHJcbiAgICAgKiBcclxuICAgICAqIEBhYnN0cmFjdFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFxyXG4gICAgICovXHJcbiAgICBhYnN0cmFjdCBvblN0YXJ0KCk6IFByb21pc2U8dm9pZD47XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlgZzmraLmnI3liqEgICAgIFxyXG4gICAgICog5rOo5oSP77ya5YGc5q2i6L+H56iL5Lit5Ye6546w55qE6ZSZ6K+v55u05o6l6YCa6L+HUHJvbWlzZS5yZWplY3QoKeadpeWkhOeQhuOAguWBnOatoui/h+eoi+S4reS4jeimgeWHuueOsOacquaNleiOt+W8guW4uFxyXG4gICAgICogXHJcbiAgICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn0gXHJcbiAgICAgKi9cclxuICAgIG9uU3RvcCgpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDlvZPmnI3liqHlj5HnlJ/lvILluLjml7bvvIzov5nkuKrmlrnms5XkvJrlnKjlhajlsYDplJnor6/lpITnkIbmlrnms5UoQmFzZVNlcnZpY2VzTWFuYWdlcueahG9uRXJyb3Ip5LmL5YmN6KKr6LCD55So44CCICAgICAgXHJcbiAgICAgKiDms6jmhI/vvJror6Xmlrnms5Xlj6rmnInlvZPmnI3liqHlnKjov5DooYzov4fnqIvkuK3lj5HnlJ/plJnor6/ml7bvvIjpgJrov4d0aGlzLmVtaXQoJ2Vycm9yJynop6blj5HnmoTplJnor6/vvInvvIzor6Xmlrnms5XmiY3kvJrooqvosIPnlKjjgIIgICAgXHJcbiAgICAgKiBcclxuICAgICAqIOi/lOWbnmZhbHNl44CBdW5kZWZpbmVk5oiWbnVsbCAgICAgICAgICAgICAgICAgICAgIO+8mumUmeivr+Wwhue7p+e7reS6pOeUseWFqOWxgOmUmeivr+WkhOeQhuaWueazleWkhOeQhiAgIFxyXG4gICAgICog6L+U5ZuedHJ1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIO+8mumUmeivr+S4jeWGjeS6pOeUseWFqOWxgOmUmeivr+WkhOeQhuaWueazleWkhOeQhiAgIFxyXG4gICAgICog6L+U5Zuee2Vyck5hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCwgZXJyOiBFcnJvcn0gIO+8muabv+aNoumUmeivr+eahOWGheWuue+8jOWwhuaWsOeahEVycm9y5Lqk55Sx5YWo5bGA6ZSZ6K+v5aSE55CG5pa55rOV57un57ut5aSE55CGICAgXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSBlcnJOYW1lIOmUmeivr+a2iOaBr+eahOWQjeensFxyXG4gICAgICogQHBhcmFtIGVyciDplJnor6/mtojmga9cclxuICAgICAqL1xyXG4gICAgb25FcnJvcihlcnJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVycjogRXJyb3IpOiBQcm9taXNlPHsgZXJyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBlcnI6IEVycm9yIH0gfCBib29sZWFuIHwgdm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOajgOafpeW9k+WJjeacjeWKoei/kOihjOaYr+WQpuato+W4uOOAgiAgIFxyXG4gICAgICog5aaC5p6c5q2j5bi455u05o6lUHJvbWlzZS5yZXNvbHZlKCnvvIzlpoLmnpzlh7rnjrDpl67popjnm7TmjqVQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoKSlcclxuICAgICAqIFxyXG4gICAgICogQHJldHVybnMge1Byb21pc2U8dm9pZD59IFxyXG4gICAgICovXHJcbiAgICBvbkhlYWx0aENoZWNrKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIOaooeWdl+i/kOihjOi/h+eoi+S4reWPkeeUn+eahOS7jumUmeivr1xyXG4gICAgICovXHJcbiAgICBvbihldmVudDogJ2Vycm9yJywgbGlzdGVuZXI6IChlcnJOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsIGVycjogRXJyb3IpID0+IGFueSk6IHRoaXM7XHJcbiAgICBvbihldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiB0aGlzIHtcclxuICAgICAgICBzdXBlci5vbihldmVudCwgbGlzdGVuZXIpO1xyXG4gICAgICAgIHJldHVybiB0aGlzO1xyXG4gICAgfVxyXG5cclxuICAgIG9uY2UoZXZlbnQ6ICdlcnJvcicsIGxpc3RlbmVyOiAoZXJyTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLCBlcnI6IEVycm9yKSA9PiBhbnkpOiB0aGlzO1xyXG4gICAgb25jZShldmVudDogc3RyaW5nLCBsaXN0ZW5lcjogRnVuY3Rpb24pOiB0aGlzIHtcclxuICAgICAgICBzdXBlci5vbmNlKGV2ZW50LCBsaXN0ZW5lcik7XHJcbiAgICAgICAgcmV0dXJuIHRoaXM7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiDop6blj5HplJnor6/kuovku7bjgILlubborr7nva7plJnor6/kuovku7bnmoRlcnJOYW1l5Li6dW5kZWZpbmVkXHJcbiAgICAgKiBcclxuICAgICAqIEBwYXJhbSB7J2Vycm9yJ30gZXZlbnQgXHJcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIg6ZSZ6K+v5raI5oGvXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gXHJcbiAgICAgKiBAbWVtYmVyb2YgQmFzZVNlcnZpY2VNb2R1bGVcclxuICAgICAqL1xyXG4gICAgZW1pdChldmVudDogJ2Vycm9yJywgZXJyOiBFcnJvcik6IGJvb2xlYW47XHJcbiAgICAvKipcclxuICAgICAqIOinpuWPkemUmeivr+S6i+S7tuOAglxyXG4gICAgICogXHJcbiAgICAgKiBAcGFyYW0geydlcnJvcid9IGV2ZW50IFxyXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGVyck5hbWUg6ZSZ6K+v5raI5oGv55qE5ZCN56ewXHJcbiAgICAgKiBAcGFyYW0ge0Vycm9yfSBlcnIg6ZSZ6K+v5raI5oGvXHJcbiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gXHJcbiAgICAgKiBAbWVtYmVyb2YgQmFzZVNlcnZpY2VNb2R1bGVcclxuICAgICAqL1xyXG4gICAgZW1pdChldmVudDogJ2Vycm9yJywgZXJyTmFtZTogc3RyaW5nLCBlcnI6IEVycm9yKTogYm9vbGVhbjtcclxuICAgIGVtaXQoZXZlbnQ6IHN0cmluZywgLi4uYXJnczogYW55W10pOiBib29sZWFuIHtcclxuICAgICAgICBpZiAoZXZlbnQgPT09ICdlcnJvcicpIHtcclxuICAgICAgICAgICAgbGV0IGVyck5hbWUsIGVycjtcclxuICAgICAgICAgICAgaWYgKGFyZ3NbMF0gaW5zdGFuY2VvZiBFcnJvcikge1xyXG4gICAgICAgICAgICAgICAgZXJyID0gYXJnc1swXTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGVyck5hbWUgPSBhcmdzWzBdO1xyXG4gICAgICAgICAgICAgICAgZXJyID0gYXJnc1sxXTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZW1pdChldmVudCwgZXJyTmFtZSwgZXJyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIuZW1pdChldmVudCwgLi4uYXJncyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59Il19
|