@alicloud/ros-cdk-assert 1.6.0 → 1.8.0

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.
@@ -93,7 +93,6 @@ class StackMatchesTemplateAssertion extends assertion_1.Assertion {
93
93
  }
94
94
  return true;
95
95
  case MatchStyle.REGEXP:
96
- let acceptable = true;
97
96
  let diffMap = this.diff.toMap();
98
97
  let keysToDelete = [];
99
98
  for (const key in diffMap) {
@@ -106,17 +105,20 @@ class StackMatchesTemplateAssertion extends assertion_1.Assertion {
106
105
  if (compareVariablesWithRegExp(value.oldValue, value.newValue)) {
107
106
  keysToDelete.push(key);
108
107
  }
109
- else {
110
- acceptable = false;
111
- }
112
108
  }
113
109
  else if (typeof value === 'object' && !Array.isArray(value)) {
114
110
  for (const subKey in value) {
111
+ if (`${key}.${subKey}` in keysToDelete) {
112
+ continue;
113
+ }
115
114
  if (compareVariablesWithRegExp(value[subKey].oldValue, value[subKey].newValue)) {
116
115
  keysToDelete.push(key + '.' + subKey);
117
116
  }
118
117
  else {
119
118
  for (const otherSubKey in value) {
119
+ if (`${key}.${otherSubKey}` in keysToDelete) {
120
+ continue;
121
+ }
120
122
  const regex = new RegExp(subKey);
121
123
  if (otherSubKey === subKey || !regex.test(otherSubKey)) {
122
124
  continue;
@@ -127,9 +129,6 @@ class StackMatchesTemplateAssertion extends assertion_1.Assertion {
127
129
  keysToDelete.push(key + '.' + otherSubKey);
128
130
  break;
129
131
  }
130
- else {
131
- acceptable = false;
132
- }
133
132
  }
134
133
  }
135
134
  }
@@ -148,7 +147,7 @@ class StackMatchesTemplateAssertion extends assertion_1.Assertion {
148
147
  }
149
148
  }
150
149
  this.diff = rosDiff.TemplateDiff.fromMap(diffMap);
151
- return acceptable;
150
+ return this.diff.differenceCount === 0;
152
151
  }
153
152
  throw new Error(`Unsupported match style: ${this.matchStyle}`);
154
153
  }
@@ -157,6 +156,9 @@ class StackMatchesTemplateAssertion extends assertion_1.Assertion {
157
156
  }
158
157
  }
159
158
  function compareVariablesWithRegExp(var1, var2) {
159
+ if (var1 === undefined || var2 === undefined) {
160
+ return false;
161
+ }
160
162
  if (typeof var1 !== typeof var2) {
161
163
  return false;
162
164
  }
@@ -200,4 +202,4 @@ function compareVariablesWithRegExp(var1, var2) {
200
202
  }
201
203
  return false;
202
204
  }
