@mnaoumov/typescript-dev-toolkit 5.3.0 → 5.4.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.
|
@@ -65,17 +65,24 @@ var import_utils = require('@typescript-eslint/utils');
|
|
|
65
65
|
var import_import_fix = require('./import-fix.cjs');
|
|
66
66
|
var import_ts_estree_node = require('./ts-estree-node.cjs');
|
|
67
67
|
const DEDENT_MODULE = "dedent";
|
|
68
|
+
const FUNCTION_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
69
|
+
import_utils.AST_NODE_TYPES.ArrowFunctionExpression,
|
|
70
|
+
import_utils.AST_NODE_TYPES.FunctionDeclaration,
|
|
71
|
+
import_utils.AST_NODE_TYPES.FunctionExpression
|
|
72
|
+
]);
|
|
68
73
|
const INDENT = " ";
|
|
69
74
|
const LINE_BREAK_SEPARATORS = /* @__PURE__ */ new Set(["\n", "\r\n"]);
|
|
70
75
|
const MINIMUM_ELEMENTS_WITH_A_LINE_BREAK = 2;
|
|
71
76
|
const MESSAGE_ID = "preferDedent";
|
|
72
77
|
const preferDedent = {
|
|
73
78
|
create(context) {
|
|
79
|
+
const options = context.options[0] ?? {};
|
|
80
|
+
const ignoredCalleeNames = new Set(options.ignoreInsideCallsTo);
|
|
74
81
|
return {
|
|
75
82
|
"CallExpression"(node) {
|
|
76
83
|
const callNode = (0, import_ts_estree_node.toTSESTreeNode)(node);
|
|
77
84
|
const joined = getJoinedStringElements(callNode);
|
|
78
|
-
if (!joined) {
|
|
85
|
+
if (!joined || isInsideIgnoredCallback(callNode, ignoredCalleeNames)) {
|
|
79
86
|
return;
|
|
80
87
|
}
|
|
81
88
|
context.report({
|
|
@@ -120,7 +127,19 @@ ${lineIndent}\``));
|
|
|
120
127
|
messages: {
|
|
121
128
|
[MESSAGE_ID]: "Write this multiline string as a `dedent` template instead of joining an array of string literals with a newline."
|
|
122
129
|
},
|
|
123
|
-
schema: [
|
|
130
|
+
schema: [
|
|
131
|
+
{
|
|
132
|
+
additionalProperties: false,
|
|
133
|
+
properties: {
|
|
134
|
+
ignoreInsideCallsTo: {
|
|
135
|
+
items: { type: "string" },
|
|
136
|
+
type: "array",
|
|
137
|
+
uniqueItems: true
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
type: "object"
|
|
141
|
+
}
|
|
142
|
+
],
|
|
124
143
|
type: "suggestion"
|
|
125
144
|
}
|
|
126
145
|
};
|
|
@@ -130,6 +149,12 @@ function escapeLineBreaks(text) {
|
|
|
130
149
|
function escapeTemplateText(text) {
|
|
131
150
|
return text.replaceAll("`", "\\`").replaceAll("${", "\\${").replaceAll("\r", String.raw`\r`);
|
|
132
151
|
}
|
|
152
|
+
function getCalleeName(callee) {
|
|
153
|
+
if (callee.type === import_utils.AST_NODE_TYPES.Identifier) {
|
|
154
|
+
return callee.name;
|
|
155
|
+
}
|
|
156
|
+
return callee.type === import_utils.AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === import_utils.AST_NODE_TYPES.Identifier ? callee.property.name : null;
|
|
157
|
+
}
|
|
133
158
|
function getJoinedStringElements(node) {
|
|
134
159
|
const callee = node.callee;
|
|
135
160
|
if (node.optional || node.arguments.length !== 1 || callee.type !== import_utils.AST_NODE_TYPES.MemberExpression || callee.optional || callee.computed || callee.property.type !== import_utils.AST_NODE_TYPES.Identifier || callee.property.name !== "join" || callee.object.type !== import_utils.AST_NODE_TYPES.ArrayExpression) {
|
|
@@ -165,6 +190,24 @@ function getStaticString(node) {
|
|
|
165
190
|
}
|
|
166
191
|
return node.type === import_utils.AST_NODE_TYPES.TemplateLiteral && node.expressions.length === 0 ? (0, import_type_guards.ensureNonNullable)(node.quasis[0]).value.cooked : null;
|
|
167
192
|
}
|
|
193
|
+
function isInsideIgnoredCallback(node, ignoredCalleeNames) {
|
|
194
|
+
if (ignoredCalleeNames.size === 0) {
|
|
195
|
+
return false;
|
|
196
|
+
}
|
|
197
|
+
let isInsideFunction = false;
|
|
198
|
+
let child = node;
|
|
199
|
+
for (let parent = node.parent; parent; child = parent, parent = parent.parent) {
|
|
200
|
+
if (FUNCTION_NODE_TYPES.has(parent.type)) {
|
|
201
|
+
isInsideFunction = true;
|
|
202
|
+
} else if (isInsideFunction && parent.type === import_utils.AST_NODE_TYPES.CallExpression && parent.callee !== child) {
|
|
203
|
+
const name = getCalleeName(parent.callee);
|
|
204
|
+
if (name !== null && ignoredCalleeNames.has(name)) {
|
|
205
|
+
return true;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
return false;
|
|
210
|
+
}
|
|
168
211
|
function isStringElement(element) {
|
|
169
212
|
return element?.type === import_utils.AST_NODE_TYPES.TemplateLiteral || element?.type === import_utils.AST_NODE_TYPES.Literal && typeof element.value === "string";
|
|
170
213
|
}
|
|
@@ -186,4 +229,4 @@ function toDedentLines(text) {
|
|
|
186
229
|
MESSAGE_ID,
|
|
187
230
|
preferDedent
|
|
188
231
|
});
|
|
189
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICAnQ2FsbEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsTm9kZSA9IHRvVFNFU1RyZWVOb2RlKG5vZGUpIGFzIFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhjYWxsTm9kZSk7XG4gICAgICAgIGlmICgham9pbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmdldENvbW1lbnRzSW5zaWRlKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0Sm9pbmVkVGV4dChqb2luZWQuZWxlbWVudHMsIGpvaW5lZC5zZXBhcmF0b3IpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSB0ZXh0ID09PSBudWxsID8gbnVsbCA6IHRvRGVkZW50TGluZXModGV4dCk7XG4gICAgICAgICAgICBpZiAobGluZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpeGVzOiBSdWxlLkZpeFtdID0gW107XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGZpbmRWaXNpYmxlSW1wb3J0TmFtZSh7IGltcG9ydGVkTmFtZTogJ2RlZmF1bHQnLCBtb2R1bGVOYW1lOiBERURFTlRfTU9EVUxFLCBub2RlLCBzb3VyY2VDb2RlIH0pO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgY2Fubm90IGFjY2VwdCBhbiBFU00gaW1wb3J0LiBMZWF2ZSBpdHMgZGlhZ25vc3RpYyBmb3IgYSBtYW51YWwgZWRpdC5cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGUuYXN0LnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmFtZSA9IGdldFVudXNlZE5hbWUoc291cmNlQ29kZSwgJ2RlZGVudCcpO1xuICAgICAgICAgICAgICBmaXhlcy5wdXNoKGluc2VydEltcG9ydChmaXhlciwgc291cmNlQ29kZSwgYGltcG9ydCAke25hbWV9IGZyb20gJyR7REVERU5UX01PRFVMRX0nO2ApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGluZVByZWZpeCA9IHNvdXJjZUNvZGUudGV4dC5zbGljZShzb3VyY2VDb2RlLmdldEluZGV4RnJvbUxvYyh7IGNvbHVtbjogMCwgbGluZTogY2FsbE5vZGUubG9jLnN0YXJ0LmxpbmUgfSksIGNhbGxOb2RlLnJhbmdlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBsaW5lUHJlZml4LnNsaWNlKDAsIGxpbmVQcmVmaXgubGVuZ3RoIC0gbGluZVByZWZpeC50cmltU3RhcnQoKS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGxpbmVzLm1hcCgobGluZSkgPT4gbGluZSA9PT0gJycgPyAnJyA6IGAke2xpbmVJbmRlbnR9JHtJTkRFTlR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHtuYW1lfVxcYFxcbiR7Ym9keX1cXG4ke2xpbmVJbmRlbnR9XFxgYCkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlZmVyIGEgYGRlZGVudGAgdGVtcGxhdGUgb3ZlciBhbiBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgam9pbmVkIHdpdGggYSBuZXdsaW5lJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdXcml0ZSB0aGlzIG11bHRpbGluZSBzdHJpbmcgYXMgYSBgZGVkZW50YCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGpvaW5pbmcgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIHdpdGggYSBuZXdsaW5lLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmludGVyZmFjZSBKb2luZWRTdHJpbmdFbGVtZW50cyB7XG4gIHJlYWRvbmx5IGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W107XG4gIHJlYWRvbmx5IHNlcGFyYXRvcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVMaW5lQnJlYWtzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCkucmVwbGFjZUFsbCgnXFxuJywgU3RyaW5nLnJhd2BcXG5gKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVGVtcGxhdGVUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ2AnLCAnXFxcXGAnKS5yZXBsYWNlQWxsKCckeycsICdcXFxcJHsnKS5yZXBsYWNlQWxsKCdcXHInLCBTdHJpbmcucmF3YFxccmApO1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IEpvaW5lZFN0cmluZ0VsZW1lbnRzIHwgbnVsbCB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICBpZiAoXG4gICAgbm9kZS5vcHRpb25hbCB8fCBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDFcbiAgICB8fCBjYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fCBjYWxsZWUub3B0aW9uYWwgfHwgY2FsbGVlLmNvbXB1dGVkXG4gICAgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT09ICdqb2luJ1xuICAgIHx8IGNhbGxlZS5vYmplY3QudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuQXJyYXlFeHByZXNzaW9uXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VwYXJhdG9yID0gZ2V0U3RhdGljU3RyaW5nKGVuc3VyZU5vbk51bGxhYmxlKG5vZGUuYXJndW1lbnRzWzBdKSk7XG4gIGlmIChzZXBhcmF0b3IgPT09IG51bGwgfHwgIUxJTkVfQlJFQUtfU0VQQVJBVE9SUy5oYXMoc2VwYXJhdG9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudHM6IFN0cmluZ0VsZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FsbGVlLm9iamVjdC5lbGVtZW50cykge1xuICAgIGlmICghaXNTdHJpbmdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuICAvLyBBIHNpbmdsZSBlbGVtZW50IGpvaW5zIHRvIGl0c2VsZjsgdGhlcmUgaXMgbm8gbGluZSBicmVhayB0byByZXdyaXRlLlxuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoIDwgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA/IG51bGwgOiB7IGVsZW1lbnRzLCBzZXBhcmF0b3IgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Sm9pbmVkVGV4dChlbGVtZW50czogcmVhZG9ubHkgU3RyaW5nRWxlbWVudFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U3RhdGljU3RyaW5nKGVsZW1lbnQpO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGljU3RyaW5nKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgPyBub2RlLnZhbHVlIDogbnVsbDtcbiAgfVxuICAvLyBBbiB1bnRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGFuIGludmFsaWQgZXNjYXBlIGlzIGEgc3ludGF4IGVycm9yLCBzbyBpdHMgY29va2VkIHRleHQgYWx3YXlzIGV4aXN0cy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsICYmIG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwID8gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5xdWFzaXNbMF0pLnZhbHVlLmNvb2tlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nRWxlbWVudChlbGVtZW50OiBudWxsIHwgVFNFU1RyZWUuTm9kZSk6IGVsZW1lbnQgaXMgU3RyaW5nRWxlbWVudCB7XG4gIHJldHVybiBlbGVtZW50Py50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWxcbiAgICB8fCAoZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2YgZWxlbWVudC52YWx1ZSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGV4dCBhcyB0aGUgbGluZXMgb2YgYSBgZGVkZW50YCB0ZW1wbGF0ZSBib2R5LCBiZWZvcmUgaW5kZW50YXRpb24uXG4gKlxuICogYGRlZGVudGAgdHJpbXMgdGhlIHdob2xlIHJlc3VsdCBhbmQgb25seSB0aGVuIGRlY29kZXMgYFxcbmAgYW5kIGBcXHJgIGVzY2FwZXMsIHNvIGFuIGVkZ2UgcnVuIG9mIGxpbmUgYnJlYWtzIHN1cnZpdmVzXG4gKiB3aGVuIHdyaXR0ZW4gYXMgZXNjYXBlcywgYW5kIGFueSBvdGhlciBlZGdlIHdoaXRlc3BhY2UgZG9lcyBub3Qgc3Vydml2ZSBhdCBhbGwuIEl0IHN0cmlwcyB0aGUgc21hbGxlc3QgaW5kZW50YXRpb25cbiAqIG9mIHRoZSBsaW5lcywgYW5kIHRoZSBmaXJzdCBsaW5lIGhlcmUgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbm9uLWJsYW5rIGNoYXJhY3Rlciwgc28gZXZlcnkgbGluZSBrZWVwcyBpdHMgb3duLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdGhlIHRlbXBsYXRlIG11c3QgcHJvZHVjZS5cbiAqIEByZXR1cm5zIFRoZSBib2R5IGxpbmVzLCBvciBgbnVsbGAgd2hlbiBgZGVkZW50YCBjYW5ub3QgcHJvZHVjZSB0aGUgdGV4dCBmcm9tIGEgcGxhaW4gdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIHRvRGVkZW50TGluZXModGV4dDogc3RyaW5nKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgaWYgKHRleHQuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB0ZXh0LnJlcGxhY2UoL15bXFxyXFxuXSsvLCAnJyk7XG4gIGNvbnN0IGxlYWRpbmcgPSB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gcmVzdC5sZW5ndGgpO1xuICBjb25zdCBjb3JlID0gcmVzdC5yZXBsYWNlKC9bXFxyXFxuXSskLywgJycpO1xuICBjb25zdCB0cmFpbGluZyA9IHJlc3Quc2xpY2UoY29yZS5sZW5ndGgpO1xuICBpZiAoY29yZSA9PT0gJycgfHwgKGxlYWRpbmcgPT09ICcnICYmIC9eXFxzLy50ZXN0KGNvcmUpKSB8fCAodHJhaWxpbmcgPT09ICcnICYmIC9cXHMkLy50ZXN0KGNvcmUpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGVzY2FwZXMgaG9sZCBubyBsaW5lIGJyZWFrLCBzbyBzcGxpdHRpbmcgYWZ0ZXIgZXNjYXBpbmcgc3BsaXRzIG9ubHkgdGhlIGxpbmUgYnJlYWtzIG9mIHRoZSBjb3JlLlxuICByZXR1cm4gYCR7ZXNjYXBlTGluZUJyZWFrcyhsZWFkaW5nKX0ke2VzY2FwZVRlbXBsYXRlVGV4dChjb3JlKX0ke2VzY2FwZUxpbmVCcmVha3ModHJhaWxpbmcpfWAuc3BsaXQoJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBO0FBQUE7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
|
|
232
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKlxuICogVGhlIGBpZ25vcmVJbnNpZGVDYWxsc1RvYCBvcHRpb24gbmFtZXMgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBhcmUgc2VyaWFsaXplZCBhbmQgcnVuIGVsc2V3aGVyZSAoYW5cbiAqIE9ic2lkaWFuIHRlc3QncyBgZXZhbEluT2JzaWRpYW5gKSwgd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhIGZ1bmN0aW9uIG5lc3RlZCBpblxuICogdGhlIGFyZ3VtZW50cyBvZiBzdWNoIGEgY2FsbCBpcyBub3QgcmVwb3J0ZWQsIGJlY2F1c2UgYGRlZGVudGAgY2Fubm90IGJlIHVzZWQgdGhlcmUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgRlVOQ1RJT05fTk9ERV9UWVBFUzogUmVhZG9ubHlTZXQ8QVNUX05PREVfVFlQRVM+ID0gbmV3IFNldChbXG4gIEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkV4cHJlc3Npb25cbl0pO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoY29udGV4dC5vcHRpb25zWzBdID8/IHt9KSBhcyBQcmVmZXJEZWRlbnRPcHRpb25zO1xuICAgIGNvbnN0IGlnbm9yZWRDYWxsZWVOYW1lcyA9IG5ldyBTZXQob3B0aW9ucy5pZ25vcmVJbnNpZGVDYWxsc1RvKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3Qgam9pbmVkID0gZ2V0Sm9pbmVkU3RyaW5nRWxlbWVudHMoY2FsbE5vZGUpO1xuICAgICAgICBpZiAoIWpvaW5lZCB8fCBpc0luc2lkZUlnbm9yZWRDYWxsYmFjayhjYWxsTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5nZXRDb21tZW50c0luc2lkZShub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdldEpvaW5lZFRleHQoam9pbmVkLmVsZW1lbnRzLCBqb2luZWQuc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dCA9PT0gbnVsbCA/IG51bGwgOiB0b0RlZGVudExpbmVzKHRleHQpO1xuICAgICAgICAgICAgaWYgKGxpbmVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaXhlczogUnVsZS5GaXhbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBmaW5kVmlzaWJsZUltcG9ydE5hbWUoeyBpbXBvcnRlZE5hbWU6ICdkZWZhdWx0JywgbW9kdWxlTmFtZTogREVERU5UX01PRFVMRSwgbm9kZSwgc291cmNlQ29kZSB9KTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmFzdC5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5hbWUgPSBnZXRVbnVzZWROYW1lKHNvdXJjZUNvZGUsICdkZWRlbnQnKTtcbiAgICAgICAgICAgICAgZml4ZXMucHVzaChpbnNlcnRJbXBvcnQoZml4ZXIsIHNvdXJjZUNvZGUsIGBpbXBvcnQgJHtuYW1lfSBmcm9tICcke0RFREVOVF9NT0RVTEV9JztgKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VDb2RlLnRleHQuc2xpY2Uoc291cmNlQ29kZS5nZXRJbmRleEZyb21Mb2MoeyBjb2x1bW46IDAsIGxpbmU6IGNhbGxOb2RlLmxvYy5zdGFydC5saW5lIH0pLCBjYWxsTm9kZS5yYW5nZVswXSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lSW5kZW50ID0gbGluZVByZWZpeC5zbGljZSgwLCBsaW5lUHJlZml4Lmxlbmd0aCAtIGxpbmVQcmVmaXgudHJpbVN0YXJ0KCkubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUgPT09ICcnID8gJycgOiBgJHtsaW5lSW5kZW50fSR7SU5ERU5UfSR7bGluZX1gKS5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYCR7bmFtZX1cXGBcXG4ke2JvZHl9XFxuJHtsaW5lSW5kZW50fVxcYGApKTtcbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnV3JpdGUgdGhpcyBtdWx0aWxpbmUgc3RyaW5nIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUgaW5zdGVhZCBvZiBqb2luaW5nIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyB3aXRoIGEgbmV3bGluZS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaWdub3JlSW5zaWRlQ2FsbHNUbzoge1xuICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ29iamVjdCdcbiAgICAgIH1cbiAgICBdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgb2YgdGhlIGBwcmVmZXItZGVkZW50YCBydWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZWZlckRlZGVudE9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZXMgb2YgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBydW4gd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhXG4gICAqIGZ1bmN0aW9uIG5lc3RlZCBpbiB0aGUgYXJndW1lbnRzIG9mIGEgY2FsbCB0byBvbmUgb2YgdGhlbSBpcyBub3QgcmVwb3J0ZWQuIEEgbmFtZSBtYXRjaGVzIGEgYmFyZSBjYWxsZWVcbiAgICogKGBldmFsSW5PYnNpZGlhbiguLi4pYCkgYW5kIHRoZSBwcm9wZXJ0eSBvZiBhIG1lbWJlciBjYWxsZWUgKGBoZWxwZXJzLmV2YWxJbk9ic2lkaWFuKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUluc2lkZUNhbGxzVG8/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpvaW5lZFN0cmluZ0VsZW1lbnRzIHtcbiAgcmVhZG9ubHkgZWxlbWVudHM6IHJlYWRvbmx5IFN0cmluZ0VsZW1lbnRbXTtcbiAgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUxpbmVCcmVha3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxyJywgU3RyaW5nLnJhd2BcXHJgKS5yZXBsYWNlQWxsKCdcXG4nLCBTdHJpbmcucmF3YFxcbmApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVUZW1wbGF0ZVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnYCcsICdcXFxcYCcpLnJlcGxhY2VBbGwoJyR7JywgJ1xcXFwkeycpLnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCk7XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlZU5hbWUoY2FsbGVlOiBUU0VTVHJlZS5FeHByZXNzaW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChjYWxsZWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBjYWxsZWUubmFtZTtcbiAgfVxuICByZXR1cm4gY2FsbGVlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLk1lbWJlckV4cHJlc3Npb24gJiYgIWNhbGxlZS5jb21wdXRlZCAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllclxuICAgID8gY2FsbGVlLnByb3BlcnR5Lm5hbWVcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5lZFN0cmluZ0VsZW1lbnRzKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogSm9pbmVkU3RyaW5nRWxlbWVudHMgfCBudWxsIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gIGlmIChcbiAgICBub2RlLm9wdGlvbmFsIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgIHx8IGNhbGxlZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5NZW1iZXJFeHByZXNzaW9uIHx8IGNhbGxlZS5vcHRpb25hbCB8fCBjYWxsZWUuY29tcHV0ZWRcbiAgICB8fCBjYWxsZWUucHJvcGVydHkudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPT0gJ2pvaW4nXG4gICAgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5BcnJheUV4cHJlc3Npb25cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZXBhcmF0b3IgPSBnZXRTdGF0aWNTdHJpbmcoZW5zdXJlTm9uTnVsbGFibGUobm9kZS5hcmd1bWVudHNbMF0pKTtcbiAgaWYgKHNlcGFyYXRvciA9PT0gbnVsbCB8fCAhTElORV9CUkVBS19TRVBBUkFUT1JTLmhhcyhzZXBhcmF0b3IpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbGVtZW50czogU3RyaW5nRWxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBjYWxsZWUub2JqZWN0LmVsZW1lbnRzKSB7XG4gICAgaWYgKCFpc1N0cmluZ0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGVsZW1lbnQgam9pbnMgdG8gaXRzZWxmOyB0aGVyZSBpcyBubyBsaW5lIGJyZWFrIHRvIHJld3JpdGUuXG4gIHJldHVybiBlbGVtZW50cy5sZW5ndGggPCBNSU5JTVVNX0VMRU1FTlRTX1dJVEhfQV9MSU5FX0JSRUFLID8gbnVsbCA6IHsgZWxlbWVudHMsIHNlcGFyYXRvciB9O1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRUZXh0KGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W10sIHNlcGFyYXRvcjogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTdGF0aWNTdHJpbmcoZWxlbWVudCk7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0aWNTdHJpbmcobm9kZTogVFNFU1RyZWUuTm9kZSk6IG51bGwgfCBzdHJpbmcge1xuICBpZiAobm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5MaXRlcmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlLnZhbHVlID09PSAnc3RyaW5nJyA/IG5vZGUudmFsdWUgOiBudWxsO1xuICB9XG4gIC8vIEFuIHVudGFnZ2VkIHRlbXBsYXRlIHdpdGggYW4gaW52YWxpZCBlc2NhcGUgaXMgYSBzeW50YXggZXJyb3IsIHNvIGl0cyBjb29rZWQgdGV4dCBhbHdheXMgZXhpc3RzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWwgJiYgbm9kZS5leHByZXNzaW9ucy5sZW5ndGggPT09IDAgPyBlbnN1cmVOb25OdWxsYWJsZShub2RlLnF1YXNpc1swXSkudmFsdWUuY29va2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVJZ25vcmVkQ2FsbGJhY2sobm9kZTogVFNFU1RyZWUuTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChpZ25vcmVkQ2FsbGVlTmFtZXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgaXNJbnNpZGVGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgY2hpbGQgPSBub2RlO1xuICBmb3IgKGxldCBwYXJlbnQgPSBub2RlLnBhcmVudDsgcGFyZW50OyBjaGlsZCA9IHBhcmVudCwgcGFyZW50ID0gcGFyZW50LnBhcmVudCkge1xuICAgIGlmIChGVU5DVElPTl9OT0RFX1RZUEVTLmhhcyhwYXJlbnQudHlwZSkpIHtcbiAgICAgIGlzSW5zaWRlRnVuY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNJbnNpZGVGdW5jdGlvbiAmJiBwYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuQ2FsbEV4cHJlc3Npb24gJiYgcGFyZW50LmNhbGxlZSAhPT0gY2hpbGQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRDYWxsZWVOYW1lKHBhcmVudC5jYWxsZWUpO1xuICAgICAgaWYgKG5hbWUgIT09IG51bGwgJiYgaWdub3JlZENhbGxlZU5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZ0VsZW1lbnQoZWxlbWVudDogbnVsbCB8IFRTRVNUcmVlLk5vZGUpOiBlbGVtZW50IGlzIFN0cmluZ0VsZW1lbnQge1xuICByZXR1cm4gZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsXG4gICAgfHwgKGVsZW1lbnQ/LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkxpdGVyYWwgJiYgdHlwZW9mIGVsZW1lbnQudmFsdWUgPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRleHQgYXMgdGhlIGxpbmVzIG9mIGEgYGRlZGVudGAgdGVtcGxhdGUgYm9keSwgYmVmb3JlIGluZGVudGF0aW9uLlxuICpcbiAqIGBkZWRlbnRgIHRyaW1zIHRoZSB3aG9sZSByZXN1bHQgYW5kIG9ubHkgdGhlbiBkZWNvZGVzIGBcXG5gIGFuZCBgXFxyYCBlc2NhcGVzLCBzbyBhbiBlZGdlIHJ1biBvZiBsaW5lIGJyZWFrcyBzdXJ2aXZlc1xuICogd2hlbiB3cml0dGVuIGFzIGVzY2FwZXMsIGFuZCBhbnkgb3RoZXIgZWRnZSB3aGl0ZXNwYWNlIGRvZXMgbm90IHN1cnZpdmUgYXQgYWxsLiBJdCBzdHJpcHMgdGhlIHNtYWxsZXN0IGluZGVudGF0aW9uXG4gKiBvZiB0aGUgbGluZXMsIGFuZCB0aGUgZmlyc3QgbGluZSBoZXJlIGFsd2F5cyBzdGFydHMgd2l0aCBhIG5vbi1ibGFuayBjaGFyYWN0ZXIsIHNvIGV2ZXJ5IGxpbmUga2VlcHMgaXRzIG93bi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRoZSB0ZW1wbGF0ZSBtdXN0IHByb2R1Y2UuXG4gKiBAcmV0dXJucyBUaGUgYm9keSBsaW5lcywgb3IgYG51bGxgIHdoZW4gYGRlZGVudGAgY2Fubm90IHByb2R1Y2UgdGhlIHRleHQgZnJvbSBhIHBsYWluIHRlbXBsYXRlLlxuICovXG5mdW5jdGlvbiB0b0RlZGVudExpbmVzKHRleHQ6IHN0cmluZyk6IG51bGwgfCBzdHJpbmdbXSB7XG4gIGlmICh0ZXh0LmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXN0ID0gdGV4dC5yZXBsYWNlKC9eW1xcclxcbl0rLywgJycpO1xuICBjb25zdCBsZWFkaW5nID0gdGV4dC5zbGljZSgwLCB0ZXh0Lmxlbmd0aCAtIHJlc3QubGVuZ3RoKTtcbiAgY29uc3QgY29yZSA9IHJlc3QucmVwbGFjZSgvW1xcclxcbl0rJC8sICcnKTtcbiAgY29uc3QgdHJhaWxpbmcgPSByZXN0LnNsaWNlKGNvcmUubGVuZ3RoKTtcbiAgaWYgKGNvcmUgPT09ICcnIHx8IChsZWFkaW5nID09PSAnJyAmJiAvXlxccy8udGVzdChjb3JlKSkgfHwgKHRyYWlsaW5nID09PSAnJyAmJiAvXFxzJC8udGVzdChjb3JlKSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRoZSBlc2NhcGVzIGhvbGQgbm8gbGluZSBicmVhaywgc28gc3BsaXR0aW5nIGFmdGVyIGVzY2FwaW5nIHNwbGl0cyBvbmx5IHRoZSBsaW5lIGJyZWFrcyBvZiB0aGUgY29yZS5cbiAgcmV0dXJuIGAke2VzY2FwZUxpbmVCcmVha3MobGVhZGluZyl9JHtlc2NhcGVUZW1wbGF0ZVRleHQoY29yZSl9JHtlc2NhcGVMaW5lQnJlYWtzKHRyYWlsaW5nKX1gLnNwbGl0KCdcXG4nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFzQkEseUJBQWtDO0FBQ2xDLG1CQUErQjtBQUUvQix3QkFJTztBQUNQLDRCQUErQjtBQUUvQixNQUFNLGdCQUFnQjtBQUN0QixNQUFNLHNCQUFtRCxvQkFBSSxJQUFJO0FBQUEsRUFDL0QsNEJBQWU7QUFBQSxFQUNmLDRCQUFlO0FBQUEsRUFDZiw0QkFBZTtBQUNqQixDQUFDO0FBQ0QsTUFBTSxTQUFTO0FBQ2YsTUFBTSx3QkFBd0Isb0JBQUksSUFBSSxD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
|
|
@@ -8,3 +8,14 @@ export declare const MESSAGE_ID = "preferDedent";
|
|
|
8
8
|
* ESLint rule preferring a `dedent` template over an array of string literals joined with a newline.
|
|
9
9
|
*/
|
|
10
10
|
export declare const preferDedent: Rule.RuleModule;
|
|
11
|
+
/**
|
|
12
|
+
* Options of the `prefer-dedent` rule.
|
|
13
|
+
*/
|
|
14
|
+
export interface PreferDedentOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Names of functions whose callback arguments run where the module's imports are not in scope. A join inside a
|
|
17
|
+
* function nested in the arguments of a call to one of them is not reported. A name matches a bare callee
|
|
18
|
+
* (`evalInObsidian(...)`) and the property of a member callee (`helpers.evalInObsidian(...)`).
|
|
19
|
+
*/
|
|
20
|
+
readonly ignoreInsideCallsTo?: readonly string[];
|
|
21
|
+
}
|
|
@@ -8,3 +8,14 @@ export declare const MESSAGE_ID = "preferDedent";
|
|
|
8
8
|
* ESLint rule preferring a `dedent` template over an array of string literals joined with a newline.
|
|
9
9
|
*/
|
|
10
10
|
export declare const preferDedent: Rule.RuleModule;
|
|
11
|
+
/**
|
|
12
|
+
* Options of the `prefer-dedent` rule.
|
|
13
|
+
*/
|
|
14
|
+
export interface PreferDedentOptions {
|
|
15
|
+
/**
|
|
16
|
+
* Names of functions whose callback arguments run where the module's imports are not in scope. A join inside a
|
|
17
|
+
* function nested in the arguments of a call to one of them is not reported. A name matches a bare callee
|
|
18
|
+
* (`evalInObsidian(...)`) and the property of a member callee (`helpers.evalInObsidian(...)`).
|
|
19
|
+
*/
|
|
20
|
+
readonly ignoreInsideCallsTo?: readonly string[];
|
|
21
|
+
}
|
|
@@ -45,17 +45,24 @@ import {
|
|
|
45
45
|
} from "./import-fix.mjs";
|
|
46
46
|
import { toTSESTreeNode } from "./ts-estree-node.mjs";
|
|
47
47
|
const DEDENT_MODULE = "dedent";
|
|
48
|
+
const FUNCTION_NODE_TYPES = /* @__PURE__ */ new Set([
|
|
49
|
+
AST_NODE_TYPES.ArrowFunctionExpression,
|
|
50
|
+
AST_NODE_TYPES.FunctionDeclaration,
|
|
51
|
+
AST_NODE_TYPES.FunctionExpression
|
|
52
|
+
]);
|
|
48
53
|
const INDENT = " ";
|
|
49
54
|
const LINE_BREAK_SEPARATORS = /* @__PURE__ */ new Set(["\n", "\r\n"]);
|
|
50
55
|
const MINIMUM_ELEMENTS_WITH_A_LINE_BREAK = 2;
|
|
51
56
|
const MESSAGE_ID = "preferDedent";
|
|
52
57
|
const preferDedent = {
|
|
53
58
|
create(context) {
|
|
59
|
+
const options = context.options[0] ?? {};
|
|
60
|
+
const ignoredCalleeNames = new Set(options.ignoreInsideCallsTo);
|
|
54
61
|
return {
|
|
55
62
|
"CallExpression"(node) {
|
|
56
63
|
const callNode = toTSESTreeNode(node);
|
|
57
64
|
const joined = getJoinedStringElements(callNode);
|
|
58
|
-
if (!joined) {
|
|
65
|
+
if (!joined || isInsideIgnoredCallback(callNode, ignoredCalleeNames)) {
|
|
59
66
|
return;
|
|
60
67
|
}
|
|
61
68
|
context.report({
|
|
@@ -100,7 +107,19 @@ ${lineIndent}\``));
|
|
|
100
107
|
messages: {
|
|
101
108
|
[MESSAGE_ID]: "Write this multiline string as a `dedent` template instead of joining an array of string literals with a newline."
|
|
102
109
|
},
|
|
103
|
-
schema: [
|
|
110
|
+
schema: [
|
|
111
|
+
{
|
|
112
|
+
additionalProperties: false,
|
|
113
|
+
properties: {
|
|
114
|
+
ignoreInsideCallsTo: {
|
|
115
|
+
items: { type: "string" },
|
|
116
|
+
type: "array",
|
|
117
|
+
uniqueItems: true
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
type: "object"
|
|
121
|
+
}
|
|
122
|
+
],
|
|
104
123
|
type: "suggestion"
|
|
105
124
|
}
|
|
106
125
|
};
|
|
@@ -110,6 +129,12 @@ function escapeLineBreaks(text) {
|
|
|
110
129
|
function escapeTemplateText(text) {
|
|
111
130
|
return text.replaceAll("`", "\\`").replaceAll("${", "\\${").replaceAll("\r", String.raw`\r`);
|
|
112
131
|
}
|
|
132
|
+
function getCalleeName(callee) {
|
|
133
|
+
if (callee.type === AST_NODE_TYPES.Identifier) {
|
|
134
|
+
return callee.name;
|
|
135
|
+
}
|
|
136
|
+
return callee.type === AST_NODE_TYPES.MemberExpression && !callee.computed && callee.property.type === AST_NODE_TYPES.Identifier ? callee.property.name : null;
|
|
137
|
+
}
|
|
113
138
|
function getJoinedStringElements(node) {
|
|
114
139
|
const callee = node.callee;
|
|
115
140
|
if (node.optional || node.arguments.length !== 1 || callee.type !== AST_NODE_TYPES.MemberExpression || callee.optional || callee.computed || callee.property.type !== AST_NODE_TYPES.Identifier || callee.property.name !== "join" || callee.object.type !== AST_NODE_TYPES.ArrayExpression) {
|
|
@@ -145,6 +170,24 @@ function getStaticString(node) {
|
|
|
145
170
|
}
|
|
146
171
|
return node.type === AST_NODE_TYPES.TemplateLiteral && node.expressions.length === 0 ? ensureNonNullable(node.quasis[0]).value.cooked : null;
|
|
147
172
|
}
|
|
173
|
+
function isInsideIgnoredCallback(node, ignoredCalleeNames) {
|
|
174
|
+
if (ignoredCalleeNames.size === 0) {
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
let isInsideFunction = false;
|
|
178
|
+
let child = node;
|
|
179
|
+
for (let parent = node.parent; parent; child = parent, parent = parent.parent) {
|
|
180
|
+
if (FUNCTION_NODE_TYPES.has(parent.type)) {
|
|
181
|
+
isInsideFunction = true;
|
|
182
|
+
} else if (isInsideFunction && parent.type === AST_NODE_TYPES.CallExpression && parent.callee !== child) {
|
|
183
|
+
const name = getCalleeName(parent.callee);
|
|
184
|
+
if (name !== null && ignoredCalleeNames.has(name)) {
|
|
185
|
+
return true;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return false;
|
|
190
|
+
}
|
|
148
191
|
function isStringElement(element) {
|
|
149
192
|
return element?.type === AST_NODE_TYPES.TemplateLiteral || element?.type === AST_NODE_TYPES.Literal && typeof element.value === "string";
|
|
150
193
|
}
|
|
@@ -165,4 +208,4 @@ export {
|
|
|
165
208
|
MESSAGE_ID,
|
|
166
209
|
preferDedent
|
|
167
210
|
};
|
|
168
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIHJldHVybiB7XG4gICAgICAnQ2FsbEV4cHJlc3Npb24nKG5vZGU6IFJ1bGUuTm9kZSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjYWxsTm9kZSA9IHRvVFNFU1RyZWVOb2RlKG5vZGUpIGFzIFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uO1xuICAgICAgICBjb25zdCBqb2luZWQgPSBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhjYWxsTm9kZSk7XG4gICAgICAgIGlmICgham9pbmVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29udGV4dC5yZXBvcnQoe1xuICAgICAgICAgIGZpeChmaXhlcikge1xuICAgICAgICAgICAgY29uc3Qgc291cmNlQ29kZSA9IGNvbnRleHQuc291cmNlQ29kZTtcbiAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmdldENvbW1lbnRzSW5zaWRlKG5vZGUpLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB0ZXh0ID0gZ2V0Sm9pbmVkVGV4dChqb2luZWQuZWxlbWVudHMsIGpvaW5lZC5zZXBhcmF0b3IpO1xuICAgICAgICAgICAgY29uc3QgbGluZXMgPSB0ZXh0ID09PSBudWxsID8gbnVsbCA6IHRvRGVkZW50TGluZXModGV4dCk7XG4gICAgICAgICAgICBpZiAobGluZXMgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpeGVzOiBSdWxlLkZpeFtdID0gW107XG4gICAgICAgICAgICBsZXQgbmFtZSA9IGZpbmRWaXNpYmxlSW1wb3J0TmFtZSh7IGltcG9ydGVkTmFtZTogJ2RlZmF1bHQnLCBtb2R1bGVOYW1lOiBERURFTlRfTU9EVUxFLCBub2RlLCBzb3VyY2VDb2RlIH0pO1xuICAgICAgICAgICAgaWYgKG5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgLy8gQSBzY3JpcHQgY2Fubm90IGFjY2VwdCBhbiBFU00gaW1wb3J0LiBMZWF2ZSBpdHMgZGlhZ25vc3RpYyBmb3IgYSBtYW51YWwgZWRpdC5cbiAgICAgICAgICAgICAgaWYgKHNvdXJjZUNvZGUuYXN0LnNvdXJjZVR5cGUgIT09ICdtb2R1bGUnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgbmFtZSA9IGdldFVudXNlZE5hbWUoc291cmNlQ29kZSwgJ2RlZGVudCcpO1xuICAgICAgICAgICAgICBmaXhlcy5wdXNoKGluc2VydEltcG9ydChmaXhlciwgc291cmNlQ29kZSwgYGltcG9ydCAke25hbWV9IGZyb20gJyR7REVERU5UX01PRFVMRX0nO2ApKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgbGluZVByZWZpeCA9IHNvdXJjZUNvZGUudGV4dC5zbGljZShzb3VyY2VDb2RlLmdldEluZGV4RnJvbUxvYyh7IGNvbHVtbjogMCwgbGluZTogY2FsbE5vZGUubG9jLnN0YXJ0LmxpbmUgfSksIGNhbGxOb2RlLnJhbmdlWzBdKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVJbmRlbnQgPSBsaW5lUHJlZml4LnNsaWNlKDAsIGxpbmVQcmVmaXgubGVuZ3RoIC0gbGluZVByZWZpeC50cmltU3RhcnQoKS5sZW5ndGgpO1xuICAgICAgICAgICAgY29uc3QgYm9keSA9IGxpbmVzLm1hcCgobGluZSkgPT4gbGluZSA9PT0gJycgPyAnJyA6IGAke2xpbmVJbmRlbnR9JHtJTkRFTlR9JHtsaW5lfWApLmpvaW4oJ1xcbicpO1xuICAgICAgICAgICAgZml4ZXMucHVzaChmaXhlci5yZXBsYWNlVGV4dChub2RlLCBgJHtuYW1lfVxcYFxcbiR7Ym9keX1cXG4ke2xpbmVJbmRlbnR9XFxgYCkpO1xuICAgICAgICAgICAgcmV0dXJuIGZpeGVzO1xuICAgICAgICAgIH0sXG4gICAgICAgICAgbWVzc2FnZUlkOiBNRVNTQUdFX0lELFxuICAgICAgICAgIG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfTtcbiAgfSxcbiAgbWV0YToge1xuICAgIGRvY3M6IHtcbiAgICAgIGRlc2NyaXB0aW9uOiAnUHJlZmVyIGEgYGRlZGVudGAgdGVtcGxhdGUgb3ZlciBhbiBhcnJheSBvZiBzdHJpbmcgbGl0ZXJhbHMgam9pbmVkIHdpdGggYSBuZXdsaW5lJ1xuICAgIH0sXG4gICAgZml4YWJsZTogJ2NvZGUnLFxuICAgIG1lc3NhZ2VzOiB7XG4gICAgICBbTUVTU0FHRV9JRF06ICdXcml0ZSB0aGlzIG11bHRpbGluZSBzdHJpbmcgYXMgYSBgZGVkZW50YCB0ZW1wbGF0ZSBpbnN0ZWFkIG9mIGpvaW5pbmcgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIHdpdGggYSBuZXdsaW5lLidcbiAgICB9LFxuICAgIHNjaGVtYTogW10sXG4gICAgdHlwZTogJ3N1Z2dlc3Rpb24nXG4gIH1cbn07XG5cbmludGVyZmFjZSBKb2luZWRTdHJpbmdFbGVtZW50cyB7XG4gIHJlYWRvbmx5IGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W107XG4gIHJlYWRvbmx5IHNlcGFyYXRvcjogc3RyaW5nO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVMaW5lQnJlYWtzKHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCkucmVwbGFjZUFsbCgnXFxuJywgU3RyaW5nLnJhd2BcXG5gKTtcbn1cblxuZnVuY3Rpb24gZXNjYXBlVGVtcGxhdGVUZXh0KHRleHQ6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiB0ZXh0LnJlcGxhY2VBbGwoJ2AnLCAnXFxcXGAnKS5yZXBsYWNlQWxsKCckeycsICdcXFxcJHsnKS5yZXBsYWNlQWxsKCdcXHInLCBTdHJpbmcucmF3YFxccmApO1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRTdHJpbmdFbGVtZW50cyhub2RlOiBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbik6IEpvaW5lZFN0cmluZ0VsZW1lbnRzIHwgbnVsbCB7XG4gIGNvbnN0IGNhbGxlZSA9IG5vZGUuY2FsbGVlO1xuICBpZiAoXG4gICAgbm9kZS5vcHRpb25hbCB8fCBub2RlLmFyZ3VtZW50cy5sZW5ndGggIT09IDFcbiAgICB8fCBjYWxsZWUudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuTWVtYmVyRXhwcmVzc2lvbiB8fCBjYWxsZWUub3B0aW9uYWwgfHwgY2FsbGVlLmNvbXB1dGVkXG4gICAgfHwgY2FsbGVlLnByb3BlcnR5LnR5cGUgIT09IEFTVF9OT0RFX1RZUEVTLklkZW50aWZpZXIgfHwgY2FsbGVlLnByb3BlcnR5Lm5hbWUgIT09ICdqb2luJ1xuICAgIHx8IGNhbGxlZS5vYmplY3QudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuQXJyYXlFeHByZXNzaW9uXG4gICkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3Qgc2VwYXJhdG9yID0gZ2V0U3RhdGljU3RyaW5nKGVuc3VyZU5vbk51bGxhYmxlKG5vZGUuYXJndW1lbnRzWzBdKSk7XG4gIGlmIChzZXBhcmF0b3IgPT09IG51bGwgfHwgIUxJTkVfQlJFQUtfU0VQQVJBVE9SUy5oYXMoc2VwYXJhdG9yKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgZWxlbWVudHM6IFN0cmluZ0VsZW1lbnRbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY2FsbGVlLm9iamVjdC5lbGVtZW50cykge1xuICAgIGlmICghaXNTdHJpbmdFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgZWxlbWVudHMucHVzaChlbGVtZW50KTtcbiAgfVxuICAvLyBBIHNpbmdsZSBlbGVtZW50IGpvaW5zIHRvIGl0c2VsZjsgdGhlcmUgaXMgbm8gbGluZSBicmVhayB0byByZXdyaXRlLlxuICByZXR1cm4gZWxlbWVudHMubGVuZ3RoIDwgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA/IG51bGwgOiB7IGVsZW1lbnRzLCBzZXBhcmF0b3IgfTtcbn1cblxuZnVuY3Rpb24gZ2V0Sm9pbmVkVGV4dChlbGVtZW50czogcmVhZG9ubHkgU3RyaW5nRWxlbWVudFtdLCBzZXBhcmF0b3I6IHN0cmluZyk6IG51bGwgfCBzdHJpbmcge1xuICBjb25zdCB2YWx1ZXM6IHN0cmluZ1tdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgIGNvbnN0IHZhbHVlID0gZ2V0U3RhdGljU3RyaW5nKGVsZW1lbnQpO1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKTtcbiAgfVxuICByZXR1cm4gdmFsdWVzLmpvaW4oc2VwYXJhdG9yKTtcbn1cblxuZnVuY3Rpb24gZ2V0U3RhdGljU3RyaW5nKG5vZGU6IFRTRVNUcmVlLk5vZGUpOiBudWxsIHwgc3RyaW5nIHtcbiAgaWYgKG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCkge1xuICAgIHJldHVybiB0eXBlb2Ygbm9kZS52YWx1ZSA9PT0gJ3N0cmluZycgPyBub2RlLnZhbHVlIDogbnVsbDtcbiAgfVxuICAvLyBBbiB1bnRhZ2dlZCB0ZW1wbGF0ZSB3aXRoIGFuIGludmFsaWQgZXNjYXBlIGlzIGEgc3ludGF4IGVycm9yLCBzbyBpdHMgY29va2VkIHRleHQgYWx3YXlzIGV4aXN0cy5cbiAgcmV0dXJuIG5vZGUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsICYmIG5vZGUuZXhwcmVzc2lvbnMubGVuZ3RoID09PSAwID8gZW5zdXJlTm9uTnVsbGFibGUobm9kZS5xdWFzaXNbMF0pLnZhbHVlLmNvb2tlZCA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzU3RyaW5nRWxlbWVudChlbGVtZW50OiBudWxsIHwgVFNFU1RyZWUuTm9kZSk6IGVsZW1lbnQgaXMgU3RyaW5nRWxlbWVudCB7XG4gIHJldHVybiBlbGVtZW50Py50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWxcbiAgICB8fCAoZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuTGl0ZXJhbCAmJiB0eXBlb2YgZWxlbWVudC52YWx1ZSA9PT0gJ3N0cmluZycpO1xufVxuXG4vKipcbiAqIEVuY29kZXMgdGV4dCBhcyB0aGUgbGluZXMgb2YgYSBgZGVkZW50YCB0ZW1wbGF0ZSBib2R5LCBiZWZvcmUgaW5kZW50YXRpb24uXG4gKlxuICogYGRlZGVudGAgdHJpbXMgdGhlIHdob2xlIHJlc3VsdCBhbmQgb25seSB0aGVuIGRlY29kZXMgYFxcbmAgYW5kIGBcXHJgIGVzY2FwZXMsIHNvIGFuIGVkZ2UgcnVuIG9mIGxpbmUgYnJlYWtzIHN1cnZpdmVzXG4gKiB3aGVuIHdyaXR0ZW4gYXMgZXNjYXBlcywgYW5kIGFueSBvdGhlciBlZGdlIHdoaXRlc3BhY2UgZG9lcyBub3Qgc3Vydml2ZSBhdCBhbGwuIEl0IHN0cmlwcyB0aGUgc21hbGxlc3QgaW5kZW50YXRpb25cbiAqIG9mIHRoZSBsaW5lcywgYW5kIHRoZSBmaXJzdCBsaW5lIGhlcmUgYWx3YXlzIHN0YXJ0cyB3aXRoIGEgbm9uLWJsYW5rIGNoYXJhY3Rlciwgc28gZXZlcnkgbGluZSBrZWVwcyBpdHMgb3duLlxuICpcbiAqIEBwYXJhbSB0ZXh0IC0gVGhlIHRleHQgdGhlIHRlbXBsYXRlIG11c3QgcHJvZHVjZS5cbiAqIEByZXR1cm5zIFRoZSBib2R5IGxpbmVzLCBvciBgbnVsbGAgd2hlbiBgZGVkZW50YCBjYW5ub3QgcHJvZHVjZSB0aGUgdGV4dCBmcm9tIGEgcGxhaW4gdGVtcGxhdGUuXG4gKi9cbmZ1bmN0aW9uIHRvRGVkZW50TGluZXModGV4dDogc3RyaW5nKTogbnVsbCB8IHN0cmluZ1tdIHtcbiAgaWYgKHRleHQuaW5jbHVkZXMoJ1xcXFwnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIGNvbnN0IHJlc3QgPSB0ZXh0LnJlcGxhY2UoL15bXFxyXFxuXSsvLCAnJyk7XG4gIGNvbnN0IGxlYWRpbmcgPSB0ZXh0LnNsaWNlKDAsIHRleHQubGVuZ3RoIC0gcmVzdC5sZW5ndGgpO1xuICBjb25zdCBjb3JlID0gcmVzdC5yZXBsYWNlKC9bXFxyXFxuXSskLywgJycpO1xuICBjb25zdCB0cmFpbGluZyA9IHJlc3Quc2xpY2UoY29yZS5sZW5ndGgpO1xuICBpZiAoY29yZSA9PT0gJycgfHwgKGxlYWRpbmcgPT09ICcnICYmIC9eXFxzLy50ZXN0KGNvcmUpKSB8fCAodHJhaWxpbmcgPT09ICcnICYmIC9cXHMkLy50ZXN0KGNvcmUpKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgLy8gVGhlIGVzY2FwZXMgaG9sZCBubyBsaW5lIGJyZWFrLCBzbyBzcGxpdHRpbmcgYWZ0ZXIgZXNjYXBpbmcgc3BsaXRzIG9ubHkgdGhlIGxpbmUgYnJlYWtzIG9mIHRoZSBjb3JlLlxuICByZXR1cm4gYCR7ZXNjYXBlTGluZUJyZWFrcyhsZWFkaW5nKX0ke2VzY2FwZVRlbXBsYXRlVGV4dChjb3JlKX0ke2VzY2FwZUxpbmVCcmVha3ModHJhaWxpbmcpfWAuc3BsaXQoJ1xcbicpO1xufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFTLHlCQUF5QjtBQUNsQyxTQUFT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
|
|
211
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saW50ZXJzL2VzbGludC1ydWxlcy9wcmVmZXItZGVkZW50LnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGZpbGVcbiAqXG4gKiBFU0xpbnQgcnVsZTogcHJlZmVyLWRlZGVudFxuICpcbiAqIFJlcG9ydHMgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSAoYFsnYScsICdiJ10uam9pbignXFxuJylgKSBhbmQgZml4ZXMgaXQgdG8gYSBgZGVkZW50YFxuICogdGVtcGxhdGUuIEFuIGFycmF5IGhvbGRpbmcgYW55dGhpbmcgYnV0IHN0cmluZyBhbmQgdGVtcGxhdGUgbGl0ZXJhbHMgaXMgbGVmdCBhbG9uZTogaXQgYnVpbGRzIGEgc3RyaW5nIGF0IHJ1bnRpbWUuXG4gKlxuICogVGhlIGZpeCByZXdyaXRlcyB0aGUgam9pbmVkIHRleHQgc28gdGhhdCBgZGVkZW50YCAoMS54LCB1c2VkIGFzIGEgdGFnKSByZXR1cm5zIGV4YWN0bHkgdGhlIHNhbWUgc3RyaW5nLiBJdCBydW5zIHRoZVxuICogc2FtZSBzdGVwcyBgZGVkZW50YCBkb2VzIGluIHJldmVyc2U6IGEgbGVhZGluZyBvciB0cmFpbGluZyBydW4gb2YgbGluZSBicmVha3MgYW5kIGV2ZXJ5IGNhcnJpYWdlIHJldHVybiBiZWNvbWVcbiAqIGBcXG5gIC8gYFxccmAgZXNjYXBlcywgd2hpY2ggYGRlZGVudGAgZGVjb2RlcyBvbmx5IGFmdGVyIGl0IHRyaW1zLCBhbmQgYmFja3RpY2tzIGFuZCBgJHtgIGFyZSBlc2NhcGVkLiBUZXh0IGl0IGNhbm5vdFxuICogcmVwcmVzZW50IHRoYXQgd2F5IGtlZXBzIHRoZSBkaWFnbm9zdGljIHdpdGhvdXQgYSBmaXg6IGEgYmFja3NsYXNoLCB3aGljaCBgZGVkZW50YCBwYXNzZXMgb24gcmF3OyBsZWFkaW5nIG9yIHRyYWlsaW5nXG4gKiB3aGl0ZXNwYWNlIHRoYXQgYGRlZGVudGAgd291bGQgdHJpbTsgYSB0ZW1wbGF0ZSBsaXRlcmFsIHdpdGggZXhwcmVzc2lvbnMsIHdob3NlIHZhbHVlcyBhcmUgdW5rbm93bjsgYW5kIGNvbW1lbnRzXG4gKiBpbnNpZGUgdGhlIGNhbGwuIFRoZSBmaXggcmV1c2VzIGEgdmlzaWJsZSBkZWZhdWx0IGltcG9ydCBvZiBgZGVkZW50YCwgb3IgYWRkcyBvbmUgdW5kZXIgYSBmcmVlIG5hbWUuXG4gKlxuICogVGhlIGBpZ25vcmVJbnNpZGVDYWxsc1RvYCBvcHRpb24gbmFtZXMgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBhcmUgc2VyaWFsaXplZCBhbmQgcnVuIGVsc2V3aGVyZSAoYW5cbiAqIE9ic2lkaWFuIHRlc3QncyBgZXZhbEluT2JzaWRpYW5gKSwgd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhIGZ1bmN0aW9uIG5lc3RlZCBpblxuICogdGhlIGFyZ3VtZW50cyBvZiBzdWNoIGEgY2FsbCBpcyBub3QgcmVwb3J0ZWQsIGJlY2F1c2UgYGRlZGVudGAgY2Fubm90IGJlIHVzZWQgdGhlcmUuXG4gKi9cbmltcG9ydCB0eXBlIHsgVFNFU1RyZWUgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuaW1wb3J0IHR5cGUgeyBSdWxlIH0gZnJvbSAnZXNsaW50JztcblxuaW1wb3J0IHsgZW5zdXJlTm9uTnVsbGFibGUgfSBmcm9tICdAbW5hb3Vtb3YvdHlwZXNjcmlwdC1saWIvdHlwZS1ndWFyZHMnO1xuaW1wb3J0IHsgQVNUX05PREVfVFlQRVMgfSBmcm9tICdAdHlwZXNjcmlwdC1lc2xpbnQvdXRpbHMnO1xuXG5pbXBvcnQge1xuICBmaW5kVmlzaWJsZUltcG9ydE5hbWUsXG4gIGdldFVudXNlZE5hbWUsXG4gIGluc2VydEltcG9ydFxufSBmcm9tICcuL2ltcG9ydC1maXgudHMnO1xuaW1wb3J0IHsgdG9UU0VTVHJlZU5vZGUgfSBmcm9tICcuL3RzLWVzdHJlZS1ub2RlLnRzJztcblxuY29uc3QgREVERU5UX01PRFVMRSA9ICdkZWRlbnQnO1xuY29uc3QgRlVOQ1RJT05fTk9ERV9UWVBFUzogUmVhZG9ubHlTZXQ8QVNUX05PREVfVFlQRVM+ID0gbmV3IFNldChbXG4gIEFTVF9OT0RFX1RZUEVTLkFycm93RnVuY3Rpb25FeHByZXNzaW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkRlY2xhcmF0aW9uLFxuICBBU1RfTk9ERV9UWVBFUy5GdW5jdGlvbkV4cHJlc3Npb25cbl0pO1xuY29uc3QgSU5ERU5UID0gJyAgJztcbmNvbnN0IExJTkVfQlJFQUtfU0VQQVJBVE9SUyA9IG5ldyBTZXQoWydcXG4nLCAnXFxyXFxuJ10pO1xuY29uc3QgTUlOSU1VTV9FTEVNRU5UU19XSVRIX0FfTElORV9CUkVBSyA9IDI7XG5cbi8qKlxuICogTWVzc2FnZSBJRCByZXBvcnRlZCB3aGVuIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyBpcyBqb2luZWQgd2l0aCBhIG5ld2xpbmUgaW5zdGVhZCBvZiB3cml0dGVuIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUuXG4gKi9cbmV4cG9ydCBjb25zdCBNRVNTQUdFX0lEID0gJ3ByZWZlckRlZGVudCc7XG5cbnR5cGUgU3RyaW5nRWxlbWVudCA9IFRTRVNUcmVlLlN0cmluZ0xpdGVyYWwgfCBUU0VTVHJlZS5UZW1wbGF0ZUxpdGVyYWw7XG5cbi8qKlxuICogRVNMaW50IHJ1bGUgcHJlZmVycmluZyBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZS5cbiAqL1xuZXhwb3J0IGNvbnN0IHByZWZlckRlZGVudDogUnVsZS5SdWxlTW9kdWxlID0ge1xuICBjcmVhdGUoY29udGV4dCkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSAoY29udGV4dC5vcHRpb25zWzBdID8/IHt9KSBhcyBQcmVmZXJEZWRlbnRPcHRpb25zO1xuICAgIGNvbnN0IGlnbm9yZWRDYWxsZWVOYW1lcyA9IG5ldyBTZXQob3B0aW9ucy5pZ25vcmVJbnNpZGVDYWxsc1RvKTtcbiAgICByZXR1cm4ge1xuICAgICAgJ0NhbGxFeHByZXNzaW9uJyhub2RlOiBSdWxlLk5vZGUpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgY2FsbE5vZGUgPSB0b1RTRVNUcmVlTm9kZShub2RlKSBhcyBUU0VTVHJlZS5DYWxsRXhwcmVzc2lvbjtcbiAgICAgICAgY29uc3Qgam9pbmVkID0gZ2V0Sm9pbmVkU3RyaW5nRWxlbWVudHMoY2FsbE5vZGUpO1xuICAgICAgICBpZiAoIWpvaW5lZCB8fCBpc0luc2lkZUlnbm9yZWRDYWxsYmFjayhjYWxsTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQucmVwb3J0KHtcbiAgICAgICAgICBmaXgoZml4ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHNvdXJjZUNvZGUgPSBjb250ZXh0LnNvdXJjZUNvZGU7XG4gICAgICAgICAgICBpZiAoc291cmNlQ29kZS5nZXRDb21tZW50c0luc2lkZShub2RlKS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgdGV4dCA9IGdldEpvaW5lZFRleHQoam9pbmVkLmVsZW1lbnRzLCBqb2luZWQuc2VwYXJhdG9yKTtcbiAgICAgICAgICAgIGNvbnN0IGxpbmVzID0gdGV4dCA9PT0gbnVsbCA/IG51bGwgOiB0b0RlZGVudExpbmVzKHRleHQpO1xuICAgICAgICAgICAgaWYgKGxpbmVzID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBmaXhlczogUnVsZS5GaXhbXSA9IFtdO1xuICAgICAgICAgICAgbGV0IG5hbWUgPSBmaW5kVmlzaWJsZUltcG9ydE5hbWUoeyBpbXBvcnRlZE5hbWU6ICdkZWZhdWx0JywgbW9kdWxlTmFtZTogREVERU5UX01PRFVMRSwgbm9kZSwgc291cmNlQ29kZSB9KTtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBudWxsKSB7XG4gICAgICAgICAgICAgIC8vIEEgc2NyaXB0IGNhbm5vdCBhY2NlcHQgYW4gRVNNIGltcG9ydC4gTGVhdmUgaXRzIGRpYWdub3N0aWMgZm9yIGEgbWFudWFsIGVkaXQuXG4gICAgICAgICAgICAgIGlmIChzb3VyY2VDb2RlLmFzdC5zb3VyY2VUeXBlICE9PSAnbW9kdWxlJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG5hbWUgPSBnZXRVbnVzZWROYW1lKHNvdXJjZUNvZGUsICdkZWRlbnQnKTtcbiAgICAgICAgICAgICAgZml4ZXMucHVzaChpbnNlcnRJbXBvcnQoZml4ZXIsIHNvdXJjZUNvZGUsIGBpbXBvcnQgJHtuYW1lfSBmcm9tICcke0RFREVOVF9NT0RVTEV9JztgKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGxpbmVQcmVmaXggPSBzb3VyY2VDb2RlLnRleHQuc2xpY2Uoc291cmNlQ29kZS5nZXRJbmRleEZyb21Mb2MoeyBjb2x1bW46IDAsIGxpbmU6IGNhbGxOb2RlLmxvYy5zdGFydC5saW5lIH0pLCBjYWxsTm9kZS5yYW5nZVswXSk7XG4gICAgICAgICAgICBjb25zdCBsaW5lSW5kZW50ID0gbGluZVByZWZpeC5zbGljZSgwLCBsaW5lUHJlZml4Lmxlbmd0aCAtIGxpbmVQcmVmaXgudHJpbVN0YXJ0KCkubGVuZ3RoKTtcbiAgICAgICAgICAgIGNvbnN0IGJvZHkgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGxpbmUgPT09ICcnID8gJycgOiBgJHtsaW5lSW5kZW50fSR7SU5ERU5UfSR7bGluZX1gKS5qb2luKCdcXG4nKTtcbiAgICAgICAgICAgIGZpeGVzLnB1c2goZml4ZXIucmVwbGFjZVRleHQobm9kZSwgYCR7bmFtZX1cXGBcXG4ke2JvZHl9XFxuJHtsaW5lSW5kZW50fVxcYGApKTtcbiAgICAgICAgICAgIHJldHVybiBmaXhlcztcbiAgICAgICAgICB9LFxuICAgICAgICAgIG1lc3NhZ2VJZDogTUVTU0FHRV9JRCxcbiAgICAgICAgICBub2RlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH07XG4gIH0sXG4gIG1ldGE6IHtcbiAgICBkb2NzOiB7XG4gICAgICBkZXNjcmlwdGlvbjogJ1ByZWZlciBhIGBkZWRlbnRgIHRlbXBsYXRlIG92ZXIgYW4gYXJyYXkgb2Ygc3RyaW5nIGxpdGVyYWxzIGpvaW5lZCB3aXRoIGEgbmV3bGluZSdcbiAgICB9LFxuICAgIGZpeGFibGU6ICdjb2RlJyxcbiAgICBtZXNzYWdlczoge1xuICAgICAgW01FU1NBR0VfSURdOiAnV3JpdGUgdGhpcyBtdWx0aWxpbmUgc3RyaW5nIGFzIGEgYGRlZGVudGAgdGVtcGxhdGUgaW5zdGVhZCBvZiBqb2luaW5nIGFuIGFycmF5IG9mIHN0cmluZyBsaXRlcmFscyB3aXRoIGEgbmV3bGluZS4nXG4gICAgfSxcbiAgICBzY2hlbWE6IFtcbiAgICAgIHtcbiAgICAgICAgYWRkaXRpb25hbFByb3BlcnRpZXM6IGZhbHNlLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgaWdub3JlSW5zaWRlQ2FsbHNUbzoge1xuICAgICAgICAgICAgaXRlbXM6IHsgdHlwZTogJ3N0cmluZycgfSxcbiAgICAgICAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICAgICAgICB1bmlxdWVJdGVtczogdHJ1ZVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgdHlwZTogJ29iamVjdCdcbiAgICAgIH1cbiAgICBdLFxuICAgIHR5cGU6ICdzdWdnZXN0aW9uJ1xuICB9XG59O1xuXG4vKipcbiAqIE9wdGlvbnMgb2YgdGhlIGBwcmVmZXItZGVkZW50YCBydWxlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZWZlckRlZGVudE9wdGlvbnMge1xuICAvKipcbiAgICogTmFtZXMgb2YgZnVuY3Rpb25zIHdob3NlIGNhbGxiYWNrIGFyZ3VtZW50cyBydW4gd2hlcmUgdGhlIG1vZHVsZSdzIGltcG9ydHMgYXJlIG5vdCBpbiBzY29wZS4gQSBqb2luIGluc2lkZSBhXG4gICAqIGZ1bmN0aW9uIG5lc3RlZCBpbiB0aGUgYXJndW1lbnRzIG9mIGEgY2FsbCB0byBvbmUgb2YgdGhlbSBpcyBub3QgcmVwb3J0ZWQuIEEgbmFtZSBtYXRjaGVzIGEgYmFyZSBjYWxsZWVcbiAgICogKGBldmFsSW5PYnNpZGlhbiguLi4pYCkgYW5kIHRoZSBwcm9wZXJ0eSBvZiBhIG1lbWJlciBjYWxsZWUgKGBoZWxwZXJzLmV2YWxJbk9ic2lkaWFuKC4uLilgKS5cbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUluc2lkZUNhbGxzVG8/OiByZWFkb25seSBzdHJpbmdbXTtcbn1cblxuaW50ZXJmYWNlIEpvaW5lZFN0cmluZ0VsZW1lbnRzIHtcbiAgcmVhZG9ubHkgZWxlbWVudHM6IHJlYWRvbmx5IFN0cmluZ0VsZW1lbnRbXTtcbiAgcmVhZG9ubHkgc2VwYXJhdG9yOiBzdHJpbmc7XG59XG5cbmZ1bmN0aW9uIGVzY2FwZUxpbmVCcmVha3ModGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnXFxyJywgU3RyaW5nLnJhd2BcXHJgKS5yZXBsYWNlQWxsKCdcXG4nLCBTdHJpbmcucmF3YFxcbmApO1xufVxuXG5mdW5jdGlvbiBlc2NhcGVUZW1wbGF0ZVRleHQodGV4dDogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIHRleHQucmVwbGFjZUFsbCgnYCcsICdcXFxcYCcpLnJlcGxhY2VBbGwoJyR7JywgJ1xcXFwkeycpLnJlcGxhY2VBbGwoJ1xccicsIFN0cmluZy5yYXdgXFxyYCk7XG59XG5cbmZ1bmN0aW9uIGdldENhbGxlZU5hbWUoY2FsbGVlOiBUU0VTVHJlZS5FeHByZXNzaW9uKTogbnVsbCB8IHN0cmluZyB7XG4gIGlmIChjYWxsZWUudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllcikge1xuICAgIHJldHVybiBjYWxsZWUubmFtZTtcbiAgfVxuICByZXR1cm4gY2FsbGVlLnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLk1lbWJlckV4cHJlc3Npb24gJiYgIWNhbGxlZS5jb21wdXRlZCAmJiBjYWxsZWUucHJvcGVydHkudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllclxuICAgID8gY2FsbGVlLnByb3BlcnR5Lm5hbWVcbiAgICA6IG51bGw7XG59XG5cbmZ1bmN0aW9uIGdldEpvaW5lZFN0cmluZ0VsZW1lbnRzKG5vZGU6IFRTRVNUcmVlLkNhbGxFeHByZXNzaW9uKTogSm9pbmVkU3RyaW5nRWxlbWVudHMgfCBudWxsIHtcbiAgY29uc3QgY2FsbGVlID0gbm9kZS5jYWxsZWU7XG4gIGlmIChcbiAgICBub2RlLm9wdGlvbmFsIHx8IG5vZGUuYXJndW1lbnRzLmxlbmd0aCAhPT0gMVxuICAgIHx8IGNhbGxlZS50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5NZW1iZXJFeHByZXNzaW9uIHx8IGNhbGxlZS5vcHRpb25hbCB8fCBjYWxsZWUuY29tcHV0ZWRcbiAgICB8fCBjYWxsZWUucHJvcGVydHkudHlwZSAhPT0gQVNUX05PREVfVFlQRVMuSWRlbnRpZmllciB8fCBjYWxsZWUucHJvcGVydHkubmFtZSAhPT0gJ2pvaW4nXG4gICAgfHwgY2FsbGVlLm9iamVjdC50eXBlICE9PSBBU1RfTk9ERV9UWVBFUy5BcnJheUV4cHJlc3Npb25cbiAgKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBzZXBhcmF0b3IgPSBnZXRTdGF0aWNTdHJpbmcoZW5zdXJlTm9uTnVsbGFibGUobm9kZS5hcmd1bWVudHNbMF0pKTtcbiAgaWYgKHNlcGFyYXRvciA9PT0gbnVsbCB8fCAhTElORV9CUkVBS19TRVBBUkFUT1JTLmhhcyhzZXBhcmF0b3IpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCBlbGVtZW50czogU3RyaW5nRWxlbWVudFtdID0gW107XG4gIGZvciAoY29uc3QgZWxlbWVudCBvZiBjYWxsZWUub2JqZWN0LmVsZW1lbnRzKSB7XG4gICAgaWYgKCFpc1N0cmluZ0VsZW1lbnQoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICB9XG4gIC8vIEEgc2luZ2xlIGVsZW1lbnQgam9pbnMgdG8gaXRzZWxmOyB0aGVyZSBpcyBubyBsaW5lIGJyZWFrIHRvIHJld3JpdGUuXG4gIHJldHVybiBlbGVtZW50cy5sZW5ndGggPCBNSU5JTVVNX0VMRU1FTlRTX1dJVEhfQV9MSU5FX0JSRUFLID8gbnVsbCA6IHsgZWxlbWVudHMsIHNlcGFyYXRvciB9O1xufVxuXG5mdW5jdGlvbiBnZXRKb2luZWRUZXh0KGVsZW1lbnRzOiByZWFkb25seSBTdHJpbmdFbGVtZW50W10sIHNlcGFyYXRvcjogc3RyaW5nKTogbnVsbCB8IHN0cmluZyB7XG4gIGNvbnN0IHZhbHVlczogc3RyaW5nW10gPSBbXTtcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIGVsZW1lbnRzKSB7XG4gICAgY29uc3QgdmFsdWUgPSBnZXRTdGF0aWNTdHJpbmcoZWxlbWVudCk7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgdmFsdWVzLnB1c2godmFsdWUpO1xuICB9XG4gIHJldHVybiB2YWx1ZXMuam9pbihzZXBhcmF0b3IpO1xufVxuXG5mdW5jdGlvbiBnZXRTdGF0aWNTdHJpbmcobm9kZTogVFNFU1RyZWUuTm9kZSk6IG51bGwgfCBzdHJpbmcge1xuICBpZiAobm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5MaXRlcmFsKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBub2RlLnZhbHVlID09PSAnc3RyaW5nJyA/IG5vZGUudmFsdWUgOiBudWxsO1xuICB9XG4gIC8vIEFuIHVudGFnZ2VkIHRlbXBsYXRlIHdpdGggYW4gaW52YWxpZCBlc2NhcGUgaXMgYSBzeW50YXggZXJyb3IsIHNvIGl0cyBjb29rZWQgdGV4dCBhbHdheXMgZXhpc3RzLlxuICByZXR1cm4gbm9kZS50eXBlID09PSBBU1RfTk9ERV9UWVBFUy5UZW1wbGF0ZUxpdGVyYWwgJiYgbm9kZS5leHByZXNzaW9ucy5sZW5ndGggPT09IDAgPyBlbnN1cmVOb25OdWxsYWJsZShub2RlLnF1YXNpc1swXSkudmFsdWUuY29va2VkIDogbnVsbDtcbn1cblxuZnVuY3Rpb24gaXNJbnNpZGVJZ25vcmVkQ2FsbGJhY2sobm9kZTogVFNFU1RyZWUuTm9kZSwgaWdub3JlZENhbGxlZU5hbWVzOiBSZWFkb25seVNldDxzdHJpbmc+KTogYm9vbGVhbiB7XG4gIGlmIChpZ25vcmVkQ2FsbGVlTmFtZXMuc2l6ZSA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBsZXQgaXNJbnNpZGVGdW5jdGlvbiA9IGZhbHNlO1xuICBsZXQgY2hpbGQgPSBub2RlO1xuICBmb3IgKGxldCBwYXJlbnQgPSBub2RlLnBhcmVudDsgcGFyZW50OyBjaGlsZCA9IHBhcmVudCwgcGFyZW50ID0gcGFyZW50LnBhcmVudCkge1xuICAgIGlmIChGVU5DVElPTl9OT0RFX1RZUEVTLmhhcyhwYXJlbnQudHlwZSkpIHtcbiAgICAgIGlzSW5zaWRlRnVuY3Rpb24gPSB0cnVlO1xuICAgIH0gZWxzZSBpZiAoaXNJbnNpZGVGdW5jdGlvbiAmJiBwYXJlbnQudHlwZSA9PT0gQVNUX05PREVfVFlQRVMuQ2FsbEV4cHJlc3Npb24gJiYgcGFyZW50LmNhbGxlZSAhPT0gY2hpbGQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBnZXRDYWxsZWVOYW1lKHBhcmVudC5jYWxsZWUpO1xuICAgICAgaWYgKG5hbWUgIT09IG51bGwgJiYgaWdub3JlZENhbGxlZU5hbWVzLmhhcyhuYW1lKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZ0VsZW1lbnQoZWxlbWVudDogbnVsbCB8IFRTRVNUcmVlLk5vZGUpOiBlbGVtZW50IGlzIFN0cmluZ0VsZW1lbnQge1xuICByZXR1cm4gZWxlbWVudD8udHlwZSA9PT0gQVNUX05PREVfVFlQRVMuVGVtcGxhdGVMaXRlcmFsXG4gICAgfHwgKGVsZW1lbnQ/LnR5cGUgPT09IEFTVF9OT0RFX1RZUEVTLkxpdGVyYWwgJiYgdHlwZW9mIGVsZW1lbnQudmFsdWUgPT09ICdzdHJpbmcnKTtcbn1cblxuLyoqXG4gKiBFbmNvZGVzIHRleHQgYXMgdGhlIGxpbmVzIG9mIGEgYGRlZGVudGAgdGVtcGxhdGUgYm9keSwgYmVmb3JlIGluZGVudGF0aW9uLlxuICpcbiAqIGBkZWRlbnRgIHRyaW1zIHRoZSB3aG9sZSByZXN1bHQgYW5kIG9ubHkgdGhlbiBkZWNvZGVzIGBcXG5gIGFuZCBgXFxyYCBlc2NhcGVzLCBzbyBhbiBlZGdlIHJ1biBvZiBsaW5lIGJyZWFrcyBzdXJ2aXZlc1xuICogd2hlbiB3cml0dGVuIGFzIGVzY2FwZXMsIGFuZCBhbnkgb3RoZXIgZWRnZSB3aGl0ZXNwYWNlIGRvZXMgbm90IHN1cnZpdmUgYXQgYWxsLiBJdCBzdHJpcHMgdGhlIHNtYWxsZXN0IGluZGVudGF0aW9uXG4gKiBvZiB0aGUgbGluZXMsIGFuZCB0aGUgZmlyc3QgbGluZSBoZXJlIGFsd2F5cyBzdGFydHMgd2l0aCBhIG5vbi1ibGFuayBjaGFyYWN0ZXIsIHNvIGV2ZXJ5IGxpbmUga2VlcHMgaXRzIG93bi5cbiAqXG4gKiBAcGFyYW0gdGV4dCAtIFRoZSB0ZXh0IHRoZSB0ZW1wbGF0ZSBtdXN0IHByb2R1Y2UuXG4gKiBAcmV0dXJucyBUaGUgYm9keSBsaW5lcywgb3IgYG51bGxgIHdoZW4gYGRlZGVudGAgY2Fubm90IHByb2R1Y2UgdGhlIHRleHQgZnJvbSBhIHBsYWluIHRlbXBsYXRlLlxuICovXG5mdW5jdGlvbiB0b0RlZGVudExpbmVzKHRleHQ6IHN0cmluZyk6IG51bGwgfCBzdHJpbmdbXSB7XG4gIGlmICh0ZXh0LmluY2x1ZGVzKCdcXFxcJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICBjb25zdCByZXN0ID0gdGV4dC5yZXBsYWNlKC9eW1xcclxcbl0rLywgJycpO1xuICBjb25zdCBsZWFkaW5nID0gdGV4dC5zbGljZSgwLCB0ZXh0Lmxlbmd0aCAtIHJlc3QubGVuZ3RoKTtcbiAgY29uc3QgY29yZSA9IHJlc3QucmVwbGFjZSgvW1xcclxcbl0rJC8sICcnKTtcbiAgY29uc3QgdHJhaWxpbmcgPSByZXN0LnNsaWNlKGNvcmUubGVuZ3RoKTtcbiAgaWYgKGNvcmUgPT09ICcnIHx8IChsZWFkaW5nID09PSAnJyAmJiAvXlxccy8udGVzdChjb3JlKSkgfHwgKHRyYWlsaW5nID09PSAnJyAmJiAvXFxzJC8udGVzdChjb3JlKSkpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8vIFRoZSBlc2NhcGVzIGhvbGQgbm8gbGluZSBicmVhaywgc28gc3BsaXR0aW5nIGFmdGVyIGVzY2FwaW5nIHNwbGl0cyBvbmx5IHRoZSBsaW5lIGJyZWFrcyBvZiB0aGUgY29yZS5cbiAgcmV0dXJuIGAke2VzY2FwZUxpbmVCcmVha3MobGVhZGluZyl9JHtlc2NhcGVUZW1wbGF0ZVRleHQoY29yZSl9JHtlc2NhcGVMaW5lQnJlYWtzKHRyYWlsaW5nKX1gLnNwbGl0KCdcXG4nKTtcbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFzQkEsU0FBUyx5QkFBeUI7QUFDbEMsU0FBUyxzQkFBc0I7QUFFL0I7QUFBQSxFQUNFO0FBQUEsRUFDQTtBQUFBLEVBQ0E7QUFBQSxPQUNLO0FBQ1AsU0FBUyxzQkFBc0I7QUFFL0IsTUFBTSxnQkFBZ0I7QUFDdEIsTUFBTSxzQkFBbUQsb0JBQUksSUFBSTtBQUFBLEVBQy9ELGVBQWU7QUFBQSxFQUNmLGVBQWU7QUFBQSxFQUNmLGVBQWU7QUFDakIsQ0FBQztBQUNELE1BQU0sU0FBUztBQUNmLE1BQU0sd0JBQXdCLG9CQUFJLElBQUksQ0FB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
|
package/package.json
CHANGED