@coralogix/rum-cli 1.1.37 → 1.1.38

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -68,7 +68,6 @@ coralogix-rum-cli upload-proguard -k <privateKey> -a <application> -v <version>
68
68
  - `-c, --commit-hash <commitHash>`: GitHub commit hash (optional).
69
69
  - `-n, --repo-name <repoName>`: GitHub repository name (optional).
70
70
  - `-o, --org-name <orgName>`: GitHub organization name (optional).
71
- - `-g, --generate`: Update existing release or create a new one if not found (optional).
72
71
  - `-h, --help`: Display help.
73
72
 
74
73
  ## Environments
@@ -17,7 +17,7 @@ class BaseService {
17
17
  return __awaiter(this, void 0, void 0, function* () {
18
18
  const request = blobset_service_1.UploadBlobRequest.create();
19
19
  const api = this.getApi();
20
- console.log(consts_1.GRAY_COLOR, `🚀 Uploading ${this.getLogPrefix()}...`);
20
+ console.log(consts_1.GRAY_COLOR, `🚀 Uploading ${this.getLogPrefix()}... (${new Date().toUTCString()})`);
21
21
  try {
22
22
  yield this.getFileProcessorMethod()(folderPath, request, this.getFileExtension());
23
23
  yield api.upload(request, application, version, repoName, commitHash, orgName, env, privateKey);
@@ -31,4 +31,4 @@ class BaseService {
31
31
  }
32
32
  }
33
33
  exports.BaseService = BaseService;
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2VydmljZXMvYmFzZS9iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUdBQWdHO0FBQ2hHLGdEQUE4RDtBQUk5RCxNQUFzQixXQUFXO0lBTXpCLE1BQU0sQ0FDVixXQUFtQixFQUNuQixPQUFlLEVBQ2YsUUFBNEIsRUFDNUIsVUFBOEIsRUFDOUIsT0FBMkIsRUFDM0IsVUFBa0IsRUFDbEIsR0FBVyxFQUNYLFVBQWtCOztZQUVsQixNQUFNLE9BQU8sR0FBc0IsbUNBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUQsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRW5DLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQVUsRUFBRSxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQztZQUVsRSxJQUFJO2dCQUNGLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixFQUFFLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQyxDQUFDO2dCQUVsRixNQUFNLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQyxDQUFDO2dCQUVoRyxPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFXLEVBQUUsS0FBSyxJQUFJLENBQUMsWUFBWSxFQUFFLHlCQUF5QixDQUFDLENBQUM7Z0JBQzVFLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQVcsRUFBRSx3QkFBd0IsQ0FBQyxDQUFDO2FBQ3BEO1lBQUMsT0FBTyxLQUFLLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLENBQUM7YUFDYjtRQUNILENBQUM7S0FBQTtDQUNGO0FBaENELGtDQWdDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFVwbG9hZEJsb2JSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvYmxvYnNldC92Mi9ibG9ic2V0X3NlcnZpY2UnO1xuaW1wb3J0IHsgR1JBWV9DT0xPUiwgR1JFRU5fQ09MT1IgfSBmcm9tICcuLi8uLi9jb25zdHMvY29uc3RzJztcbmltcG9ydCB7IGNvbnNvbGVFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL3NoYXJlZC51dGlscyc7XG5pbXBvcnQgeyBCYXNlQXBpIH0gZnJvbSAnLi4vLi4vYXBpL2Jhc2UvYmFzZS5hcGknO1xuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQmFzZVNlcnZpY2Uge1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0QXBpKCk6IEJhc2VBcGk7XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRGaWxlUHJvY2Vzc29yTWV0aG9kKCk6IChwYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpID0+IFByb21pc2U8dm9pZD47XG4gIHByb3RlY3RlZCBhYnN0cmFjdCBnZXRMb2dQcmVmaXgoKTogc3RyaW5nO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RmlsZUV4dGVuc2lvbigpOiBzdHJpbmc7XG5cbiAgYXN5bmMgdXBsb2FkKFxuICAgIGFwcGxpY2F0aW9uOiBzdHJpbmcsXG4gICAgdmVyc2lvbjogc3RyaW5nLFxuICAgIHJlcG9OYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgY29tbWl0SGFzaDogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIG9yZ05hbWU6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBmb2xkZXJQYXRoOiBzdHJpbmcsXG4gICAgZW52OiBzdHJpbmcsXG4gICAgcHJpdmF0ZUtleTogc3RyaW5nLFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCA9IFVwbG9hZEJsb2JSZXF1ZXN0LmNyZWF0ZSgpO1xuICAgIGNvbnN0IGFwaTogQmFzZUFwaSA9IHRoaXMuZ2V0QXBpKCk7XG5cbiAgICBjb25zb2xlLmxvZyhHUkFZX0NPTE9SLCBg8J+agCBVcGxvYWRpbmcgJHt0aGlzLmdldExvZ1ByZWZpeCgpfS4uLmApO1xuXG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZ2V0RmlsZVByb2Nlc3Nvck1ldGhvZCgpKGZvbGRlclBhdGgsIHJlcXVlc3QsIHRoaXMuZ2V0RmlsZUV4dGVuc2lvbigpKTtcblxuICAgICAgYXdhaXQgYXBpLnVwbG9hZChyZXF1ZXN0LCBhcHBsaWNhdGlvbiwgdmVyc2lvbiwgcmVwb05hbWUsIGNvbW1pdEhhc2gsIG9yZ05hbWUsIGVudiwgcHJpdmF0ZUtleSk7XG5cbiAgICAgIGNvbnNvbGUubG9nKEdSRUVOX0NPTE9SLCBg4pyFICR7dGhpcy5nZXRMb2dQcmVmaXgoKX0gdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5IWApO1xuICAgICAgY29uc29sZS5sb2coR1JFRU5fQ09MT1IsICfinIUgUHJvY2Vzc2luZyBjb21wbGV0ZS4nKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG59XG4iXX0=
34
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc2VydmljZXMvYmFzZS9iYXNlLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7O0FBQUEsaUdBQWdHO0FBQ2hHLGdEQUE4RDtBQUc5RCxNQUFzQixXQUFXO0lBTXpCLE1BQU0sQ0FDVixXQUFtQixFQUNuQixPQUFlLEVBQ2YsUUFBNEIsRUFDNUIsVUFBOEIsRUFDOUIsT0FBMkIsRUFDM0IsVUFBa0IsRUFDbEIsR0FBVyxFQUNYLFVBQWtCOztZQUVsQixNQUFNLE9BQU8sR0FBc0IsbUNBQWlCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUQsTUFBTSxHQUFHLEdBQVksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBRW5DLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUJBQVUsRUFBRSxnQkFBZ0IsSUFBSSxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksSUFBSSxFQUFFLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1lBRWhHLElBQUk7Z0JBQ0YsTUFBTSxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxVQUFVLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDLENBQUM7Z0JBRWxGLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7Z0JBRWhHLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0JBQVcsRUFBRSxLQUFLLElBQUksQ0FBQyxZQUFZLEVBQUUseUJBQXlCLENBQUMsQ0FBQztnQkFDNUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQkFBVyxFQUFFLHdCQUF3QixDQUFDLENBQUM7YUFDcEQ7WUFBQyxPQUFPLEtBQUssRUFBRTtnQkFDZCxNQUFNLEtBQUssQ0FBQzthQUNiO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUFoQ0Qsa0NBZ0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVXBsb2FkQmxvYlJlcXVlc3QgfSBmcm9tICcuLi8uLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ibG9ic2V0L3YyL2Jsb2JzZXRfc2VydmljZSc7XG5pbXBvcnQgeyBHUkFZX0NPTE9SLCBHUkVFTl9DT0xPUiB9IGZyb20gJy4uLy4uL2NvbnN0cy9jb25zdHMnO1xuaW1wb3J0IHsgQmFzZUFwaSB9IGZyb20gJy4uLy4uL2FwaS9iYXNlL2Jhc2UuYXBpJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VTZXJ2aWNlIHtcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEFwaSgpOiBCYXNlQXBpO1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0RmlsZVByb2Nlc3Nvck1ldGhvZCgpOiAocGF0aDogc3RyaW5nLCByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCwgZmlsZUV4dGVuc2lvbjogc3RyaW5nKSA9PiBQcm9taXNlPHZvaWQ+O1xuICBwcm90ZWN0ZWQgYWJzdHJhY3QgZ2V0TG9nUHJlZml4KCk6IHN0cmluZztcbiAgcHJvdGVjdGVkIGFic3RyYWN0IGdldEZpbGVFeHRlbnNpb24oKTogc3RyaW5nO1xuXG4gIGFzeW5jIHVwbG9hZChcbiAgICBhcHBsaWNhdGlvbjogc3RyaW5nLFxuICAgIHZlcnNpb246IHN0cmluZyxcbiAgICByZXBvTmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIGNvbW1pdEhhc2g6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICBvcmdOYW1lOiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgZm9sZGVyUGF0aDogc3RyaW5nLFxuICAgIGVudjogc3RyaW5nLFxuICAgIHByaXZhdGVLZXk6IHN0cmluZyxcbiAgKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgcmVxdWVzdDogVXBsb2FkQmxvYlJlcXVlc3QgPSBVcGxvYWRCbG9iUmVxdWVzdC5jcmVhdGUoKTtcbiAgICBjb25zdCBhcGk6IEJhc2VBcGkgPSB0aGlzLmdldEFwaSgpO1xuXG4gICAgY29uc29sZS5sb2coR1JBWV9DT0xPUiwgYPCfmoAgVXBsb2FkaW5nICR7dGhpcy5nZXRMb2dQcmVmaXgoKX0uLi4gKCR7bmV3IERhdGUoKS50b1VUQ1N0cmluZygpfSlgKTtcblxuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmdldEZpbGVQcm9jZXNzb3JNZXRob2QoKShmb2xkZXJQYXRoLCByZXF1ZXN0LCB0aGlzLmdldEZpbGVFeHRlbnNpb24oKSk7XG5cbiAgICAgIGF3YWl0IGFwaS51cGxvYWQocmVxdWVzdCwgYXBwbGljYXRpb24sIHZlcnNpb24sIHJlcG9OYW1lLCBjb21taXRIYXNoLCBvcmdOYW1lLCBlbnYsIHByaXZhdGVLZXkpO1xuXG4gICAgICBjb25zb2xlLmxvZyhHUkVFTl9DT0xPUiwgYOKchSAke3RoaXMuZ2V0TG9nUHJlZml4KCl9IHVwbG9hZGVkIHN1Y2Nlc3NmdWxseSFgKTtcbiAgICAgIGNvbnNvbGUubG9nKEdSRUVOX0NPTE9SLCAn4pyFIFByb2Nlc3NpbmcgY29tcGxldGUuJyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH1cbiAgfVxufVxuIl19
@@ -31,6 +31,9 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
31
31
  step((generator = generator.apply(thisArg, _arguments || [])).next());
32
32
  });
33
33
  };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
