@stemy/backend 3.0.1 → 3.1.2

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.
@@ -22,9 +22,11 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
22
22
  import { inject, injectable, injectAll, Lifecycle, scoped } from "tsyringe";
23
23
  import { schedule, validate } from "node-cron";
24
24
  import { socket } from "zeromq";
25
+ import { Subject } from "rxjs";
26
+ import { filter, map } from "rxjs/operators";
25
27
  import { ObjectId } from "bson";
26
28
  import { DI_CONTAINER, JOB } from "../common-types";
27
- import { getConstructorName, isArray, isObject, jsonHighlight, promiseTimeout } from "../utils";
29
+ import { colorize, ConsoleColor, getConstructorName, isArray, isObject, jsonHighlight, promiseTimeout } from "../utils";
28
30
  import { Configuration } from "./configuration";
29
31
  let JobManager = class JobManager {
30
32
  constructor(config, container, jobTypes) {
@@ -34,10 +36,23 @@ let JobManager = class JobManager {
34
36
  this.jobs = this.jobTypes.reduce((res, jobType) => {
35
37
  res[getConstructorName(jobType)] = (jobParams) => {
36
38
  const job = this.resolveJobInstance(jobType, jobParams);
37
- return job.process();
39
+ return job.process(this.messageBridge);
38
40
  };
39
41
  return res;
40
42
  }, {});
43
+ this.messages = new Subject();
44
+ this.messageBridge = {
45
+ sendMessage: (message, params) => {
46
+ this.workerPush.send([message, JSON.stringify(params)]);
47
+ }
48
+ };
49
+ this.processing = false;
50
+ this.maxTimeout = this.config.resolve("jobTimeout");
51
+ }
52
+ on(message, cb) {
53
+ return this.messages
54
+ .pipe(filter(t => t.message === message))
55
+ .pipe(map(t => t.params)).subscribe(cb);
41
56
  }
42
57
  process(jobType, params = {}) {
43
58
  return __awaiter(this, void 0, void 0, function* () {
@@ -54,20 +69,12 @@ let JobManager = class JobManager {
54
69
  }
55
70
  enqueueWithName(name, params = {}) {
56
71
  return __awaiter(this, void 0, void 0, function* () {
57
- const jobName = yield this.tryResolveFromName(name, params);
58
- return this.sendToWorkers(jobName, params);
72
+ return this.sendToWorkers(this.tryResolveFromName(name, params), params);
59
73
  });
60
74
  }
61
75
  enqueue(jobType, params = {}) {
62
76
  return __awaiter(this, void 0, void 0, function* () {
63
- const jobName = yield this.tryResolveAndConnect(jobType, params);
64
- return this.sendToWorkers(jobName, params);
65
- });
66
- }
67
- sendToWorkers(jobName, params) {
68
- return __awaiter(this, void 0, void 0, function* () {
69
- const publisher = yield this.scheduler;
70
- yield publisher.send([jobName, JSON.stringify(params), new ObjectId().toHexString()]);
77
+ return this.sendToWorkers(this.tryResolveAndInit(jobType, params), params);
71
78
  });
72
79
  }
73
80
  schedule(minute, hour, dayOfMonth, month, dayOfWeek, jobType, params = {}) {
@@ -93,32 +100,45 @@ let JobManager = class JobManager {
93
100
  });
94
101
  }
95
102
  startProcessing() {
96
- const host = this.config.resolve("zmqRemoteHost");
97
- this.worker = socket("pull");
98
- this.worker.connect(host);
99
- this.worker.on("message", (name, args, uniqueId) => __awaiter(this, void 0, void 0, function* () {
100
- try {
101
- const jobName = name.toString("utf8");
102
- const jobParams = JSON.parse(args.toString("utf8"));
103
- const timerId = uniqueId === null || uniqueId === void 0 ? void 0 : uniqueId.toString("utf8");
104
- const jobNameLog = `\x1b[36m"${jobName}"\x1b[0m`;
105
- const jobArgsLog = `\n${jsonHighlight(jobParams)}`;
106
- console.time(timerId);
107
- console.timeLog(timerId, `Started working on background job: ${jobNameLog} with args: ${jobArgsLog}\n\n`);
103
+ return __awaiter(this, void 0, void 0, function* () {
104
+ if (this.processing)
105
+ return null;
106
+ this.processing = true;
107
+ if (!this.config.resolve("isWorker")) {
108
+ console.log(colorize(`Processing can not be started because this is NOT a worker process!`, ConsoleColor.FgRed));
109
+ return null;
110
+ }
111
+ const host = this.config.resolve("zmqRemoteHost");
112
+ const pushHost = `${host}:${this.config.resolve("zmqBackPort")}`;
113
+ this.workerPush = socket("push");
114
+ yield this.workerPush.connect(pushHost);
115
+ console.log(`Worker producer connected to: ${pushHost}`);
116
+ const pullHost = `${host}:${this.config.resolve("zmqPort")}`;
117
+ this.workerPull = socket("pull");
118
+ yield this.workerPull.connect(pullHost);
119
+ console.log(`Worker consumer connected to: ${pullHost}`);
120
+ this.workerPull.on("message", (name, args, uniqueId) => __awaiter(this, void 0, void 0, function* () {
108
121
  try {
109
- yield Promise.race([this.jobs[jobName](jobParams), promiseTimeout(15000, true)]);
110
- console.timeLog(timerId, `Finished working on background job: ${jobNameLog}\n\n`);
122
+ const jobName = name.toString("utf8");
123
+ const jobParams = JSON.parse(args.toString("utf8"));
124
+ const timerId = uniqueId === null || uniqueId === void 0 ? void 0 : uniqueId.toString("utf8");
125
+ console.time(timerId);
126
+ console.timeLog(timerId, `Started working on background job: ${colorize(jobName, ConsoleColor.FgCyan)} with args: \n${jsonHighlight(jobParams)}\n\n`);
127
+ this.messageBridge.sendMessage(`job-started`, { name: jobName });
128
+ try {
129
+ yield Promise.race([this.jobs[jobName](jobParams), promiseTimeout(this.maxTimeout, true)]);
130
+ console.timeLog(timerId, `Finished working on background job: ${colorize(jobName, ConsoleColor.FgCyan)}\n\n`);
131
+ }
132
+ catch (e) {
133
+ console.timeLog(timerId, `Background job failed: ${colorize(jobName, ConsoleColor.FgRed)}\n${e}\n\n`);
134
+ }
135
+ console.timeEnd(timerId);
111
136
  }
112
137
  catch (e) {
113
- console.timeLog(timerId, `Background job failed: ${jobNameLog}\n${e.message}\n\n`);
138
+ console.log(`Failed to start job: ${e.message}`);
114
139
  }
115
- console.timeEnd(timerId);
116
- }
117
- catch (e) {
118
- console.log(`Failed to start job: ${e.message}`);
119
- }
120
- }));
121
- console.log(`Waiting for jobs at: ${host}`);
140
+ }));
141
+ });
122
142
  }
123
143
  tryResolve(jobType, params) {
124
144
  const jobName = getConstructorName(jobType);
@@ -140,19 +160,28 @@ let JobManager = class JobManager {
140
160
  if (!jobType) {
141
161
  throw `Can't find job type with name: ${jobName} so it can't be enqueued!`;
142
162
  }
143
- return this.tryResolveAndConnect(jobType, params);
163
+ return this.tryResolveAndInit(jobType, params);
144
164
  }
145
- tryResolveAndConnect(jobType, params) {
146
- return __awaiter(this, void 0, void 0, function* () {
147
- this.scheduler = this.scheduler || new Promise((resolve) => __awaiter(this, void 0, void 0, function* () {
148
- const port = this.config.resolve("zmqPort");
149
- const publisher = socket("push");
150
- yield publisher.bind(`tcp://0.0.0.0:${port}`);
151
- console.log(`Publisher bound to port: ${port}`);
152
- resolve(publisher);
153
- }));
154
- return this.tryResolve(jobType, params);
155
- });
165
+ tryResolveAndInit(jobType, params) {
166
+ if (!this.apiPush) {
167
+ const port = this.config.resolve("zmqPort");
168
+ this.apiPush = socket("push");
169
+ this.apiPush.bind(`tcp://0.0.0.0:${port}`);
170
+ console.log(`API producer bound to port: ${port}`);
171
+ }
172
+ if (!this.apiPull) {
173
+ const backPort = this.config.resolve("zmqBackPort");
174
+ this.apiPull = socket("pull");
175
+ this.apiPull.bind(`tcp://0.0.0.0:${backPort}`);
176
+ this.apiPull.on("message", (name, args) => {
177
+ const message = name.toString("utf8");
178
+ const params = JSON.parse((args === null || args === void 0 ? void 0 : args.toString("utf8")) || "{}");
179
+ console.log(`Received a message from worker: "${colorize(message, ConsoleColor.FgCyan)}" with args: ${jsonHighlight(params)}\n\n`);
180
+ this.messages.next({ message, params });
181
+ });
182
+ console.log(`API consumer bound to port: ${backPort}`);
183
+ }
184
+ return this.tryResolve(jobType, params);
156
185
  }
157
186
  resolveJobInstance(jobType, params) {
158
187
  const container = this.container.createChildContainer();
@@ -162,6 +191,12 @@ let JobManager = class JobManager {
162
191
  container.register(jobType, jobType);
163
192
  return container.resolve(jobType);
164
193
  }
194
+ sendToWorkers(jobName, params) {
195
+ return __awaiter(this, void 0, void 0, function* () {
196
+ const publisher = yield this.apiPush;
197
+ yield publisher.send([jobName, JSON.stringify(params), new ObjectId().toHexString()]);
198
+ });
199
+ }
165
200
  };
166
201
  JobManager = __decorate([
167
202
  injectable(),
@@ -170,4 +205,4 @@ JobManager = __decorate([
170
205
  __metadata("design:paramtypes", [Configuration, Object, Array])
171
206
  ], JobManager);
172
207
  export { JobManager };
173
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvam9iLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQVMsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEVBQUMsWUFBWSxFQUFrQixHQUFHLEVBQXFELE1BQU0saUJBQWlCLENBQUM7QUFDdEgsT0FBTyxFQUFDLGtCQUFrQixFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsYUFBYSxFQUFFLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUM5RixPQUFPLEVBQUMsYUFBYSxFQUFDLE1BQU0saUJBQWlCLENBQUM7SUFJakMsVUFBVSxTQUFWLFVBQVU7SUFPbkIsWUFBcUIsTUFBcUIsRUFBaUMsU0FBOEIsRUFBa0IsUUFBc0I7UUFBNUgsV0FBTSxHQUFOLE1BQU0sQ0FBZTtRQUFpQyxjQUFTLEdBQVQsU0FBUyxDQUFxQjtRQUNyRyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDL0IsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUM5QyxHQUFHLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQW9CLEVBQUUsRUFBRTtnQkFDeEQsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixD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LE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQVMsQ0FBQztJQUM5QyxDQUFDO0NBQ0osQ0FBQTtBQXpJWSxVQUFVO0lBRnRCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO0lBUWUsV0FBQSxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUEsRUFBMkMsV0FBQSxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUE7cUNBQTdGLGFBQWE7R0FQakMsVUFBVSxDQXlJdEI7U0F6SVksVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7RGVwZW5kZW5jeUNvbnRhaW5lciwgaW5qZWN0LCBpbmplY3RhYmxlLCBpbmplY3RBbGwsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtzY2hlZHVsZSwgdmFsaWRhdGV9IGZyb20gXCJub2RlLWNyb25cIjtcclxuaW1wb3J0IHtzb2NrZXQsIFNvY2tldH0gZnJvbSBcInplcm9tcVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0RJX0NPTlRBSU5FUiwgSUpvYiwgSUpvYlRhc2ssIEpPQiwgSm9iUGFyYW1zLCBKb2JTY2hlZHVsZVJhbmdlLCBKb2JTY2hlZHVsZVRpbWUsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtnZXRDb25zdHJ1Y3Rvck5hbWUsIGlzQXJyYXksIGlzT2JqZWN0LCBqc29uSGlnaGxpZ2h0LCBwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBKb2JNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgam9iczoge1tuYW1lOiBzdHJpbmddOiAoam9iUGFyYW1zOiBKb2JQYXJhbXMpID0+IFByb21pc2U8YW55Pn07XHJcbiAgICBwcm90ZWN0ZWQgc2NoZWR1bGVyOiBQcm9taXNlPFNvY2tldD47XHJcbiAgICBwcm90ZWN0ZWQgd29ya2VyOiBTb2NrZXQ7XHJcbiAgICBwcm90ZWN0ZWQgam9iVHlwZXM6IFR5cGU8SUpvYj5bXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sIEBpbmplY3QoRElfQ09OVEFJTkVSKSByZWFkb25seSBjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIsIEBpbmplY3RBbGwoSk9CKSBqb2JUeXBlczogVHlwZTxJSm9iPltdKSB7XHJcbiAgICAgICAgdGhpcy5qb2JUeXBlcyA9IGpvYlR5cGVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuam9icyA9IHRoaXMuam9iVHlwZXMucmVkdWNlKChyZXMsIGpvYlR5cGUpID0+IHtcclxuICAgICAgICAgICAgcmVzW2dldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKV0gPSAoam9iUGFyYW1zOiBKb2JQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIGpvYlBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gam9iLnByb2Nlc3MoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGxldCBpbnN0YW5jZTogSUpvYiA9IG51bGw7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaW5zdGFuY2UgPSB0aGlzLnJlc29sdmVKb2JJbnN0YW5jZShqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICAgICAgdGhyb3cgYENhbid0IHJlc29sdmUgcGFyYW1zIGZvciBqb2I6ICR7am9iTmFtZX0sIHdpdGggcGFyYW1zOiAke0pTT04uc3RyaW5naWZ5KHBhcmFtcyl9LiBSZWFzb246ICR7ZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gaW5zdGFuY2UucHJvY2VzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVucXVldWVXaXRoTmFtZShuYW1lOiBzdHJpbmcsIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBhd2FpdCB0aGlzLnRyeVJlc29sdmVGcm9tTmFtZShuYW1lLCBwYXJhbXMpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNlbmRUb1dvcmtlcnMoam9iTmFtZSwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBlbnF1ZXVlKGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zID0ge30pOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSBhd2FpdCB0aGlzLnRyeVJlc29sdmVBbmRDb25uZWN0KGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvV29ya2Vycyhqb2JOYW1lLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCBhc3luYyBzZW5kVG9Xb3JrZXJzKGpvYk5hbWU6IHN0cmluZywgcGFyYW1zOiBKb2JQYXJhbXMpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IHB1Ymxpc2hlciA9IGF3YWl0IHRoaXMuc2NoZWR1bGVyO1xyXG4gICAgICAgIGF3YWl0IHB1Ymxpc2hlci5zZW5kKFtqb2JOYW1lLCBKU09OLnN0cmluZ2lmeShwYXJhbXMpLCBuZXcgT2JqZWN0SWQoKS50b0hleFN0cmluZygpXSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2NoZWR1bGUobWludXRlOiBKb2JTY2hlZHVsZVRpbWUsIGhvdXI6IEpvYlNjaGVkdWxlVGltZSwgZGF5T2ZNb250aDogSm9iU2NoZWR1bGVUaW1lLCBtb250aDogSm9iU2NoZWR1bGVUaW1lLCBkYXlPZldlZWs6IEpvYlNjaGVkdWxlVGltZSwgam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IElKb2JUYXNrIHtcclxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gW21pbnV0ZSwgaG91ciwgZGF5T2ZNb250aCwgbW9udGgsIGRheU9mV2Vla10ubWFwKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdCBhcyBKb2JTY2hlZHVsZVJhbmdlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3JhbmdlLm1pbiB8fCAwfS0ke3JhbmdlLm1heCB8fCAwfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0LmpvaW4oXCIsXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0fWA7XHJcbiAgICAgICAgfSkuam9pbihcIiBcIik7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXZhbGlkYXRlKGV4cHJlc3Npb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBzY2hlZHVsZSB0aGUgdGFzazogJyR7am9iTmFtZX0nIGJlY2F1c2UgdGltZSBleHByZXNzaW9uIGlzIGludmFsaWQuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2NoZWR1bGUoZXhwcmVzc2lvbiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVucXVldWUoam9iVHlwZSwgcGFyYW1zKS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBlbnF1ZXVlIGpvYjogJyR7am9iTmFtZX0nIGJlY2F1c2U6ICR7ZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc3RhcnRQcm9jZXNzaW5nKCk6IHZvaWQge1xyXG4gICAgICAgIGNvbnN0IGhvc3QgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiem1xUmVtb3RlSG9zdFwiKTtcclxuICAgICAgICB0aGlzLndvcmtlciA9IHNvY2tldChcInB1bGxcIik7XHJcbiAgICAgICAgdGhpcy53b3JrZXIuY29ubmVjdChob3N0KTtcclxuICAgICAgICB0aGlzLndvcmtlci5vbihcIm1lc3NhZ2VcIiwgYXN5bmMgKG5hbWU6IEJ1ZmZlciwgYXJnczogQnVmZmVyLCB1bmlxdWVJZDogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JOYW1lID0gbmFtZS50b1N0cmluZyhcInV0ZjhcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JQYXJhbXMgPSBKU09OLnBhcnNlKGFyZ3MudG9TdHJpbmcoXCJ1dGY4XCIpKSBhcyBKb2JQYXJhbXM7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0aW1lcklkID0gdW5pcXVlSWQ/LnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk5hbWVMb2cgPSBgXFx4MWJbMzZtXCIke2pvYk5hbWV9XCJcXHgxYlswbWA7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBqb2JBcmdzTG9nID0gYFxcbiR7anNvbkhpZ2hsaWdodChqb2JQYXJhbXMpfWA7XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lKHRpbWVySWQpO1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lTG9nKHRpbWVySWQsIGBTdGFydGVkIHdvcmtpbmcgb24gYmFja2dyb3VuZCBqb2I6ICR7am9iTmFtZUxvZ30gd2l0aCBhcmdzOiAke2pvYkFyZ3NMb2d9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IFByb21pc2UucmFjZShbdGhpcy5qb2JzW2pvYk5hbWVdKGpvYlBhcmFtcyksIHByb21pc2VUaW1lb3V0KDE1MDAwLCB0cnVlKV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgRmluaXNoZWQgd29ya2luZyBvbiBiYWNrZ3JvdW5kIGpvYjogJHtqb2JOYW1lTG9nfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgQmFja2dyb3VuZCBqb2IgZmFpbGVkOiAke2pvYk5hbWVMb2d9XFxuJHtlLm1lc3NhZ2V9XFxuXFxuYCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLnRpbWVFbmQodGltZXJJZCk7XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBGYWlsZWQgdG8gc3RhcnQgam9iOiAke2UubWVzc2FnZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBXYWl0aW5nIGZvciBqb2JzIGF0OiAke2hvc3R9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgdHJ5UmVzb2x2ZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IHN0cmluZyB7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXRoaXMuam9ic1tqb2JOYW1lXSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBqb2Igd2l0aCBuYW1lOiAke2pvYk5hbWV9IHNvIGl0IGNhbid0IGJlIGVucXVldWVkIWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgcmVzb2x2ZSBwYXJhbXMgZm9yIGpvYjogJHtqb2JOYW1lfSwgd2l0aCBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX0uIFJlYXNvbjogJHtlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBqb2JOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0cnlSZXNvbHZlRnJvbU5hbWUoam9iTmFtZTogc3RyaW5nLCBwYXJhbXM6IEpvYlBhcmFtcyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgY29uc3Qgam9iVHlwZSA9IHRoaXMuam9iVHlwZXMuZmluZCh0eXBlID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIGdldENvbnN0cnVjdG9yTmFtZSh0eXBlKSA9PSBqb2JOYW1lO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmICgham9iVHlwZSkge1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgZmluZCBqb2IgdHlwZSB3aXRoIG5hbWU6ICR7am9iTmFtZX0gc28gaXQgY2FuJ3QgYmUgZW5xdWV1ZWQhYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UmVzb2x2ZUFuZENvbm5lY3Qoam9iVHlwZSwgcGFyYW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgdHJ5UmVzb2x2ZUFuZENvbm5lY3Qoam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIHRoaXMuc2NoZWR1bGVyID0gdGhpcy5zY2hlZHVsZXIgfHwgbmV3IFByb21pc2U8YW55Pihhc3luYyByZXNvbHZlID0+IHtcclxuICAgICAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJ6bXFQb3J0XCIpO1xyXG4gICAgICAgICAgICBjb25zdCBwdWJsaXNoZXIgPSBzb2NrZXQoXCJwdXNoXCIpO1xyXG4gICAgICAgICAgICBhd2FpdCBwdWJsaXNoZXIuYmluZChgdGNwOi8vMC4wLjAuMDoke3BvcnR9YClcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYFB1Ymxpc2hlciBib3VuZCB0byBwb3J0OiAke3BvcnR9YCk7XHJcbiAgICAgICAgICAgIHJlc29sdmUocHVibGlzaGVyKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gdGhpcy50cnlSZXNvbHZlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHJlc29sdmVKb2JJbnN0YW5jZShqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IElKb2Ige1xyXG4gICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuY29udGFpbmVyLmNyZWF0ZUNoaWxkQ29udGFpbmVyKCk7XHJcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5tYXAoKG5hbWUpID0+IHtcclxuICAgICAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKG5hbWUsIHt1c2VWYWx1ZTogcGFyYW1zW25hbWVdfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29udGFpbmVyLnJlZ2lzdGVyKGpvYlR5cGUsIGpvYlR5cGUpO1xyXG4gICAgICAgIHJldHVybiBjb250YWluZXIucmVzb2x2ZShqb2JUeXBlKSBhcyBJSm9iO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
208
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiam9iLW1hbmFnZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvam9iLW1hbmFnZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFzQixNQUFNLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9GLE9BQU8sRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBQzdDLE9BQU8sRUFBQyxNQUFNLEVBQVMsTUFBTSxRQUFRLENBQUM7QUFDdEMsT0FBTyxFQUFDLE9BQU8sRUFBZSxNQUFNLE1BQU0sQ0FBQztBQUMzQyxPQUFPLEVBQUMsTUFBTSxFQUFFLEdBQUcsRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzNDLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFDOUIsT0FBTyxFQUNILFlBQVksRUFLWixHQUFHLEVBTU4sTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDdEgsT0FBTyxFQUFDLGFBQWEsRUFBQyxNQUFNLGlCQUFpQixDQUFDO0lBSWpDLFVBQVUsU0FBVixVQUFVO0lBZW5CLFlBQXFCLE1BQXFCLEVBQWlDLFNBQThCLEVBQWtCLFFBQXNCO1FBQTVILFdBQU0sR0FBTixNQUFNLENBQWU7UUFBaUMsY0FBUyxHQUFULFNBQVMsQ0FBcUI7UUFDckcsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQy9CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsT0FBTyxFQUFFLEVB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R0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0IsU0FBUyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3JDLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQVMsQ0FBQztJQUM5QyxDQUFDO0lBRWUsYUFBYSxDQUFDLE9BQWUsRUFBRSxNQUFpQjs7WUFDNUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsT0FBTyxDQUFDO1lBQ3JDLE1BQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksUUFBUSxFQUFFLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzFGLENBQUM7S0FBQTtDQUNKLENBQUE7QUF2TFksVUFBVTtJQUZ0QixVQUFVLEVBQUU7SUFDWixNQUFNLENBQUMsU0FBUyxDQUFDLGVBQWUsQ0FBQztJQWdCZSxXQUFBLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQSxFQUEyQyxXQUFBLFNBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQTtxQ0FBN0YsYUFBYTtHQWZqQyxVQUFVLENBdUx0QjtTQXZMWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtEZXBlbmRlbmN5Q29udGFpbmVyLCBpbmplY3QsIGluamVjdGFibGUsIGluamVjdEFsbCwgTGlmZWN5Y2xlLCBzY29wZWR9IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge3NjaGVkdWxlLCB2YWxpZGF0ZX0gZnJvbSBcIm5vZGUtY3JvblwiO1xyXG5pbXBvcnQge3NvY2tldCwgU29ja2V0fSBmcm9tIFwiemVyb21xXCI7XHJcbmltcG9ydCB7U3ViamVjdCwgU3Vic2NyaXB0aW9ufSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge2ZpbHRlciwgbWFwfSBmcm9tIFwicnhqcy9vcGVyYXRvcnNcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtcclxuICAgIERJX0NPTlRBSU5FUixcclxuICAgIElKb2IsXHJcbiAgICBJSm9iVGFzayxcclxuICAgIElNZXNzYWdlQnJpZGdlLFxyXG4gICAgSVNvY2tldE1lc3NhZ2UsXHJcbiAgICBKT0IsXHJcbiAgICBKb2JQYXJhbXMsXHJcbiAgICBKb2JTY2hlZHVsZVJhbmdlLFxyXG4gICAgSm9iU2NoZWR1bGVUaW1lLFxyXG4gICAgU29ja2V0UGFyYW1zLFxyXG4gICAgVHlwZVxyXG59IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtjb2xvcml6ZSwgQ29uc29sZUNvbG9yLCBnZXRDb25zdHJ1Y3Rvck5hbWUsIGlzQXJyYXksIGlzT2JqZWN0LCBqc29uSGlnaGxpZ2h0LCBwcm9taXNlVGltZW91dH0gZnJvbSBcIi4uL3V0aWxzXCI7XHJcbmltcG9ydCB7Q29uZmlndXJhdGlvbn0gZnJvbSBcIi4vY29uZmlndXJhdGlvblwiO1xyXG5cclxuQGluamVjdGFibGUoKVxyXG5Ac2NvcGVkKExpZmVjeWNsZS5Db250YWluZXJTY29wZWQpXHJcbmV4cG9ydCBjbGFzcyBKb2JNYW5hZ2VyIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgam9iVHlwZXM6IFR5cGU8SUpvYj5bXTtcclxuICAgIHByb3RlY3RlZCBqb2JzOiB7W25hbWU6IHN0cmluZ106IChqb2JQYXJhbXM6IEpvYlBhcmFtcykgPT4gUHJvbWlzZTxhbnk+fTtcclxuICAgIHByb3RlY3RlZCBtZXNzYWdlczogU3ViamVjdDxJU29ja2V0TWVzc2FnZT47XHJcbiAgICBwcm90ZWN0ZWQgbWVzc2FnZUJyaWRnZTogSU1lc3NhZ2VCcmlkZ2U7XHJcbiAgICBwcm90ZWN0ZWQgcHJvY2Vzc2luZzogYm9vbGVhbjtcclxuXHJcbiAgICBwcm90ZWN0ZWQgYXBpUHVzaDogU29ja2V0O1xyXG4gICAgcHJvdGVjdGVkIGFwaVB1bGw6IFNvY2tldDtcclxuICAgIHByb3RlY3RlZCB3b3JrZXJQdXNoOiBTb2NrZXQ7XHJcbiAgICBwcm90ZWN0ZWQgd29ya2VyUHVsbDogU29ja2V0O1xyXG5cclxuICAgIHJlYWRvbmx5IG1heFRpbWVvdXQ6IG51bWJlcjtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihyZWFkb25seSBjb25maWc6IENvbmZpZ3VyYXRpb24sIEBpbmplY3QoRElfQ09OVEFJTkVSKSByZWFkb25seSBjb250YWluZXI6IERlcGVuZGVuY3lDb250YWluZXIsIEBpbmplY3RBbGwoSk9CKSBqb2JUeXBlczogVHlwZTxJSm9iPltdKSB7XHJcbiAgICAgICAgdGhpcy5qb2JUeXBlcyA9IGpvYlR5cGVzIHx8IFtdO1xyXG4gICAgICAgIHRoaXMuam9icyA9IHRoaXMuam9iVHlwZXMucmVkdWNlKChyZXMsIGpvYlR5cGUpID0+IHtcclxuICAgICAgICAgICAgcmVzW2dldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKV0gPSAoam9iUGFyYW1zOiBKb2JQYXJhbXMpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYiA9IHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIGpvYlBhcmFtcyk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gam9iLnByb2Nlc3ModGhpcy5tZXNzYWdlQnJpZGdlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcmVzO1xyXG4gICAgICAgIH0sIHt9KTtcclxuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gbmV3IFN1YmplY3Q8SVNvY2tldE1lc3NhZ2U+KCk7XHJcbiAgICAgICAgdGhpcy5tZXNzYWdlQnJpZGdlID0ge1xyXG4gICAgICAgICAgICBzZW5kTWVzc2FnZTogKG1lc3NhZ2U6IHN0cmluZywgcGFyYW1zPzogU29ja2V0UGFyYW1zKSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLndvcmtlclB1c2guc2VuZChbbWVzc2FnZSwgSlNPTi5zdHJpbmdpZnkocGFyYW1zKV0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NpbmcgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm1heFRpbWVvdXQgPSB0aGlzLmNvbmZpZy5yZXNvbHZlKFwiam9iVGltZW91dFwiKTtcclxuICAgIH1cclxuXHJcbiAgICBvbihtZXNzYWdlOiBzdHJpbmcsIGNiOiAocGFyYW1zOiBTb2NrZXRQYXJhbXMpID0+IGFueSk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZXNcclxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKHQgPT4gdC5tZXNzYWdlID09PSBtZXNzYWdlKSlcclxuICAgICAgICAgICAgLnBpcGUobWFwKHQgPT4gdC5wYXJhbXMpKS5zdWJzY3JpYmUoY2IpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3Moam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgbGV0IGluc3RhbmNlOiBJSm9iID0gbnVsbDtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpbnN0YW5jZSA9IHRoaXMucmVzb2x2ZUpvYkluc3RhbmNlKGpvYlR5cGUsIHBhcmFtcyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBjb25zdCBqb2JOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKGpvYlR5cGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBgQ2FuJ3QgcmVzb2x2ZSBwYXJhbXMgZm9yIGpvYjogJHtqb2JOYW1lfSwgd2l0aCBwYXJhbXM6ICR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX0uIFJlYXNvbjogJHtlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBpbnN0YW5jZS5wcm9jZXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZW5xdWV1ZVdpdGhOYW1lKG5hbWU6IHN0cmluZywgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvV29ya2Vycyh0aGlzLnRyeVJlc29sdmVGcm9tTmFtZShuYW1lLCBwYXJhbXMpLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGVucXVldWUoam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuc2VuZFRvV29ya2Vycyh0aGlzLnRyeVJlc29sdmVBbmRJbml0KGpvYlR5cGUsIHBhcmFtcyksIHBhcmFtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2NoZWR1bGUobWludXRlOiBKb2JTY2hlZHVsZVRpbWUsIGhvdXI6IEpvYlNjaGVkdWxlVGltZSwgZGF5T2ZNb250aDogSm9iU2NoZWR1bGVUaW1lLCBtb250aDogSm9iU2NoZWR1bGVUaW1lLCBkYXlPZldlZWs6IEpvYlNjaGVkdWxlVGltZSwgam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMgPSB7fSk6IElKb2JUYXNrIHtcclxuICAgICAgICBjb25zdCBleHByZXNzaW9uID0gW21pbnV0ZSwgaG91ciwgZGF5T2ZNb250aCwgbW9udGgsIGRheU9mV2Vla10ubWFwKHQgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNPYmplY3QodCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJhbmdlID0gdCBhcyBKb2JTY2hlZHVsZVJhbmdlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGAke3JhbmdlLm1pbiB8fCAwfS0ke3JhbmdlLm1heCB8fCAwfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGlzQXJyYXkodCkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0LmpvaW4oXCIsXCIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBgJHt0fWA7XHJcbiAgICAgICAgfSkuam9pbihcIiBcIik7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IGdldENvbnN0cnVjdG9yTmFtZShqb2JUeXBlKTtcclxuICAgICAgICBpZiAoIXZhbGlkYXRlKGV4cHJlc3Npb24pKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBzY2hlZHVsZSB0aGUgdGFzazogJyR7am9iTmFtZX0nIGJlY2F1c2UgdGltZSBleHByZXNzaW9uIGlzIGludmFsaWQuYCk7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc2NoZWR1bGUoZXhwcmVzc2lvbiwgKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmVucXVldWUoam9iVHlwZSwgcGFyYW1zKS5jYXRjaChlID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBDYW4ndCBlbnF1ZXVlIGpvYjogJyR7am9iTmFtZX0nIGJlY2F1c2U6ICR7ZX1gKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc3RhcnRQcm9jZXNzaW5nKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgaWYgKHRoaXMucHJvY2Vzc2luZykgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNvbmZpZy5yZXNvbHZlKFwiaXNXb3JrZXJcIikpIHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coY29sb3JpemUoYFByb2Nlc3NpbmcgY2FuIG5vdCBiZSBzdGFydGVkIGJlY2F1c2UgdGhpcyBpcyBOT1QgYSB3b3JrZXIgcHJvY2VzcyFgLCBDb25zb2xlQ29sb3IuRmdSZWQpKTtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBob3N0ID0gdGhpcy5jb25maWcucmVzb2x2ZShcInptcVJlbW90ZUhvc3RcIik7XHJcbiAgICAgICAgY29uc3QgcHVzaEhvc3QgPSBgJHtob3N0fToke3RoaXMuY29uZmlnLnJlc29sdmUoXCJ6bXFCYWNrUG9ydFwiKX1gO1xyXG4gICAgICAgIHRoaXMud29ya2VyUHVzaCA9IHNvY2tldChcInB1c2hcIik7XHJcbiAgICAgICAgYXdhaXQgdGhpcy53b3JrZXJQdXNoLmNvbm5lY3QocHVzaEhvc3QpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBXb3JrZXIgcHJvZHVjZXIgY29ubmVjdGVkIHRvOiAke3B1c2hIb3N0fWApO1xyXG5cclxuICAgICAgICBjb25zdCBwdWxsSG9zdCA9IGAke2hvc3R9OiR7dGhpcy5jb25maWcucmVzb2x2ZShcInptcVBvcnRcIil9YDtcclxuICAgICAgICB0aGlzLndvcmtlclB1bGwgPSBzb2NrZXQoXCJwdWxsXCIpO1xyXG4gICAgICAgIGF3YWl0IHRoaXMud29ya2VyUHVsbC5jb25uZWN0KHB1bGxIb3N0KTtcclxuICAgICAgICBjb25zb2xlLmxvZyhgV29ya2VyIGNvbnN1bWVyIGNvbm5lY3RlZCB0bzogJHtwdWxsSG9zdH1gKTtcclxuXHJcbiAgICAgICAgdGhpcy53b3JrZXJQdWxsLm9uKFwibWVzc2FnZVwiLCBhc3luYyAobmFtZTogQnVmZmVyLCBhcmdzOiBCdWZmZXIsIHVuaXF1ZUlkOiBCdWZmZXIpID0+IHtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYk5hbWUgPSBuYW1lLnRvU3RyaW5nKFwidXRmOFwiKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGpvYlBhcmFtcyA9IEpTT04ucGFyc2UoYXJncy50b1N0cmluZyhcInV0ZjhcIikpIGFzIEpvYlBhcmFtcztcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRpbWVySWQgPSB1bmlxdWVJZD8udG9TdHJpbmcoXCJ1dGY4XCIpO1xyXG5cclxuICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZSh0aW1lcklkKTtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgU3RhcnRlZCB3b3JraW5nIG9uIGJhY2tncm91bmQgam9iOiAke2NvbG9yaXplKGpvYk5hbWUsIENvbnNvbGVDb2xvci5GZ0N5YW4pfSB3aXRoIGFyZ3M6IFxcbiR7anNvbkhpZ2hsaWdodChqb2JQYXJhbXMpfVxcblxcbmApO1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMubWVzc2FnZUJyaWRnZS5zZW5kTWVzc2FnZShgam9iLXN0YXJ0ZWRgLCB7bmFtZTogam9iTmFtZX0pO1xyXG4gICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3RoaXMuam9ic1tqb2JOYW1lXShqb2JQYXJhbXMpLCBwcm9taXNlVGltZW91dCh0aGlzLm1heFRpbWVvdXQsIHRydWUpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS50aW1lTG9nKHRpbWVySWQsIGBGaW5pc2hlZCB3b3JraW5nIG9uIGJhY2tncm91bmQgam9iOiAke2NvbG9yaXplKGpvYk5hbWUsIENvbnNvbGVDb2xvci5GZ0N5YW4pfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUudGltZUxvZyh0aW1lcklkLCBgQmFja2dyb3VuZCBqb2IgZmFpbGVkOiAke2NvbG9yaXplKGpvYk5hbWUsIENvbnNvbGVDb2xvci5GZ1JlZCl9XFxuJHtlfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc29sZS50aW1lRW5kKHRpbWVySWQpO1xyXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgRmFpbGVkIHRvIHN0YXJ0IGpvYjogJHtlLm1lc3NhZ2V9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICB0cnlSZXNvbHZlKGpvYlR5cGU6IFR5cGU8SUpvYj4sIHBhcmFtczogSm9iUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBqb2JOYW1lID0gZ2V0Q29uc3RydWN0b3JOYW1lKGpvYlR5cGUpO1xyXG4gICAgICAgIGlmICghdGhpcy5qb2JzW2pvYk5hbWVdKSB7XHJcbiAgICAgICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGpvYiB3aXRoIG5hbWU6ICR7am9iTmFtZX0gc28gaXQgY2FuJ3QgYmUgZW5xdWV1ZWQhYDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5yZXNvbHZlSm9iSW5zdGFuY2Uoam9iVHlwZSwgcGFyYW1zKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGBDYW4ndCByZXNvbHZlIHBhcmFtcyBmb3Igam9iOiAke2pvYk5hbWV9LCB3aXRoIHBhcmFtczogJHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfS4gUmVhc29uOiAke2V9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGpvYk5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIHRyeVJlc29sdmVGcm9tTmFtZShqb2JOYW1lOiBzdHJpbmcsIHBhcmFtczogSm9iUGFyYW1zKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBqb2JUeXBlID0gdGhpcy5qb2JUeXBlcy5maW5kKHR5cGUgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gZ2V0Q29uc3RydWN0b3JOYW1lKHR5cGUpID09IGpvYk5hbWU7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCFqb2JUeXBlKSB7XHJcbiAgICAgICAgICAgIHRocm93IGBDYW4ndCBmaW5kIGpvYiB0eXBlIHdpdGggbmFtZTogJHtqb2JOYW1lfSBzbyBpdCBjYW4ndCBiZSBlbnF1ZXVlZCFgO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50cnlSZXNvbHZlQW5kSW5pdChqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCB0cnlSZXNvbHZlQW5kSW5pdChqb2JUeXBlOiBUeXBlPElKb2I+LCBwYXJhbXM6IEpvYlBhcmFtcyk6IHN0cmluZyB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmFwaVB1c2gpIHtcclxuICAgICAgICAgICAgY29uc3QgcG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJ6bXFQb3J0XCIpO1xyXG4gICAgICAgICAgICB0aGlzLmFwaVB1c2ggPSBzb2NrZXQoXCJwdXNoXCIpO1xyXG4gICAgICAgICAgICB0aGlzLmFwaVB1c2guYmluZChgdGNwOi8vMC4wLjAuMDoke3BvcnR9YCk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBUEkgcHJvZHVjZXIgYm91bmQgdG8gcG9ydDogJHtwb3J0fWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXRoaXMuYXBpUHVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCBiYWNrUG9ydCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJ6bXFCYWNrUG9ydFwiKTtcclxuICAgICAgICAgICAgdGhpcy5hcGlQdWxsID0gc29ja2V0KFwicHVsbFwiKTtcclxuICAgICAgICAgICAgdGhpcy5hcGlQdWxsLmJpbmQoYHRjcDovLzAuMC4wLjA6JHtiYWNrUG9ydH1gKTtcclxuICAgICAgICAgICAgdGhpcy5hcGlQdWxsLm9uKFwibWVzc2FnZVwiLCAobmFtZTogQnVmZmVyLCBhcmdzPzogQnVmZmVyKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gbmFtZS50b1N0cmluZyhcInV0ZjhcIik7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBKU09OLnBhcnNlKGFyZ3M/LnRvU3RyaW5nKFwidXRmOFwiKSB8fCBcInt9XCIpIGFzIEpvYlBhcmFtcztcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBSZWNlaXZlZCBhIG1lc3NhZ2UgZnJvbSB3b3JrZXI6IFwiJHtjb2xvcml6ZShtZXNzYWdlLCBDb25zb2xlQ29sb3IuRmdDeWFuKX1cIiB3aXRoIGFyZ3M6ICR7anNvbkhpZ2hsaWdodChwYXJhbXMpfVxcblxcbmApO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZXNzYWdlcy5uZXh0KHttZXNzYWdlLCBwYXJhbXN9KTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBUEkgY29uc3VtZXIgYm91bmQgdG8gcG9ydDogJHtiYWNrUG9ydH1gKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudHJ5UmVzb2x2ZShqb2JUeXBlLCBwYXJhbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByb3RlY3RlZCByZXNvbHZlSm9iSW5zdGFuY2Uoam9iVHlwZTogVHlwZTxJSm9iPiwgcGFyYW1zOiBKb2JQYXJhbXMpOiBJSm9iIHtcclxuICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLmNvbnRhaW5lci5jcmVhdGVDaGlsZENvbnRhaW5lcigpO1xyXG4gICAgICAgIE9iamVjdC5rZXlzKHBhcmFtcykubWFwKChuYW1lKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnRhaW5lci5yZWdpc3RlcihuYW1lLCB7dXNlVmFsdWU6IHBhcmFtc1tuYW1lXX0pO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnRhaW5lci5yZWdpc3Rlcihqb2JUeXBlLCBqb2JUeXBlKTtcclxuICAgICAgICByZXR1cm4gY29udGFpbmVyLnJlc29sdmUoam9iVHlwZSkgYXMgSUpvYjtcclxuICAgIH1cclxuXHJcbiAgICBwcm90ZWN0ZWQgYXN5bmMgc2VuZFRvV29ya2Vycyhqb2JOYW1lOiBzdHJpbmcsIHBhcmFtczogSm9iUGFyYW1zKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBwdWJsaXNoZXIgPSBhd2FpdCB0aGlzLmFwaVB1c2g7XHJcbiAgICAgICAgYXdhaXQgcHVibGlzaGVyLnNlbmQoW2pvYk5hbWUsIEpTT04uc3RyaW5naWZ5KHBhcmFtcyksIG5ldyBPYmplY3RJZCgpLnRvSGV4U3RyaW5nKCldKTtcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -43,7 +43,7 @@ let LazyAssets = class LazyAssets {
43
43
  if (existingAsset)
44
44
  return existingAsset;
45
45
  const res = yield this.collection.insertOne(data);
46
- return new LazyAsset(res.insertedId, data, this.collection, this.assets, this.progresses, this.jobMan);
46
+ return new LazyAsset(res.insertedId, data, this.collection, this.assets, this.progresses);
47
47
  });
48
48
  }
49
49
  read(id) {
@@ -56,7 +56,7 @@ let LazyAssets = class LazyAssets {
56
56
  const data = yield this.collection.findOne(where);
57
57
  return !data
58
58
  ? null
59
- : new LazyAsset(data._id, data, this.collection, this.assets, this.progresses, this.jobMan);
59
+ : new LazyAsset(data._id, data, this.collection, this.assets, this.progresses);
60
60
  });
61
61
  }
62
62
  unlink(id) {
@@ -71,8 +71,10 @@ let LazyAssets = class LazyAssets {
71
71
  LazyAssets = __decorate([
72
72
  injectable(),
73
73
  scoped(Lifecycle.ContainerScoped),
74
- __metadata("design:paramtypes", [MongoConnector, Assets,
75
- Progresses, JobManager])
74
+ __metadata("design:paramtypes", [MongoConnector,
75
+ Assets,
76
+ Progresses,
77
+ JobManager])
76
78
  ], LazyAssets);
77
79
  export { LazyAssets };
78
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvbGF6eS1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztJQUkzQixVQUFVLFNBQVYsVUFBVTtJQUluQixZQUFxQixTQUF5QixFQUFXLE1BQWMsRUFDbEQsVUFBc0IsRUFBVyxNQUFrQjtRQURuRCxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUFXLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDbEQsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFXLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDcEUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNsRSxDQUFDO0lBRUssTUFBTSxDQUFDLE9BQW1CLEVBQUUsWUFBdUIsRUFBRSxFQUFFLFNBQWlCLE1BQU07O1lBQ2hGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sa0NBQU0sU0FBUyxLQUFFLE1BQU0sRUFBRSxFQUFFLElBQUUsQ0FBQztZQUM1RSxNQUFNLElBQUksR0FBRztnQkFDVCxPQUFPO2dCQUNQLFNBQVM7Z0JBQ1QsTUFBTTthQUNULENBQUM7WUFDRixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDNUMsSUFBSSxhQUFhO2dCQUFFLE9BQU8sYUFBYSxDQUFDO1lBQ3hDLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDbEQsT0FBTyxJQUFJLFNBQVMsQ0FDaEIsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFDckMsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQzVDLENBQUM7UUFDTixDQUFDO0tBQUE7SUFFSyxJQUFJLENBQUMsRUFBVTs7WUFDakIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0tBQUE7SUFFSyxJQUFJLENBQUMsS0FBOEI7O1lBQ3JDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUk7Z0JBQ1IsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLElBQUksU0FBUyxDQUNYLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQy9CLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUM1QyxDQUFDO1FBQ1YsQ0FBQztLQUFBO0lBRUssTUFBTSxDQUFDLEVBQVU7O1lBQ25CLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsS0FBSztnQkFBRSxPQUFPLElBQUksQ0FBQztZQUN4QixPQUFPLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztRQUMxQixDQUFDO0tBQUE7Q0FDSixDQUFBO0FBNUNZLFVBQVU7SUFGdEIsVUFBVSxFQUFFO0lBQ1osTUFBTSxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUM7cUNBS0UsY0FBYyxFQUFtQixNQUFNO1FBQ3RDLFVBQVUsRUFBbUIsVUFBVTtHQUwvRCxVQUFVLENBNEN0QjtTQTVDWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBMaWZlY3ljbGUsIHNjb3BlZH0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCB7T2JqZWN0SWR9IGZyb20gXCJic29uXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuaW1wb3J0IHtGaWx0ZXJRdWVyeX0gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7SUpvYiwgSUxhenlBc3NldCwgSm9iUGFyYW1zLCBUeXBlfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7TW9uZ29Db25uZWN0b3J9IGZyb20gXCIuL21vbmdvLWNvbm5lY3RvclwiO1xyXG5pbXBvcnQge0Fzc2V0c30gZnJvbSBcIi4vYXNzZXRzXCI7XHJcbmltcG9ydCB7TGF6eUFzc2V0fSBmcm9tIFwiLi9lbnRpdGllcy9sYXp5LWFzc2V0XCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi9wcm9ncmVzc2VzXCI7XHJcblxyXG5AaW5qZWN0YWJsZSgpXHJcbkBzY29wZWQoTGlmZWN5Y2xlLkNvbnRhaW5lclNjb3BlZClcclxuZXhwb3J0IGNsYXNzIExhenlBc3NldHMge1xyXG5cclxuICAgIHByb3RlY3RlZCBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbm5lY3RvcjogTW9uZ29Db25uZWN0b3IsIHJlYWRvbmx5IGFzc2V0czogQXNzZXRzLFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcmVhZG9ubHkgam9iTWFuOiBKb2JNYW5hZ2VyKSB7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29ubmVjdG9yLmRhdGFiYXNlLmNvbGxlY3Rpb24oXCJsYXp5YXNzZXRzXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZShqb2JUeXBlOiBUeXBlPElKb2I+LCBqb2JQYXJhbXM6IEpvYlBhcmFtcyA9IHt9LCBqb2JRdWU6IHN0cmluZyA9IFwibWFpblwiKTogUHJvbWlzZTxJTGF6eUFzc2V0PiB7XHJcbiAgICAgICAgY29uc3Qgam9iTmFtZSA9IHRoaXMuam9iTWFuLnRyeVJlc29sdmUoam9iVHlwZSwgey4uLmpvYlBhcmFtcywgbGF6eUlkOiBcIlwifSk7XHJcbiAgICAgICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgICAgICAgam9iTmFtZSxcclxuICAgICAgICAgICAgam9iUGFyYW1zLFxyXG4gICAgICAgICAgICBqb2JRdWVcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nQXNzZXQgPSBhd2FpdCB0aGlzLmZpbmQoZGF0YSk7XHJcbiAgICAgICAgaWYgKGV4aXN0aW5nQXNzZXQpIHJldHVybiBleGlzdGluZ0Fzc2V0O1xyXG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuY29sbGVjdGlvbi5pbnNlcnRPbmUoZGF0YSk7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBMYXp5QXNzZXQoXHJcbiAgICAgICAgICAgIHJlcy5pbnNlcnRlZElkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24sXHJcbiAgICAgICAgICAgIHRoaXMuYXNzZXRzLCB0aGlzLnByb2dyZXNzZXMsIHRoaXMuam9iTWFuXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyByZWFkKGlkOiBzdHJpbmcpOiBQcm9taXNlPElMYXp5QXNzZXQ+IHtcclxuICAgICAgICByZXR1cm4gIWlkID8gbnVsbCA6IHRoaXMuZmluZCh7X2lkOiBuZXcgT2JqZWN0SWQoaWQpfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmluZCh3aGVyZTogRmlsdGVyUXVlcnk8SUxhenlBc3NldD4pOiBQcm9taXNlPElMYXp5QXNzZXQ+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xyXG4gICAgICAgIHJldHVybiAhZGF0YVxyXG4gICAgICAgICAgICA/IG51bGxcclxuICAgICAgICAgICAgOiBuZXcgTGF6eUFzc2V0KFxyXG4gICAgICAgICAgICAgICAgZGF0YS5faWQsIGRhdGEsIHRoaXMuY29sbGVjdGlvbixcclxuICAgICAgICAgICAgICAgIHRoaXMuYXNzZXRzLCB0aGlzLnByb2dyZXNzZXMsIHRoaXMuam9iTWFuXHJcbiAgICAgICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5yZWFkKGlkKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvc2VydmljZXMvbGF6eS1hc3NldHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFDLFVBQVUsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3ZELE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBQ2pELE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDaEMsT0FBTyxFQUFDLFNBQVMsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ2hELE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGNBQWMsQ0FBQztJQUkzQixVQUFVLFNBQVYsVUFBVTtJQUluQixZQUFxQixTQUF5QixFQUN6QixNQUFjLEVBQ2QsVUFBc0IsRUFDdEIsTUFBa0I7UUFIbEIsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFDekIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLGVBQVUsR0FBVixVQUFVLENBQVk7UUFDdEIsV0FBTSxHQUFOLE1BQU0sQ0FBWTtRQUNuQyxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ2xFLENBQUM7SUFFSyxNQUFNLENBQUMsT0FBbUIsRUFBRSxZQUF1QixFQUFFLEVBQUUsU0FBaUIsTUFBTTs7WUFDaEYsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxrQ0FBTSxTQUFTLEtBQUUsTUFBTSxFQUFFLEVBQUUsSUFBRSxDQUFDO1lBQzVFLE1BQU0sSUFBSSxHQUFHO2dCQUNULE9BQU87Z0JBQ1AsU0FBUztnQkFDVCxNQUFNO2FBQ1QsQ0FBQztZQUNGLE1BQU0sYUFBYSxHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1QyxJQUFJLGFBQWE7Z0JBQUUsT0FBTyxhQUFhLENBQUM7WUFDeEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRCxPQUFPLElBQUksU0FBUyxDQUFDLEdBQUcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUYsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEVBQVU7O1lBQ2pCLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDLEdBQUcsRUFBRSxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBQyxDQUFDLENBQUM7UUFDM0QsQ0FBQztLQUFBO0lBRUssSUFBSSxDQUFDLEtBQThCOztZQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ2xELE9BQU8sQ0FBQyxJQUFJO2dCQUNSLENBQUMsQ0FBQyxJQUFJO2dCQUNOLENBQUMsQ0FBQyxJQUFJLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7S0FBQTtJQUVLLE1BQU0sQ0FBQyxFQUFVOztZQUNuQixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLEtBQUs7Z0JBQUUsT0FBTyxJQUFJLENBQUM7WUFDeEIsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDMUIsQ0FBQztLQUFBO0NBQ0osQ0FBQTtBQXhDWSxVQUFVO0lBRnRCLFVBQVUsRUFBRTtJQUNaLE1BQU0sQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDO3FDQUtFLGNBQWM7UUFDakIsTUFBTTtRQUNGLFVBQVU7UUFDZCxVQUFVO0dBUDlCLFVBQVUsQ0F3Q3RCO1NBeENZLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIExpZmVjeWNsZSwgc2NvcGVkfSBmcm9tIFwidHN5cmluZ2VcIjtcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtDb2xsZWN0aW9ufSBmcm9tIFwibW9uZ29kYlwiO1xyXG5pbXBvcnQge0ZpbHRlclF1ZXJ5fSBmcm9tIFwibW9uZ29vc2VcIjtcclxuaW1wb3J0IHtJSm9iLCBJTGF6eUFzc2V0LCBKb2JQYXJhbXMsIFR5cGV9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7QXNzZXRzfSBmcm9tIFwiLi9hc3NldHNcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXR9IGZyb20gXCIuL2VudGl0aWVzL2xhenktYXNzZXRcIjtcclxuaW1wb3J0IHtKb2JNYW5hZ2VyfSBmcm9tIFwiLi9qb2ItbWFuYWdlclwiO1xyXG5pbXBvcnQge1Byb2dyZXNzZXN9IGZyb20gXCIuL3Byb2dyZXNzZXNcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNjb3BlZChMaWZlY3ljbGUuQ29udGFpbmVyU2NvcGVkKVxyXG5leHBvcnQgY2xhc3MgTGF6eUFzc2V0cyB7XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbGxlY3Rpb246IENvbGxlY3Rpb247XHJcblxyXG4gICAgY29uc3RydWN0b3IocmVhZG9ubHkgY29ubmVjdG9yOiBNb25nb0Nvbm5lY3RvcixcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGFzc2V0czogQXNzZXRzLFxyXG4gICAgICAgICAgICAgICAgcmVhZG9ubHkgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcyxcclxuICAgICAgICAgICAgICAgIHJlYWRvbmx5IGpvYk1hbjogSm9iTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbm5lY3Rvci5kYXRhYmFzZS5jb2xsZWN0aW9uKFwibGF6eWFzc2V0c1wiKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGUoam9iVHlwZTogVHlwZTxJSm9iPiwgam9iUGFyYW1zOiBKb2JQYXJhbXMgPSB7fSwgam9iUXVlOiBzdHJpbmcgPSBcIm1haW5cIik6IFByb21pc2U8SUxhenlBc3NldD4ge1xyXG4gICAgICAgIGNvbnN0IGpvYk5hbWUgPSB0aGlzLmpvYk1hbi50cnlSZXNvbHZlKGpvYlR5cGUsIHsuLi5qb2JQYXJhbXMsIGxhenlJZDogXCJcIn0pO1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgICAgICAgIGpvYk5hbWUsXHJcbiAgICAgICAgICAgIGpvYlBhcmFtcyxcclxuICAgICAgICAgICAgam9iUXVlXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBleGlzdGluZ0Fzc2V0ID0gYXdhaXQgdGhpcy5maW5kKGRhdGEpO1xyXG4gICAgICAgIGlmIChleGlzdGluZ0Fzc2V0KSByZXR1cm4gZXhpc3RpbmdBc3NldDtcclxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uaW5zZXJ0T25lKGRhdGEpO1xyXG4gICAgICAgIHJldHVybiBuZXcgTGF6eUFzc2V0KHJlcy5pbnNlcnRlZElkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24sIHRoaXMuYXNzZXRzLCB0aGlzLnByb2dyZXNzZXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlYWQoaWQ6IHN0cmluZyk6IFByb21pc2U8SUxhenlBc3NldD4ge1xyXG4gICAgICAgIHJldHVybiAhaWQgPyBudWxsIDogdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJTGF6eUFzc2V0Pik6IFByb21pc2U8SUxhenlBc3NldD4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZE9uZSh3aGVyZSk7XHJcbiAgICAgICAgcmV0dXJuICFkYXRhXHJcbiAgICAgICAgICAgID8gbnVsbFxyXG4gICAgICAgICAgICA6IG5ldyBMYXp5QXNzZXQoZGF0YS5faWQsIGRhdGEsIHRoaXMuY29sbGVjdGlvbiwgdGhpcy5hc3NldHMsIHRoaXMucHJvZ3Jlc3Nlcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdW5saW5rKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5yZWFkKGlkKTtcclxuICAgICAgICBpZiAoIWFzc2V0KSByZXR1cm4gbnVsbDtcclxuICAgICAgICByZXR1cm4gYXNzZXQudW5saW5rKCk7XHJcbiAgICB9XHJcbn1cclxuIl19
@@ -17,39 +17,39 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
17
17
  });
18
18
  };
19
19
  import { injectable, singleton } from "tsyringe";
20
- import socket_io_client from "socket.io-client";
21
20
  import { ObjectId } from "bson";
22
21
  import { promiseTimeout } from "../utils";
23
- import { Configuration } from "./configuration";
24
- import { Progress } from "./entities/progress";
25
22
  import { MongoConnector } from "./mongo-connector";
26
- const socketIOClient = socket_io_client;
23
+ import { JobManager } from "./job-manager";
24
+ import { Progress } from "./entities/progress";
27
25
  let Progresses = class Progresses {
28
- constructor(connector, config) {
26
+ constructor(connector, jobMan) {
29
27
  this.connector = connector;
30
- this.config = config;
31
- const mainEndpoint = this.config.resolve("mainEndpoint");
32
- this.client = !mainEndpoint ? null : socketIOClient(mainEndpoint, { path: "/socket" });
28
+ this.jobMan = jobMan;
33
29
  this.collection = connector.database.collection("progresses");
30
+ this.progresses = {};
31
+ this.jobMan.on("progress-changed", progress => {
32
+ const id = progress.id;
33
+ this.progresses[id] = new Progress(new ObjectId(id), progress, this.collection);
34
+ });
34
35
  }
35
36
  waitToFinish(id) {
36
37
  return __awaiter(this, void 0, void 0, function* () {
37
- let isFinished = false;
38
- let progress = null;
39
- while (!isFinished) {
40
- progress = yield this.get(id);
41
- if (!progress) {
42
- throw `Progress does not exists with id: ${id}`;
43
- }
44
- if (progress.error) {
45
- throw progress.error;
46
- }
47
- isFinished = progress.percent == 100;
48
- if (!isFinished) {
49
- yield promiseTimeout(50);
50
- }
51
- }
52
- return progress;
38
+ return Promise.race([
39
+ this.waitForProgress(id, () => __awaiter(this, void 0, void 0, function* () {
40
+ let progress = this.progresses[id];
41
+ if (!progress || progress.percent < 100) {
42
+ progress = yield this.get(id);
43
+ }
44
+ if (!progress) {
45
+ throw new Error(`Progress does not exists with id: ${id}`);
46
+ }
47
+ return progress;
48
+ }), 500),
49
+ this.waitForProgress(id, () => __awaiter(this, void 0, void 0, function* () {
50
+ return this.progresses[id] || null;
51
+ }), 25)
52
+ ]);
53
53
  });
54
54
  }
55
55
  get(id) {
@@ -60,13 +60,13 @@ let Progresses = class Progresses {
60
60
  find(where) {
61
61
  return __awaiter(this, void 0, void 0, function* () {
62
62
  const data = yield this.collection.findOne(where);
63
- return !data ? null : new Progress(data._id, data, this.collection, this.client);
63
+ return !data ? null : new Progress(data._id, data, this.collection);
64
64
  });
65
65
  }
66
66
  create(max = 100) {
67
67
  return __awaiter(this, void 0, void 0, function* () {
68
68
  if (isNaN(max) || max <= 0) {
69
- throw "Max progress value must be bigger than zero";
69
+ throw new Error(`Max progress value must be bigger than zero`);
70
70
  }
71
71
  const data = {
72
72
  current: 0,
@@ -76,7 +76,7 @@ let Progresses = class Progresses {
76
76
  canceled: false
77
77
  };
78
78
  const res = yield this.collection.insertOne(data);
79
- return new Progress(res.insertedId, data, this.collection, this.client);
79
+ return new Progress(res.insertedId, data, this.collection);
80
80
  });
81
81
  }
82
82
  remove(id) {
@@ -85,11 +85,35 @@ let Progresses = class Progresses {
85
85
  return id;
86
86
  });
87
87
  }
88
+ waitForProgress(id, cb, delay) {
89
+ return __awaiter(this, void 0, void 0, function* () {
90
+ let isFinished = false;
91
+ let progress = null;
92
+ let waitTime = 0;
93
+ while (!isFinished) {
94
+ progress = yield cb();
95
+ waitTime += delay;
96
+ if (progress) {
97
+ if (progress.error) {
98
+ throw new Error(progress.error);
99
+ }
100
+ isFinished = progress.percent >= 100;
101
+ }
102
+ if (!isFinished) {
103
+ if (waitTime >= this.jobMan.maxTimeout) {
104
+ throw new Error(`Progress with id: ${id} probably never will be finished!`);
105
+ }
106
+ yield promiseTimeout(delay);
107
+ }
108
+ }
109
+ return progress;
110
+ });
111
+ }
88
112
  };
89
113
  Progresses = __decorate([
90
114
  injectable(),
91
115
  singleton(),
92
- __metadata("design:paramtypes", [MongoConnector, Configuration])
116
+ __metadata("design:paramtypes", [MongoConnector, JobManager])
93
117
  ], Progresses);
94
118
  export { Progresses };
95
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sZ0JBQWdCLE1BQU0sa0JBQWtCLENBQUE7QUFDL0MsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUc5QixPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQ3hDLE9BQU8sRUFBQyxhQUFhLEVBQUMsTUFBTSxpQkFBaUIsQ0FBQztBQUM5QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFDN0MsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLG1CQUFtQixDQUFDO0FBR2pELE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDO0lBSTNCLFVBQVUsU0FBVixVQUFVO0lBS25CLFlBQXFCLFNBQXlCLEVBQVcsTUFBcUI7UUFBekQsY0FBUyxHQUFULFNBQVMsQ0FBZ0I7UUFBVyxXQUFNLEdBQU4sTUFBTSxDQUFlO1FBQzFFLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxFQUFDLElBQUksRUFBRSxTQUFTLEVBQUMsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDbEUsQ0FBQztJQUVLLFlBQVksQ0FBQyxFQUFVOztZQUN6QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDdkIsSUFBSSxRQUFRLEdBQWMsSUFBSSxDQUFDO1lBQy9CLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ2hCLFFBQVEsR0FBRyxNQUFNLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxRQUFRLEVBQUU7b0JBQ1gsTUFBTSxxQ0FBcUMsRUFBRSxFQUFFLENBQUM7aUJBQ25EO2dCQUNELElBQUksUUFBUSxDQUFDLEtBQUssRUFBRTtvQkFDaEIsTUFBTSxRQUFRLENBQUMsS0FBSyxDQUFDO2lCQUN4QjtnQkFDRCxVQUFVLEdBQUcsUUFBUSxDQUFDLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLEVBQUU7b0JBQ2IsTUFBTSxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQzVCO2FBQ0o7WUFDRCxPQUFPLFFBQVEsQ0FBQztRQUNwQixDQUFDO0tBQUE7SUFFSyxHQUFHLENBQUMsRUFBVTs7WUFDaEIsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUMsR0FBRyxFQUFFLElBQUksUUFBUSxDQUFDLEVBQUUsQ0FBQyxFQUFDLENBQUMsQ0FBQztRQUMzRCxDQUFDO0tBQUE7SUFFSyxJQUFJLENBQUMsS0FBNkI7O1lBQ3BDLE1BQU0sSUFBSSxHQUFHLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDbEQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLFFBQVEsQ0FDOUIsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUMvQyxDQUFDO1FBQ04sQ0FBQztLQUFBO0lBRUssTUFBTSxDQUFDLE1BQWMsR0FBRzs7WUFDMUIsSUFBSSxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsRUFBRTtnQkFDeEIsTUFBTSw2Q0FBNkMsQ0FBQzthQUN2RDtZQUNELE1BQU0sSUFBSSxHQUFHO2dCQUNULE9BQU8sRUFBRSxDQUFDO2dCQUNWLEdBQUcsRUFBRSxHQUFHO2dCQUNSLE9BQU8sRUFBRSxFQUFFO2dCQUNYLEtBQUssRUFBRSxFQUFFO2dCQUNULFFBQVEsRUFBRSxLQUFLO2FBQ2xCLENBQUM7WUFDRixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2xELE9BQU8sSUFBSSxRQUFRLENBQ2YsR0FBRyxDQUFDLFVBQVUsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUNyRCxDQUFDO1FBQ04sQ0FBQztLQUFBO0lBRUssTUFBTSxDQUFDLEVBQVU7O1lBQ25CLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsRUFBQyxHQUFHLEVBQUUsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUMsQ0FBQyxDQUFDO1lBQ3pELE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztLQUFBO0NBQ0osQ0FBQTtBQTlEWSxVQUFVO0lBRnRCLFVBQVUsRUFBRTtJQUNaLFNBQVMsRUFBRTtxQ0FNd0IsY0FBYyxFQUFtQixhQUFhO0dBTHJFLFVBQVUsQ0E4RHRCO1NBOURZLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge2luamVjdGFibGUsIHNpbmdsZXRvbn0gZnJvbSBcInRzeXJpbmdlXCI7XHJcbmltcG9ydCBzb2NrZXRfaW9fY2xpZW50IGZyb20gXCJzb2NrZXQuaW8tY2xpZW50XCJcclxuaW1wb3J0IHtPYmplY3RJZH0gZnJvbSBcImJzb25cIjtcclxuaW1wb3J0IHtGaWx0ZXJRdWVyeX0gZnJvbSBcIm1vbmdvb3NlXCI7XHJcbmltcG9ydCB7SVByb2dyZXNzfSBmcm9tIFwiLi4vY29tbW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7cHJvbWlzZVRpbWVvdXR9IGZyb20gXCIuLi91dGlsc1wiO1xyXG5pbXBvcnQge0NvbmZpZ3VyYXRpb259IGZyb20gXCIuL2NvbmZpZ3VyYXRpb25cIjtcclxuaW1wb3J0IHtQcm9ncmVzc30gZnJvbSBcIi4vZW50aXRpZXMvcHJvZ3Jlc3NcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7Q29sbGVjdGlvbn0gZnJvbSBcIm1vbmdvZGJcIjtcclxuXHJcbmNvbnN0IHNvY2tldElPQ2xpZW50ID0gc29ja2V0X2lvX2NsaWVudDtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc2VzIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY2xpZW50OiBTb2NrZXRJT0NsaWVudC5Tb2NrZXQ7XHJcbiAgICByZWFkb25seSBjb2xsZWN0aW9uOiBDb2xsZWN0aW9uO1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbm5lY3RvcjogTW9uZ29Db25uZWN0b3IsIHJlYWRvbmx5IGNvbmZpZzogQ29uZmlndXJhdGlvbikge1xyXG4gICAgICAgIGNvbnN0IG1haW5FbmRwb2ludCA9IHRoaXMuY29uZmlnLnJlc29sdmUoXCJtYWluRW5kcG9pbnRcIik7XHJcbiAgICAgICAgdGhpcy5jbGllbnQgPSAhbWFpbkVuZHBvaW50ID8gbnVsbCA6IHNvY2tldElPQ2xpZW50KG1haW5FbmRwb2ludCwge3BhdGg6IFwiL3NvY2tldFwifSk7XHJcbiAgICAgICAgdGhpcy5jb2xsZWN0aW9uID0gY29ubmVjdG9yLmRhdGFiYXNlLmNvbGxlY3Rpb24oXCJwcm9ncmVzc2VzXCIpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHdhaXRUb0ZpbmlzaChpZDogc3RyaW5nKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm9ncmVzczogSVByb2dyZXNzID0gbnVsbDtcclxuICAgICAgICB3aGlsZSAoIWlzRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBhd2FpdCB0aGlzLmdldChpZCk7XHJcbiAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MpIHtcclxuICAgICAgICAgICAgICAgIHRocm93IGBQcm9ncmVzcyBkb2VzIG5vdCBleGlzdHMgd2l0aCBpZDogJHtpZH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmVzcy5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgdGhyb3cgcHJvZ3Jlc3MuZXJyb3I7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXNGaW5pc2hlZCA9IHByb2dyZXNzLnBlcmNlbnQgPT0gMTAwO1xyXG4gICAgICAgICAgICBpZiAoIWlzRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHByb21pc2VUaW1lb3V0KDUwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0KGlkOiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiAhaWQgPyBudWxsIDogdGhpcy5maW5kKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaW5kKHdoZXJlOiBGaWx0ZXJRdWVyeTxJUHJvZ3Jlc3M+KTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmZpbmRPbmUod2hlcmUpO1xyXG4gICAgICAgIHJldHVybiAhZGF0YSA/IG51bGwgOiBuZXcgUHJvZ3Jlc3MoXHJcbiAgICAgICAgICAgIGRhdGEuX2lkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24sIHRoaXMuY2xpZW50XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGUobWF4OiBudW1iZXIgPSAxMDApOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGlmIChpc05hTihtYXgpIHx8IG1heCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IFwiTWF4IHByb2dyZXNzIHZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gemVyb1wiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICBjdXJyZW50OiAwLFxyXG4gICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcclxuICAgICAgICAgICAgZXJyb3I6IFwiXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmluc2VydE9uZShkYXRhKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb2dyZXNzKFxyXG4gICAgICAgICAgICByZXMuaW5zZXJ0ZWRJZCwgZGF0YSwgdGhpcy5jb2xsZWN0aW9uLCB0aGlzLmNsaWVudFxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcmVtb3ZlKGlkOiBzdHJpbmcpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuY29sbGVjdGlvbi5kZWxldGVPbmUoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xyXG4gICAgICAgIHJldHVybiBpZDtcclxuICAgIH1cclxufVxyXG4iXX0=
119
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZ3Jlc3Nlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9zZXJ2aWNlcy9wcm9ncmVzc2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUUsU0FBUyxFQUFDLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBQyxRQUFRLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFJOUIsT0FBTyxFQUFDLGNBQWMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4QyxPQUFPLEVBQUMsY0FBYyxFQUFDLE1BQU0sbUJBQW1CLENBQUM7QUFDakQsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN6QyxPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0scUJBQXFCLENBQUM7SUFJaEMsVUFBVSxTQUFWLFVBQVU7SUFLbkIsWUFBcUIsU0FBeUIsRUFBVyxNQUFrQjtRQUF0RCxjQUFTLEdBQVQsU0FBUyxDQUFnQjtRQUFXLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDdkUsSUFBSSxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxrQkFBa0IsRUFBRSxRQUFRLENBQUMsRUFBRTtZQUMxQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsRUFBWSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLEVBQUUsUUFBZSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMzRixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFSyxZQUFZLENBQUMsRUFBVTs7WUFDekIsT0FBTyxP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USxDQUFDLEtBQUssRUFBRTt3QkFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ25DO29CQUNELFVBQVUsR0FBRyxRQUFRLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQztpQkFDeEM7Z0JBQ0QsSUFBSSxDQUFDLFVBQVUsRUFBRTtvQkFDYixJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRTt3QkFDcEMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQkFBcUIsRUFBRSxtQ0FBbUMsQ0FBQyxDQUFDO3FCQUMvRTtvQkFDRCxNQUFNLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztpQkFDL0I7YUFDSjtZQUNELE9BQU8sUUFBUSxDQUFDO1FBQ3BCLENBQUM7S0FBQTtDQUNKLENBQUE7QUFuRlksVUFBVTtJQUZ0QixVQUFVLEVBQUU7SUFDWixTQUFTLEVBQUU7cUNBTXdCLGNBQWMsRUFBbUIsVUFBVTtHQUxsRSxVQUFVLENBbUZ0QjtTQW5GWSxVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtpbmplY3RhYmxlLCBzaW5nbGV0b259IGZyb20gXCJ0c3lyaW5nZVwiO1xyXG5pbXBvcnQge09iamVjdElkfSBmcm9tIFwiYnNvblwiO1xyXG5pbXBvcnQge0NvbGxlY3Rpb259IGZyb20gXCJtb25nb2RiXCI7XHJcbmltcG9ydCB7RmlsdGVyUXVlcnl9IGZyb20gXCJtb25nb29zZVwiO1xyXG5pbXBvcnQge0lQcm9ncmVzc30gZnJvbSBcIi4uL2NvbW1vbi10eXBlc1wiO1xyXG5pbXBvcnQge3Byb21pc2VUaW1lb3V0fSBmcm9tIFwiLi4vdXRpbHNcIjtcclxuaW1wb3J0IHtNb25nb0Nvbm5lY3Rvcn0gZnJvbSBcIi4vbW9uZ28tY29ubmVjdG9yXCI7XHJcbmltcG9ydCB7Sm9iTWFuYWdlcn0gZnJvbSBcIi4vam9iLW1hbmFnZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc30gZnJvbSBcIi4vZW50aXRpZXMvcHJvZ3Jlc3NcIjtcclxuXHJcbkBpbmplY3RhYmxlKClcclxuQHNpbmdsZXRvbigpXHJcbmV4cG9ydCBjbGFzcyBQcm9ncmVzc2VzIHtcclxuXHJcbiAgICBwcm90ZWN0ZWQgY29sbGVjdGlvbjogQ29sbGVjdGlvbjtcclxuICAgIHByb3RlY3RlZCBwcm9ncmVzc2VzOiB7W2lkOiBzdHJpbmddOiBJUHJvZ3Jlc3N9O1xyXG5cclxuICAgIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGNvbm5lY3RvcjogTW9uZ29Db25uZWN0b3IsIHJlYWRvbmx5IGpvYk1hbjogSm9iTWFuYWdlcikge1xyXG4gICAgICAgIHRoaXMuY29sbGVjdGlvbiA9IGNvbm5lY3Rvci5kYXRhYmFzZS5jb2xsZWN0aW9uKFwicHJvZ3Jlc3Nlc1wiKTtcclxuICAgICAgICB0aGlzLnByb2dyZXNzZXMgPSB7fTtcclxuICAgICAgICB0aGlzLmpvYk1hbi5vbihcInByb2dyZXNzLWNoYW5nZWRcIiwgcHJvZ3Jlc3MgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBpZCA9IHByb2dyZXNzLmlkIGFzIHN0cmluZztcclxuICAgICAgICAgICAgdGhpcy5wcm9ncmVzc2VzW2lkXSA9IG5ldyBQcm9ncmVzcyhuZXcgT2JqZWN0SWQoaWQpLCBwcm9ncmVzcyBhcyBhbnksIHRoaXMuY29sbGVjdGlvbik7XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgd2FpdFRvRmluaXNoKGlkOiBzdHJpbmcpOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW1xyXG4gICAgICAgICAgICB0aGlzLndhaXRGb3JQcm9ncmVzcyhpZCwgYXN5bmMgKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IHByb2dyZXNzID0gdGhpcy5wcm9ncmVzc2VzW2lkXTtcclxuICAgICAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MucGVyY2VudCA8IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzID0gYXdhaXQgdGhpcy5nZXQoaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYgKCFwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgUHJvZ3Jlc3MgZG9lcyBub3QgZXhpc3RzIHdpdGggaWQ6ICR7aWR9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcHJvZ3Jlc3M7XHJcbiAgICAgICAgICAgIH0sIDUwMCksXHJcbiAgICAgICAgICAgIHRoaXMud2FpdEZvclByb2dyZXNzKGlkLCBhc3luYyAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5wcm9ncmVzc2VzW2lkXSB8fCBudWxsO1xyXG4gICAgICAgICAgICB9LCAyNSlcclxuICAgICAgICBdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXQoaWQ6IHN0cmluZyk6IFByb21pc2U8SVByb2dyZXNzPiB7XHJcbiAgICAgICAgcmV0dXJuICFpZCA/IG51bGwgOiB0aGlzLmZpbmQoe19pZDogbmV3IE9iamVjdElkKGlkKX0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbmQod2hlcmU6IEZpbHRlclF1ZXJ5PElQcm9ncmVzcz4pOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZmluZE9uZSh3aGVyZSk7XHJcbiAgICAgICAgcmV0dXJuICFkYXRhID8gbnVsbCA6IG5ldyBQcm9ncmVzcyhkYXRhLl9pZCwgZGF0YSwgdGhpcy5jb2xsZWN0aW9uKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGUobWF4OiBudW1iZXIgPSAxMDApOiBQcm9taXNlPElQcm9ncmVzcz4ge1xyXG4gICAgICAgIGlmIChpc05hTihtYXgpIHx8IG1heCA8PSAwKSB7XHJcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTWF4IHByb2dyZXNzIHZhbHVlIG11c3QgYmUgYmlnZ2VyIHRoYW4gemVyb2ApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBkYXRhID0ge1xyXG4gICAgICAgICAgICBjdXJyZW50OiAwLFxyXG4gICAgICAgICAgICBtYXg6IG1heCxcclxuICAgICAgICAgICAgbWVzc2FnZTogXCJcIixcclxuICAgICAgICAgICAgZXJyb3I6IFwiXCIsXHJcbiAgICAgICAgICAgIGNhbmNlbGVkOiBmYWxzZVxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uLmluc2VydE9uZShkYXRhKTtcclxuICAgICAgICByZXR1cm4gbmV3IFByb2dyZXNzKHJlcy5pbnNlcnRlZElkLCBkYXRhLCB0aGlzLmNvbGxlY3Rpb24pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHJlbW92ZShpZDogc3RyaW5nKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBhd2FpdCB0aGlzLmNvbGxlY3Rpb24uZGVsZXRlT25lKHtfaWQ6IG5ldyBPYmplY3RJZChpZCl9KTtcclxuICAgICAgICByZXR1cm4gaWQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGFzeW5jIHdhaXRGb3JQcm9ncmVzcyhpZDogc3RyaW5nLCBjYjogKCkgPT4gUHJvbWlzZTxJUHJvZ3Jlc3M+LCBkZWxheTogbnVtYmVyKTogUHJvbWlzZTxJUHJvZ3Jlc3M+IHtcclxuICAgICAgICBsZXQgaXNGaW5pc2hlZCA9IGZhbHNlO1xyXG4gICAgICAgIGxldCBwcm9ncmVzczogSVByb2dyZXNzID0gbnVsbDtcclxuICAgICAgICBsZXQgd2FpdFRpbWU6IG51bWJlciA9IDA7XHJcbiAgICAgICAgd2hpbGUgKCFpc0ZpbmlzaGVkKSB7XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gYXdhaXQgY2IoKTtcclxuICAgICAgICAgICAgd2FpdFRpbWUgKz0gZGVsYXk7XHJcbiAgICAgICAgICAgIGlmIChwcm9ncmVzcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKHByb2dyZXNzLmVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2dyZXNzLmVycm9yKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlzRmluaXNoZWQgPSBwcm9ncmVzcy5wZXJjZW50ID49IDEwMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIWlzRmluaXNoZWQpIHtcclxuICAgICAgICAgICAgICAgIGlmICh3YWl0VGltZSA+PSB0aGlzLmpvYk1hbi5tYXhUaW1lb3V0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBQcm9ncmVzcyB3aXRoIGlkOiAke2lkfSBwcm9iYWJseSBuZXZlciB3aWxsIGJlIGZpbmlzaGVkIWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgYXdhaXQgcHJvbWlzZVRpbWVvdXQoZGVsYXkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBwcm9ncmVzcztcclxuICAgIH1cclxufVxyXG4iXX0=
@@ -19,14 +19,15 @@ export class LazyAssetGenerator {
19
19
  get lazyAssets() {
20
20
  return this.assetResolver.lazyAssets;
21
21
  }
22
- process() {
22
+ process(messaging) {
23
23
  return __awaiter(this, void 0, void 0, function* () {
24
24
  const lazyAsset = yield this.lazyAssets.read(this.lazyId);
25
25
  let progress = yield this.progresses.get(lazyAsset.progressId);
26
26
  if (!progress || progress.canceled)
27
27
  return null;
28
+ progress.setMessageBridge(messaging);
28
29
  try {
29
- const asset = yield this.generate(progress);
30
+ const asset = yield this.generate(progress, messaging);
30
31
  progress = yield progress.load();
31
32
  if (!progress || progress.canceled)
32
33
  return null;
@@ -42,4 +43,4 @@ export class LazyAssetGenerator {
42
43
  });
43
44
  }
44
45
  }
45
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbGl0aWVzL2xhenktYXNzZXQtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE1BQU0sT0FBZ0Isa0JBQWtCO0lBVXBDLFlBQWdDLGFBQTRCLEVBQVksVUFBc0IsRUFBWSxNQUFjO1FBQXhGLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVksZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDeEgsQ0FBQztJQVRELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDekMsQ0FBQztJQU9LLE9BQU87O1lBQ1QsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxJQUFJO2dCQUNBLE1BQU0sS0FBSyxHQUFHLE1BQU0sSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDNUMsUUFBUSxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUNoRCxNQUFNLFNBQVMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDckM7WUFBQyxPQUFPLENBQUMsRUFBRTtnQkFDUixNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxDQUFDLENBQUMsQ0FBQztnQkFDeEMsTUFBTSxDQUFDLENBQUM7YUFDWDtZQUNELElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3hCLE1BQU0sUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLENBQUM7YUFDOUM7UUFDTCxDQUFDO0tBQUE7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SUFzc2V0LCBJSm9iLCBJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi4vc2VydmljZXMvbGF6eS1hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExhenlBc3NldEdlbmVyYXRvciBpbXBsZW1lbnRzIElKb2Ige1xyXG5cclxuICAgIGdldCBhc3NldHMoKTogQXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmFzc2V0cztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGF6eUFzc2V0cygpOiBMYXp5QXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmxhenlBc3NldHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhc3NldFJlc29sdmVyOiBBc3NldFJlc29sdmVyLCBwcm90ZWN0ZWQgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcHJvdGVjdGVkIGxhenlJZDogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgZ2VuZXJhdGUocHJvZ3Jlc3M6IElQcm9ncmVzcyk6IFByb21pc2U8SUFzc2V0PjtcclxuXHJcbiAgICBhc3luYyBwcm9jZXNzKCk6IFByb21pc2U8YW55PiB7XHJcbiAgICAgICAgY29uc3QgbGF6eUFzc2V0ID0gYXdhaXQgdGhpcy5sYXp5QXNzZXRzLnJlYWQodGhpcy5sYXp5SWQpO1xyXG4gICAgICAgIGxldCBwcm9ncmVzcyA9IGF3YWl0IHRoaXMucHJvZ3Jlc3Nlcy5nZXQobGF6eUFzc2V0LnByb2dyZXNzSWQpO1xyXG4gICAgICAgIGlmICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MuY2FuY2VsZWQpIHJldHVybiBudWxsO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZShwcm9ncmVzcyk7XHJcbiAgICAgICAgICAgIHByb2dyZXNzID0gYXdhaXQgcHJvZ3Jlc3MubG9hZCgpO1xyXG4gICAgICAgICAgICBpZiAoIXByb2dyZXNzIHx8IHByb2dyZXNzLmNhbmNlbGVkKSByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgYXdhaXQgbGF6eUFzc2V0LndyaXRlQXNzZXQoYXNzZXQpO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgYXdhaXQgcHJvZ3Jlc3Muc2V0RXJyb3IoZS5tZXNzYWdlIHx8IGUpO1xyXG4gICAgICAgICAgICB0aHJvdyBlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocHJvZ3Jlc3MucmVtYWluaW5nID4gMCkge1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5hZHZhbmNlKHByb2dyZXNzLnJlbWFpbmluZyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcbiJdfQ==
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1hc3NldC1nZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbGl0aWVzL2xhenktYXNzZXQtZ2VuZXJhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQU1BLE1BQU0sT0FBZ0Isa0JBQWtCO0lBVXBDLFlBQWdDLGFBQTRCLEVBQVksVUFBc0IsRUFBWSxNQUFjO1FBQXhGLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQVksZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQUFZLFdBQU0sR0FBTixNQUFNLENBQVE7SUFDeEgsQ0FBQztJQVRELElBQUksTUFBTTtRQUNOLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksVUFBVTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUM7SUFDekMsQ0FBQztJQU9LLE9BQU8sQ0FBQyxTQUF5Qjs7WUFDbkMsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDMUQsSUFBSSxRQUFRLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDL0QsSUFBSSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUTtnQkFBRSxPQUFPLElBQUksQ0FBQztZQUNoRCxRQUFRLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckMsSUFBSTtnQkFDQSxNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO2dCQUN2RCxRQUFRLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVE7b0JBQUUsT0FBTyxJQUFJLENBQUM7Z0JBQ2hELE1BQU0sU0FBUyxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNyQztZQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUNSLE1BQU0sUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN4QyxNQUFNLENBQUMsQ0FBQzthQUNYO1lBQ0QsSUFBSSxRQUFRLENBQUMsU0FBUyxHQUFHLENBQUMsRUFBRTtnQkFDeEIsTUFBTSxRQUFRLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQzthQUM5QztRQUNMLENBQUM7S0FBQTtDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJQXNzZXQsIElKb2IsIElNZXNzYWdlQnJpZGdlLCBJUHJvZ3Jlc3N9IGZyb20gXCIuLi9jb21tb24tdHlwZXNcIjtcclxuaW1wb3J0IHtBc3NldHN9IGZyb20gXCIuLi9zZXJ2aWNlcy9hc3NldHNcIjtcclxuaW1wb3J0IHtMYXp5QXNzZXRzfSBmcm9tIFwiLi4vc2VydmljZXMvbGF6eS1hc3NldHNcIjtcclxuaW1wb3J0IHtBc3NldFJlc29sdmVyfSBmcm9tIFwiLi4vc2VydmljZXMvYXNzZXQtcmVzb2x2ZXJcIjtcclxuaW1wb3J0IHtQcm9ncmVzc2VzfSBmcm9tIFwiLi4vc2VydmljZXMvcHJvZ3Jlc3Nlc1wiO1xyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExhenlBc3NldEdlbmVyYXRvciBpbXBsZW1lbnRzIElKb2Ige1xyXG5cclxuICAgIGdldCBhc3NldHMoKTogQXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmFzc2V0cztcclxuICAgIH1cclxuXHJcbiAgICBnZXQgbGF6eUFzc2V0cygpOiBMYXp5QXNzZXRzIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5hc3NldFJlc29sdmVyLmxhenlBc3NldHM7XHJcbiAgICB9XHJcblxyXG4gICAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBhc3NldFJlc29sdmVyOiBBc3NldFJlc29sdmVyLCBwcm90ZWN0ZWQgcHJvZ3Jlc3NlczogUHJvZ3Jlc3NlcywgcHJvdGVjdGVkIGxhenlJZDogc3RyaW5nKSB7XHJcbiAgICB9XHJcblxyXG4gICAgYWJzdHJhY3QgZ2VuZXJhdGUocHJvZ3Jlc3M6IElQcm9ncmVzcywgbWVzc2FnaW5nPzogSU1lc3NhZ2VCcmlkZ2UpOiBQcm9taXNlPElBc3NldD47XHJcblxyXG4gICAgYXN5bmMgcHJvY2VzcyhtZXNzYWdpbmc6IElNZXNzYWdlQnJpZGdlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBsYXp5QXNzZXQgPSBhd2FpdCB0aGlzLmxhenlBc3NldHMucmVhZCh0aGlzLmxhenlJZCk7XHJcbiAgICAgICAgbGV0IHByb2dyZXNzID0gYXdhaXQgdGhpcy5wcm9ncmVzc2VzLmdldChsYXp5QXNzZXQucHJvZ3Jlc3NJZCk7XHJcbiAgICAgICAgaWYgKCFwcm9ncmVzcyB8fCBwcm9ncmVzcy5jYW5jZWxlZCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgcHJvZ3Jlc3Muc2V0TWVzc2FnZUJyaWRnZShtZXNzYWdpbmcpO1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGFzc2V0ID0gYXdhaXQgdGhpcy5nZW5lcmF0ZShwcm9ncmVzcywgbWVzc2FnaW5nKTtcclxuICAgICAgICAgICAgcHJvZ3Jlc3MgPSBhd2FpdCBwcm9ncmVzcy5sb2FkKCk7XHJcbiAgICAgICAgICAgIGlmICghcHJvZ3Jlc3MgfHwgcHJvZ3Jlc3MuY2FuY2VsZWQpIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICBhd2FpdCBsYXp5QXNzZXQud3JpdGVBc3NldChhc3NldCk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICBhd2FpdCBwcm9ncmVzcy5zZXRFcnJvcihlLm1lc3NhZ2UgfHwgZSk7XHJcbiAgICAgICAgICAgIHRocm93IGU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChwcm9ncmVzcy5yZW1haW5pbmcgPiAwKSB7XHJcbiAgICAgICAgICAgIGF3YWl0IHByb2dyZXNzLmFkdmFuY2UocHJvZ3Jlc3MucmVtYWluaW5nKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19