@kontur.candy/tools 2.189.1 → 2.189.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.
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js +10 -3
- package/distr/Tools/src/BuildTasks/ProcessUtils/ShellProcessHandle.js.map +1 -1
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js +3 -3
- package/distr/Tools/src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.js.map +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js +1 -1
- package/distr/Tools/src/LocalServerFrontEndDist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -48,8 +48,15 @@ class ShellProcessHandle {
|
|
|
48
48
|
start() {
|
|
49
49
|
var _this$process$stdout, _this$process$stderr;
|
|
50
50
|
this.subscription = _ConsoleApplication.ConsoleApplication.onExit.subscribe(this.handleExit);
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
let shellExe, shellArg;
|
|
52
|
+
if (process.platform === "win32") {
|
|
53
|
+
shellExe = "cmd.exe";
|
|
54
|
+
shellArg = ["/c", this.startInfo.command, ...this.startInfo.args];
|
|
55
|
+
} else {
|
|
56
|
+
shellExe = "/bin/sh";
|
|
57
|
+
shellArg = ["-c", [this.startInfo.command, ...this.startInfo.args].join(" ")];
|
|
58
|
+
}
|
|
59
|
+
this.process = (0, _child_process.spawn)(shellExe, shellArg, {
|
|
53
60
|
cwd: this.startInfo.workingDirectory,
|
|
54
61
|
stdio: "pipe"
|
|
55
62
|
});
|
|
@@ -74,4 +81,4 @@ class ShellProcessHandle {
|
|
|
74
81
|
}
|
|
75
82
|
}
|
|
76
83
|
exports.ShellProcessHandle = ShellProcessHandle;
|
|
77
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
84
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY2hpbGRfcHJvY2VzcyIsInJlcXVpcmUiLCJfQ29uc29sZUFwcGxpY2F0aW9uIiwiX0V2ZW50T2JqZWN0IiwiX1Byb2Nlc3NVdGlscyIsIlNoZWxsUHJvY2Vzc0hhbmRsZSIsImNvbnN0cnVjdG9yIiwic3RhcnRJbmZvIiwicHJvY2VzcyIsIm9uU3RkT3V0IiwiY3JlYXRlRXZlbnQiLCJvblN0ZEVyciIsInN1YnNjcmlwdGlvbiIsImhhbmRsZUV4aXQiLCJraWxsIiwiX3Byb2Nlc3NUb0tpbGwkc3RkZXJyIiwiX3Byb2Nlc3NUb0tpbGwkc3Rkb3V0IiwidW5kZWZpbmVkIiwidW5zdWJzY3JpYmUiLCJwcm9jZXNzVG9LaWxsIiwiRXJyb3IiLCJwaWQiLCJzdGRlcnIiLCJwYXVzZSIsInN0ZG91dCIsIlByb2Nlc3NVdGlscyIsImtpbGxUcmVlQXN5bmMiLCJ3YWl0T3V0cHV0SW5jbHVkZXNTdHJpbmciLCJleHBlY3RlZFN0cmluZyIsIlByb21pc2UiLCJyZXNvbHZlIiwic3Vic2NyaWJlIiwib3V0cHV0IiwiaW5jbHVkZXMiLCJzdGFydCIsIl90aGlzJHByb2Nlc3Mkc3Rkb3V0IiwiX3RoaXMkcHJvY2VzcyRzdGRlcnIiLCJDb25zb2xlQXBwbGljYXRpb24iLCJvbkV4aXQiLCJzaGVsbEV4ZSIsInNoZWxsQXJnIiwicGxhdGZvcm0iLCJjb21tYW5kIiwiYXJncyIsImpvaW4iLCJzcGF3biIsImN3ZCIsIndvcmtpbmdEaXJlY3RvcnkiLCJzdGRpbyIsIm9uIiwiZGF0YSIsImVtaXQiLCJ0b1N0cmluZyIsIndhaXRGb3JFeGl0IiwiY3VycmVudFByb2Nlc3MiLCJjb2RlIiwiZXhwb3J0cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9CdWlsZFRhc2tzL1Byb2Nlc3NVdGlscy9TaGVsbFByb2Nlc3NIYW5kbGUudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hpbGRQcm9jZXNzLCBzcGF3biB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5cbmltcG9ydCB7IENvbnNvbGVBcHBsaWNhdGlvbiB9IGZyb20gXCIuLi8uLi9Db21tb25zL0NvbnNvbGVBcHBsaWNhdGlvbi9Db25zb2xlQXBwbGljYXRpb25cIjtcbmltcG9ydCB7IGNyZWF0ZUV2ZW50LCBJRXZlbnRTdWJzY3JpcHRpb24gfSBmcm9tIFwiLi4vLi4vQ29tbW9ucy9FdmVudE9iamVjdFwiO1xuXG5pbXBvcnQgeyBQcm9jZXNzVXRpbHMgfSBmcm9tIFwiLi9Qcm9jZXNzVXRpbHNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBTaGVsbFByb2Nlc3NTdGFydEluZm8ge1xuICAgIGNvbW1hbmQ6IHN0cmluZztcbiAgICBhcmdzOiBzdHJpbmdbXTtcbiAgICB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgU2hlbGxQcm9jZXNzSGFuZGxlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0SW5mbzogU2hlbGxQcm9jZXNzU3RhcnRJbmZvO1xuICAgIHByaXZhdGUgcHJvY2Vzcz86IENoaWxkUHJvY2VzcztcblxuICAgIHB1YmxpYyByZWFkb25seSBvblN0ZE91dCA9IGNyZWF0ZUV2ZW50PFtzdHJpbmddPigpO1xuICAgIHB1YmxpYyByZWFkb25seSBvblN0ZEVyciA9IGNyZWF0ZUV2ZW50PFtzdHJpbmddPigpO1xuICAgIHByaXZhdGUgc3Vic2NyaXB0aW9uPzogSUV2ZW50U3Vic2NyaXB0aW9uO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHN0YXJ0SW5mbzogU2hlbGxQcm9jZXNzU3RhcnRJbmZvKSB7XG4gICAgICAgIHRoaXMuc3RhcnRJbmZvID0gc3RhcnRJbmZvO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBraWxsKCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICBpZiAodGhpcy5zdWJzY3JpcHRpb24gIT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb2Nlc3NUb0tpbGwgPSB0aGlzLnByb2Nlc3M7XG4gICAgICAgIGlmIChwcm9jZXNzVG9LaWxsID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvY2VzcyBub3Qgc3RhcnRlZFwiKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwaWQgPSBwcm9jZXNzVG9LaWxsLnBpZDtcbiAgICAgICAgdGhpcy5wcm9jZXNzID0gdW5kZWZpbmVkO1xuICAgICAgICBwcm9jZXNzVG9LaWxsLnN0ZGVycj8ucGF1c2UoKTtcbiAgICAgICAgcHJvY2Vzc1RvS2lsbC5zdGRvdXQ/LnBhdXNlKCk7XG4gICAgICAgIGF3YWl0IFByb2Nlc3NVdGlscy5raWxsVHJlZUFzeW5jKHBpZCk7XG4gICAgfVxuXG4gICAgcHVibGljIHdhaXRPdXRwdXRJbmNsdWRlc1N0cmluZyhleHBlY3RlZFN0cmluZzogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZTx2b2lkPihyZXNvbHZlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMub25TdGRPdXQuc3Vic2NyaWJlKG91dHB1dCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG91dHB1dC5pbmNsdWRlcyhleHBlY3RlZFN0cmluZykpIHtcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICAgICAgICAgIHJlc29sdmUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN0YXJ0KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IENvbnNvbGVBcHBsaWNhdGlvbi5vbkV4aXQuc3Vic2NyaWJlKHRoaXMuaGFuZGxlRXhpdCk7XG4gICAgICAgIGxldCBzaGVsbEV4ZTogc3RyaW5nLCBzaGVsbEFyZzogc3RyaW5nW107XG4gICAgICAgIGlmIChwcm9jZXNzLnBsYXRmb3JtID09PSBcIndpbjMyXCIpIHtcbiAgICAgICAgICAgIHNoZWxsRXhlID0gXCJjbWQuZXhlXCI7XG4gICAgICAgICAgICBzaGVsbEFyZyA9IFtcIi9jXCIsIHRoaXMuc3RhcnRJbmZvLmNvbW1hbmQsIC4uLnRoaXMuc3RhcnRJbmZvLmFyZ3NdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2hlbGxFeGUgPSBcIi9iaW4vc2hcIjtcbiAgICAgICAgICAgIHNoZWxsQXJnID0gW1wiLWNcIiwgW3RoaXMuc3RhcnRJbmZvLmNvbW1hbmQsIC4uLnRoaXMuc3RhcnRJbmZvLmFyZ3NdLmpvaW4oXCIgXCIpXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3MgPSBzcGF3bihzaGVsbEV4ZSwgc2hlbGxBcmcsIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5zdGFydEluZm8ud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgICAgICAgIHN0ZGlvOiBcInBpcGVcIixcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5zdGRvdXQ/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RkT3V0LmVtaXQoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucHJvY2Vzcy5zdGRlcnI/Lm9uKFwiZGF0YVwiLCAoZGF0YTogQnVmZmVyIHwgc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uU3RkRXJyLmVtaXQoZGF0YS50b1N0cmluZygpKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIHdhaXRGb3JFeGl0KCk6IFByb21pc2U8bnVsbCB8IG51bWJlcj4ge1xuICAgICAgICBjb25zdCBjdXJyZW50UHJvY2VzcyA9IHRoaXMucHJvY2VzcztcbiAgICAgICAgaWYgKGN1cnJlbnRQcm9jZXNzICE9IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlPG51bGwgfCBudW1iZXI+KHJlc29sdmUgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRQcm9jZXNzLm9uKFwiZXhpdFwiLCBjb2RlID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShjb2RlKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTm8gcHJvY2VzcyBzdGFydGVkXCIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVFeGl0ID0gYXN5bmMgKCk6IFByb21pc2U8dm9pZD4gPT4ge1xuICAgICAgICBhd2FpdCB0aGlzLmtpbGwoKTtcbiAgICB9O1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxJQUFBQSxjQUFBLEdBQUFDLE9BQUE7QUFFQSxJQUFBQyxtQkFBQSxHQUFBRCxPQUFBO0FBQ0EsSUFBQUUsWUFBQSxHQUFBRixPQUFBO0FBRUEsSUFBQUcsYUFBQSxHQUFBSCxPQUFBO0FBUU8sTUFBTUksa0JBQWtCLENBQUM7RUFRckJDLFdBQVdBLENBQUNDLFNBQWdDLEVBQUU7SUFBQSxLQVBwQ0EsU0FBUztJQUFBLEtBQ2xCQyxPQUFPO0lBQUEsS0FFQ0MsUUFBUSxHQUFHLElBQUFDLHdCQUFXLEVBQVcsQ0FBQztJQUFBLEtBQ2xDQyxRQUFRLEdBQUcsSUFBQUQsd0JBQVcsRUFBVyxDQUFDO0lBQUEsS0FDMUNFLFlBQVk7SUFBQSxLQW1FSEMsVUFBVSxHQUFHLFlBQTJCO01BQ3JELE1BQU0sSUFBSSxDQUFDQyxJQUFJLENBQUMsQ0FBQztJQUNyQixDQUFDO0lBbEVHLElBQUksQ0FBQ1AsU0FBUyxHQUFHQSxTQUFTO0VBQzlCO0VBRUEsTUFBYU8sSUFBSUEsQ0FBQSxFQUFrQjtJQUFBLElBQUFDLHFCQUFBLEVBQUFDLHFCQUFBO0lBQy9CLElBQUks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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShellProcessHandle.js","names":["_child_process","require","_ConsoleApplication","_EventObject","_ProcessUtils","ShellProcessHandle","constructor","startInfo","process","onStdOut","createEvent","onStdErr","subscription","handleExit","kill","_processToKill$stderr","_processToKill$stdout","undefined","unsubscribe","processToKill","Error","pid","stderr","pause","stdout","ProcessUtils","killTreeAsync","waitOutputIncludesString","expectedString","Promise","resolve","subscribe","output","includes","start","_this$process$stdout","_this$process$stderr","ConsoleApplication","onExit","shellExe","shellArg","platform","
|
|
1
|
+
{"version":3,"file":"ShellProcessHandle.js","names":["_child_process","require","_ConsoleApplication","_EventObject","_ProcessUtils","ShellProcessHandle","constructor","startInfo","process","onStdOut","createEvent","onStdErr","subscription","handleExit","kill","_processToKill$stderr","_processToKill$stdout","undefined","unsubscribe","processToKill","Error","pid","stderr","pause","stdout","ProcessUtils","killTreeAsync","waitOutputIncludesString","expectedString","Promise","resolve","subscribe","output","includes","start","_this$process$stdout","_this$process$stderr","ConsoleApplication","onExit","shellExe","shellArg","platform","command","args","join","spawn","cwd","workingDirectory","stdio","on","data","emit","toString","waitForExit","currentProcess","code","exports"],"sources":["../../../../../src/BuildTasks/ProcessUtils/ShellProcessHandle.ts"],"sourcesContent":["import { ChildProcess, spawn } from \"child_process\";\n\nimport { ConsoleApplication } from \"../../Commons/ConsoleApplication/ConsoleApplication\";\nimport { createEvent, IEventSubscription } from \"../../Commons/EventObject\";\n\nimport { ProcessUtils } from \"./ProcessUtils\";\n\nexport interface ShellProcessStartInfo {\n command: string;\n args: string[];\n workingDirectory?: string;\n}\n\nexport class ShellProcessHandle {\n private readonly startInfo: ShellProcessStartInfo;\n private process?: ChildProcess;\n\n public readonly onStdOut = createEvent<[string]>();\n public readonly onStdErr = createEvent<[string]>();\n private subscription?: IEventSubscription;\n\n public constructor(startInfo: ShellProcessStartInfo) {\n this.startInfo = startInfo;\n }\n\n public async kill(): Promise<void> {\n if (this.subscription != undefined) {\n this.subscription.unsubscribe();\n }\n const processToKill = this.process;\n if (processToKill == undefined) {\n throw new Error(\"Process not started\");\n }\n const pid = processToKill.pid;\n this.process = undefined;\n processToKill.stderr?.pause();\n processToKill.stdout?.pause();\n await ProcessUtils.killTreeAsync(pid);\n }\n\n public waitOutputIncludesString(expectedString: string): Promise<void> {\n return new Promise<void>(resolve => {\n const subscription = this.onStdOut.subscribe(output => {\n if (output.includes(expectedString)) {\n subscription.unsubscribe();\n resolve();\n }\n });\n });\n }\n\n public start(): void {\n this.subscription = ConsoleApplication.onExit.subscribe(this.handleExit);\n let shellExe: string, shellArg: string[];\n if (process.platform === \"win32\") {\n shellExe = \"cmd.exe\";\n shellArg = [\"/c\", this.startInfo.command, ...this.startInfo.args];\n } else {\n shellExe = \"/bin/sh\";\n shellArg = [\"-c\", [this.startInfo.command, ...this.startInfo.args].join(\" \")];\n }\n this.process = spawn(shellExe, shellArg, {\n cwd: this.startInfo.workingDirectory,\n stdio: \"pipe\",\n });\n this.process.stdout?.on(\"data\", (data: Buffer | string) => {\n this.onStdOut.emit(data.toString());\n });\n this.process.stderr?.on(\"data\", (data: Buffer | string) => {\n this.onStdErr.emit(data.toString());\n });\n }\n\n public waitForExit(): Promise<null | number> {\n const currentProcess = this.process;\n if (currentProcess != undefined) {\n return new Promise<null | number>(resolve => {\n currentProcess.on(\"exit\", code => {\n resolve(code);\n });\n });\n } else {\n throw new Error(\"No process started\");\n }\n }\n\n private readonly handleExit = async (): Promise<void> => {\n await this.kill();\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -63,8 +63,8 @@ let BuildServerBackendResourcesUpdatesController = exports.BuildServerBackendRes
|
|
|
63
63
|
recursive: true
|
|
64
64
|
}, _lodash.default.debounce((x, y) => this.handleFarmFSUpdate(x, y, config.farmDirectory), 200)));
|
|
65
65
|
this.formWatchers = this.allFarmConfig.map(config => {
|
|
66
|
-
const formRootDirectory = _path.default.normalize(_path.default.join(config.farmDirectory, ".."));
|
|
67
|
-
return (0, _fs.watch)(
|
|
66
|
+
const formRootDirectory = _path.default.normalize(_path.default.join(config.farmDirectory, "..", _WellKnownDirectories.WellKnownDirectories.FormsDirectory));
|
|
67
|
+
return (0, _fs.watch)(formRootDirectory, {
|
|
68
68
|
recursive: true
|
|
69
69
|
}, _lodash.default.debounce((x, y) => this.handleFormFSUpdate(x, y, formRootDirectory), 200));
|
|
70
70
|
});
|
|
@@ -101,4 +101,4 @@ class Monitor {
|
|
|
101
101
|
}
|
|
102
102
|
}
|
|
103
103
|
}
|
|
104
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Bc3luY1V0aWxzIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9XZWxsS25vd25EaXJlY3RvcmllcyIsIl9HbG9iVG9SZWdleHAiLCJfZGVjIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIiLCJleHBvcnRzIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwUXVlcnlQYXJhbSIsImh0dHBUeXBlIiwiTnVtYmVyIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImxhc3RVcGRhdGVUaW1lIiwidXBkYXRlTW9uaXRvciIsIk1vbml0b3IiLCJmYXJtV2F0Y2hlcnMiLCJmb3JtV2F0Y2hlcnMiLCJyZXNvdXJjZXNXYXRjaGVyIiwiZmFybVdhdGNoaW5nUmVnZXhwcyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsIm1hcCIsImdsb2JUb1JlZ2V4cCIsImZvcm1zV2F0Y2hpbmdSZWdleHBzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiaGFuZGxlRmFybUZTVXBkYXRlIiwiZXZlbnRUeXBlIiwiZmlsZVBhdGgiLCJyb290RGlyIiwic29tZSIsIngiLCJ0ZXN0Iiwic3RhdCIsInBhdGgiLCJqb2luIiwiZXJyIiwiZmlsZVN0YXQiLCJmaWxlVGlja3MiLCJNYXRoIiwibWF4IiwibXRpbWVNcyIsImN0aW1lTXMiLCJEYXRlIiwibm93IiwicHVsc2VBbGwiLCJoYW5kbGVGb3JtRlNVcGRhdGUiLCJiZWZvcmVTdGFydCIsImNvbmZpZyIsIndhdGNoIiwiZmFybURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsIl8iLCJkZWJvdW5jZSIsInkiLCJmb3JtUm9vdERpcmVjdG9yeSIsIm5vcm1hbGl6ZSIsImdldExhc3RVcGRhdGVUaW1lIiwicHJldkxhc3RVcGRhdGVUaW1lIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJQcm9taXNlIiwicmFjZSIsIndhaXQiLCJkZWxheSIsImFmdGVyU3RvcCIsIl90aGlzJGZhcm1XYXRjaGVycyIsIl90aGlzJGZvcm1XYXRjaGVycyIsIl90aGlzJHJlc291cmNlc1dhdGNoZSIsImkiLCJjbG9zZSIsIl9hcHBseURlY29yYXRlZERlc2NyaXB0b3IyIiwiZGVmYXVsdCIsInByb3RvdHlwZSIsIk9iamVjdCIsImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsImF3YWl0ZXJzIiwid2FpdFByb21pc2VIYW5kbGVyIiwicmVzb2x2ZSIsInB1c2giLCJhd2FpdGVyIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL0NMSUNvbW1hbmRzL0J1aWxkU2VydmVyL1Jlc291cmNlc0NvbnRyb2xsZXJzL0J1aWxkU2VydmVyQmFja2VuZFJlc291cmNlc1VwZGF0ZXNDb250cm9sbGVyLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZTV2F0Y2hlciwgd2F0Y2gsIHN0YXQgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCBfIGZyb20gXCJsb2Rhc2hcIjtcbmltcG9ydCB7IEZhcm1Db25maWcgfSBmcm9tIFwiVG9vbHMvc3JjL0NhbmR5Q0xJXCI7XG5cbmltcG9ydCB7IGRlbGF5IH0gZnJvbSBcIi4uLy4uLy4uLy4uLy4uL0NvbW1vbi9Bc3luY1V0aWxzXCI7XG5pbXBvcnQgeyBodHRwR2V0IH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL01ldGhvZHNcIjtcbmltcG9ydCB7IGh0dHBRdWVyeVBhcmFtLCBodHRwVHlwZSB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9QYXJhbXNcIjtcbmltcG9ydCB7IGh0dHBSZXR1cm4gfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvUmVzdWx0c1wiO1xuaW1wb3J0IHsgU2luZ2xldG9uQ29udHJvbGxlciB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvRXhwcmVzc1dyYXBwZXIvU2luZ2xldG9uQ29udHJvbGxlclwiO1xuaW1wb3J0IHsgV2VsbEtub3duRGlyZWN0b3JpZXMgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL1dlbGxLbm93bkRpcmVjdG9yaWVzXCI7XG5cbmltcG9ydCB7IGdsb2JUb1JlZ2V4cCB9IGZyb20gXCIuL0dsb2JUb1JlZ2V4cFwiO1xuXG5leHBvcnQgY2xhc3MgQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIgZXh0ZW5kcyBTaW5nbGV0b25Db250cm9sbGVyIHtcbiAgICBwcml2YXRlIGxhc3RVcGRhdGVUaW1lID0gMDtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHVwZGF0ZU1vbml0b3I6IE1vbml0b3IgPSBuZXcgTW9uaXRvcigpO1xuICAgIHByaXZhdGUgZmFybVdhdGNoZXJzPzogRlNXYXRjaGVyW107XG4gICAgcHJpdmF0ZSBmb3JtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlc1dhdGNoZXI/OiBGU1dhdGNoZXI7XG4gICAgcHJpdmF0ZSByZWFkb25seSBhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW107XG4gICAgcHJpdmF0ZSByZWFkb25seSBmYXJtV2F0Y2hpbmdSZWdleHBzID0gW1xuICAgICAgICBcImZvcm1zLyovc2NoZW1hcy8qLnJuZy54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL2NvbnZlcnRlcnMvKlwiLFxuICAgICAgICBcImZvcm1zLyovbWVyZ2Vycy8qXCIsXG4gICAgICAgIC8vIE5PVEUg0KLRg9GCINGC0LDQutC+0LUg0LTQtdC70L46INC/0L7Rh9C10LzRgy3RgtC+INC40L3QvtCz0LTQsCAo0LjQvdC+0LPQtNCwLCDRgtC+INC10YHRgtGMINC90LUg0LLRgdC10LPQtNCwISksINC60L7Qs9C00LAg0L3QsNC8INC/0YDQuNGF0L7QtNC40YIg0LfQsNC/0YDQvtGBINC90LBcbiAgICAgICAgLy8gZm9ybXMvKi9wcmVzZW50YXRpb25zLmpzb24g0LIg0Y3RgtC+0Lwg0LrQu9Cw0YHRgdC1INCy0L7Qt9C90LjQutCw0LXRgiDRgdC+0LHRi9GC0LjQtSDQvtCxINC40LfQvNC10L3QuNC4INGN0YLQvtCz0L4g0YTQsNC50LvQsCDQuCDQvNGLINCz0LXQvdC10YDQuNC8INC+0YfQtdC90Ywg0LzQvdC+0LPQvlxuICAgICAgICAvLyDQu9C40YjQvdC40YUg0YHQvtCx0YvRgtC40Lkg0L7QsSDQuNC30LzQtdC90LjQuCDRgNC10YHRg9GA0YHQvtCyINC4IENhbmR5QXBpINC30LDQstC40YHQsNC10YIuINCvINC/0L7QutCwINC90LUg0YHQvNC+0LMg0YDQsNC30L7QsdGA0LDRgtGM0YHRjyDQv9C+0YfQtdC80YMg0Y3RgtC+INGC0LDQui5cbiAgICAgICAgLy8gXCJmb3Jtcy8qL3ByZXNlbnRhdGlvbnMuanNvblwiLFxuICAgICAgICBgZm9ybXMvKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWV9YCxcbiAgICAgICAgXCJmb3Jtcy8qL3N1Z2FyLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9ub3JtYWxpemUvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL3VubWFwLyoueG1sXCIsXG4gICAgICAgIFwiZm9ybXMvKi9tYXAvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL3BhdGNoLyoueHNsdFwiLFxuICAgICAgICBcInBpY2tsaXN0cy8qXCIsXG4gICAgXS5tYXAoZ2xvYlRvUmVnZXhwKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZvcm1zV2F0Y2hpbmdSZWdleHBzID0gW1xuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3NjaGVtYXMvKi5ybmcueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9jb252ZXJ0ZXJzLypgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L21lcmdlcnMvKmAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vcHJlc2VudGF0aW9ucy5qc29uYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkZvcm1Kc29uRmlsZU5hbWV9YCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9zdWdhci8qLnhtbGAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbm9ybWFsaXplLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS91bm1hcC8qLnhtbGAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbWFwLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9wYXRjaC8qLnhzbHRgLFxuICAgIF0ubWFwKGdsb2JUb1JlZ2V4cCk7XG5cbiAgICBwdWJsaWMgY29uc3RydWN0b3IoYWxsRmFybUNvbmZpZzogRmFybUNvbmZpZ1tdKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuYWxsRmFybUNvbmZpZyA9IGFsbEZhcm1Db25maWc7XG4gICAgICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBEYXRlLm5vdygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBiZWZvcmVTdGFydCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgdGhpcy5mYXJtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PlxuICAgICAgICAgICAgd2F0Y2goXG4gICAgICAgICAgICAgICAgY29uZmlnLmZhcm1EaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKCh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVGYXJtRlNVcGRhdGUoeCwgeSwgY29uZmlnLmZhcm1EaXJlY3RvcnkpLCAyMDApXG4gICAgICAgICAgICApXG4gICAgICAgICk7XG4gICAgICAgIHRoaXMuZm9ybVdhdGNoZXJzID0gdGhpcy5hbGxGYXJtQ29uZmlnLm1hcChjb25maWcgPT4ge1xuICAgICAgICAgICAgY29uc3QgZm9ybVJvb3REaXJlY3RvcnkgPSBwYXRoLm5vcm1hbGl6ZShwYXRoLmpvaW4oY29uZmlnLmZhcm1EaXJlY3RvcnksIFwiLi5cIikpO1xuICAgICAgICAgICAgcmV0dXJuIHdhdGNoKFxuICAgICAgICAgICAgICAgIHBhdGgubm9ybWFsaXplKHBhdGguam9pbihjb25maWcuZmFybURpcmVjdG9yeSwgXCIuLlwiKSksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKCh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVGb3JtRlNVcGRhdGUoeCwgeSwgZm9ybVJvb3REaXJlY3RvcnkpLCAyMDApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvdXBkYXRlcy1vYnNlcnZlci9jaGVjay1sYXN0LXVwZGF0ZS1sb25nLXBvbGxcIixcbiAgICAgICAgaHR0cFJldHVybi5QbGFpblRleHQsXG4gICAgICAgIGh0dHBRdWVyeVBhcmFtKFwicHJldkxhc3RVcGRhdGVcIiwgaHR0cFR5cGUuTnVtYmVyKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TGFzdFVwZGF0ZVRpbWUocHJldkxhc3RVcGRhdGVUaW1lPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHByZXZMYXN0VXBkYXRlVGltZSA9PSB1bmRlZmluZWQgfHwgcHJldkxhc3RVcGRhdGVUaW1lIDwgdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3RoaXMudXBkYXRlTW9uaXRvci53YWl0KCksIGRlbGF5KDYwMDAwKV0pO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VXBkYXRlVGltZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZmFybVdhdGNoZXJzPy5tYXAoaSA9PiBpLmNsb3NlKCkpO1xuICAgICAgICB0aGlzLmZvcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNXYXRjaGVyPy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRmFybUZTVXBkYXRlID0gKGV2ZW50VHlwZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCByb290RGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmFybVdhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVGb3JtRlNVcGRhdGUgPSAoZXZlbnRUeXBlOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHJvb3REaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3Jtc1dhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jbGFzcyBNb25pdG9yIHtcbiAgICBwcml2YXRlIGF3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgcHVibGljIHdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGlzLndhaXRQcm9taXNlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHB1bHNlQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhd2FpdGVycyA9IFsuLi50aGlzLmF3YWl0ZXJzXTtcbiAgICAgICAgdGhpcy5hd2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGF3YWl0ZXIgb2YgYXdhaXRlcnMpIHtcbiAgICAgICAgICAgIGF3YWl0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FpdFByb21pc2VIYW5kbGVyID0gKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLHFCQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxhQUFBLEdBQUFWLE9BQUE7QUFBOEMsSUFBQVcsSUFBQSxFQUFBQyxNQUFBO0FBQUEsSUFFakNDLDRDQUE0QyxHQUFBQyxPQUFBLENBQUFELDRDQUFBLElB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
|
|
104
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZnMiLCJyZXF1aXJlIiwiX3BhdGgiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX2xvZGFzaCIsIl9Bc3luY1V0aWxzIiwiX01ldGhvZHMiLCJfUGFyYW1zIiwiX1Jlc3VsdHMiLCJfU2luZ2xldG9uQ29udHJvbGxlciIsIl9XZWxsS25vd25EaXJlY3RvcmllcyIsIl9HbG9iVG9SZWdleHAiLCJfZGVjIiwiX2NsYXNzIiwiQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIiLCJleHBvcnRzIiwiaHR0cEdldCIsImh0dHBSZXR1cm4iLCJQbGFpblRleHQiLCJodHRwUXVlcnlQYXJhbSIsImh0dHBUeXBlIiwiTnVtYmVyIiwiU2luZ2xldG9uQ29udHJvbGxlciIsImNvbnN0cnVjdG9yIiwiYWxsRmFybUNvbmZpZyIsImxhc3RVcGRhdGVUaW1lIiwidXBkYXRlTW9uaXRvciIsIk1vbml0b3IiLCJmYXJtV2F0Y2hlcnMiLCJmb3JtV2F0Y2hlcnMiLCJyZXNvdXJjZXNXYXRjaGVyIiwiZmFybVdhdGNoaW5nUmVnZXhwcyIsIldlbGxLbm93bkRpcmVjdG9yaWVzIiwiRm9ybUpzb25GaWxlTmFtZSIsIm1hcCIsImdsb2JUb1JlZ2V4cCIsImZvcm1zV2F0Y2hpbmdSZWdleHBzIiwiQ2FuZHlTdWJkaXJlY3RvcnlOYW1lIiwiaGFuZGxlRmFybUZTVXBkYXRlIiwiZXZlbnRUeXBlIiwiZmlsZVBhdGgiLCJyb290RGlyIiwic29tZSIsIngiLCJ0ZXN0Iiwic3RhdCIsInBhdGgiLCJqb2luIiwiZXJyIiwiZmlsZVN0YXQiLCJmaWxlVGlja3MiLCJNYXRoIiwibWF4IiwibXRpbWVNcyIsImN0aW1lTXMiLCJEYXRlIiwibm93IiwicHVsc2VBbGwiLCJoYW5kbGVGb3JtRlNVcGRhdGUiLCJiZWZvcmVTdGFydCIsImNvbmZpZyIsIndhdGNoIiwiZmFybURpcmVjdG9yeSIsInJlY3Vyc2l2ZSIsIl8iLCJkZWJvdW5jZSIsInkiLCJmb3JtUm9vdERpcmVjdG9yeSIsIm5vcm1hbGl6ZSIsIkZvcm1zRGlyZWN0b3J5IiwiZ2V0TGFzdFVwZGF0ZVRpbWUiLCJwcmV2TGFzdFVwZGF0ZVRpbWUiLCJ1bmRlZmluZWQiLCJ0b1N0cmluZyIsIlByb21pc2UiLCJyYWNlIiwid2FpdCIsImRlbGF5IiwiYWZ0ZXJTdG9wIiwiX3RoaXMkZmFybVdhdGNoZXJzIiwiX3RoaXMkZm9ybVdhdGNoZXJzIiwiX3RoaXMkcmVzb3VyY2VzV2F0Y2hlIiwiaSIsImNsb3NlIiwiX2FwcGx5RGVjb3JhdGVkRGVzY3JpcHRvcjIiLCJkZWZhdWx0IiwicHJvdG90eXBlIiwiT2JqZWN0IiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiYXdhaXRlcnMiLCJ3YWl0UHJvbWlzZUhhbmRsZXIiLCJyZXNvbHZlIiwicHVzaCIsImF3YWl0ZXIiXSwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvQ0xJQ29tbWFuZHMvQnVpbGRTZXJ2ZXIvUmVzb3VyY2VzQ29udHJvbGxlcnMvQnVpbGRTZXJ2ZXJCYWNrZW5kUmVzb3VyY2VzVXBkYXRlc0NvbnRyb2xsZXIudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRlNXYXRjaGVyLCB3YXRjaCwgc3RhdCB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IF8gZnJvbSBcImxvZGFzaFwiO1xuaW1wb3J0IHsgRmFybUNvbmZpZyB9IGZyb20gXCJUb29scy9zcmMvQ2FuZHlDTElcIjtcblxuaW1wb3J0IHsgZGVsYXkgfSBmcm9tIFwiLi4vLi4vLi4vLi4vLi4vQ29tbW9uL0FzeW5jVXRpbHNcIjtcbmltcG9ydCB7IGh0dHBHZXQgfSBmcm9tIFwiLi4vLi4vLi4vQ29tbW9ucy9IdHRwU2VydmVyL0F0dHJpYnV0ZVJvdXRpbmcvTWV0aG9kc1wiO1xuaW1wb3J0IHsgaHR0cFF1ZXJ5UGFyYW0sIGh0dHBUeXBlIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9BdHRyaWJ1dGVSb3V0aW5nL1BhcmFtc1wiO1xuaW1wb3J0IHsgaHR0cFJldHVybiB9IGZyb20gXCIuLi8uLi8uLi9Db21tb25zL0h0dHBTZXJ2ZXIvQXR0cmlidXRlUm91dGluZy9SZXN1bHRzXCI7XG5pbXBvcnQgeyBTaW5nbGV0b25Db250cm9sbGVyIH0gZnJvbSBcIi4uLy4uLy4uL0NvbW1vbnMvSHR0cFNlcnZlci9FeHByZXNzV3JhcHBlci9TaW5nbGV0b25Db250cm9sbGVyXCI7XG5pbXBvcnQgeyBXZWxsS25vd25EaXJlY3RvcmllcyB9IGZyb20gXCIuLi8uLi8uLi8uLi8uLi9Db21tb24vV2VsbEtub3duRGlyZWN0b3JpZXNcIjtcblxuaW1wb3J0IHsgZ2xvYlRvUmVnZXhwIH0gZnJvbSBcIi4vR2xvYlRvUmVnZXhwXCI7XG5cbmV4cG9ydCBjbGFzcyBCdWlsZFNlcnZlckJhY2tlbmRSZXNvdXJjZXNVcGRhdGVzQ29udHJvbGxlciBleHRlbmRzIFNpbmdsZXRvbkNvbnRyb2xsZXIge1xuICAgIHByaXZhdGUgbGFzdFVwZGF0ZVRpbWUgPSAwO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgdXBkYXRlTW9uaXRvcjogTW9uaXRvciA9IG5ldyBNb25pdG9yKCk7XG4gICAgcHJpdmF0ZSBmYXJtV2F0Y2hlcnM/OiBGU1dhdGNoZXJbXTtcbiAgICBwcml2YXRlIGZvcm1XYXRjaGVycz86IEZTV2F0Y2hlcltdO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2VzV2F0Y2hlcj86IEZTV2F0Y2hlcjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsbEZhcm1Db25maWc6IEZhcm1Db25maWdbXTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGZhcm1XYXRjaGluZ1JlZ2V4cHMgPSBbXG4gICAgICAgIFwiZm9ybXMvKi9zY2hlbWFzLyoucm5nLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovY29udmVydGVycy8qXCIsXG4gICAgICAgIFwiZm9ybXMvKi9tZXJnZXJzLypcIixcbiAgICAgICAgLy8gTk9URSDQotGD0YIg0YLQsNC60L7QtSDQtNC10LvQvjog0L/QvtGH0LXQvNGDLdGC0L4g0LjQvdC+0LPQtNCwICjQuNC90L7Qs9C00LAsINGC0L4g0LXRgdGC0Ywg0L3QtSDQstGB0LXQs9C00LAhKSwg0LrQvtCz0LTQsCDQvdCw0Lwg0L/RgNC40YXQvtC00LjRgiDQt9Cw0L/RgNC+0YEg0L3QsFxuICAgICAgICAvLyBmb3Jtcy8qL3ByZXNlbnRhdGlvbnMuanNvbiDQsiDRjdGC0L7QvCDQutC70LDRgdGB0LUg0LLQvtC30L3QuNC60LDQtdGCINGB0L7QsdGL0YLQuNC1INC+0LEg0LjQt9C80LXQvdC40Lgg0Y3RgtC+0LPQviDRhNCw0LnQu9CwINC4INC80Ysg0LPQtdC90LXRgNC40Lwg0L7Rh9C10L3RjCDQvNC90L7Qs9C+XG4gICAgICAgIC8vINC70LjRiNC90LjRhSDRgdC+0LHRi9GC0LjQuSDQvtCxINC40LfQvNC10L3QuNC4INGA0LXRgdGD0YDRgdC+0LIg0LggQ2FuZHlBcGkg0LfQsNCy0LjRgdCw0LXRgi4g0K8g0L/QvtC60LAg0L3QtSDRgdC80L7QsyDRgNCw0LfQvtCx0YDQsNGC0YzRgdGPINC/0L7Rh9C10LzRgyDRjdGC0L4g0YLQsNC6LlxuICAgICAgICAvLyBcImZvcm1zLyovcHJlc2VudGF0aW9ucy5qc29uXCIsXG4gICAgICAgIGBmb3Jtcy8qLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZX1gLFxuICAgICAgICBcImZvcm1zLyovc3VnYXIvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL25vcm1hbGl6ZS8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovdW5tYXAvKi54bWxcIixcbiAgICAgICAgXCJmb3Jtcy8qL21hcC8qLnhtbFwiLFxuICAgICAgICBcImZvcm1zLyovcGF0Y2gvKi54c2x0XCIsXG4gICAgICAgIFwicGlja2xpc3RzLypcIixcbiAgICBdLm1hcChnbG9iVG9SZWdleHApO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZm9ybXNXYXRjaGluZ1JlZ2V4cHMgPSBbXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vc2NoZW1hcy8qLnJuZy54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L2NvbnZlcnRlcnMvKmAsXG4gICAgICAgIGBmb3Jtcy8qKi8ke1dlbGxLbm93bkRpcmVjdG9yaWVzLkNhbmR5U3ViZGlyZWN0b3J5TmFtZX0vbWVyZ2Vycy8qYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9wcmVzZW50YXRpb25zLmpzb25gLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9LyR7V2VsbEtub3duRGlyZWN0b3JpZXMuRm9ybUpzb25GaWxlTmFtZX1gLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3N1Z2FyLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9ub3JtYWxpemUvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3VubWFwLyoueG1sYCxcbiAgICAgICAgYGZvcm1zLyoqLyR7V2VsbEtub3duRGlyZWN0b3JpZXMuQ2FuZHlTdWJkaXJlY3RvcnlOYW1lfS9tYXAvKi54bWxgLFxuICAgICAgICBgZm9ybXMvKiovJHtXZWxsS25vd25EaXJlY3Rvcmllcy5DYW5keVN1YmRpcmVjdG9yeU5hbWV9L3BhdGNoLyoueHNsdGAsXG4gICAgXS5tYXAoZ2xvYlRvUmVnZXhwKTtcblxuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcihhbGxGYXJtQ29uZmlnOiBGYXJtQ29uZmlnW10pIHtcbiAgICAgICAgc3VwZXIoKTtcbiAgICAgICAgdGhpcy5hbGxGYXJtQ29uZmlnID0gYWxsRmFybUNvbmZpZztcbiAgICAgICAgdGhpcy5sYXN0VXBkYXRlVGltZSA9IERhdGUubm93KCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGJlZm9yZVN0YXJ0KCk6IFByb21pc2U8dm9pZD4ge1xuICAgICAgICB0aGlzLmZhcm1XYXRjaGVycyA9IHRoaXMuYWxsRmFybUNvbmZpZy5tYXAoY29uZmlnID0+XG4gICAgICAgICAgICB3YXRjaChcbiAgICAgICAgICAgICAgICBjb25maWcuZmFybURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB7IHJlY3Vyc2l2ZTogdHJ1ZSB9LFxuICAgICAgICAgICAgICAgIF8uZGVib3VuY2UoKHg6IHN0cmluZywgeTogc3RyaW5nKSA9PiB0aGlzLmhhbmRsZUZhcm1GU1VwZGF0ZSh4LCB5LCBjb25maWcuZmFybURpcmVjdG9yeSksIDIwMClcbiAgICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5mb3JtV2F0Y2hlcnMgPSB0aGlzLmFsbEZhcm1Db25maWcubWFwKGNvbmZpZyA9PiB7XG4gICAgICAgICAgICBjb25zdCBmb3JtUm9vdERpcmVjdG9yeSA9IHBhdGgubm9ybWFsaXplKFxuICAgICAgICAgICAgICAgIHBhdGguam9pbihjb25maWcuZmFybURpcmVjdG9yeSwgXCIuLlwiLCBXZWxsS25vd25EaXJlY3Rvcmllcy5Gb3Jtc0RpcmVjdG9yeSlcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICByZXR1cm4gd2F0Y2goXG4gICAgICAgICAgICAgICAgZm9ybVJvb3REaXJlY3RvcnksXG4gICAgICAgICAgICAgICAgeyByZWN1cnNpdmU6IHRydWUgfSxcbiAgICAgICAgICAgICAgICBfLmRlYm91bmNlKCh4OiBzdHJpbmcsIHk6IHN0cmluZykgPT4gdGhpcy5oYW5kbGVGb3JtRlNVcGRhdGUoeCwgeSwgZm9ybVJvb3REaXJlY3RvcnkpLCAyMDApXG4gICAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBAaHR0cEdldChcbiAgICAgICAgXCIvdXBkYXRlcy1vYnNlcnZlci9jaGVjay1sYXN0LXVwZGF0ZS1sb25nLXBvbGxcIixcbiAgICAgICAgaHR0cFJldHVybi5QbGFpblRleHQsXG4gICAgICAgIGh0dHBRdWVyeVBhcmFtKFwicHJldkxhc3RVcGRhdGVcIiwgaHR0cFR5cGUuTnVtYmVyKVxuICAgIClcbiAgICBwdWJsaWMgYXN5bmMgZ2V0TGFzdFVwZGF0ZVRpbWUocHJldkxhc3RVcGRhdGVUaW1lPzogbnVtYmVyKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKHByZXZMYXN0VXBkYXRlVGltZSA9PSB1bmRlZmluZWQgfHwgcHJldkxhc3RVcGRhdGVUaW1lIDwgdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubGFzdFVwZGF0ZVRpbWUudG9TdHJpbmcoKTtcbiAgICAgICAgfVxuICAgICAgICBhd2FpdCBQcm9taXNlLnJhY2UoW3RoaXMudXBkYXRlTW9uaXRvci53YWl0KCksIGRlbGF5KDYwMDAwKV0pO1xuICAgICAgICByZXR1cm4gdGhpcy5sYXN0VXBkYXRlVGltZS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBhZnRlclN0b3AoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHRoaXMuZmFybVdhdGNoZXJzPy5tYXAoaSA9PiBpLmNsb3NlKCkpO1xuICAgICAgICB0aGlzLmZvcm1XYXRjaGVycz8ubWFwKGkgPT4gaS5jbG9zZSgpKTtcbiAgICAgICAgdGhpcy5yZXNvdXJjZXNXYXRjaGVyPy5jbG9zZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgaGFuZGxlRmFybUZTVXBkYXRlID0gKGV2ZW50VHlwZTogc3RyaW5nLCBmaWxlUGF0aDogc3RyaW5nLCByb290RGlyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgaWYgKHRoaXMuZmFybVdhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBoYW5kbGVGb3JtRlNVcGRhdGUgPSAoZXZlbnRUeXBlOiBzdHJpbmcsIGZpbGVQYXRoOiBzdHJpbmcsIHJvb3REaXI6IHN0cmluZykgPT4ge1xuICAgICAgICBpZiAodGhpcy5mb3Jtc1dhdGNoaW5nUmVnZXhwcy5zb21lKHggPT4geC50ZXN0KGZpbGVQYXRoKSkpIHtcbiAgICAgICAgICAgIHN0YXQocGF0aC5qb2luKHJvb3REaXIsIGZpbGVQYXRoKSwgKGVyciwgZmlsZVN0YXQpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWxlVGlja3MgPSBNYXRoLm1heChmaWxlU3RhdC5tdGltZU1zLCBmaWxlU3RhdC5jdGltZU1zKTtcbiAgICAgICAgICAgICAgICBpZiAoZmlsZVRpY2tzID4gdGhpcy5sYXN0VXBkYXRlVGltZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmxhc3RVcGRhdGVUaW1lID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy51cGRhdGVNb25pdG9yLnB1bHNlQWxsKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xufVxuXG5jbGFzcyBNb25pdG9yIHtcbiAgICBwcml2YXRlIGF3YWl0ZXJzOiBBcnJheTwoKSA9PiB2b2lkPiA9IFtdO1xuXG4gICAgcHVibGljIHdhaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSh0aGlzLndhaXRQcm9taXNlSGFuZGxlcik7XG4gICAgfVxuXG4gICAgcHVibGljIHB1bHNlQWxsKCk6IHZvaWQge1xuICAgICAgICBjb25zdCBhd2FpdGVycyA9IFsuLi50aGlzLmF3YWl0ZXJzXTtcbiAgICAgICAgdGhpcy5hd2FpdGVycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGF3YWl0ZXIgb2YgYXdhaXRlcnMpIHtcbiAgICAgICAgICAgIGF3YWl0ZXIoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmVhZG9ubHkgd2FpdFByb21pc2VIYW5kbGVyID0gKHJlc29sdmU6ICgpID0+IHZvaWQpID0+IHtcbiAgICAgICAgdGhpcy5hd2FpdGVycy5wdXNoKHJlc29sdmUpO1xuICAgIH07XG59XG4iXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUEsSUFBQUEsR0FBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsS0FBQSxHQUFBQyxzQkFBQSxDQUFBRixPQUFBO0FBRUEsSUFBQUcsT0FBQSxHQUFBRCxzQkFBQSxDQUFBRixPQUFBO0FBR0EsSUFBQUksV0FBQSxHQUFBSixPQUFBO0FBQ0EsSUFBQUssUUFBQSxHQUFBTCxPQUFBO0FBQ0EsSUFBQU0sT0FBQSxHQUFBTixPQUFBO0FBQ0EsSUFBQU8sUUFBQSxHQUFBUCxPQUFBO0FBQ0EsSUFBQVEsb0JBQUEsR0FBQVIsT0FBQTtBQUNBLElBQUFTLHFCQUFBLEdBQUFULE9BQUE7QUFFQSxJQUFBVSxhQUFBLEdBQUFWLE9BQUE7QUFBOEMsSUFBQVcsSUFBQSxFQUFBQyxN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
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BuildServerBackendResourcesUpdatesController.js","names":["_fs","require","_path","_interopRequireDefault","_lodash","_AsyncUtils","_Methods","_Params","_Results","_SingletonController","_WellKnownDirectories","_GlobToRegexp","_dec","_class","BuildServerBackendResourcesUpdatesController","exports","httpGet","httpReturn","PlainText","httpQueryParam","httpType","Number","SingletonController","constructor","allFarmConfig","lastUpdateTime","updateMonitor","Monitor","farmWatchers","formWatchers","resourcesWatcher","farmWatchingRegexps","WellKnownDirectories","FormJsonFileName","map","globToRegexp","formsWatchingRegexps","CandySubdirectoryName","handleFarmFSUpdate","eventType","filePath","rootDir","some","x","test","stat","path","join","err","fileStat","fileTicks","Math","max","mtimeMs","ctimeMs","Date","now","pulseAll","handleFormFSUpdate","beforeStart","config","watch","farmDirectory","recursive","_","debounce","y","formRootDirectory","normalize","getLastUpdateTime","prevLastUpdateTime","undefined","toString","Promise","race","wait","delay","afterStop","_this$farmWatchers","_this$formWatchers","_this$resourcesWatche","i","close","_applyDecoratedDescriptor2","default","prototype","Object","getOwnPropertyDescriptor","awaiters","waitPromiseHandler","resolve","push","awaiter"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.ts"],"sourcesContent":["import { FSWatcher, watch, stat } from \"fs\";\nimport path from \"path\";\n\nimport _ from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { delay } from \"../../../../../Common/AsyncUtils\";\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { httpQueryParam, httpType } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\nimport { WellKnownDirectories } from \"../../../../../Common/WellKnownDirectories\";\n\nimport { globToRegexp } from \"./GlobToRegexp\";\n\nexport class BuildServerBackendResourcesUpdatesController extends SingletonController {\n private lastUpdateTime = 0;\n private readonly updateMonitor: Monitor = new Monitor();\n private farmWatchers?: FSWatcher[];\n private formWatchers?: FSWatcher[];\n private readonly resourcesWatcher?: FSWatcher;\n private readonly allFarmConfig: FarmConfig[];\n private readonly farmWatchingRegexps = [\n \"forms/*/schemas/*.rng.xml\",\n \"forms/*/converters/*\",\n \"forms/*/mergers/*\",\n // NOTE Тут такое дело: почему-то иногда (иногда, то есть не всегда!), когда нам приходит запрос на\n // forms/*/presentations.json в этом классе возникает событие об измении этого файла и мы генерим очень много\n // лишних событий об измении ресурсов и CandyApi зависает. Я пока не смог разобраться почему это так.\n // \"forms/*/presentations.json\",\n `forms/*/${WellKnownDirectories.FormJsonFileName}`,\n \"forms/*/sugar/*.xml\",\n \"forms/*/normalize/*.xml\",\n \"forms/*/unmap/*.xml\",\n \"forms/*/map/*.xml\",\n \"forms/*/patch/*.xslt\",\n \"picklists/*\",\n ].map(globToRegexp);\n private readonly formsWatchingRegexps = [\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/converters/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/mergers/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/presentations.json`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/${WellKnownDirectories.FormJsonFileName}`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/map/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`,\n ].map(globToRegexp);\n\n public constructor(allFarmConfig: FarmConfig[]) {\n super();\n this.allFarmConfig = allFarmConfig;\n this.lastUpdateTime = Date.now();\n }\n\n public async beforeStart(): Promise<void> {\n this.farmWatchers = this.allFarmConfig.map(config =>\n watch(\n config.farmDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFarmFSUpdate(x, y, config.farmDirectory), 200)\n )\n );\n this.formWatchers = this.allFarmConfig.map(config => {\n const formRootDirectory = path.normalize(path.join(config.farmDirectory, \"..\"));\n return watch(\n path.normalize(path.join(config.farmDirectory, \"..\")),\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFormFSUpdate(x, y, formRootDirectory), 200)\n );\n });\n }\n\n @httpGet(\n \"/updates-observer/check-last-update-long-poll\",\n httpReturn.PlainText,\n httpQueryParam(\"prevLastUpdate\", httpType.Number)\n )\n public async getLastUpdateTime(prevLastUpdateTime?: number): Promise<string> {\n if (prevLastUpdateTime == undefined || prevLastUpdateTime < this.lastUpdateTime) {\n return this.lastUpdateTime.toString();\n }\n await Promise.race([this.updateMonitor.wait(), delay(60000)]);\n return this.lastUpdateTime.toString();\n }\n\n public async afterStop(): Promise<void> {\n this.farmWatchers?.map(i => i.close());\n this.formWatchers?.map(i => i.close());\n this.resourcesWatcher?.close();\n }\n\n private readonly handleFarmFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.farmWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n\n private readonly handleFormFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.formsWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n}\n\nclass Monitor {\n private awaiters: Array<() => void> = [];\n\n public wait(): Promise<void> {\n return new Promise(this.waitPromiseHandler);\n }\n\n public pulseAll(): void {\n const awaiters = [...this.awaiters];\n this.awaiters = [];\n for (const awaiter of awaiters) {\n awaiter();\n }\n }\n\n private readonly waitPromiseHandler = (resolve: () => void) => {\n this.awaiters.push(resolve);\n };\n}\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"BuildServerBackendResourcesUpdatesController.js","names":["_fs","require","_path","_interopRequireDefault","_lodash","_AsyncUtils","_Methods","_Params","_Results","_SingletonController","_WellKnownDirectories","_GlobToRegexp","_dec","_class","BuildServerBackendResourcesUpdatesController","exports","httpGet","httpReturn","PlainText","httpQueryParam","httpType","Number","SingletonController","constructor","allFarmConfig","lastUpdateTime","updateMonitor","Monitor","farmWatchers","formWatchers","resourcesWatcher","farmWatchingRegexps","WellKnownDirectories","FormJsonFileName","map","globToRegexp","formsWatchingRegexps","CandySubdirectoryName","handleFarmFSUpdate","eventType","filePath","rootDir","some","x","test","stat","path","join","err","fileStat","fileTicks","Math","max","mtimeMs","ctimeMs","Date","now","pulseAll","handleFormFSUpdate","beforeStart","config","watch","farmDirectory","recursive","_","debounce","y","formRootDirectory","normalize","FormsDirectory","getLastUpdateTime","prevLastUpdateTime","undefined","toString","Promise","race","wait","delay","afterStop","_this$farmWatchers","_this$formWatchers","_this$resourcesWatche","i","close","_applyDecoratedDescriptor2","default","prototype","Object","getOwnPropertyDescriptor","awaiters","waitPromiseHandler","resolve","push","awaiter"],"sources":["../../../../../../src/CLICommands/BuildServer/ResourcesControllers/BuildServerBackendResourcesUpdatesController.ts"],"sourcesContent":["import { FSWatcher, watch, stat } from \"fs\";\nimport path from \"path\";\n\nimport _ from \"lodash\";\nimport { FarmConfig } from \"Tools/src/CandyCLI\";\n\nimport { delay } from \"../../../../../Common/AsyncUtils\";\nimport { httpGet } from \"../../../Commons/HttpServer/AttributeRouting/Methods\";\nimport { httpQueryParam, httpType } from \"../../../Commons/HttpServer/AttributeRouting/Params\";\nimport { httpReturn } from \"../../../Commons/HttpServer/AttributeRouting/Results\";\nimport { SingletonController } from \"../../../Commons/HttpServer/ExpressWrapper/SingletonController\";\nimport { WellKnownDirectories } from \"../../../../../Common/WellKnownDirectories\";\n\nimport { globToRegexp } from \"./GlobToRegexp\";\n\nexport class BuildServerBackendResourcesUpdatesController extends SingletonController {\n private lastUpdateTime = 0;\n private readonly updateMonitor: Monitor = new Monitor();\n private farmWatchers?: FSWatcher[];\n private formWatchers?: FSWatcher[];\n private readonly resourcesWatcher?: FSWatcher;\n private readonly allFarmConfig: FarmConfig[];\n private readonly farmWatchingRegexps = [\n \"forms/*/schemas/*.rng.xml\",\n \"forms/*/converters/*\",\n \"forms/*/mergers/*\",\n // NOTE Тут такое дело: почему-то иногда (иногда, то есть не всегда!), когда нам приходит запрос на\n // forms/*/presentations.json в этом классе возникает событие об измении этого файла и мы генерим очень много\n // лишних событий об измении ресурсов и CandyApi зависает. Я пока не смог разобраться почему это так.\n // \"forms/*/presentations.json\",\n `forms/*/${WellKnownDirectories.FormJsonFileName}`,\n \"forms/*/sugar/*.xml\",\n \"forms/*/normalize/*.xml\",\n \"forms/*/unmap/*.xml\",\n \"forms/*/map/*.xml\",\n \"forms/*/patch/*.xslt\",\n \"picklists/*\",\n ].map(globToRegexp);\n private readonly formsWatchingRegexps = [\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/schemas/*.rng.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/converters/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/mergers/*`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/presentations.json`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/${WellKnownDirectories.FormJsonFileName}`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/sugar/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/normalize/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/unmap/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/map/*.xml`,\n `forms/**/${WellKnownDirectories.CandySubdirectoryName}/patch/*.xslt`,\n ].map(globToRegexp);\n\n public constructor(allFarmConfig: FarmConfig[]) {\n super();\n this.allFarmConfig = allFarmConfig;\n this.lastUpdateTime = Date.now();\n }\n\n public async beforeStart(): Promise<void> {\n this.farmWatchers = this.allFarmConfig.map(config =>\n watch(\n config.farmDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFarmFSUpdate(x, y, config.farmDirectory), 200)\n )\n );\n this.formWatchers = this.allFarmConfig.map(config => {\n const formRootDirectory = path.normalize(\n path.join(config.farmDirectory, \"..\", WellKnownDirectories.FormsDirectory)\n );\n return watch(\n formRootDirectory,\n { recursive: true },\n _.debounce((x: string, y: string) => this.handleFormFSUpdate(x, y, formRootDirectory), 200)\n );\n });\n }\n\n @httpGet(\n \"/updates-observer/check-last-update-long-poll\",\n httpReturn.PlainText,\n httpQueryParam(\"prevLastUpdate\", httpType.Number)\n )\n public async getLastUpdateTime(prevLastUpdateTime?: number): Promise<string> {\n if (prevLastUpdateTime == undefined || prevLastUpdateTime < this.lastUpdateTime) {\n return this.lastUpdateTime.toString();\n }\n await Promise.race([this.updateMonitor.wait(), delay(60000)]);\n return this.lastUpdateTime.toString();\n }\n\n public async afterStop(): Promise<void> {\n this.farmWatchers?.map(i => i.close());\n this.formWatchers?.map(i => i.close());\n this.resourcesWatcher?.close();\n }\n\n private readonly handleFarmFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.farmWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n\n private readonly handleFormFSUpdate = (eventType: string, filePath: string, rootDir: string) => {\n if (this.formsWatchingRegexps.some(x => x.test(filePath))) {\n stat(path.join(rootDir, filePath), (err, fileStat) => {\n const fileTicks = Math.max(fileStat.mtimeMs, fileStat.ctimeMs);\n if (fileTicks > this.lastUpdateTime) {\n this.lastUpdateTime = Date.now();\n this.updateMonitor.pulseAll();\n }\n });\n }\n };\n}\n\nclass Monitor {\n private awaiters: Array<() => void> = [];\n\n public wait(): Promise<void> {\n return new Promise(this.waitPromiseHandler);\n }\n\n public pulseAll(): void {\n const awaiters = [...this.awaiters];\n this.awaiters = [];\n for (const awaiter of awaiters) {\n awaiter();\n }\n }\n\n private readonly waitPromiseHandler = (resolve: () => void) => {\n this.awaiters.push(resolve);\n };\n}\n"],"mappings":"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","ignoreList":[]}
|