34
37
  Object.defineProperty(exports, "__esModule", { value: true });
35
38
  exports.FileProcessor = void 0;
36
39
  const fs = __importStar(require("fs"));
@@ -38,6 +41,7 @@ const fs_1 = require("fs");
38
41
  const path = __importStar(require("path"));
39
42
  const shared_utils_1 = require("./shared.utils");
40
43
  const zlib = __importStar(require("node:zlib"));
44
+ const node_assert_1 = __importDefault(require("node:assert"));
41
45
  const { readdir, stat, readFile } = fs_1.promises;
42
46
  class FileProcessor {
43
47
  static traverseProguardFolder(proguardPath, request, fileExtension) {
@@ -109,17 +113,12 @@ class FileProcessor {
109
113
  }
110
114
  static traverse(folderPath, request, fileExtension) {
111
115
  return __awaiter(this, void 0, void 0, function* () {
112
- try {
113
- const stats = yield stat(folderPath);
114
- if (stats.isFile() && folderPath.endsWith(fileExtension)) {
115
- return yield this.processSingleFile(folderPath, request, fileExtension);
116
- }
117
- else if (stats.isDirectory()) {
118
- return yield this.processDirectory(folderPath, request, fileExtension);
119
- }
116
+ const stats = yield stat(folderPath);
117
+ if (stats.isFile() && folderPath.endsWith(fileExtension)) {
118
+ return yield this.processSingleFile(folderPath, request, fileExtension);
120
119
  }
121
- catch (error) {
122
- (0, shared_utils_1.consoleError)(`Error traversing directory: ${error}`);
120
+ else if (stats.isDirectory()) {
121
+ return yield this.processDirectory(folderPath, request, fileExtension);
123
122
  }
124
123
  });
125
124
  }
@@ -151,7 +150,8 @@ class FileProcessor {
151
150
  if (dirent.isFile() && dirent.name.endsWith(fileExtension)) {
152
151
  const content = yield readFile(filePath);
153
152
  const { name } = path.parse(filePath);
154
- fileDataList.push({ name, content: content.toString('base64') });
153
+ const { size } = yield stat(filePath);
154
+ fileDataList.push({ name, size, content: content.toString('base64') });
155
155
  }
156
156
  else if (dirent.isDirectory()) {
157
157
  yield traverseDirectory(filePath);
@@ -159,6 +159,10 @@ class FileProcessor {
159
159
  }
160
160
  });
161
161
  yield traverseDirectory(folderPath);
162
+ // Assert that at least one file was found
163
+ (0, node_assert_1.default)(fileDataList.length > 0, `No files with extension ${fileExtension} found in the directory: 📁 ${folderPath}`);
164
+ console.log(`Found ${fileDataList.length} ${fileExtension} files in ${folderPath} directory.`);
165
+ fileDataList.forEach(file => console.log(`⛶ ${file.name}, Size: ${file.size} bytes`));
162
166
  const compressedContent = zlib.gzipSync(Buffer.from(JSON.stringify(fileDataList)));
163
167
  request.data = new Uint8Array(compressedContent);
164
168
  });
@@ -179,4 +183,4 @@ class FileProcessor {
179
183
  }
180
184
  }
181
185
  exports.FileProcessor = FileProcessor;
182
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcm9jZXNzb3IudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91dGlscy9maWxlLXByb2Nlc3Nvci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQkFBb0Q7QUFDcEQsMkNBQTZCO0FBQzdCLGlEQUE4QztBQUU5QyxnREFBa0M7QUFFbEMsTUFBTSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsYUFBVSxDQUFDO0FBRS9DLE1BQWEsYUFBYTtJQUN4QixNQUFNLENBQU8sc0JBQXNCLENBQUMsWUFBb0IsRUFBRSxPQUEwQixFQUFFLGFBQXFCOztZQUN6RyxJQUFJO2dCQUNGLE1BQU0sY0FBYyxHQUFHLENBQU8sWUFBb0IsRUFBRSxFQUFFO29CQUNwRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDN0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNqRCxPQUFPLENBQUMsSUFBSSxHQUFHLElBQUksVUFBVSxDQUFDLGlCQUFpQixDQUFDLENBQUM7Z0JBQ25ELENBQUMsQ0FBQSxDQUFDO2dCQUVGLDRDQUE0QztnQkFDNUMsSUFBSSxZQUFZLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxFQUFFO29CQUN4QyxNQUFNLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQztvQkFDbkMsT0FBTztpQkFDUjtnQkFFRCxNQUFNLEtBQUssR0FBYSxNQUFNLE9BQU8sQ0FBQyxZQUFZLEVBQUUsRUFBRSxhQUFhLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFFN0UsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLEVBQUU7b0JBQ3hCLE1BQU0sUUFBUSxHQUFXLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLElB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QixDQUFDLENBQUM7UUFDbkQsQ0FBQztLQUFBO0lBRU8sTUFBTSxDQUFPLFlBQVksQ0FBQyxRQUFnQjs7WUFDaEQsTUFBTSxTQUFTLEdBQVcsMEJBQTBCLENBQUM7WUFDckQsTUFBTSxVQUFVLEdBQVcsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxDQUFDLENBQUM7WUFDMUQsTUFBTSxLQUFLLEdBQUcsRUFBRSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUN6QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO2dCQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUNqRDtpQkFBTTtnQkFDTCxJQUFBLDJCQUFZLEVBQUMsMERBQTBELEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2dCQUN2RixPQUFPLEVBQUUsQ0FBQzthQUNYO1FBQ0gsQ0FBQztLQUFBO0NBQ0Y7QUE5SUQsc0NBOElDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1xuaW1wb3J0IHsgRGlyZW50LCBwcm9taXNlcyBhcyBmc1Byb21pc2VzIH0gZnJvbSAnZnMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IGNvbnNvbGVFcnJvciB9IGZyb20gJy4vc2hhcmVkLnV0aWxzJztcbmltcG9ydCB7IFVwbG9hZEJsb2JSZXF1ZXN0IH0gZnJvbSAnLi4vcHJvdG8tbW9kZWxzL2NvbS9jb3JhbG9naXgvYmxvYnNldC92Mi9ibG9ic2V0X3NlcnZpY2UnO1xuaW1wb3J0ICogYXMgemxpYiBmcm9tICdub2RlOnpsaWInO1xuXG5jb25zdCB7IHJlYWRkaXIsIHN0YXQsIHJlYWRGaWxlIH0gPSBmc1Byb21pc2VzO1xuXG5leHBvcnQgY2xhc3MgRmlsZVByb2Nlc3NvciB7XG4gIHN0YXRpYyBhc3luYyB0cmF2ZXJzZVByb2d1YXJkRm9sZGVyKHByb2d1YXJkUGF0aDogc3RyaW5nLCByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCwgZmlsZUV4dGVuc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NUeHRGaWxlID0gYXN5bmMgKHByb2d1YXJkRmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShwcm9ndWFyZEZpbGUpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkQ29udGVudCA9IHpsaWIuZ3ppcFN5bmMoY29udGVudCk7XG4gICAgICAgIHJlcXVlc3QuZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvbXByZXNzZWRDb250ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBmb2xkZXIgaXRzZWxmIGlzIGEgLnR4dCBmaWxlXG4gICAgICBpZiAocHJvZ3VhcmRQYXRoLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGF3YWl0IHByb2Nlc3NUeHRGaWxlKHByb2d1YXJkUGF0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZXM6IERpcmVudFtdID0gYXdhaXQgcmVhZGRpcihwcm9ndWFyZFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4ocHJvZ3VhcmRQYXRoLCBmaWxlLm5hbWUpO1xuXG4gICAgICAgIGlmIChmaWxlLm5hbWUuZW5kc1dpdGgoJy50eHQnKSkge1xuICAgICAgICAgIGF3YWl0IHByb2Nlc3NUeHRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgRmlsZVByb2Nlc3Nvci50cmF2ZXJzZVByb2d1YXJkRm9sZGVyKGZpbGVQYXRoLCByZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlRXJyb3IoYEVycm9yIHRyYXZlcnNpbmcgZGlyZWN0b3J5OiAke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdHJhdmVyc2VEc3ltRm9sZGVyKGRzeW1QYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvY2Vzc0RzeW1Gb2xkZXIgPSBhc3luYyAoZHN5bUZvbGRlclBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBkd2FyZlBhdGggPSBhd2FpdCBGaWxlUHJvY2Vzc29yLmdldER3YXJmUGF0aChkc3ltRm9sZGVyUGF0aCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShkd2FyZlBhdGgpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkQ29udGVudCA9IHpsaWIuZ3ppcFN5bmMoY29udGVudCk7XG4gICAgICAgIHJlcXVlc3QuZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvbXByZXNzZWRDb250ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBmb2xkZXIgaXRzZWxmIGlzIGEgLmRTWU0gZm9sZGVyXG4gICAgICBpZiAoZHN5bVBhdGguZW5kc1dpdGgoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc0RzeW1Gb2xkZXIoZHN5bVBhdGgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzOiBEaXJlbnRbXSA9IGF3YWl0IHJlYWRkaXIoZHN5bVBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIC8vIFNraXAgLkRTX1N0b3JlIGFuZCBoaWRkZW4gZmlsZXNcbiAgICAgICAgaWYgKGZpbGUubmFtZSA9PT0gJy5EU19TdG9yZScgfHwgZmlsZS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkc3ltUGF0aCwgZmlsZS5uYW1lKTtcblxuICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgaWYgKGZpbGUubmFtZS5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0RzeW1Gb2xkZXIoZmlsZVBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBGaWxlUHJvY2Vzc29yLnRyYXZlcnNlRHN5bUZvbGRlcihmaWxlUGF0aCwgcmVxdWVzdCwgZmlsZUV4dGVuc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGVFcnJvcihgRXJyb3IgdHJhdmVyc2luZyBkaXJlY3Rvcnk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB0cmF2ZXJzZShmb2xkZXJQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhdHMgPSBhd2FpdCBzdGF0KGZvbGRlclBhdGgpO1xuXG4gICAgICBpZiAoc3RhdHMuaXNGaWxlKCkgJiYgZm9sZGVyUGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzU2luZ2xlRmlsZShmb2xkZXJQYXRoLCByZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uKTtcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHMuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzRGlyZWN0b3J5KGZvbGRlclBhdGgsIHJlcXVlc3QsIGZpbGVFeHRlbnNpb24pO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlRXJyb3IoYEVycm9yIHRyYXZlcnNpbmcgZGlyZWN0b3J5OiAke2Vycm9yfWApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHByb2Nlc3NTaW5nbGVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBjb25zb2xlRXJyb3IoYEZpbGUgJHtmaWxlUGF0aH0gZG9lcyBub3QgaGF2ZSB0aGUgY29ycmVjdCBleHRlbnNpb246ICR7ZmlsZUV4dGVuc2lvbn1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgY29uc3QgeyBuYW1lIH0gPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICAgICAgY29uc3QgZmlsZURhdGEgPSB7IG5hbWUsIGNvbnRlbnQ6IGNvbnRlbnQudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG5cbiAgICAgIGNvbnN0IGNvbXByZXNzZWRDb250ZW50ID0gemxpYi5nemlwU3luYyhCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShbZmlsZURhdGFdKSkpO1xuXG4gICAgICByZXF1ZXN0LmRhdGEgPSBuZXcgVWludDhBcnJheShjb21wcmVzc2VkQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGVFcnJvcihgRXJyb3IgcHJvY2Vzc2luZyBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcHJvY2Vzc0RpcmVjdG9yeShmb2xkZXJQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlRGF0YUxpc3Q6IHsgbmFtZTogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfVtdID0gW107XG5cbiAgICBjb25zdCB0cmF2ZXJzZURpcmVjdG9yeSA9IGFzeW5jIChjdXJyZW50UGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gICAgICBjb25zdCBmaWxlcyA9IGF3YWl0IHJlYWRkaXIoY3VycmVudFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgICAgZm9yIChjb25zdCBkaXJlbnQgb2YgZmlsZXMpIHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4oY3VycmVudFBhdGgsIGRpcmVudC5uYW1lKTtcblxuICAgICAgICBpZiAoZGlyZW50LmlzRmlsZSgpICYmIGRpcmVudC5uYW1lLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICBjb25zdCB7IG5hbWUgfSA9IHBhdGgucGFyc2UoZmlsZVBhdGgpO1xuICAgICAgICAgIGZpbGVEYXRhTGlzdC5wdXNoKHsgbmFtZSwgY29udGVudDogY29udGVudC50b1N0cmluZygnYmFzZTY0JykgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoZGlyZW50LmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgICAgICBhd2FpdCB0cmF2ZXJzZURpcmVjdG9yeShmaWxlUGF0aCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuXG4gICAgYXdhaXQgdHJhdmVyc2VEaXJlY3RvcnkoZm9sZGVyUGF0aCk7XG5cbiAgICBjb25zdCBjb21wcmVzc2VkQ29udGVudCA9IHpsaWIuZ3ppcFN5bmMoQnVmZmVyLmZyb20oSlNPTi5zdHJpbmdpZnkoZmlsZURhdGFMaXN0KSkpO1xuICAgIHJlcXVlc3QuZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvbXByZXNzZWRDb250ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIGdldER3YXJmUGF0aChkc3ltUGF0aDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBkd2FyZlBhdGg6IHN0cmluZyA9ICdDb250ZW50cy9SZXNvdXJjZXMvRFdBUkYnO1xuICAgIGNvbnN0IHRhcmdldFBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkc3ltUGF0aCwgZHdhcmZQYXRoKTtcbiAgICBjb25zdCBmaWxlcyA9IGZzLnJlYWRkaXJTeW5jKHRhcmdldFBhdGgpO1xuICAgIGlmIChmaWxlcy5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiBwYXRoLmpvaW4oZHN5bVBhdGgsIGR3YXJmUGF0aCwgZmlsZXNbMF0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlRXJyb3IoYEV4cGVjdGVkIGV4YWN0bHkgb25lIGZpbGUgaW4gdGhlIGRpcmVjdG9yeSwgYnV0IGZvdW5kOiAke2ZpbGVzLmxlbmd0aH1gKTtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
186
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZS1wcm9jZXNzb3IudXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi91dGlscy9maWxlLXByb2Nlc3Nvci51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF5QjtBQUN6QiwyQkFBb0Q7QUFDcEQsMkNBQTZCO0FBQzdCLGlEQUE4QztBQUU5QyxnREFBa0M7QUFDbEMsOERBQWlDO0FBR2pDLE1BQU0sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxHQUFHLGFBQVUsQ0FBQztBQUUvQyxNQUFhLGFBQWE7SUFDeEIsTUFBTSxDQUFPLHNCQUFzQixDQUFDLFlBQW9CLEVBQUUsT0FBMEIsRUFBRSxhQUFxQjs7WUFDekcsSUFBSTtnQkFDRixNQUFNLGNBQWMsR0FBRyxDQUFPLFlBQW9CLEVBQUUsRUFBRTtvQkFDcEQsTUFBTSxPQUFPLEdBQUcsTUFBTSxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQzdDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDakQsT0FBTyxDQUFDLElBQUksR0FBRyxJQUFJLFVBQVUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO2dCQUNuRCxDQUFDLENBQUEsQ0FBQztnQkFFRiw0Q0FBNEM7Z0JBQzVDLElBQUksWUFBWSxDQUFDLFFBQVEsQ0FBQyxhQUFhLENBQUMsRUFBRTtvQkFDeEMsTUFBTSxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7b0JBQ25DLE9BQU87aUJBQ1I7Z0JBRUQsTUFBTSxLQUFLLEdBQWEsTUFBTSxPQUFPLENBQUMsWUFBWSxFQUFFLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBRTdFLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFO29CQUN4QixNQUFNLFFBQVEsR0FBVyxJQUFJLENBQUMsSUFBSSxD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YUFBYSxVQUFVLGFBQWEsQ0FBQyxDQUFDO1lBQy9GLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksV0FBVyxJQUFJLENBQUMsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQ3RGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ25GLE9BQU8sQ0FBQyxJQUFJLEdBQUcsSUFBSSxVQUFVLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUNuRCxDQUFDO0tBQUE7SUFFTyxNQUFNLENBQU8sWUFBWSxDQUFDLFFBQWdCOztZQUNoRCxNQUFNLFNBQVMsR0FBVywwQkFBMEIsQ0FBQztZQUNyRCxNQUFNLFVBQVUsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUMxRCxNQUFNLEtBQUssR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pDLElBQUksS0FBSyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ2pEO2lCQUFNO2dCQUNMLElBQUEsMkJBQVksRUFBQywwREFBMEQsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQ3ZGLE9BQU8sRUFBRSxDQUFDO2FBQ1g7UUFDSCxDQUFDO0tBQUE7Q0FDRjtBQTlJRCxzQ0E4SUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgeyBEaXJlbnQsIHByb21pc2VzIGFzIGZzUHJvbWlzZXMgfSBmcm9tICdmcyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgY29uc29sZUVycm9yIH0gZnJvbSAnLi9zaGFyZWQudXRpbHMnO1xuaW1wb3J0IHsgVXBsb2FkQmxvYlJlcXVlc3QgfSBmcm9tICcuLi9wcm90by1tb2RlbHMvY29tL2NvcmFsb2dpeC9ibG9ic2V0L3YyL2Jsb2JzZXRfc2VydmljZSc7XG5pbXBvcnQgKiBhcyB6bGliIGZyb20gJ25vZGU6emxpYic7XG5pbXBvcnQgYXNzZXJ0IGZyb20gJ25vZGU6YXNzZXJ0JztcblxuXG5jb25zdCB7IHJlYWRkaXIsIHN0YXQsIHJlYWRGaWxlIH0gPSBmc1Byb21pc2VzO1xuXG5leHBvcnQgY2xhc3MgRmlsZVByb2Nlc3NvciB7XG4gIHN0YXRpYyBhc3luYyB0cmF2ZXJzZVByb2d1YXJkRm9sZGVyKHByb2d1YXJkUGF0aDogc3RyaW5nLCByZXF1ZXN0OiBVcGxvYWRCbG9iUmVxdWVzdCwgZmlsZUV4dGVuc2lvbjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHByb2Nlc3NUeHRGaWxlID0gYXN5bmMgKHByb2d1YXJkRmlsZTogc3RyaW5nKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShwcm9ndWFyZEZpbGUpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkQ29udGVudCA9IHpsaWIuZ3ppcFN5bmMoY29udGVudCk7XG4gICAgICAgIHJlcXVlc3QuZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvbXByZXNzZWRDb250ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBmb2xkZXIgaXRzZWxmIGlzIGEgLnR4dCBmaWxlXG4gICAgICBpZiAocHJvZ3VhcmRQYXRoLmVuZHNXaXRoKGZpbGVFeHRlbnNpb24pKSB7XG4gICAgICAgIGF3YWl0IHByb2Nlc3NUeHRGaWxlKHByb2d1YXJkUGF0aCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZmlsZXM6IERpcmVudFtdID0gYXdhaXQgcmVhZGRpcihwcm9ndWFyZFBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoOiBzdHJpbmcgPSBwYXRoLmpvaW4ocHJvZ3VhcmRQYXRoLCBmaWxlLm5hbWUpO1xuXG4gICAgICAgIGlmIChmaWxlLm5hbWUuZW5kc1dpdGgoJy50eHQnKSkge1xuICAgICAgICAgIGF3YWl0IHByb2Nlc3NUeHRGaWxlKGZpbGVQYXRoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYXdhaXQgRmlsZVByb2Nlc3Nvci50cmF2ZXJzZVByb2d1YXJkRm9sZGVyKGZpbGVQYXRoLCByZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlRXJyb3IoYEVycm9yIHRyYXZlcnNpbmcgZGlyZWN0b3J5OiAke0pTT04uc3RyaW5naWZ5KGVycm9yKX1gKTtcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgYXN5bmMgdHJhdmVyc2VEc3ltRm9sZGVyKGRzeW1QYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgcHJvY2Vzc0RzeW1Gb2xkZXIgPSBhc3luYyAoZHN5bUZvbGRlclBhdGg6IHN0cmluZykgPT4ge1xuICAgICAgICBjb25zdCBkd2FyZlBhdGggPSBhd2FpdCBGaWxlUHJvY2Vzc29yLmdldER3YXJmUGF0aChkc3ltRm9sZGVyUGF0aCk7XG4gICAgICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCByZWFkRmlsZShkd2FyZlBhdGgpO1xuICAgICAgICBjb25zdCBjb21wcmVzc2VkQ29udGVudCA9IHpsaWIuZ3ppcFN5bmMoY29udGVudCk7XG4gICAgICAgIHJlcXVlc3QuZGF0YSA9IG5ldyBVaW50OEFycmF5KGNvbXByZXNzZWRDb250ZW50KTtcbiAgICAgIH07XG5cbiAgICAgIC8vIENoZWNrIGlmIHRoZSBmb2xkZXIgaXRzZWxmIGlzIGEgLmRTWU0gZm9sZGVyXG4gICAgICBpZiAoZHN5bVBhdGguZW5kc1dpdGgoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgYXdhaXQgcHJvY2Vzc0RzeW1Gb2xkZXIoZHN5bVBhdGgpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGZpbGVzOiBEaXJlbnRbXSA9IGF3YWl0IHJlYWRkaXIoZHN5bVBhdGgsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTtcblxuICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7XG4gICAgICAgIC8vIFNraXAgLkRTX1N0b3JlIGFuZCBoaWRkZW4gZmlsZXNcbiAgICAgICAgaWYgKGZpbGUubmFtZSA9PT0gJy5EU19TdG9yZScgfHwgZmlsZS5uYW1lLnN0YXJ0c1dpdGgoJy4nKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmlsZVBhdGg6IHN0cmluZyA9IHBhdGguam9pbihkc3ltUGF0aCwgZmlsZS5uYW1lKTtcblxuICAgICAgICBpZiAoZmlsZS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICAgICAgaWYgKGZpbGUubmFtZS5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICAgICAgYXdhaXQgcHJvY2Vzc0RzeW1Gb2xkZXIoZmlsZVBhdGgpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhd2FpdCBGaWxlUHJvY2Vzc29yLnRyYXZlcnNlRHN5bUZvbGRlcihmaWxlUGF0aCwgcmVxdWVzdCwgZmlsZUV4dGVuc2lvbik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGVFcnJvcihgRXJyb3IgdHJhdmVyc2luZyBkaXJlY3Rvcnk6ICR7SlNPTi5zdHJpbmdpZnkoZXJyb3IpfWApO1xuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBhc3luYyB0cmF2ZXJzZShmb2xkZXJQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBzdGF0cyA9IGF3YWl0IHN0YXQoZm9sZGVyUGF0aCk7XG5cbiAgICBpZiAoc3RhdHMuaXNGaWxlKCkgJiYgZm9sZGVyUGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMucHJvY2Vzc1NpbmdsZUZpbGUoZm9sZGVyUGF0aCwgcmVxdWVzdCwgZmlsZUV4dGVuc2lvbik7XG4gICAgfSBlbHNlIGlmIChzdGF0cy5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5wcm9jZXNzRGlyZWN0b3J5KGZvbGRlclBhdGgsIHJlcXVlc3QsIGZpbGVFeHRlbnNpb24pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc3RhdGljIGFzeW5jIHByb2Nlc3NTaW5nbGVGaWxlKGZpbGVQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFmaWxlUGF0aC5lbmRzV2l0aChmaWxlRXh0ZW5zaW9uKSkge1xuICAgICAgICBjb25zb2xlRXJyb3IoYEZpbGUgJHtmaWxlUGF0aH0gZG9lcyBub3QgaGF2ZSB0aGUgY29ycmVjdCBleHRlbnNpb246ICR7ZmlsZUV4dGVuc2lvbn1gKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgY29udGVudCA9IGF3YWl0IHJlYWRGaWxlKGZpbGVQYXRoKTtcblxuICAgICAgY29uc3QgeyBuYW1lIH0gPSBwYXRoLnBhcnNlKGZpbGVQYXRoKTtcblxuICAgICAgY29uc3QgZmlsZURhdGEgPSB7IG5hbWUsIGNvbnRlbnQ6IGNvbnRlbnQudG9TdHJpbmcoJ2Jhc2U2NCcpIH07XG5cbiAgICAgIGNvbnN0IGNvbXByZXNzZWRDb250ZW50ID0gemxpYi5nemlwU3luYyhCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShbZmlsZURhdGFdKSkpO1xuXG4gICAgICByZXF1ZXN0LmRhdGEgPSBuZXcgVWludDhBcnJheShjb21wcmVzc2VkQ29udGVudCk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGVFcnJvcihgRXJyb3IgcHJvY2Vzc2luZyBmaWxlOiAke2Vycm9yfWApO1xuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgcHJvY2Vzc0RpcmVjdG9yeShmb2xkZXJQYXRoOiBzdHJpbmcsIHJlcXVlc3Q6IFVwbG9hZEJsb2JSZXF1ZXN0LCBmaWxlRXh0ZW5zaW9uOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBmaWxlRGF0YUxpc3Q6IHsgbmFtZTogc3RyaW5nOyBzaXplOiBudW1iZXI7IGNvbnRlbnQ6IHN0cmluZyB9W10gPSBbXTtcblxuICAgIGNvbnN0IHRyYXZlcnNlRGlyZWN0b3J5ID0gYXN5bmMgKGN1cnJlbnRQYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICAgIGNvbnN0IGZpbGVzID0gYXdhaXQgcmVhZGRpcihjdXJyZW50UGF0aCwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuXG4gICAgICBmb3IgKGNvbnN0IGRpcmVudCBvZiBmaWxlcykge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihjdXJyZW50UGF0aCwgZGlyZW50Lm5hbWUpO1xuXG4gICAgICAgIGlmIChkaXJlbnQuaXNGaWxlKCkgJiYgZGlyZW50Lm5hbWUuZW5kc1dpdGgoZmlsZUV4dGVuc2lvbikpIHtcbiAgICAgICAgICBjb25zdCBjb250ZW50ID0gYXdhaXQgcmVhZEZpbGUoZmlsZVBhdGgpO1xuICAgICAgICAgIGNvbnN0IHsgbmFtZSB9ID0gcGF0aC5wYXJzZShmaWxlUGF0aCk7XG4gICAgICAgICAgY29uc3Qge3NpemV9ID0gYXdhaXQgc3RhdChmaWxlUGF0aCk7XG4gICAgICAgICAgZmlsZURhdGFMaXN0LnB1c2goeyBuYW1lLCBzaXplLCBjb250ZW50OiBjb250ZW50LnRvU3RyaW5nKCdiYXNlNjQnKSB9KTtcbiAgICAgICAgfSBlbHNlIGlmIChkaXJlbnQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgICAgIGF3YWl0IHRyYXZlcnNlRGlyZWN0b3J5KGZpbGVQYXRoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG5cbiAgICBhd2FpdCB0cmF2ZXJzZURpcmVjdG9yeShmb2xkZXJQYXRoKTtcbiAgICAvLyBBc3NlcnQgdGhhdCBhdCBsZWFzdCBvbmUgZmlsZSB3YXMgZm91bmRcbiAgICBhc3NlcnQoZmlsZURhdGFMaXN0Lmxlbmd0aCA+IDAsIGBObyBmaWxlcyB3aXRoIGV4dGVuc2lvbiAke2ZpbGVFeHRlbnNpb259IGZvdW5kIGluIHRoZSBkaXJlY3Rvcnk6IPCfk4EgJHtmb2xkZXJQYXRofWApO1xuICAgIGNvbnNvbGUubG9nKGBGb3VuZCAke2ZpbGVEYXRhTGlzdC5sZW5ndGh9ICR7ZmlsZUV4dGVuc2lvbn0gZmlsZXMgaW4gJHtmb2xkZXJQYXRofSBkaXJlY3RvcnkuYCk7XG4gICAgZmlsZURhdGFMaXN0LmZvckVhY2goZmlsZSA9PiBjb25zb2xlLmxvZyhg4pu2ICR7ZmlsZS5uYW1lfSwgU2l6ZTogJHtmaWxlLnNpemV9IGJ5dGVzYCkpO1xuICAgIGNvbnN0IGNvbXByZXNzZWRDb250ZW50ID0gemxpYi5nemlwU3luYyhCdWZmZXIuZnJvbShKU09OLnN0cmluZ2lmeShmaWxlRGF0YUxpc3QpKSk7XG4gICAgcmVxdWVzdC5kYXRhID0gbmV3IFVpbnQ4QXJyYXkoY29tcHJlc3NlZENvbnRlbnQpO1xuICB9XG5cbiAgcHJpdmF0ZSBzdGF0aWMgYXN5bmMgZ2V0RHdhcmZQYXRoKGRzeW1QYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IGR3YXJmUGF0aDogc3RyaW5nID0gJ0NvbnRlbnRzL1Jlc291cmNlcy9EV0FSRic7XG4gICAgY29uc3QgdGFyZ2V0UGF0aDogc3RyaW5nID0gcGF0aC5qb2luKGRzeW1QYXRoLCBkd2FyZlBhdGgpO1xuICAgIGNvbnN0IGZpbGVzID0gZnMucmVhZGRpclN5bmModGFyZ2V0UGF0aCk7XG4gICAgaWYgKGZpbGVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmV0dXJuIHBhdGguam9pbihkc3ltUGF0aCwgZHdhcmZQYXRoLCBmaWxlc1swXSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGVFcnJvcihgRXhwZWN0ZWQgZXhhY3RseSBvbmUgZmlsZSBpbiB0aGUgZGlyZWN0b3J5LCBidXQgZm91bmQ6ICR7ZmlsZXMubGVuZ3RofWApO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@coralogix/rum-cli",
3
- "version": "1.1.37",
3
+ "version": "1.1.38",
4
4
  "description": "coralogix rum cli",
5
5
  "bin": {
6
6
  "coralogix-rum-cli": "dist/cli/rum-cli.js"
@@ -28,10 +28,10 @@
28
28
  "cx-protofetch": "0.1.11",
29
29
  "google-proto-files": "^3.0.1",
30
30
  "google-protobuf": "^3.19.3",
31
- "protobufjs": "^7.2.4",
32
31
  "grpc-tools": "^1.11.2",
33
32
  "prettier": "^2.8.7",
34
- "ts-node": "10.6.0",
33
+ "protobufjs": "^7.2.4",
34
+ "ts-node": "^10.6.0",
35
35
  "ts-proto": "^1.104.0",
36
36
  "typescript": "^4.9.5"
37
37
  },
package/protoset.bin CHANGED
Binary file
@@ -1,6 +1,5 @@
1
1
  import { UploadBlobRequest } from '../../proto-models/com/coralogix/blobset/v2/blobset_service';
2
2
  import { GRAY_COLOR, GREEN_COLOR } from '../../consts/consts';
3
- import { consoleError } from '../../utils/shared.utils';
4
3
  import { BaseApi } from '../../api/base/base.api';
5
4
 
6
5
  export abstract class BaseService {
@@ -22,7 +21,7 @@ export abstract class BaseService {
22
21
  const request: UploadBlobRequest = UploadBlobRequest.create();
23
22
  const api: BaseApi = this.getApi();
24
23
 
25
- console.log(GRAY_COLOR, `🚀 Uploading ${this.getLogPrefix()}...`);
24
+ console.log(GRAY_COLOR, `🚀 Uploading ${this.getLogPrefix()}... (${new Date().toUTCString()})`);
26
25
 
27
26
  try {
28
27
  await this.getFileProcessorMethod()(folderPath, request, this.getFileExtension());
@@ -4,6 +4,8 @@ import * as path from 'path';
4
4
  import { consoleError } from './shared.utils';
5
5
  import { UploadBlobRequest } from '../proto-models/com/coralogix/blobset/v2/blobset_service';
6
6
  import * as zlib from 'node:zlib';
7
+ import assert from 'node:assert';
8
+
7
9
 
8
10
  const { readdir, stat, readFile } = fsPromises;
9
11
 
@@ -79,16 +81,12 @@ export class FileProcessor {
79
81
  }
80
82
 
81
83
  static async traverse(folderPath: string, request: UploadBlobRequest, fileExtension: string): Promise<void> {
82
- try {
83
- const stats = await stat(folderPath);
84
+ const stats = await stat(folderPath);
84
85
 
85
- if (stats.isFile() && folderPath.endsWith(fileExtension)) {
86
- return await this.processSingleFile(folderPath, request, fileExtension);
87
- } else if (stats.isDirectory()) {
88
- return await this.processDirectory(folderPath, request, fileExtension);
89
- }
90
- } catch (error) {
91
- consoleError(`Error traversing directory: ${error}`);
86
+ if (stats.isFile() && folderPath.endsWith(fileExtension)) {
87
+ return await this.processSingleFile(folderPath, request, fileExtension);
88
+ } else if (stats.isDirectory()) {
89
+ return await this.processDirectory(folderPath, request, fileExtension);
92
90
  }
93
91
  }
94
92
 
@@ -114,7 +112,7 @@ export class FileProcessor {
114
112
  }
115
113
 
116
114
  private static async processDirectory(folderPath: string, request: UploadBlobRequest, fileExtension: string): Promise<void> {
117
- const fileDataList: { name: string; content: string }[] = [];
115
+ const fileDataList: { name: string; size: number; content: string }[] = [];
118
116
 
119
117
  const traverseDirectory = async (currentPath: string): Promise<void> => {
120
118
  const files = await readdir(currentPath, { withFileTypes: true });
@@ -125,7 +123,8 @@ export class FileProcessor {
125
123
  if (dirent.isFile() && dirent.name.endsWith(fileExtension)) {
126
124
  const content = await readFile(filePath);
127
125
  const { name } = path.parse(filePath);
128
- fileDataList.push({ name, content: content.toString('base64') });
126
+ const {size} = await stat(filePath);
127
+ fileDataList.push({ name, size, content: content.toString('base64') });
129
128
  } else if (dirent.isDirectory()) {
130
129
  await traverseDirectory(filePath);
131
130
  }
@@ -133,7 +132,10 @@ export class FileProcessor {
133
132
  };
134
133
 
135
134
  await traverseDirectory(folderPath);
136
-
135
+ // Assert that at least one file was found
136
+ assert(fileDataList.length > 0, `No files with extension ${fileExtension} found in the directory: 📁 ${folderPath}`);
137
+ console.log(`Found ${fileDataList.length} ${fileExtension} files in ${folderPath} directory.`);
138
+ fileDataList.forEach(file => console.log(`⛶ ${file.name}, Size: ${file.size} bytes`));
137
139
  const compressedContent = zlib.gzipSync(Buffer.from(JSON.stringify(fileDataList)));
138
140
  request.data = new Uint8Array(compressedContent);
139
141
  }