parse-server 9.10.2-alpha.1 → 9.10.2-alpha.3

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.
@@ -65,8 +65,8 @@ class FilesController extends _AdaptableController.default {
65
65
  }
66
66
 
67
67
  /**
68
- * Find file references in REST-format object and adds the url key
69
- * with the current mount point and app id.
68
+ * Find file references in REST-format object, including nested objects and
69
+ * arrays, and adds the url key with the current mount point and app id.
70
70
  * Object may be a single object or list of REST-format objects.
71
71
  */
72
72
  async expandFilesInObject(config, object) {
@@ -75,30 +75,34 @@ class FilesController extends _AdaptableController.default {
75
75
  await Promise.all(promises);
76
76
  return;
77
77
  }
78
- if (typeof object !== 'object') {
78
+ if (!object || typeof object !== 'object') {
79
+ return;
80
+ }
81
+ if (object['__type'] === 'File') {
82
+ await this.expandFile(config, object);
79
83
  return;
80
84
  }
81
85
  for (const key in object) {
82
- const fileObject = object[key];
83
- if (fileObject && fileObject['__type'] === 'File') {
84
- if (fileObject['url']) {
85
- continue;
86
- }
87
- const filename = fileObject['name'];
88
- // all filenames starting with "tfss-" should be from files.parsetfss.com
89
- // all filenames starting with a "-" seperated UUID should be from files.parse.com
90
- // all other filenames have been migrated or created from Parse Server
91
- if (config.fileKey === undefined) {
92
- fileObject['url'] = await this.adapter.getFileLocation(config, filename);
93
- } else {
94
- if (filename.indexOf('tfss-') === 0) {
95
- fileObject['url'] = 'http://files.parsetfss.com/' + config.fileKey + '/' + encodeURIComponent(filename);
96
- } else if (legacyFilesRegex.test(filename)) {
97
- fileObject['url'] = 'http://files.parse.com/' + config.fileKey + '/' + encodeURIComponent(filename);
98
- } else {
99
- fileObject['url'] = await this.adapter.getFileLocation(config, filename);
100
- }
101
- }
86
+ await this.expandFilesInObject(config, object[key]);
87
+ }
88
+ }
89
+ async expandFile(config, fileObject) {
90
+ const filename = fileObject['name'];
91
+ if (fileObject['url'] || typeof filename !== 'string') {
92
+ return;
93
+ }
94
+ // all filenames starting with "tfss-" should be from files.parsetfss.com
95
+ // all filenames starting with a "-" seperated UUID should be from files.parse.com
96
+ // all other filenames have been migrated or created from Parse Server
97
+ if (config.fileKey === undefined) {
98
+ fileObject['url'] = await this.adapter.getFileLocation(config, filename);
99
+ } else {
100
+ if (filename.indexOf('tfss-') === 0) {
101
+ fileObject['url'] = 'http://files.parsetfss.com/' + config.fileKey + '/' + encodeURIComponent(filename);
102
+ } else if (legacyFilesRegex.test(filename)) {
103
+ fileObject['url'] = 'http://files.parse.com/' + config.fileKey + '/' + encodeURIComponent(filename);
104
+ } else {
105
+ fileObject['url'] = await this.adapter.getFileLocation(config, filename);
102
106
  }
103
107
  }
104
108
  }
@@ -121,4 +125,4 @@ class FilesController extends _AdaptableController.default {
121
125
  }
122
126
  exports.FilesController = FilesController;
123
127
  var _default = exports.default = FilesController;
124
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ZpbGVzQWRhcHRlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwiVXRpbHMiLCJsZWdhY3lGaWxlc1JlZ2V4IiwiUmVnRXhwIiwiRmlsZXNDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImdldEZpbGVEYXRhIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJhZGFwdGVyIiwiY3JlYXRlRmlsZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIm9wdGlvbnMiLCJleHRuYW1lIiwiZ2V0RmlsZUV4dGVuc2lvbiIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJzZXBhcmF0b3IiLCJlbmRzV2l0aCIsImdldFR5cGUiLCJwcmVzZXJ2ZUZpbGVOYW1lIiwicmFuZG9tSGV4U3RyaW5nIiwiZGlyZWN0b3J5IiwicGlwZSIsInN1cHBvcnRzU3RyZWFtaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsImxvY2F0aW9uIiwiZ2V0RmlsZUxvY2F0aW9uIiwidXJsIiwibmFtZSIsImRlbGV0ZUZpbGUiLCJnZXRNZXRhZGF0YSIsImV4cGFuZEZpbGVzSW5PYmplY3QiLCJvYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJwcm9taXNlcyIsIm1hcCIsIm9iaiIsImFsbCIsImtleSIsImZpbGVPYmplY3QiLCJmaWxlS2V5IiwidW5kZWZpbmVkIiwiaW5kZXhPZiIsImVuY29kZVVSSUNvbXBvbmVudCIsInRlc3QiLCJleHBlY3RlZEFkYXB0ZXJUeXBlIiwiRmlsZXNBZGFwdGVyIiwiaGFuZGxlRmlsZVN0cmVhbSIsInJlcSIsInJlcyIsInZhbGlkYXRlRmlsZW5hbWUiLCJlcnJvciIsIkVycm9yIiwiSU5WQUxJRF9GSUxFX05BTUUiLCJleHBvcnRzIiwiX2RlZmF1bHQiXSwic291cmNlcyI6WyIuLi8uLi9zcmMvQ29udHJvbGxlcnMvRmlsZXNDb250cm9sbGVyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIEZpbGVzQ29udHJvbGxlci5qc1xuaW1wb3J0IHsgcmFuZG9tSGV4U3RyaW5nIH0gZnJvbSAnLi4vY3J5cHRvVXRpbHMnO1xuaW1wb3J0IEFkYXB0YWJsZUNvbnRyb2xsZXIgZnJvbSAnLi9BZGFwdGFibGVDb250cm9sbGVyJztcbmltcG9ydCB7IHZhbGlkYXRlRmlsZW5hbWUsIEZpbGVzQWRhcHRlciB9IGZyb20gJy4uL0FkYXB0ZXJzL0ZpbGVzL0ZpbGVzQWRhcHRlcic7XG5jb25zdCBQYXJzZSA9IHJlcXVpcmUoJ3BhcnNlL25vZGUnKS5QYXJzZTtcbmNvbnN0IFV0aWxzID0gcmVxdWlyZSgnLi4vVXRpbHMnKTtcblxuY29uc3QgbGVnYWN5RmlsZXNSZWdleCA9IG5ldyBSZWdFeHAoXG4gICdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9LS4qJ1xuKTtcblxuZXhwb3J0IGNsYXNzIEZpbGVzQ29udHJvbGxlciBleHRlbmRzIEFkYXB0YWJsZUNvbnRyb2xsZXIge1xuICBnZXRGaWxlRGF0YShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRGaWxlRGF0YShmaWxlbmFtZSk7XG4gIH1cblxuICBhc3luYyBjcmVhdGVGaWxlKGNvbmZpZywgZmlsZW5hbWUsIGRhdGEsIGNvbnRlbnRUeXBlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgZXh0bmFtZSA9IFV0aWxzLmdldEZpbGVFeHRlbnNpb24oZmlsZW5hbWUpO1xuICAgIGNvbnN0IGhhc0V4dGVuc2lvbiA9IGV4dG5hbWUubGVuZ3RoID4gMDtcbiAgICBjb25zdCBtaW1lID0gKGF3YWl0IGltcG9ydCgnbWltZScpKS5kZWZhdWx0XG4gICAgaWYgKCFoYXNFeHRlbnNpb24gJiYgY29udGVudFR5cGUgJiYgbWltZS5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpKSB7XG4gICAgICAvLyBBdm9pZCBwcm9kdWNpbmcgYSBkb3VibGVkIGRvdCB3aGVuIHRoZSBmaWxlbmFtZSBhbHJlYWR5IGVuZHMgaW4gb25lXG4gICAgICBjb25zdCBzZXBhcmF0b3IgPSBmaWxlbmFtZS5lbmRzV2l0aCgnLicpID8gJycgOiAnLic7XG4gICAgICBmaWxlbmFtZSA9IGZpbGVuYW1lICsgc2VwYXJhdG9yICsgbWltZS5nZXRFeHRlbnNpb24oY29udGVudFR5cGUpO1xuICAgIH0gZWxzZSBpZiAoaGFzRXh0ZW5zaW9uKSB7XG4gICAgICBjb250ZW50VHlwZSA9IG1pbWUuZ2V0VHlwZShmaWxlbmFtZSkgfHwgY29udGVudFR5cGU7XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLm9wdGlvbnMucHJlc2VydmVGaWxlTmFtZSkge1xuICAgICAgZmlsZW5hbWUgPSByYW5kb21IZXhTdHJpbmcoMzIpICsgJ18nICsgZmlsZW5hbWU7XG4gICAgfVxuXG4gICAgLy8gUHJlcGVuZCBkaXJlY3RvcnkgaWYgcHJvdmlkZWRcbiAgICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmRpcmVjdG9yeSkge1xuICAgICAgZmlsZW5hbWUgPSBvcHRpb25zLmRpcmVjdG9yeSArICcvJyArIGZpbGVuYW1lO1xuICAgICAgZGVsZXRlIG9wdGlvbnMuZGlyZWN0b3J5O1xuICAgIH1cblxuICAgIC8vIEZhbGxiYWNrOiBidWZmZXIgc3RyZWFtIGZvciBhZGFwdGVycyB0aGF0IGRvbid0IHN1cHBvcnQgc3RyZWFtaW5nXG4gICAgaWYgKHR5cGVvZiBkYXRhPy5waXBlID09PSAnZnVuY3Rpb24nICYmICF0aGlzLmFkYXB0ZXIuc3VwcG9ydHNTdHJlYW1pbmcpIHtcbiAgICAgIGRhdGEgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IGNodW5rcyA9IFtdO1xuICAgICAgICBkYXRhLm9uKCdkYXRhJywgY2h1bmsgPT4gY2h1bmtzLnB1c2goY2h1bmspKTtcbiAgICAgICAgZGF0YS5vbignZW5kJywgKCkgPT4gcmVzb2x2ZShCdWZmZXIuY29uY2F0KGNodW5rcykpKTtcbiAgICAgICAgZGF0YS5vbignZXJyb3InLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29uc3QgbG9jYXRpb24gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgIGF3YWl0IHRoaXMuYWRhcHRlci5jcmVhdGVGaWxlKGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHVybDogbG9jYXRpb24sXG4gICAgICBuYW1lOiBmaWxlbmFtZSxcbiAgICB9XG4gIH1cblxuICBkZWxldGVGaWxlKGNvbmZpZywgZmlsZW5hbWUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmRlbGV0ZUZpbGUoZmlsZW5hbWUpO1xuICB9XG5cbiAgZ2V0TWV0YWRhdGEoZmlsZW5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuYWRhcHRlci5nZXRNZXRhZGF0YShmaWxlbmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoe30pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgZmlsZSByZWZlcmVuY2VzIGluIFJFU1QtZm9ybWF0IG9iamVjdCBhbmQgYWRkcyB0aGUgdXJsIGtleVxuICAgKiB3aXRoIHRoZSBjdXJyZW50IG1vdW50IHBvaW50IGFuZCBhcHAgaWQuXG4gICAqIE9iamVjdCBtYXkgYmUgYSBzaW5nbGUgb2JqZWN0IG9yIGxpc3Qgb2YgUkVTVC1mb3JtYXQgb2JqZWN0cy5cbiAgICovXG4gIGFzeW5jIGV4cGFuZEZpbGVzSW5PYmplY3QoY29uZmlnLCBvYmplY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IG9iamVjdC5tYXAob2JqID0+IHRoaXMuZXhwYW5kRmlsZXNJbk9iamVjdChjb25maWcsIG9iaikpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodHlwZW9mIG9iamVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XG4gICAgICBjb25zdCBmaWxlT2JqZWN0ID0gb2JqZWN0W2tleV07XG4gICAgICBpZiAoZmlsZU9iamVjdCAmJiBmaWxlT2JqZWN0WydfX3R5cGUnXSA9PT0gJ0ZpbGUnKSB7XG4gICAgICAgIGlmIChmaWxlT2JqZWN0Wyd1cmwnXSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZpbGVuYW1lID0gZmlsZU9iamVjdFsnbmFtZSddO1xuICAgICAgICAvLyBhbGwgZmlsZW5hbWVzIHN0YXJ0aW5nIHdpdGggXCJ0ZnNzLVwiIHNob3VsZCBiZSBmcm9tIGZpbGVzLnBhcnNldGZzcy5jb21cbiAgICAgICAgLy8gYWxsIGZpbGVuYW1lcyBzdGFydGluZyB3aXRoIGEgXCItXCIgc2VwZXJhdGVkIFVVSUQgc2hvdWxkIGJlIGZyb20gZmlsZXMucGFyc2UuY29tXG4gICAgICAgIC8vIGFsbCBvdGhlciBmaWxlbmFtZXMgaGF2ZSBiZWVuIG1pZ3JhdGVkIG9yIGNyZWF0ZWQgZnJvbSBQYXJzZSBTZXJ2ZXJcbiAgICAgICAgaWYgKGNvbmZpZy5maWxlS2V5ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9IGF3YWl0IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKGZpbGVuYW1lLmluZGV4T2YoJ3Rmc3MtJykgPT09IDApIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID1cbiAgICAgICAgICAgICAgJ2h0dHA6Ly9maWxlcy5wYXJzZXRmc3MuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChsZWdhY3lGaWxlc1JlZ2V4LnRlc3QoZmlsZW5hbWUpKSB7XG4gICAgICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9XG4gICAgICAgICAgICAgICdodHRwOi8vZmlsZXMucGFyc2UuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZpbGVPYmplY3RbJ3VybCddID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBleHBlY3RlZEFkYXB0ZXJUeXBlKCkge1xuICAgIHJldHVybiBGaWxlc0FkYXB0ZXI7XG4gIH1cblxuICBoYW5kbGVGaWxlU3RyZWFtKGNvbmZpZywgZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSkge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuaGFuZGxlRmlsZVN0cmVhbShmaWxlbmFtZSwgcmVxLCByZXMsIGNvbnRlbnRUeXBlKTtcbiAgfVxuXG4gIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuYWRhcHRlci52YWxpZGF0ZUZpbGVuYW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBlcnJvciA9IHRoaXMuYWRhcHRlci52YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgICAgIGlmICh0eXBlb2YgZXJyb3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXcgUGFyc2UuRXJyb3IoUGFyc2UuRXJyb3IuSU5WQUxJRF9GSUxFX05BTUUsIGVycm9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbGlkYXRlRmlsZW5hbWUoZmlsZW5hbWUpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVzQ29udHJvbGxlcjtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQ0EsSUFBQUEsWUFBQSxHQUFBQyxPQUFBO0FBQ0EsSUFBQUMsb0JBQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUNBLElBQUFHLGFBQUEsR0FBQUgsT0FBQTtBQUFnRixTQUFBRSx1QkFBQUUsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUhoRjs7QUFJQSxNQUFNRyxLQUFLLEdBQUdQLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQ08sS0FBSztBQUN6QyxNQUFNQyxLQUFLLEdBQUdSLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFFakMsTUFBTVMsZ0JBQWdCLEdBQUcsSUFBSUMsTUFBTSxDQUNqQyxpRkFDRixDQUFDO0FBRU0sTUFBTUMsZUFBZSxTQUFTQyw0QkFBbUIsQ0FBQztFQUN2REMsV0FBV0EsQ0FBQ0MsTUFBTSxFQUFFQyxRQUFRLEVBQUU7SUFDNUIsT0FBTyxJQUFJLENBQUNDLE9BQU8sQ0FBQ0gsV0FBVyxDQUFDRSxRQUFRLENBQUM7RUFDM0M7RUFFQSxNQUFNRSxVQUFVQSxDQUFDSCxNQUFNLEVBQUVDLFFBQVEsRUFBRUcsSUFBSSxFQUFFQyxXQUFXLEVBQUVDLE9BQU8sRUFBRTtJQUM3RCxNQUFNQyxPQUFPLEdBQUdiLEtBQUssQ0FBQ2MsZ0JBQWdCLENBQUNQLFFBQVEsQ0FBQztJQUNoRCxNQUFNUSxZQUFZLEdBQUdGLE9BQU8sQ0FBQ0csTUFBTSxH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
128
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfY3J5cHRvVXRpbHMiLCJyZXF1aXJlIiwiX0FkYXB0YWJsZUNvbnRyb2xsZXIiLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiX0ZpbGVzQWRhcHRlciIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsIlBhcnNlIiwiVXRpbHMiLCJsZWdhY3lGaWxlc1JlZ2V4IiwiUmVnRXhwIiwiRmlsZXNDb250cm9sbGVyIiwiQWRhcHRhYmxlQ29udHJvbGxlciIsImdldEZpbGVEYXRhIiwiY29uZmlnIiwiZmlsZW5hbWUiLCJhZGFwdGVyIiwiY3JlYXRlRmlsZSIsImRhdGEiLCJjb250ZW50VHlwZSIsIm9wdGlvbnMiLCJleHRuYW1lIiwiZ2V0RmlsZUV4dGVuc2lvbiIsImhhc0V4dGVuc2lvbiIsImxlbmd0aCIsIm1pbWUiLCJnZXRFeHRlbnNpb24iLCJzZXBhcmF0b3IiLCJlbmRzV2l0aCIsImdldFR5cGUiLCJwcmVzZXJ2ZUZpbGVOYW1lIiwicmFuZG9tSGV4U3RyaW5nIiwiZGlyZWN0b3J5IiwicGlwZSIsInN1cHBvcnRzU3RyZWFtaW5nIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjaHVua3MiLCJvbiIsImNodW5rIiwicHVzaCIsIkJ1ZmZlciIsImNvbmNhdCIsImxvY2F0aW9uIiwiZ2V0RmlsZUxvY2F0aW9uIiwidXJsIiwibmFtZSIsImRlbGV0ZUZpbGUiLCJnZXRNZXRhZGF0YSIsImV4cGFuZEZpbGVzSW5PYmplY3QiLCJvYmplY3QiLCJBcnJheSIsImlzQXJyYXkiLCJwcm9taXNlcyIsIm1hcCIsIm9iaiIsImFsbCIsImV4cGFuZEZpbGUiLCJrZXkiLCJmaWxlT2JqZWN0IiwiZmlsZUtleSIsInVuZGVmaW5lZCIsImluZGV4T2YiLCJlbmNvZGVVUklDb21wb25lbnQiLCJ0ZXN0IiwiZXhwZWN0ZWRBZGFwdGVyVHlwZSIsIkZpbGVzQWRhcHRlciIsImhhbmRsZUZpbGVTdHJlYW0iLCJyZXEiLCJyZXMiLCJ2YWxpZGF0ZUZpbGVuYW1lIiwiZXJyb3IiLCJFcnJvciIsIklOVkFMSURfRklMRV9OQU1FIiwiZXhwb3J0cyIsIl9kZWZhdWx0Il0sInNvdXJjZXMiOlsiLi4vLi4vc3JjL0NvbnRyb2xsZXJzL0ZpbGVzQ29udHJvbGxlci5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvLyBGaWxlc0NvbnRyb2xsZXIuanNcbmltcG9ydCB7IHJhbmRvbUhleFN0cmluZyB9IGZyb20gJy4uL2NyeXB0b1V0aWxzJztcbmltcG9ydCBBZGFwdGFibGVDb250cm9sbGVyIGZyb20gJy4vQWRhcHRhYmxlQ29udHJvbGxlcic7XG5pbXBvcnQgeyB2YWxpZGF0ZUZpbGVuYW1lLCBGaWxlc0FkYXB0ZXIgfSBmcm9tICcuLi9BZGFwdGVycy9GaWxlcy9GaWxlc0FkYXB0ZXInO1xuY29uc3QgUGFyc2UgPSByZXF1aXJlKCdwYXJzZS9ub2RlJykuUGFyc2U7XG5jb25zdCBVdGlscyA9IHJlcXVpcmUoJy4uL1V0aWxzJyk7XG5cbmNvbnN0IGxlZ2FjeUZpbGVzUmVnZXggPSBuZXcgUmVnRXhwKFxuICAnXlswLTlhLWZBLUZdezh9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezR9LVswLTlhLWZBLUZdezEyfS0uKidcbik7XG5cbmV4cG9ydCBjbGFzcyBGaWxlc0NvbnRyb2xsZXIgZXh0ZW5kcyBBZGFwdGFibGVDb250cm9sbGVyIHtcbiAgZ2V0RmlsZURhdGEoY29uZmlnLCBmaWxlbmFtZSkge1xuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0RmlsZURhdGEoZmlsZW5hbWUpO1xuICB9XG5cbiAgYXN5bmMgY3JlYXRlRmlsZShjb25maWcsIGZpbGVuYW1lLCBkYXRhLCBjb250ZW50VHlwZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IGV4dG5hbWUgPSBVdGlscy5nZXRGaWxlRXh0ZW5zaW9uKGZpbGVuYW1lKTtcbiAgICBjb25zdCBoYXNFeHRlbnNpb24gPSBleHRuYW1lLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgbWltZSA9IChhd2FpdCBpbXBvcnQoJ21pbWUnKSkuZGVmYXVsdFxuICAgIGlmICghaGFzRXh0ZW5zaW9uICYmIGNvbnRlbnRUeXBlICYmIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKSkge1xuICAgICAgLy8gQXZvaWQgcHJvZHVjaW5nIGEgZG91YmxlZCBkb3Qgd2hlbiB0aGUgZmlsZW5hbWUgYWxyZWFkeSBlbmRzIGluIG9uZVxuICAgICAgY29uc3Qgc2VwYXJhdG9yID0gZmlsZW5hbWUuZW5kc1dpdGgoJy4nKSA/ICcnIDogJy4nO1xuICAgICAgZmlsZW5hbWUgPSBmaWxlbmFtZSArIHNlcGFyYXRvciArIG1pbWUuZ2V0RXh0ZW5zaW9uKGNvbnRlbnRUeXBlKTtcbiAgICB9IGVsc2UgaWYgKGhhc0V4dGVuc2lvbikge1xuICAgICAgY29udGVudFR5cGUgPSBtaW1lLmdldFR5cGUoZmlsZW5hbWUpIHx8IGNvbnRlbnRUeXBlO1xuICAgIH1cblxuICAgIGlmICghdGhpcy5vcHRpb25zLnByZXNlcnZlRmlsZU5hbWUpIHtcbiAgICAgIGZpbGVuYW1lID0gcmFuZG9tSGV4U3RyaW5nKDMyKSArICdfJyArIGZpbGVuYW1lO1xuICAgIH1cblxuICAgIC8vIFByZXBlbmQgZGlyZWN0b3J5IGlmIHByb3ZpZGVkXG4gICAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5kaXJlY3RvcnkpIHtcbiAgICAgIGZpbGVuYW1lID0gb3B0aW9ucy5kaXJlY3RvcnkgKyAnLycgKyBmaWxlbmFtZTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLmRpcmVjdG9yeTtcbiAgICB9XG5cbiAgICAvLyBGYWxsYmFjazogYnVmZmVyIHN0cmVhbSBmb3IgYWRhcHRlcnMgdGhhdCBkb24ndCBzdXBwb3J0IHN0cmVhbWluZ1xuICAgIGlmICh0eXBlb2YgZGF0YT8ucGlwZSA9PT0gJ2Z1bmN0aW9uJyAmJiAhdGhpcy5hZGFwdGVyLnN1cHBvcnRzU3RyZWFtaW5nKSB7XG4gICAgICBkYXRhID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCBjaHVua3MgPSBbXTtcbiAgICAgICAgZGF0YS5vbignZGF0YScsIGNodW5rID0+IGNodW5rcy5wdXNoKGNodW5rKSk7XG4gICAgICAgIGRhdGEub24oJ2VuZCcsICgpID0+IHJlc29sdmUoQnVmZmVyLmNvbmNhdChjaHVua3MpKSk7XG4gICAgICAgIGRhdGEub24oJ2Vycm9yJywgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGxvY2F0aW9uID0gYXdhaXQgdGhpcy5hZGFwdGVyLmdldEZpbGVMb2NhdGlvbihjb25maWcsIGZpbGVuYW1lKTtcbiAgICBhd2FpdCB0aGlzLmFkYXB0ZXIuY3JlYXRlRmlsZShmaWxlbmFtZSwgZGF0YSwgY29udGVudFR5cGUsIG9wdGlvbnMpO1xuICAgIHJldHVybiB7XG4gICAgICB1cmw6IGxvY2F0aW9uLFxuICAgICAgbmFtZTogZmlsZW5hbWUsXG4gICAgfVxuICB9XG5cbiAgZGVsZXRlRmlsZShjb25maWcsIGZpbGVuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMuYWRhcHRlci5kZWxldGVGaWxlKGZpbGVuYW1lKTtcbiAgfVxuXG4gIGdldE1ldGFkYXRhKGZpbGVuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIuZ2V0TWV0YWRhdGEgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0TWV0YWRhdGEoZmlsZW5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGZpbGUgcmVmZXJlbmNlcyBpbiBSRVNULWZvcm1hdCBvYmplY3QsIGluY2x1ZGluZyBuZXN0ZWQgb2JqZWN0cyBhbmRcbiAgICogYXJyYXlzLCBhbmQgYWRkcyB0aGUgdXJsIGtleSB3aXRoIHRoZSBjdXJyZW50IG1vdW50IHBvaW50IGFuZCBhcHAgaWQuXG4gICAqIE9iamVjdCBtYXkgYmUgYSBzaW5nbGUgb2JqZWN0IG9yIGxpc3Qgb2YgUkVTVC1mb3JtYXQgb2JqZWN0cy5cbiAgICovXG4gIGFzeW5jIGV4cGFuZEZpbGVzSW5PYmplY3QoY29uZmlnLCBvYmplY3QpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgICBjb25zdCBwcm9taXNlcyA9IG9iamVjdC5tYXAob2JqID0+IHRoaXMuZXhwYW5kRmlsZXNJbk9iamVjdChjb25maWcsIG9iaikpO1xuICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoIW9iamVjdCB8fCB0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob2JqZWN0WydfX3R5cGUnXSA9PT0gJ0ZpbGUnKSB7XG4gICAgICBhd2FpdCB0aGlzLmV4cGFuZEZpbGUoY29uZmlnLCBvYmplY3QpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGF3YWl0IHRoaXMuZXhwYW5kRmlsZXNJbk9iamVjdChjb25maWcsIG9iamVjdFtrZXldKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBleHBhbmRGaWxlKGNvbmZpZywgZmlsZU9iamVjdCkge1xuICAgIGNvbnN0IGZpbGVuYW1lID0gZmlsZU9iamVjdFsnbmFtZSddO1xuICAgIGlmIChmaWxlT2JqZWN0Wyd1cmwnXSB8fCB0eXBlb2YgZmlsZW5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIC8vIGFsbCBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBcInRmc3MtXCIgc2hvdWxkIGJlIGZyb20gZmlsZXMucGFyc2V0ZnNzLmNvbVxuICAgIC8vIGFsbCBmaWxlbmFtZXMgc3RhcnRpbmcgd2l0aCBhIFwiLVwiIHNlcGVyYXRlZCBVVUlEIHNob3VsZCBiZSBmcm9tIGZpbGVzLnBhcnNlLmNvbVxuICAgIC8vIGFsbCBvdGhlciBmaWxlbmFtZXMgaGF2ZSBiZWVuIG1pZ3JhdGVkIG9yIGNyZWF0ZWQgZnJvbSBQYXJzZSBTZXJ2ZXJcbiAgICBpZiAoY29uZmlnLmZpbGVLZXkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmlsZU9iamVjdFsndXJsJ10gPSBhd2FpdCB0aGlzLmFkYXB0ZXIuZ2V0RmlsZUxvY2F0aW9uKGNvbmZpZywgZmlsZW5hbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZmlsZW5hbWUuaW5kZXhPZigndGZzcy0nKSA9PT0gMCkge1xuICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9XG4gICAgICAgICAgJ2h0dHA6Ly9maWxlcy5wYXJzZXRmc3MuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICB9IGVsc2UgaWYgKGxlZ2FjeUZpbGVzUmVnZXgudGVzdChmaWxlbmFtZSkpIHtcbiAgICAgICAgZmlsZU9iamVjdFsndXJsJ10gPVxuICAgICAgICAgICdodHRwOi8vZmlsZXMucGFyc2UuY29tLycgKyBjb25maWcuZmlsZUtleSArICcvJyArIGVuY29kZVVSSUNvbXBvbmVudChmaWxlbmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWxlT2JqZWN0Wyd1cmwnXSA9IGF3YWl0IHRoaXMuYWRhcHRlci5nZXRGaWxlTG9jYXRpb24oY29uZmlnLCBmaWxlbmFtZSk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgZXhwZWN0ZWRBZGFwdGVyVHlwZSgpIHtcbiAgICByZXR1cm4gRmlsZXNBZGFwdGVyO1xuICB9XG5cbiAgaGFuZGxlRmlsZVN0cmVhbShjb25maWcsIGZpbGVuYW1lLCByZXEsIHJlcywgY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLmhhbmRsZUZpbGVTdHJlYW0oZmlsZW5hbWUsIHJlcSwgcmVzLCBjb250ZW50VHlwZSk7XG4gIH1cblxuICB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgaWYgKHR5cGVvZiB0aGlzLmFkYXB0ZXIudmFsaWRhdGVGaWxlbmFtZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29uc3QgZXJyb3IgPSB0aGlzLmFkYXB0ZXIudmFsaWRhdGVGaWxlbmFtZShmaWxlbmFtZSk7XG4gICAgICBpZiAodHlwZW9mIGVycm9yICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICB9XG4gICAgICByZXR1cm4gbmV3IFBhcnNlLkVycm9yKFBhcnNlLkVycm9yLklOVkFMSURfRklMRV9OQU1FLCBlcnJvcik7XG4gICAgfVxuICAgIHJldHVybiB2YWxpZGF0ZUZpbGVuYW1lKGZpbGVuYW1lKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlc0NvbnRyb2xsZXI7XG4iXSwibWFwcGluZ3MiOiI7Ozs7OztBQUNBLElBQUFBLFlBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLG9CQUFBLEdBQUFDLHNCQUFBLENBQUFGLE9BQUE7QUFDQSxJQUFBRyxhQUFBLEdBQUFILE9BQUE7QUFBZ0YsU0FBQUUsdUJBQUFFLENBQUEsV0FBQUEsQ0FBQSxJQUFBQSxDQUFBLENBQUFDLFVBQUEsR0FBQUQsQ0FBQSxLQUFBRSxPQUFBLEVBQUFGLENBQUE7QUFIaEY7O0FBSUEsTUFBTUcsS0FBSyxHQUFHUCxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUNPLEtBQUs7QUFDekMsTUFBTUMsS0FBSyxHQUFHUixPQUFPLENBQUMsVUFBVSxDQUFDO0FBRWpDLE1BQU1TLGdCQUFnQixHQUFHLElBQUlDLE1BQU0sQ0FDakMsaUZBQ0YsQ0FBQztBQUVNLE1BQU1DLGVBQWUsU0FBU0MsNEJBQW1CLENBQUM7RUFDdkRDLFdBQVdBLENBQUNDLE1BQU0sRUFBRUMsUUFBUSxFQUFFO0lBQzVCLE9BQU8sSUFBSSxDQUFDQyxPQUFPLENBQUNILFdBQVcsQ0FBQ0UsUUFBUSxDQUFDO0VBQzNDO0VBRUEsTUFBTUUsVUFBVUEsQ0FBQ0gsTUFBTSxFQUFFQyxRQUFRLEVBQUVHLElBQUksRUFB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TCxJQUFJQSxRQUFRLENBQUNnRCxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ25DSCxVQUFVLENBQUMsS0FBSyxDQUFDLEdBQ2YsNkJBQTZCLEdBQUc5QyxNQUFNLENBQUMrQyxPQUFPLEdBQUcsR0FBRyxHQUFHRyxrQkFBa0IsQ0FBQ2pELFFBQVEsQ0FBQztNQUN2RixDQUFDLE1BQU0sSUFBSU4sZ0JBQWdCLENBQUN3RCxJQUFJLENBQUNsRCxRQUFRLENBQUMsRUFBRTtRQUMxQzZDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FDZix5QkFBeUIsR0FBRzlDLE1BQU0sQ0FBQytDLE9BQU8sR0FBRyxHQUFHLEdBQUdHLGtCQUFrQixDQUFDakQsUUFBUSxDQUFDO01BQ25GLENBQUMsTUFBTTtRQUNMNkMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLE1BQU0sSUFBSSxDQUFDNUMsT0FBTyxDQUFDNkIsZUFBZSxDQUFDL0IsTUFBTSxFQUFFQyxRQUFRLENBQUM7TUFDMUU7SUFDRjtFQUNGO0VBRUFtRCxtQkFBbUJBLENBQUEsRUFBRztJQUNwQixPQUFPQywwQkFBWTtFQUNyQjtFQUVBQyxnQkFBZ0JBLENBQUN0RCxNQUFNLEVBQUVDLFFBQVEsRUFBRXNELEdBQUcsRUFBRUMsR0FBRyxFQUFFbkQsV0FBVyxFQUFFO0lBQ3hELE9BQU8sSUFBSSxDQUFDSCxPQUFPLENBQUNvRCxnQkFBZ0IsQ0FBQ3JELFFBQVEsRUFBRXNELEdBQUcsRUFBRUMsR0FBRyxFQUFFbkQsV0FBVyxDQUFDO0VBQ3ZFO0VBRUFvRCxnQkFBZ0JBLENBQUN4RCxRQUFRLEVBQUU7SUFDekIsSUFBSSxPQUFPLElBQUksQ0FBQ0MsT0FBTyxDQUFDdUQsZ0JBQWdCLEtBQUssVUFBVSxFQUFFO01BQ3ZELE1BQU1DLEtBQUssR0FBRyxJQUFJLENBQUN4RCxPQUFPLENBQUN1RCxnQkFBZ0IsQ0FBQ3hELFFBQVEsQ0FBQztNQUNyRCxJQUFJLE9BQU95RCxLQUFLLEtBQUssUUFBUSxFQUFFO1FBQzdCLE9BQU9BLEtBQUs7TUFDZDtNQUNBLE9BQU8sSUFBSWpFLEtBQUssQ0FBQ2tFLEtBQUssQ0FBQ2xFLEtBQUssQ0FBQ2tFLEtBQUssQ0FBQ0MsaUJBQWlCLEVBQUVGLEtBQUssQ0FBQztJQUM5RDtJQUNBLE9BQU8sSUFBQUQsOEJBQWdCLEVBQUN4RCxRQUFRLENBQUM7RUFDbkM7QUFDRjtBQUFDNEQsT0FBQSxDQUFBaEUsZUFBQSxHQUFBQSxlQUFBO0FBQUEsSUFBQWlFLFFBQUEsR0FBQUQsT0FBQSxDQUFBckUsT0FBQSxHQUVjSyxlQUFlIiwiaWdub3JlTGlzdCI6W119