203
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXRjaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBMkQ7QUFDM0QsNENBQXVDO0FBRXZDLHNDQUFzQztBQUV0QyxJQUFZLFVBU1g7QUFURCxXQUFZLFVBQVU7SUFDcEIsOEJBQThCO0lBQzlCLCtCQUFpQixDQUFBO0lBQ2pCLG1FQUFtRTtJQUNuRSx5Q0FBMkIsQ0FBQTtJQUMzQix1Q0FBdUM7SUFDdkMsbUNBQXFCLENBQUE7SUFDckIsa0RBQWtEO0lBQ2xELCtCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFUVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQVNyQjtBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0M7SUFDcEUsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRkQsc0RBRUM7QUFFRCxTQUFnQixhQUFhLENBQzNCLFFBQWdDLEVBQ2hDLGFBQXlCLFVBQVUsQ0FBQyxLQUFLO0lBRXpDLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUxELHNDQUtDO0FBRUQsTUFBTSw2QkFBOEIsU0FBUSxxQkFBeUI7SUFFbkUsWUFBNkIsUUFBZ0MsRUFBbUIsVUFBc0I7UUFDcEcsS0FBSyxFQUFFLENBQUM7UUFEbUIsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFBbUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUV0RyxDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQXlCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFD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QUNyRCxPQUFPLEtBQUssQ0FBQztpQkFDZDthQUNGO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBRUQsT0FBTyxLQUFLLENBQUM7QUFDZixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcm9zRGlmZiBmcm9tICdAYWxpY2xvdWQvcm9zLWNkay10ZW1wbGF0ZS1kaWZmJztcbmltcG9ydCB7QXNzZXJ0aW9ufSBmcm9tICcuLi9hc3NlcnRpb24nO1xuaW1wb3J0IHtTdGFja0luc3BlY3Rvcn0gZnJvbSAnLi4vaW5zcGVjdG9yJztcbmltcG9ydCAqIGFzIGNvbG9ycyBmcm9tICdjb2xvcnMvc2FmZSc7XG5cbmV4cG9ydCBlbnVtIE1hdGNoU3R5bGUge1xuICAvKiogUmVxdWlyZXMgYW4gZXhhY3QgbWF0Y2ggKi9cbiAgRVhBQ1QgPSAnZXhhY3RseScsXG4gIC8qKiBBbGxvd3MgYW55IGNoYW5nZSB0aGF0IGRvZXMgbm90IGNhdXNlIGEgcmVzb3VyY2UgcmVwbGFjZW1lbnQgKi9cbiAgTk9fUkVQTEFDRVMgPSAnbm8gcmVwbGFjZXMnLFxuICAvKiogQWxsb3dzIGFkZGl0aW9ucywgYnV0IG5vIHVwZGF0ZXMgKi9cbiAgU1VQRVJTRVQgPSAnc3VwZXJzZXQnLFxuICAvKiogQWxsb3dzIHJlZ3VsYXIgZXhwcmVzc2lvbnMgdG8gbWF0Y2ggc3RyaW5ncyAqL1xuICBSRUdFWFAgPSAncmVnZXhwJyxcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGV4YWN0bHlNYXRjaFRlbXBsYXRlKHRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIHJldHVybiBtYXRjaFRlbXBsYXRlKHRlbXBsYXRlLCBNYXRjaFN0eWxlLkVYQUNUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJlQVN1cGVyc2V0T2ZUZW1wbGF0ZSh0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSkge1xuICByZXR1cm4gbWF0Y2hUZW1wbGF0ZSh0ZW1wbGF0ZSwgTWF0Y2hTdHlsZS5TVVBFUlNFVCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtYXRjaFRlbXBsYXRlKFxuICB0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSxcbiAgbWF0Y2hTdHlsZTogTWF0Y2hTdHlsZSA9IE1hdGNoU3R5bGUuRVhBQ1QsXG4pOiBBc3NlcnRpb248U3RhY2tJbnNwZWN0b3I+IHtcbiAgcmV0dXJuIG5ldyBTdGFja01hdGNoZXNUZW1wbGF0ZUFzc2VydGlvbih0ZW1wbGF0ZSwgbWF0Y2hTdHlsZSk7XG59XG5cbmNsYXNzIFN0YWNrTWF0Y2hlc1RlbXBsYXRlQXNzZXJ0aW9uIGV4dGVuZHMgQXNzZXJ0aW9uPFN0YWNrSW5zcGVjdG9yPiB7XG4gIHB1YmxpYyBkaWZmPzogcm9zRGlmZi5UZW1wbGF0ZURpZmY7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgdGVtcGxhdGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByaXZhdGUgcmVhZG9ubHkgbWF0Y2hTdHlsZTogTWF0Y2hTdHlsZSkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0T3JUaHJvdyhpbnNwZWN0b3I6IFN0YWNrSW5zcGVjdG9yKSB7XG4gICAgaWYgKCF0aGlzLmFzc2VydFVzaW5nKGluc3BlY3RvcikpIHtcbiAgICAgIC8vIFRoZSBkZXRhaWxzIGhhdmUgYWxyZWFkeSBiZWVuIHByaW50ZWQsIHNvIGRvbid0IGdlbmVyYXRlIGEgaHVnZSBlcnJvciBtZXNzYWdlXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RlbXBsYXRlIGNvbXBhcmlzb24gcHJvZHVjZWQgdW5hY2NlcHRhYmxlIG1hdGNoJyk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGFzc2VydFVzaW5nKGluc3BlY3RvcjogU3RhY2tJbnNwZWN0b3IpOiBib29sZWFuIHtcbiAgICB0aGlzLmRpZmYgPSByb3NEaWZmLmRpZmZUZW1wbGF0ZSh0aGlzLnRlbXBsYXRlLCBpbnNwZWN0b3IudmFsdWUpO1xuICAgIGNvbnN0IGFjY2VwdGFibGUgPSB0aGlzLmlzRGlmZkFjY2VwdGFibGUoKTtcbiAgICBpZiAoIWFjY2VwdGFibGUpIHtcbiAgICAgIC8vIFByaW50IHRoZSBkaWZmXG4gICAgICByb3NEaWZmLmZvcm1hdERpZmZlcmVuY2VzKHByb2Nlc3Muc3RkZXJyLCB0aGlzLmRpZmYpO1xuXG4gICAgICAvLyBQcmludCB0aGUgYWN0dWFsIHRlbXBsYXRlXG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShjb2xvcnMucmFpbmJvdygnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXG4nKSk7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShjb2xvcnMud2hpdGUoKEpTT04uc3RyaW5naWZ5KGluc3BlY3Rvci52YWx1ZSwgdW5kZWZpbmVkLCAyKSArICdcXG4nKSkpO1xuICAgIH1cblxuICAgIHJldHVybiBhY2NlcHRhYmxlO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0RpZmZBY2NlcHRhYmxlKCk6IGJvb2xlYW4ge1xuICAgIHN3aXRjaCAodGhpcy5tYXRjaFN0eWxlKSB7XG4gICAgICBjYXNlIE1hdGNoU3R5bGUuRVhBQ1Q6XG4gICAgICAgIHJldHVybiB0aGlzLmRpZmYhLmRpZmZlcmVuY2VDb3VudCA9PT0gMDtcbiAgICAgIGNhc2UgTWF0Y2hTdHlsZS5OT19SRVBMQUNFUzpcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRpZmYhLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgICAgIGlmIChjaGFuZ2UuY2hhbmdlSW1wYWN0ID09PSByb3NEaWZmLlJlc291cmNlSW1wYWN0Lk1BWV9SRVBMQUNFKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGFuZ2UuY2hhbmdlSW1wYWN0ID09PSByb3NEaWZmLlJlc291cmNlSW1wYWN0LldJTExfUkVQTEFDRSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIE9iamVjdC52YWx1ZXModGhpcy5kaWZmIS5wYXJhbWV0ZXJzLmNoYW5nZXMpKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5pc1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIE9iamVjdC52YWx1ZXModGhpcy5kaWZmIS5vdXRwdXRzLmNoYW5nZXMpKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5pc1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgTWF0Y2hTdHlsZS5TVVBFUlNFVDpcbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRpZmYhLnJlc291cmNlcy5jaGFuZ2VzKSkge1xuICAgICAgICAgIGlmIChjaGFuZ2UuY2hhbmdlSW1wYWN0ICE9PSByb3NEaWZmLlJlc291cmNlSW1wYWN0LldJTExfQ1JFQVRFKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRpZmYhLnBhcmFtZXRlcnMuY2hhbmdlcykpIHtcbiAgICAgICAgICBpZiAoY2hhbmdlLmlzQWRkaXRpb24pIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGlmZiEub3V0cHV0cy5jaGFuZ2VzKSkge1xuICAgICAgICAgIGlmIChjaGFuZ2UuaXNBZGRpdGlvbiB8fCBjaGFuZ2UuaXNVcGRhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIGNhc2UgTWF0Y2hTdHlsZS5SRUdFWFA6XG4gICAgICAgIGxldCBhY2NlcHRhYmxlID0gdHJ1ZTtcbiAgICAgICAgbGV0IGRpZmZNYXAgPSB0aGlzLmRpZmYhLnRvTWFwKCk7XG4gICAgICAgIGxldCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmZNYXApIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpZmZNYXBba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAga2V5c1RvRGVsZXRlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocm9zRGlmZi5pc0RpZmZlcmVuY2VJbnN0YW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YWx1ZS5vbGRWYWx1ZSwgdmFsdWUubmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgIGtleXNUb0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBhY2NlcHRhYmxlID0gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJLZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGNvbXBhcmVWYXJpYWJsZXNXaXRoUmVnRXhwKHZhbHVlW3N1YktleV0ub2xkVmFsdWUsIHZhbHVlW3N1YktleV0ubmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAga2V5c1RvRGVsZXRlLnB1c2goa2V5ICsgJy4nICsgc3ViS2V5KTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG90aGVyU3ViS2V5IGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc3ViS2V5KTtcbiAgICAgICAgICAgICAgICAgIGlmIChvdGhlclN1YktleSA9PT0gc3ViS2V5IHx8ICFyZWdleC50ZXN0KG90aGVyU3ViS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YWx1ZVtzdWJLZXldLm9sZFZhbHVlLCB2YWx1ZVtvdGhlclN1YktleV0ubmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgfHwgY29tcGFyZVZhcmlhYmxlc1dpdGhSZWdFeHAodmFsdWVbb3RoZXJTdWJLZXldLm9sZFZhbHVlLCB2YWx1ZVtzdWJLZXldLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkgKyAnLicgKyBzdWJLZXkpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkgKyAnLicgKyBvdGhlclN1YktleSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYWNjZXB0YWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzVG9EZWxldGUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkaWZmTWFwW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkaWZmTWFwW2tleXNbMF1dW2tleXNbMV1dO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRpZmZNYXBba2V5c1swXV0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBkZWxldGUgZGlmZk1hcFtrZXlzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaWZmID0gcm9zRGlmZi5UZW1wbGF0ZURpZmYuZnJvbU1hcChkaWZmTWFwKTtcbiAgICAgICAgcmV0dXJuIGFjY2VwdGFibGU7XG4gICAgfVxuICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgbWF0Y2ggc3R5bGU6ICR7dGhpcy5tYXRjaFN0eWxlfWApO1xuICB9XG5cbiAgcHVibGljIGdldCBkZXNjcmlwdGlvbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBgdGVtcGxhdGUgKCR7dGhpcy5tYXRjaFN0eWxlfSk6ICR7SlNPTi5zdHJpbmdpZnkodGhpcy50ZW1wbGF0ZSwgbnVsbCwgMil9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YXIxOiBhbnksIHZhcjI6IGFueSk6IGJvb2xlYW4ge1xuICBpZiAodHlwZW9mIHZhcjEgIT09IHR5cGVvZiB2YXIyKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YXIxID09PSAnc3RyaW5nJyAmJiB0eXBlb2YgdmFyMiA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodmFyMSAhPT0gdmFyMikge1xuICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKHZhcjEpO1xuICAgICAgcmV0dXJuIHJlZ2V4LnRlc3QodmFyMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyMSAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIHZhcjIgIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIHZhcjEgPT09IHZhcjI7XG4gIH1cblxuICBpZiAodHlwZW9mIHZhcjEgPT09ICdvYmplY3QnICYmIHR5cGVvZiB2YXIyID09PSAnb2JqZWN0Jykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhcjEpICYmIEFycmF5LmlzQXJyYXkodmFyMikpIHtcbiAgICAgIGlmICh2YXIxLmxlbmd0aCAhPT0gdmFyMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YXIxLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghY29tcGFyZVZhcmlhYmxlc1dpdGhSZWdFeHAodmFyMVtpXSwgdmFyMltpXSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBrZXlzMSA9IE9iamVjdC5rZXlzKHZhcjEpO1xuICAgICAgY29uc3Qga2V5czIgPSBPYmplY3Qua2V5cyh2YXIyKTtcbiAgICAgIGlmIChrZXlzMS5sZW5ndGggIT09IGtleXMyLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzMSkge1xuICAgICAgICBpZiAoIWNvbXBhcmVWYXJpYWJsZXNXaXRoUmVnRXhwKHZhcjFba2V5XSwgdmFyMltrZXldKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuIl19
205
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0Y2gtdGVtcGxhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJtYXRjaC10ZW1wbGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwyREFBMkQ7QUFDM0QsNENBQXVDO0FBRXZDLHNDQUFzQztBQUV0QyxJQUFZLFVBU1g7QUFURCxXQUFZLFVBQVU7SUFDcEIsOEJBQThCO0lBQzlCLCtCQUFpQixDQUFBO0lBQ2pCLG1FQUFtRTtJQUNuRSx5Q0FBMkIsQ0FBQTtJQUMzQix1Q0FBdUM7SUFDdkMsbUNBQXFCLENBQUE7SUFDckIsa0RBQWtEO0lBQ2xELCtCQUFpQixDQUFBO0FBQ25CLENBQUMsRUFUVyxVQUFVLEdBQVYsa0JBQVUsS0FBVixrQkFBVSxRQVNyQjtBQUVELFNBQWdCLG9CQUFvQixDQUFDLFFBQWdDO0lBQ25FLE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUZELG9EQUVDO0FBRUQsU0FBZ0IscUJBQXFCLENBQUMsUUFBZ0M7SUFDcEUsT0FBTyxhQUFhLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RCxDQUFDO0FBRkQsc0RBRUM7QUFFRCxTQUFnQixhQUFhLENBQzNCLFFBQWdDLEVBQ2hDLGFBQXlCLFVBQVUsQ0FBQyxLQUFLO0lBRXpDLE9BQU8sSUFBSSw2QkFBNkIsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUxELHNDQUtDO0FBRUQsTUFBTSw2QkFBOEIsU0FBUSxxQkFBeUI7SUFFbkUsWUFBNkIsUUFBZ0MsRUFBbUIsVUFBc0I7UUFDcEcsS0FBSyxFQUFFLENBQUM7UUFEbUIsYUFBUSxHQUFSLFFBQVEsQ0FBd0I7UUFBbUIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtJQUV0RyxDQUFDO0lBRU0sYUFBYSxDQUFDLFNBQXlCO1FBQzVDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFD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QUssQ0FBQzthQUNkO1lBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3ZCLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JELE9BQU8sS0FBSyxDQUFDO2lCQUNkO2FBQ0Y7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNiO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyByb3NEaWZmIGZyb20gJ0BhbGljbG91ZC9yb3MtY2RrLXRlbXBsYXRlLWRpZmYnO1xuaW1wb3J0IHtBc3NlcnRpb259IGZyb20gJy4uL2Fzc2VydGlvbic7XG5pbXBvcnQge1N0YWNrSW5zcGVjdG9yfSBmcm9tICcuLi9pbnNwZWN0b3InO1xuaW1wb3J0ICogYXMgY29sb3JzIGZyb20gJ2NvbG9ycy9zYWZlJztcblxuZXhwb3J0IGVudW0gTWF0Y2hTdHlsZSB7XG4gIC8qKiBSZXF1aXJlcyBhbiBleGFjdCBtYXRjaCAqL1xuICBFWEFDVCA9ICdleGFjdGx5JyxcbiAgLyoqIEFsbG93cyBhbnkgY2hhbmdlIHRoYXQgZG9lcyBub3QgY2F1c2UgYSByZXNvdXJjZSByZXBsYWNlbWVudCAqL1xuICBOT19SRVBMQUNFUyA9ICdubyByZXBsYWNlcycsXG4gIC8qKiBBbGxvd3MgYWRkaXRpb25zLCBidXQgbm8gdXBkYXRlcyAqL1xuICBTVVBFUlNFVCA9ICdzdXBlcnNldCcsXG4gIC8qKiBBbGxvd3MgcmVndWxhciBleHByZXNzaW9ucyB0byBtYXRjaCBzdHJpbmdzICovXG4gIFJFR0VYUCA9ICdyZWdleHAnLFxufVxuXG5leHBvcnQgZnVuY3Rpb24gZXhhY3RseU1hdGNoVGVtcGxhdGUodGVtcGxhdGU6IHsgW2tleTogc3RyaW5nXTogYW55IH0pIHtcbiAgcmV0dXJuIG1hdGNoVGVtcGxhdGUodGVtcGxhdGUsIE1hdGNoU3R5bGUuRVhBQ1QpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmVBU3VwZXJzZXRPZlRlbXBsYXRlKHRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9KSB7XG4gIHJldHVybiBtYXRjaFRlbXBsYXRlKHRlbXBsYXRlLCBNYXRjaFN0eWxlLlNVUEVSU0VUKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hdGNoVGVtcGxhdGUoXG4gIHRlbXBsYXRlOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LFxuICBtYXRjaFN0eWxlOiBNYXRjaFN0eWxlID0gTWF0Y2hTdHlsZS5FWEFDVCxcbik6IEFzc2VydGlvbjxTdGFja0luc3BlY3Rvcj4ge1xuICByZXR1cm4gbmV3IFN0YWNrTWF0Y2hlc1RlbXBsYXRlQXNzZXJ0aW9uKHRlbXBsYXRlLCBtYXRjaFN0eWxlKTtcbn1cblxuY2xhc3MgU3RhY2tNYXRjaGVzVGVtcGxhdGVBc3NlcnRpb24gZXh0ZW5kcyBBc3NlcnRpb248U3RhY2tJbnNwZWN0b3I+IHtcbiAgcHVibGljIGRpZmY/OiByb3NEaWZmLlRlbXBsYXRlRGlmZjtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSB0ZW1wbGF0ZTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgcHJpdmF0ZSByZWFkb25seSBtYXRjaFN0eWxlOiBNYXRjaFN0eWxlKSB7XG4gICAgc3VwZXIoKTtcbiAgfVxuXG4gIHB1YmxpYyBhc3NlcnRPclRocm93KGluc3BlY3RvcjogU3RhY2tJbnNwZWN0b3IpIHtcbiAgICBpZiAoIXRoaXMuYXNzZXJ0VXNpbmcoaW5zcGVjdG9yKSkge1xuICAgICAgLy8gVGhlIGRldGFpbHMgaGF2ZSBhbHJlYWR5IGJlZW4gcHJpbnRlZCwgc28gZG9uJ3QgZ2VuZXJhdGUgYSBodWdlIGVycm9yIG1lc3NhZ2VcbiAgICAgIHRocm93IG5ldyBFcnJvcignVGVtcGxhdGUgY29tcGFyaXNvbiBwcm9kdWNlZCB1bmFjY2VwdGFibGUgbWF0Y2gnKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYXNzZXJ0VXNpbmcoaW5zcGVjdG9yOiBTdGFja0luc3BlY3Rvcik6IGJvb2xlYW4ge1xuICAgIHRoaXMuZGlmZiA9IHJvc0RpZmYuZGlmZlRlbXBsYXRlKHRoaXMudGVtcGxhdGUsIGluc3BlY3Rvci52YWx1ZSk7XG4gICAgY29uc3QgYWNjZXB0YWJsZSA9IHRoaXMuaXNEaWZmQWNjZXB0YWJsZSgpO1xuICAgIGlmICghYWNjZXB0YWJsZSkge1xuICAgICAgLy8gUHJpbnQgdGhlIGRpZmZcbiAgICAgIHJvc0RpZmYuZm9ybWF0RGlmZmVyZW5jZXMocHJvY2Vzcy5zdGRlcnIsIHRoaXMuZGlmZik7XG5cbiAgICAgIC8vIFByaW50IHRoZSBhY3R1YWwgdGVtcGxhdGVcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGNvbG9ycy5yYWluYm93KCctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbicpKTtcbiAgICAgIHByb2Nlc3Muc3RkZXJyLndyaXRlKGNvbG9ycy53aGl0ZSgoSlNPTi5zdHJpbmdpZnkoaW5zcGVjdG9yLnZhbHVlLCB1bmRlZmluZWQsIDIpICsgJ1xcbicpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGFjY2VwdGFibGU7XG4gIH1cblxuICBwcml2YXRlIGlzRGlmZkFjY2VwdGFibGUoKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoICh0aGlzLm1hdGNoU3R5bGUpIHtcbiAgICAgIGNhc2UgTWF0Y2hTdHlsZS5FWEFDVDpcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlmZiEuZGlmZmVyZW5jZUNvdW50ID09PSAwO1xuICAgICAgY2FzZSBNYXRjaFN0eWxlLk5PX1JFUExBQ0VTOlxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGlmZiEucmVzb3VyY2VzLmNoYW5nZXMpKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgPT09IHJvc0RpZmYuUmVzb3VyY2VJbXBhY3QuTUFZX1JFUExBQ0UpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgPT09IHJvc0RpZmYuUmVzb3VyY2VJbXBhY3QuV0lMTF9SRVBMQUNFKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRpZmYhLnBhcmFtZXRlcnMuY2hhbmdlcykpIHtcbiAgICAgICAgICBpZiAoY2hhbmdlLmlzVXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZm9yIChjb25zdCBjaGFuZ2Ugb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmRpZmYhLm91dHB1dHMuY2hhbmdlcykpIHtcbiAgICAgICAgICBpZiAoY2hhbmdlLmlzVXBkYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBNYXRjaFN0eWxlLlNVUEVSU0VUOlxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGlmZiEucmVzb3VyY2VzLmNoYW5nZXMpKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5jaGFuZ2VJbXBhY3QgIT09IHJvc0RpZmYuUmVzb3VyY2VJbXBhY3QuV0lMTF9DUkVBVEUpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKGNvbnN0IGNoYW5nZSBvZiBPYmplY3QudmFsdWVzKHRoaXMuZGlmZiEucGFyYW1ldGVycy5jaGFuZ2VzKSkge1xuICAgICAgICAgIGlmIChjaGFuZ2UuaXNBZGRpdGlvbikge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgY2hhbmdlIG9mIE9iamVjdC52YWx1ZXModGhpcy5kaWZmIS5vdXRwdXRzLmNoYW5nZXMpKSB7XG4gICAgICAgICAgaWYgKGNoYW5nZS5pc0FkZGl0aW9uIHx8IGNoYW5nZS5pc1VwZGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgY2FzZSBNYXRjaFN0eWxlLlJFR0VYUDpcbiAgICAgICAgbGV0IGRpZmZNYXAgPSB0aGlzLmRpZmYhLnRvTWFwKCk7XG4gICAgICAgIGxldCBrZXlzVG9EZWxldGU6IHN0cmluZ1tdID0gW107XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGRpZmZNYXApIHtcbiAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRpZmZNYXBba2V5XTtcbiAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCB8fCAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cyh2YWx1ZSkubGVuZ3RoID09PSAwKSkge1xuICAgICAgICAgICAga2V5c1RvRGVsZXRlLnB1c2goa2V5KTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAocm9zRGlmZi5pc0RpZmZlcmVuY2VJbnN0YW5jZSh2YWx1ZSkpIHtcbiAgICAgICAgICAgIGlmIChjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YWx1ZS5vbGRWYWx1ZSwgdmFsdWUubmV3VmFsdWUpKSB7XG4gICAgICAgICAgICAgIGtleXNUb0RlbGV0ZS5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWJLZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgaWYgKGAke2tleX0uJHtzdWJLZXl9YCBpbiBrZXlzVG9EZWxldGUpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoY29tcGFyZVZhcmlhYmxlc1dpdGhSZWdFeHAodmFsdWVbc3ViS2V5XS5vbGRWYWx1ZSwgdmFsdWVbc3ViS2V5XS5uZXdWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkgKyAnLicgKyBzdWJLZXkpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3Qgb3RoZXJTdWJLZXkgaW4gdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIGlmIChgJHtrZXl9LiR7b3RoZXJTdWJLZXl9YCBpbiBrZXlzVG9EZWxldGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBjb25zdCByZWdleCA9IG5ldyBSZWdFeHAoc3ViS2V5KTtcbiAgICAgICAgICAgICAgICAgIGlmIChvdGhlclN1YktleSA9PT0gc3ViS2V5IHx8ICFyZWdleC50ZXN0KG90aGVyU3ViS2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIGlmIChjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YWx1ZVtzdWJLZXldLm9sZFZhbHVlLCB2YWx1ZVtvdGhlclN1YktleV0ubmV3VmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgfHwgY29tcGFyZVZhcmlhYmxlc1dpdGhSZWdFeHAodmFsdWVbb3RoZXJTdWJLZXldLm9sZFZhbHVlLCB2YWx1ZVtzdWJLZXldLm5ld1ZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkgKyAnLicgKyBzdWJLZXkpO1xuICAgICAgICAgICAgICAgICAgICBrZXlzVG9EZWxldGUucHVzaChrZXkgKyAnLicgKyBvdGhlclN1YktleSk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBrZXlzVG9EZWxldGUpIHtcbiAgICAgICAgICBjb25zdCBrZXlzID0ga2V5LnNwbGl0KCcuJyk7XG4gICAgICAgICAgaWYgKGtleXMubGVuZ3RoID09IDEpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkaWZmTWFwW2tleV07XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGRlbGV0ZSBkaWZmTWFwW2tleXNbMF1dW2tleXNbMV1dO1xuICAgICAgICAgICAgaWYgKE9iamVjdC5rZXlzKGRpZmZNYXBba2V5c1swXV0pLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICBkZWxldGUgZGlmZk1hcFtrZXlzWzBdXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5kaWZmID0gcm9zRGlmZi5UZW1wbGF0ZURpZmYuZnJvbU1hcChkaWZmTWFwKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZGlmZiEuZGlmZmVyZW5jZUNvdW50ID09PSAwO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIG1hdGNoIHN0eWxlOiAke3RoaXMubWF0Y2hTdHlsZX1gKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZGVzY3JpcHRpb24oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYHRlbXBsYXRlICgke3RoaXMubWF0Y2hTdHlsZX0pOiAke0pTT04uc3RyaW5naWZ5KHRoaXMudGVtcGxhdGUsIG51bGwsIDIpfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gY29tcGFyZVZhcmlhYmxlc1dpdGhSZWdFeHAodmFyMTogYW55LCB2YXIyOiBhbnkpOiBib29sZWFuIHtcbiAgaWYgKHZhcjEgPT09IHVuZGVmaW5lZCB8fCB2YXIyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHR5cGVvZiB2YXIxICE9PSB0eXBlb2YgdmFyMikge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgdmFyMSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHZhcjIgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHZhcjEgIT09IHZhcjIpIHtcbiAgICAgIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCh2YXIxKTtcbiAgICAgIHJldHVybiByZWdleC50ZXN0KHZhcjIpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIHZhcjEgIT09ICdvYmplY3QnICYmIHR5cGVvZiB2YXIyICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB2YXIxID09PSB2YXIyO1xuICB9XG5cbiAgaWYgKHR5cGVvZiB2YXIxID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgdmFyMiA9PT0gJ29iamVjdCcpIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YXIxKSAmJiBBcnJheS5pc0FycmF5KHZhcjIpKSB7XG4gICAgICBpZiAodmFyMS5sZW5ndGggIT09IHZhcjIubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFyMS5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWNvbXBhcmVWYXJpYWJsZXNXaXRoUmVnRXhwKHZhcjFbaV0sIHZhcjJbaV0pKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qga2V5czEgPSBPYmplY3Qua2V5cyh2YXIxKTtcbiAgICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXModmFyMik7XG4gICAgICBpZiAoa2V5czEubGVuZ3RoICE9PSBrZXlzMi5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgZm9yIChjb25zdCBrZXkgb2Yga2V5czEpIHtcbiAgICAgICAgaWYgKCFjb21wYXJlVmFyaWFibGVzV2l0aFJlZ0V4cCh2YXIxW2tleV0sIHZhcjJba2V5XSkpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cbiJdfQ==
@@ -104,7 +104,6 @@ class StackMatchesTemplateAssertion extends Assertion<StackInspector> {
104
104
 
105
105
  return true;
106
106
  case MatchStyle.REGEXP:
107
- let acceptable = true;
108
107
  let diffMap = this.diff!.toMap();
109
108
  let keysToDelete: string[] = [];
110
109
  for (const key in diffMap) {
@@ -116,15 +115,19 @@ class StackMatchesTemplateAssertion extends Assertion<StackInspector> {
116
115
  if (rosDiff.isDifferenceInstance(value)) {
117
116
  if (compareVariablesWithRegExp(value.oldValue, value.newValue)) {
118
117
  keysToDelete.push(key);
119
- } else {
120
- acceptable = false;
121
118
  }
122
119
  } else if (typeof value === 'object' && !Array.isArray(value)) {
123
120
  for (const subKey in value) {
121
+ if (`${key}.${subKey}` in keysToDelete) {
122
+ continue;
123
+ }
124
124
  if (compareVariablesWithRegExp(value[subKey].oldValue, value[subKey].newValue)) {
125
125
  keysToDelete.push(key + '.' + subKey);
126
126
  } else {
127
127
  for (const otherSubKey in value) {
128
+ if (`${key}.${otherSubKey}` in keysToDelete) {
129
+ continue;
130
+ }
128
131
  const regex = new RegExp(subKey);
129
132
  if (otherSubKey === subKey || !regex.test(otherSubKey)) {
130
133
  continue;
@@ -134,8 +137,6 @@ class StackMatchesTemplateAssertion extends Assertion<StackInspector> {
134
137
  keysToDelete.push(key + '.' + subKey);
135
138
  keysToDelete.push(key + '.' + otherSubKey);
136
139
  break;
137
- } else {
138
- acceptable = false;
139
140
  }
140
141
  }
141
142
  }
@@ -154,7 +155,7 @@ class StackMatchesTemplateAssertion extends Assertion<StackInspector> {
154
155
  }
155
156
  }
156
157
  this.diff = rosDiff.TemplateDiff.fromMap(diffMap);
157
- return acceptable;
158
+ return this.diff!.differenceCount === 0;
158
159
  }
159
160
  throw new Error(`Unsupported match style: ${this.matchStyle}`);
160
161
  }
@@ -165,6 +166,9 @@ class StackMatchesTemplateAssertion extends Assertion<StackInspector> {
165
166
  }
166
167
 
167
168
  function compareVariablesWithRegExp(var1: any, var2: any): boolean {
169
+ if (var1 === undefined || var2 === undefined) {
170
+ return false;
171
+ }
168
172
  if (typeof var1 !== typeof var2) {
169
173
  return false;
170
174
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alicloud/ros-cdk-assert",
3
- "version": "1.6.0",
3
+ "version": "1.8.0",
4
4
  "description": "Aliyun SDK Copyright (C) Alibaba Cloud Computing All rights reserved. http://www.aliyun.com",
5
5
  "author": "ROS Development Team",
6
6
  "license": "Apache-2.0",
@@ -27,9 +27,9 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "colors": "^1.4.0",
30
- "@alicloud/ros-cdk-core": "^1.6.0",
31
- "@alicloud/ros-cdk-assembly-schema": "^1.6.0",
32
- "@alicloud/ros-cdk-cxapi": "^1.6.0",
33
- "@alicloud/ros-cdk-template-diff": "^1.6.0"
30
+ "@alicloud/ros-cdk-core": "^1.8.0",
31
+ "@alicloud/ros-cdk-assembly-schema": "^1.8.0",
32
+ "@alicloud/ros-cdk-cxapi": "^1.8.0",
33
+ "@alicloud/ros-cdk-template-diff": "^1.8.0"
34
34
  }
35
35
  }