parse-server 9.7.0-alpha.11 → 9.7.0-alpha.12
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.
|
@@ -8,13 +8,21 @@ exports.createComplexityValidationPlugin = createComplexityValidationPlugin;
|
|
|
8
8
|
var _graphql = require("graphql");
|
|
9
9
|
var _logger = _interopRequireDefault(require("../../logger"));
|
|
10
10
|
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
|
|
11
|
-
function calculateQueryComplexity(operation, fragments) {
|
|
11
|
+
function calculateQueryComplexity(operation, fragments, limits = {}) {
|
|
12
12
|
let maxDepth = 0;
|
|
13
13
|
let totalFields = 0;
|
|
14
|
+
const fragmentCache = new Map();
|
|
15
|
+
const {
|
|
16
|
+
maxDepth: allowedMaxDepth,
|
|
17
|
+
maxFields: allowedMaxFields
|
|
18
|
+
} = limits;
|
|
14
19
|
function visitSelectionSet(selectionSet, depth, visitedFragments) {
|
|
15
20
|
if (!selectionSet) {
|
|
16
21
|
return;
|
|
17
22
|
}
|
|
23
|
+
if (allowedMaxFields !== undefined && allowedMaxFields !== -1 && totalFields > allowedMaxFields || allowedMaxDepth !== undefined && allowedMaxDepth !== -1 && maxDepth > allowedMaxDepth) {
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
18
26
|
for (const selection of selectionSet.selections) {
|
|
19
27
|
if (selection.kind === 'Field') {
|
|
20
28
|
totalFields++;
|
|
@@ -29,14 +37,36 @@ function calculateQueryComplexity(operation, fragments) {
|
|
|
29
37
|
visitSelectionSet(selection.selectionSet, depth, visitedFragments);
|
|
30
38
|
} else if (selection.kind === 'FragmentSpread') {
|
|
31
39
|
const name = selection.name.value;
|
|
40
|
+
if (fragmentCache.has(name)) {
|
|
41
|
+
const cached = fragmentCache.get(name);
|
|
42
|
+
totalFields += cached.fields;
|
|
43
|
+
const adjustedDepth = depth + cached.maxDepthDelta;
|
|
44
|
+
if (adjustedDepth > maxDepth) {
|
|
45
|
+
maxDepth = adjustedDepth;
|
|
46
|
+
}
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
32
49
|
if (visitedFragments.has(name)) {
|
|
33
50
|
continue;
|
|
34
51
|
}
|
|
35
52
|
const fragment = fragments[name];
|
|
36
53
|
if (fragment) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
54
|
+
if (allowedMaxFields !== undefined && allowedMaxFields !== -1 && totalFields > allowedMaxFields || allowedMaxDepth !== undefined && allowedMaxDepth !== -1 && maxDepth > allowedMaxDepth) {
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
visitedFragments.add(name);
|
|
58
|
+
const savedFields = totalFields;
|
|
59
|
+
const savedMaxDepth = maxDepth;
|
|
60
|
+
maxDepth = depth;
|
|
61
|
+
visitSelectionSet(fragment.selectionSet, depth, visitedFragments);
|
|
62
|
+
const fieldsContribution = totalFields - savedFields;
|
|
63
|
+
const maxDepthDelta = maxDepth - depth;
|
|
64
|
+
fragmentCache.set(name, {
|
|
65
|
+
fields: fieldsContribution,
|
|
66
|
+
maxDepthDelta
|
|
67
|
+
});
|
|
68
|
+
maxDepth = Math.max(savedMaxDepth, maxDepth);
|
|
69
|
+
visitedFragments.delete(name);
|
|
40
70
|
}
|
|
41
71
|
}
|
|
42
72
|
}
|
|
@@ -75,7 +105,10 @@ function createComplexityValidationPlugin(getConfig) {
|
|
|
75
105
|
const {
|
|
76
106
|
depth,
|
|
77
107
|
fields
|
|
78
|
-
} = calculateQueryComplexity(requestContext.operation, fragments
|
|
108
|
+
} = calculateQueryComplexity(requestContext.operation, fragments, {
|
|
109
|
+
maxDepth: graphQLDepth,
|
|
110
|
+
maxFields: graphQLFields
|
|
111
|
+
});
|
|
79
112
|
if (graphQLDepth !== -1 && depth > graphQLDepth) {
|
|
80
113
|
const message = `GraphQL query depth of ${depth} exceeds maximum allowed depth of ${graphQLDepth}`;
|
|
81
114
|
_logger.default.warn(message);
|
|
@@ -102,4 +135,4 @@ function createComplexityValidationPlugin(getConfig) {
|
|
|
102
135
|
})
|
|
103
136
|
};
|
|
104
137
|
}
|
|
105
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSIsIm9wZXJhdGlvbiIsImZyYWdtZW50cyIsIm1heERlcHRoIiwidG90YWxGaWVsZHMiLCJ2aXNpdFNlbGVjdGlvblNldCIsInNlbGVjdGlvblNldCIsImRlcHRoIiwidmlzaXRlZEZyYWdtZW50cyIsInNlbGVjdGlvbiIsInNlbGVjdGlvbnMiLCJraW5kIiwibmV3RGVwdGgiLCJuYW1lIiwidmFsdWUiLCJoYXMiLCJmcmFnbWVudCIsImJyYW5jaFZpc2l0ZWQiLCJTZXQiLCJhZGQiLCJmaWVsZHMiLCJjcmVhdGVDb21wbGV4aXR5VmFsaWRhdGlvblBsdWdpbiIsImdldENvbmZpZyIsInJlcXVlc3REaWRTdGFydCIsInJlcXVlc3RDb250ZXh0IiwiZGlkUmVzb2x2ZU9wZXJhdGlvbiIsImF1dGgiLCJjb250ZXh0VmFsdWUiLCJpc01hc3RlciIsImlzTWFpbnRlbmFuY2UiLCJjb25maWciLCJncmFwaFFMRGVwdGgiLCJncmFwaFFMRmllbGRzIiwiZGVmaW5pdGlvbiIsImRvY3VtZW50IiwiZGVmaW5pdGlvbnMiLCJtZXNzYWdlIiwibG9nZ2VyIiwid2FybiIsIkdyYXBoUUxFcnJvciIsImV4dGVuc2lvbnMiLCJodHRwIiwic3RhdHVzIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0dyYXBoUUwvaGVscGVycy9xdWVyeUNvbXBsZXhpdHkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgR3JhcGhRTEVycm9yIH0gZnJvbSAnZ3JhcGhxbCc7XG5pbXBvcnQgbG9nZ2VyIGZyb20gJy4uLy4uL2xvZ2dlcic7XG5cbmZ1bmN0aW9uIGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eShvcGVyYXRpb24sIGZyYWdtZW50cykge1xuICBsZXQgbWF4RGVwdGggPSAwO1xuICBsZXQgdG90YWxGaWVsZHMgPSAwO1xuXG4gIGZ1bmN0aW9uIHZpc2l0U2VsZWN0aW9uU2V0KHNlbGVjdGlvblNldCwgZGVwdGgsIHZpc2l0ZWRGcmFnbWVudHMpIHtcbiAgICBpZiAoIXNlbGVjdGlvblNldCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHNlbGVjdGlvbiBvZiBzZWxlY3Rpb25TZXQuc2VsZWN0aW9ucykge1xuICAgICAgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRmllbGQnKSB7XG4gICAgICAgIHRvdGFsRmllbGRzKys7XG4gICAgICAgIGNvbnN0IG5ld0RlcHRoID0gZGVwdGggKyAxO1xuICAgICAgICBpZiAobmV3RGVwdGggPiBtYXhEZXB0aCkge1xuICAgICAgICAgIG1heERlcHRoID0gbmV3RGVwdGg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQpIHtcbiAgICAgICAgICB2aXNpdFNlbGVjdGlvblNldChzZWxlY3Rpb24uc2VsZWN0aW9uU2V0LCBuZXdEZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uLmtpbmQgPT09ICdJbmxpbmVGcmFnbWVudCcpIHtcbiAgICAgICAgdmlzaXRTZWxlY3Rpb25TZXQoc2VsZWN0aW9uLnNlbGVjdGlvblNldCwgZGVwdGgsIHZpc2l0ZWRGcmFnbWVudHMpO1xuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0ZyYWdtZW50U3ByZWFkJykge1xuICAgICAgICBjb25zdCBuYW1lID0gc2VsZWN0aW9uLm5hbWUudmFsdWU7XG4gICAgICAgIGlmICh2aXNpdGVkRnJhZ21lbnRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRzW25hbWVdO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICBjb25zdCBicmFuY2hWaXNpdGVkID0gbmV3IFNldCh2aXNpdGVkRnJhZ21lbnRzKTtcbiAgICAgICAgICBicmFuY2hWaXNpdGVkLmFkZChuYW1lKTtcbiAgICAgICAgICB2aXNpdFNlbGVjdGlvblNldChmcmFnbWVudC5zZWxlY3Rpb25TZXQsIGRlcHRoLCBicmFuY2hWaXNpdGVkKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHZpc2l0U2VsZWN0aW9uU2V0KG9wZXJhdGlvbi5zZWxlY3Rpb25TZXQsIDAsIG5ldyBTZXQoKSk7XG5cbiAgcmV0dXJuIHsgZGVwdGg6IG1heERlcHRoLCBmaWVsZHM6IHRvdGFsRmllbGRzIH07XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNvbXBsZXhpdHlWYWxpZGF0aW9uUGx1Z2luKGdldENvbmZpZykge1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3REaWRTdGFydDogKHJlcXVlc3RDb250ZXh0KSA9PiAoe1xuICAgICAgZGlkUmVzb2x2ZU9wZXJhdGlvbjogYXN5bmMgKCkgPT4ge1xuICAgICAgICBjb25zdCBhdXRoID0gcmVxdWVzdENvbnRleHQuY29udGV4dFZhbHVlPy5hdXRoO1xuICAgICAgICBpZiAoYXV0aD8uaXNNYXN0ZXIgfHwgYXV0aD8uaXNNYWludGVuYW5jZSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICBpZiAoIWNvbmZpZykge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHsgZ3JhcGhRTERlcHRoLCBncmFwaFFMRmllbGRzIH0gPSBjb25maWc7XG4gICAgICAgIGlmIChncmFwaFFMRGVwdGggPT09IC0xICYmIGdyYXBoUUxGaWVsZHMgPT09IC0xKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZnJhZ21lbnRzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgZGVmaW5pdGlvbiBvZiByZXF1ZXN0Q29udGV4dC5kb2N1bWVudC5kZWZpbml0aW9ucykge1xuICAgICAgICAgIGlmIChkZWZpbml0aW9uLmtpbmQgPT09ICdGcmFnbWVudERlZmluaXRpb24nKSB7XG4gICAgICAgICAgICBmcmFnbWVudHNbZGVmaW5pdGlvbi5uYW1lLnZhbHVlXSA9IGRlZmluaXRpb247XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBkZXB0aCwgZmllbGRzIH0gPSBjYWxjdWxhdGVRdWVyeUNvbXBsZXhpdHkoXG4gICAgICAgICAgcmVxdWVzdENvbnRleHQub3BlcmF0aW9uLFxuICAgICAgICAgIGZyYWdtZW50c1xuICAgICAgICApO1xuXG4gICAgICAgIGlmIChncmFwaFFMRGVwdGggIT09IC0xICYmIGRlcHRoID4gZ3JhcGhRTERlcHRoKSB7XG4gICAgICAgICAgY29uc3QgbWVzc2FnZSA9IGBHcmFwaFFMIHF1ZXJ5IGRlcHRoIG9mICR7ZGVwdGh9IGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkIGRlcHRoIG9mICR7Z3JhcGhRTERlcHRofWA7XG4gICAgICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcihtZXNzYWdlLCB7XG4gICAgICAgICAgICBleHRlbnNpb25zOiB7XG4gICAgICAgICAgICAgIGh0dHA6IHsgc3RhdHVzOiA0MDAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZ3JhcGhRTEZpZWxkcyAhPT0gLTEgJiYgZmllbGRzID4gZ3JhcGhRTEZpZWxkcykge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgTnVtYmVyIG9mIEdyYXBoUUwgZmllbGRzICgke2ZpZWxkc30pIGV4Y2VlZHMgbWF4aW11bSBhbGxvd2VkICgke2dyYXBoUUxGaWVsZHN9KWA7XG4gICAgICAgICAgbG9nZ2VyLndhcm4obWVzc2FnZSk7XG4gICAgICAgICAgdGhyb3cgbmV3IEdyYXBoUUxFcnJvcihtZXNzYWdlLCB7XG4gICAgICAgICAgICBleHRlbnNpb25zOiB7XG4gICAgICAgICAgICAgIGh0dHA6IHsgc3RhdHVzOiA0MDAgfSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgfSksXG4gIH07XG59XG5cbmV4cG9ydCB7IGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSwgY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4gfTtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBLElBQUFBLFFBQUEsR0FBQUMsT0FBQTtBQUNBLElBQUFDLE9BQUEsR0FBQUMsc0JBQUEsQ0FBQUYsT0FBQTtBQUFrQyxTQUFBRSx1QkFBQUMsQ0FBQSxXQUFBQSxDQUFBLElBQUFBLENBQUEsQ0FBQUMsVUFBQSxHQUFBRCxDQUFBLEtBQUFFLE9BQUEsRUFBQUYsQ0FBQTtBQUVsQyxTQUFTRyx3QkFBd0JBLENBQUNDLFNBQVMsRUFBRUMsU0FBUyxFQUFFO0VBQ3RELElBQUlDLFFBQVEsR0FBRyxDQUFDO0VBQ2hCLElBQUlDLFdBQVcsR0FBRyxDQUFDO0VBRW5CLFNBQVNDLGlCQUFpQkEsQ0FBQ0MsWUFBWSxFQUFFQyxLQUFLLEVBQUVDLGdCQUFnQixFQUFFO0lBQ2hFLElBQUksQ0FBQ0YsWUFBWSxFQUFFO01BQ2pCO0lBQ0Y7SUFDQSxLQUFLLE1BQU1HLFNBQVMsSUFBSUgsWUFBWSxDQUFDSSxVQUFVLEVBQUU7TUFDL0MsSUFBSUQsU0FBUyxDQUFDRSxJQUFJLEtBQUssT0FBTyxFQUFFO1FBQzlCUCxXQUFXLEVBQUU7UUFDYixNQUFNUSxRQUFRLEdBQUdMLEtBQUssR0FBRyxDQUFDO1FBQzFCLElBQUlLLFFBQVEsR0FBR1QsUUFBUSxFQUFFO1VBQ3ZCQSxRQUFRLEdBQUdTLFFBQVE7UUFDckI7UUFDQSxJQUFJSCxTQUFTLENBQUNILFlBQVksRUFBRTtVQUMxQkQsaUJBQWlCLENBQUNJLFNBQVMsQ0FBQ0gsWUFBWSxFQUFFTSxRQUFRLEVBQUVKLGdCQUFnQixDQUFDO1FBQ3ZFO01BQ0YsQ0FBQyxNQUFNLElBQUlDLFNBQVMsQ0FBQ0UsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQzlDTixpQkFBaUIsQ0FBQ0ksU0FBUyxDQUFDSCxZQUFZLEVBQUVDLEtBQUssRUFBRUMsZ0JBQWdCLENBQUM7TUFDcEUsQ0FBQyxNQUFNLElBQUlDLFNBQVMsQ0FBQ0UsSUFBSSxLQUFLLGdCQUFnQixFQUFFO1FBQzlDLE1BQU1FLElBQUksR0FBR0osU0FBUyxDQUFDSSxJQUFJLENBQUNDLEtBQUs7UUFDakMsSUFBSU4sZ0JBQWdCLENBQUNPLEdBQUcsQ0FBQ0YsSUFBSSxDQUFDLEVBQUU7VUFDOUI7UUFDRjtRQUNBLE1BQU1HLFFBQVEsR0FBR2QsU0FBUyxDQUFDVyxJQUFJLENBQUM7UUFDaEMsSUFBSUcsUUFBUSxFQUFFO1VBQ1osTUFBTUMsYUFBYSxHQUFHLElBQUlDLEdBQUcsQ0FBQ1YsZ0JBQWdCLENBQUM7VUFDL0NTLGFBQWEsQ0FBQ0UsR0FBRyxDQUFDTixJQUFJLENBQUM7VUFDdkJSLGlCQUFpQixDQUFDVyxRQUFRLENBQUNWLFlBQVksRUFBRUMsS0FBSyxFQUFFVSxhQUFhLENBQUM7UUFDaEU7TUFDRjtJQUNGO0VBQ0Y7RUFFQVosaUJBQWlCLENBQUNKLFNBQVMsQ0FBQ0ssWUFBWSxFQUFFLENBQUMsRUFBRSxJQUFJWSxHQUFHLENBQUMsQ0FBQyxDQUFDO0VBRXZELE9BQU87SUFBRVgsS0FBSyxFQUFFSixRQUFRO0lBQUVpQixNQUFNLEVBQUVoQjtFQUFZLENBQUM7QUFDakQ7QUFFQSxTQUFTaUIsZ0NBQWdDQSxDQUFDQyxTQUFTLEVBQUU7RUFDbkQsT0FBTztJQUNMQyxlQUFlLEVBQUdDLGNBQWMsS0FBTTtNQUNwQ0MsbUJBQW1CLEVBQUUsTUFBQUEsQ0FBQSxLQUFZO1FBQy9CLE1BQU1DLElBQUksR0FBR0YsY0FBYyxDQUFDRyxZQUFZLEVBQUVELElBQUk7UUFDOUMsSUFBSUEsSUFBSSxFQUFFRSxRQUFRLElBQUlGLElBQUksRUFBRUcsYUFBYSxFQUFFO1VBQ3pDO1FBQ0Y7UUFFQSxNQUFNQyxNQUFNLEdBQUdSLFNBQVMsQ0FBQyxDQUFDO1FBQzFCLElBQUksQ0FBQ1EsTUFBTSxFQUFFO1VBQ1g7UUFDRjtRQUVBLE1BQU07VUFBRUMsWUFBWTtVQUFFQztRQUFjLENBQUMsR0FBR0YsTUFBTTtRQUM5QyxJQUFJQyxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUlDLGFBQWEsS0FBSyxDQUFDLENBQUMsRUFBRTtVQUMvQztRQUNGO1FBRUEsTUFBTTlCLFNBQVMsR0FBRyxDQUFDLENBQUM7UUFDcEIsS0FBSyxNQUFNK0IsVUFBVSxJQUFJVCxjQUFjLENBQUNVLFFBQVEsQ0FBQ0MsV0FBVyxFQUFFO1VBQzVELElBQUlGLFVBQVUsQ0FBQ3RCLElBQUksS0FBSyxvQkFBb0IsRUFBRTtZQUM1Q1QsU0FBUyxDQUFDK0IsVUFBVSxDQUFDcEIsSUFBSSxDQUFDQyxLQUFLLENBQUMsR0FBR21CLFVBQVU7VUFDL0M7UUFDRjtRQUVBLE1BQU07VUFBRTFCLEtBQUs7VUFBRWE7UUFBTyxDQUFDLEdBQUdwQix3QkFBd0IsQ0FDaER3QixjQUFjLENBQUN2QixTQUFTLEVBQ3hCQyxTQUNGLENBQUM7UUFFRCxJQUFJNkIsWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJeEIsS0FBSyxHQUFHd0IsWUFBWSxFQUFFO1VBQy9DLE1BQU1LLE9BQU8sR0FBRywwQkFBMEI3QixLQUFLLHFDQUFxQ3dCLFlBQVksRUFBRTtVQUNsR00sZUFBTSxDQUFDQyxJQUFJLENBQUNGLE9BQU8sQ0FBQztVQUNwQixNQUFNLElBQUlHLHFCQUFZLENBQUNILE9BQU8sRUFBRTtZQUM5QkksVUFBVSxFQUFFO2NBQ1ZDLElBQUksRUFBRTtnQkFBRUMsTUFBTSxFQUFFO2NBQUk7WUFDdEI7VUFDRixDQUFDLENBQUM7UUFDSjtRQUVBLElBQUlWLGFBQWEsS0FBSyxDQUFDLENBQUMsSUFBSVosTUFBTSxHQUFHWSxhQUFhLEVBQUU7VUFDbEQsTUFBTUksT0FBTyxHQUFHLDZCQUE2QmhCLE1BQU0sOEJBQThCWSxhQUFhLEdBQUc7VUFDakdLLGVBQU0sQ0FBQ0MsSUFBSSxDQUFDRixPQUFPLENBQUM7VUFDcEIsTUFBTSxJQUFJRyxxQkFBWSxDQUFDSCxPQUFPLEVBQUU7WUFDOUJJLFVBQVUsRUFBRTtjQUNWQyxJQUFJLEVBQUU7Z0JBQUVDLE1BQU0sRUFBRTtjQUFJO1lBQ3RCO1VBQ0YsQ0FBQyxDQUFDO1FBQ0o7TUFDRjtJQUNGLENBQUM7RUFDSCxDQUFDO0FBQ0giLCJpZ25vcmVMaXN0IjpbXX0=
|
|
138
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJfZ3JhcGhxbCIsInJlcXVpcmUiLCJfbG9nZ2VyIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImUiLCJfX2VzTW9kdWxlIiwiZGVmYXVsdCIsImNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eSIsIm9wZXJhdGlvbiIsImZyYWdtZW50cyIsImxpbWl0cyIsIm1heERlcHRoIiwidG90YWxGaWVsZHMiLCJmcmFnbWVudENhY2hlIiwiTWFwIiwiYWxsb3dlZE1heERlcHRoIiwibWF4RmllbGRzIiwiYWxsb3dlZE1heEZpZWxkcyIsInZpc2l0U2VsZWN0aW9uU2V0Iiwic2VsZWN0aW9uU2V0IiwiZGVwdGgiLCJ2aXNpdGVkRnJhZ21lbnRzIiwidW5kZWZpbmVkIiwic2VsZWN0aW9uIiwic2VsZWN0aW9ucyIsImtpbmQiLCJuZXdEZXB0aCIsIm5hbWUiLCJ2YWx1ZSIsImhhcyIsImNhY2hlZCIsImdldCIsImZpZWxkcyIsImFkanVzdGVkRGVwdGgiLCJtYXhEZXB0aERlbHRhIiwiZnJhZ21lbnQiLCJhZGQiLCJzYXZlZEZpZWxkcyIsInNhdmVkTWF4RGVwdGgiLCJmaWVsZHNDb250cmlidXRpb24iLCJzZXQiLCJNYXRoIiwibWF4IiwiZGVsZXRlIiwiU2V0IiwiY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4iLCJnZXRDb25maWciLCJyZXF1ZXN0RGlkU3RhcnQiLCJyZXF1ZXN0Q29udGV4dCIsImRpZFJlc29sdmVPcGVyYXRpb24iLCJhdXRoIiwiY29udGV4dFZhbHVlIiwiaXNNYXN0ZXIiLCJpc01haW50ZW5hbmNlIiwiY29uZmlnIiwiZ3JhcGhRTERlcHRoIiwiZ3JhcGhRTEZpZWxkcyIsImRlZmluaXRpb24iLCJkb2N1bWVudCIsImRlZmluaXRpb25zIiwibWVzc2FnZSIsImxvZ2dlciIsIndhcm4iLCJHcmFwaFFMRXJyb3IiLCJleHRlbnNpb25zIiwiaHR0cCIsInN0YXR1cyJdLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9HcmFwaFFML2hlbHBlcnMvcXVlcnlDb21wbGV4aXR5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEdyYXBoUUxFcnJvciB9IGZyb20gJ2dyYXBocWwnO1xuaW1wb3J0IGxvZ2dlciBmcm9tICcuLi8uLi9sb2dnZXInO1xuXG5mdW5jdGlvbiBjYWxjdWxhdGVRdWVyeUNvbXBsZXhpdHkob3BlcmF0aW9uLCBmcmFnbWVudHMsIGxpbWl0cyA9IHt9KSB7XG4gIGxldCBtYXhEZXB0aCA9IDA7XG4gIGxldCB0b3RhbEZpZWxkcyA9IDA7XG4gIGNvbnN0IGZyYWdtZW50Q2FjaGUgPSBuZXcgTWFwKCk7XG4gIGNvbnN0IHsgbWF4RGVwdGg6IGFsbG93ZWRNYXhEZXB0aCwgbWF4RmllbGRzOiBhbGxvd2VkTWF4RmllbGRzIH0gPSBsaW1pdHM7XG5cbiAgZnVuY3Rpb24gdmlzaXRTZWxlY3Rpb25TZXQoc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cykge1xuICAgIGlmICghc2VsZWN0aW9uU2V0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChcbiAgICAgIChhbGxvd2VkTWF4RmllbGRzICE9PSB1bmRlZmluZWQgJiYgYWxsb3dlZE1heEZpZWxkcyAhPT0gLTEgJiYgdG90YWxGaWVsZHMgPiBhbGxvd2VkTWF4RmllbGRzKSB8fFxuICAgICAgKGFsbG93ZWRNYXhEZXB0aCAhPT0gdW5kZWZpbmVkICYmIGFsbG93ZWRNYXhEZXB0aCAhPT0gLTEgJiYgbWF4RGVwdGggPiBhbGxvd2VkTWF4RGVwdGgpXG4gICAgKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc2VsZWN0aW9uIG9mIHNlbGVjdGlvblNldC5zZWxlY3Rpb25zKSB7XG4gICAgICBpZiAoc2VsZWN0aW9uLmtpbmQgPT09ICdGaWVsZCcpIHtcbiAgICAgICAgdG90YWxGaWVsZHMrKztcbiAgICAgICAgY29uc3QgbmV3RGVwdGggPSBkZXB0aCArIDE7XG4gICAgICAgIGlmIChuZXdEZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgbWF4RGVwdGggPSBuZXdEZXB0aDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc2VsZWN0aW9uLnNlbGVjdGlvblNldCkge1xuICAgICAgICAgIHZpc2l0U2VsZWN0aW9uU2V0KHNlbGVjdGlvbi5zZWxlY3Rpb25TZXQsIG5ld0RlcHRoLCB2aXNpdGVkRnJhZ21lbnRzKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChzZWxlY3Rpb24ua2luZCA9PT0gJ0lubGluZUZyYWdtZW50Jykge1xuICAgICAgICB2aXNpdFNlbGVjdGlvblNldChzZWxlY3Rpb24uc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICB9IGVsc2UgaWYgKHNlbGVjdGlvbi5raW5kID09PSAnRnJhZ21lbnRTcHJlYWQnKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSBzZWxlY3Rpb24ubmFtZS52YWx1ZTtcbiAgICAgICAgaWYgKGZyYWdtZW50Q2FjaGUuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgY2FjaGVkID0gZnJhZ21lbnRDYWNoZS5nZXQobmFtZSk7XG4gICAgICAgICAgdG90YWxGaWVsZHMgKz0gY2FjaGVkLmZpZWxkcztcbiAgICAgICAgICBjb25zdCBhZGp1c3RlZERlcHRoID0gZGVwdGggKyBjYWNoZWQubWF4RGVwdGhEZWx0YTtcbiAgICAgICAgICBpZiAoYWRqdXN0ZWREZXB0aCA+IG1heERlcHRoKSB7XG4gICAgICAgICAgICBtYXhEZXB0aCA9IGFkanVzdGVkRGVwdGg7XG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2aXNpdGVkRnJhZ21lbnRzLmhhcyhuYW1lKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGZyYWdtZW50ID0gZnJhZ21lbnRzW25hbWVdO1xuICAgICAgICBpZiAoZnJhZ21lbnQpIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoYWxsb3dlZE1heEZpZWxkcyAhPT0gdW5kZWZpbmVkICYmIGFsbG93ZWRNYXhGaWVsZHMgIT09IC0xICYmIHRvdGFsRmllbGRzID4gYWxsb3dlZE1heEZpZWxkcykgfHxcbiAgICAgICAgICAgIChhbGxvd2VkTWF4RGVwdGggIT09IHVuZGVmaW5lZCAmJiBhbGxvd2VkTWF4RGVwdGggIT09IC0xICYmIG1heERlcHRoID4gYWxsb3dlZE1heERlcHRoKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZpc2l0ZWRGcmFnbWVudHMuYWRkKG5hbWUpO1xuICAgICAgICAgIGNvbnN0IHNhdmVkRmllbGRzID0gdG90YWxGaWVsZHM7XG4gICAgICAgICAgY29uc3Qgc2F2ZWRNYXhEZXB0aCA9IG1heERlcHRoO1xuICAgICAgICAgIG1heERlcHRoID0gZGVwdGg7XG4gICAgICAgICAgdmlzaXRTZWxlY3Rpb25TZXQoZnJhZ21lbnQuc2VsZWN0aW9uU2V0LCBkZXB0aCwgdmlzaXRlZEZyYWdtZW50cyk7XG4gICAgICAgICAgY29uc3QgZmllbGRzQ29udHJpYnV0aW9uID0gdG90YWxGaWVsZHMgLSBzYXZlZEZpZWxkcztcbiAgICAgICAgICBjb25zdCBtYXhEZXB0aERlbHRhID0gbWF4RGVwdGggLSBkZXB0aDtcbiAgICAgICAgICBmcmFnbWVudENhY2hlLnNldChuYW1lLCB7IGZpZWxkczogZmllbGRzQ29udHJpYnV0aW9uLCBtYXhEZXB0aERlbHRhIH0pO1xuICAgICAgICAgIG1heERlcHRoID0gTWF0aC5tYXgoc2F2ZWRNYXhEZXB0aCwgbWF4RGVwdGgpO1xuICAgICAgICAgIHZpc2l0ZWRGcmFnbWVudHMuZGVsZXRlKG5hbWUpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgdmlzaXRTZWxlY3Rpb25TZXQob3BlcmF0aW9uLnNlbGVjdGlvblNldCwgMCwgbmV3IFNldCgpKTtcblxuICByZXR1cm4geyBkZXB0aDogbWF4RGVwdGgsIGZpZWxkczogdG90YWxGaWVsZHMgfTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ29tcGxleGl0eVZhbGlkYXRpb25QbHVnaW4oZ2V0Q29uZmlnKSB7XG4gIHJldHVybiB7XG4gICAgcmVxdWVzdERpZFN0YXJ0OiAocmVxdWVzdENvbnRleHQpID0+ICh7XG4gICAgICBkaWRSZXNvbHZlT3BlcmF0aW9uOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGF1dGggPSByZXF1ZXN0Q29udGV4dC5jb250ZXh0VmFsdWU/LmF1dGg7XG4gICAgICAgIGlmIChhdXRoPy5pc01hc3RlciB8fCBhdXRoPy5pc01haW50ZW5hbmNlKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgIGlmICghY29uZmlnKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBncmFwaFFMRGVwdGgsIGdyYXBoUUxGaWVsZHMgfSA9IGNvbmZpZztcbiAgICAgICAgaWYgKGdyYXBoUUxEZXB0aCA9PT0gLTEgJiYgZ3JhcGhRTEZpZWxkcyA9PT0gLTEpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBmcmFnbWVudHMgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBkZWZpbml0aW9uIG9mIHJlcXVlc3RDb250ZXh0LmRvY3VtZW50LmRlZmluaXRpb25zKSB7XG4gICAgICAgICAgaWYgKGRlZmluaXRpb24ua2luZCA9PT0gJ0ZyYWdtZW50RGVmaW5pdGlvbicpIHtcbiAgICAgICAgICAgIGZyYWdtZW50c1tkZWZpbml0aW9uLm5hbWUudmFsdWVdID0gZGVmaW5pdGlvbjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IGRlcHRoLCBmaWVsZHMgfSA9IGNhbGN1bGF0ZVF1ZXJ5Q29tcGxleGl0eShcbiAgICAgICAgICByZXF1ZXN0Q29udGV4dC5vcGVyYXRpb24sXG4gICAgICAgICAgZnJhZ21lbnRzLFxuICAgICAgICAgIHsgbWF4RGVwdGg6IGdyYXBoUUxEZXB0aCwgbWF4RmllbGRzOiBncmFwaFFMRmllbGRzIH1cbiAgICAgICAgKTtcblxuICAgICAgICBpZiAoZ3JhcGhRTERlcHRoICE9PSAtMSAmJiBkZXB0aCA+IGdyYXBoUUxEZXB0aCkge1xuICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgR3JhcGhRTCBxdWVyeSBkZXB0aCBvZiAke2RlcHRofSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCBkZXB0aCBvZiAke2dyYXBoUUxEZXB0aH1gO1xuICAgICAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBHcmFwaFFMRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgICAgICBodHRwOiB7IHN0YXR1czogNDAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGdyYXBoUUxGaWVsZHMgIT09IC0xICYmIGZpZWxkcyA+IGdyYXBoUUxGaWVsZHMpIHtcbiAgICAgICAgICBjb25zdCBtZXNzYWdlID0gYE51bWJlciBvZiBHcmFwaFFMIGZpZWxkcyAoJHtmaWVsZHN9KSBleGNlZWRzIG1heGltdW0gYWxsb3dlZCAoJHtncmFwaFFMRmllbGRzfSlgO1xuICAgICAgICAgIGxvZ2dlci53YXJuKG1lc3NhZ2UpO1xuICAgICAgICAgIHRocm93IG5ldyBHcmFwaFFMRXJyb3IobWVzc2FnZSwge1xuICAgICAgICAgICAgZXh0ZW5zaW9uczoge1xuICAgICAgICAgICAgICBodHRwOiB7IHN0YXR1czogNDAwIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuICAgIH0pLFxuICB9O1xufVxuXG5leHBvcnQgeyBjYWxjdWxhdGVRdWVyeUNv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TUFBTSxHQUFHUixTQUFTLENBQUMsQ0FBQztRQUMxQixJQUFJLENBQUNRLE1BQU0sRUFBRTtVQUNYO1FBQ0Y7UUFFQSxNQUFNO1VBQUVDLFlBQVk7VUFBRUM7UUFBYyxDQUFDLEdBQUdGLE1BQU07UUFDOUMsSUFBSUMsWUFBWSxLQUFLLENBQUMsQ0FBQyxJQUFJQyxhQUFhLEtBQUssQ0FBQyxDQUFDLEVBQUU7VUFDL0M7UUFDRjtRQUVBLE1BQU0vQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLEtBQUssTUFBTWdELFVBQVUsSUFBSVQsY0FBYyxDQUFDVSxRQUFRLENBQUNDLFdBQVcsRUFBRTtVQUM1RCxJQUFJRixVQUFVLENBQUNoQyxJQUFJLEtBQUssb0JBQW9CLEVBQUU7WUFDNUNoQixTQUFTLENBQUNnRCxVQUFVLENBQUM5QixJQUFJLENBQUNDLEtBQUssQ0FBQyxHQUFHNkIsVUFBVTtVQUMvQztRQUNGO1FBRUEsTUFBTTtVQUFFckMsS0FBSztVQUFFWTtRQUFPLENBQUMsR0FBR3pCLHdCQUF3QixDQUNoRHlDLGNBQWMsQ0FBQ3hDLFNBQVMsRUFDeEJDLFNBQVMsRUFDVDtVQUFFRSxRQUFRLEVBQUU0QyxZQUFZO1VBQUV2QyxTQUFTLEVBQUV3QztRQUFjLENBQ3JELENBQUM7UUFFRCxJQUFJRCxZQUFZLEtBQUssQ0FBQyxDQUFDLElBQUluQyxLQUFLLEdBQUdtQyxZQUFZLEVBQUU7VUFDL0MsTUFBTUssT0FBTyxHQUFHLDBCQUEwQnhDLEtBQUsscUNBQXFDbUMsWUFBWSxFQUFFO1VBQ2xHTSxlQUFNLENBQUNDLElBQUksQ0FBQ0YsT0FBTyxDQUFDO1VBQ3BCLE1BQU0sSUFBSUcscUJBQVksQ0FBQ0gsT0FBTyxFQUFFO1lBQzlCSSxVQUFVLEVBQUU7Y0FDVkMsSUFBSSxFQUFFO2dCQUFFQyxNQUFNLEVBQUU7Y0FBSTtZQUN0QjtVQUNGLENBQUMsQ0FBQztRQUNKO1FBRUEsSUFBSVYsYUFBYSxLQUFLLENBQUMsQ0FBQyxJQUFJeEIsTUFBTSxHQUFHd0IsYUFBYSxFQUFFO1VBQ2xELE1BQU1JLE9BQU8sR0FBRyw2QkFBNkI1QixNQUFNLDhCQUE4QndCLGFBQWEsR0FBRztVQUNqR0ssZUFBTSxDQUFDQyxJQUFJLENBQUNGLE9BQU8sQ0FBQztVQUNwQixNQUFNLElBQUlHLHFCQUFZLENBQUNILE9BQU8sRUFBRTtZQUM5QkksVUFBVSxFQUFFO2NBQ1ZDLElBQUksRUFBRTtnQkFBRUMsTUFBTSxFQUFFO2NBQUk7WUFDdEI7VUFDRixDQUFDLENBQUM7UUFDSjtNQUNGO0lBQ0YsQ0FBQztFQUNILENBQUM7QUFDSCIsImlnbm9yZUxpc3QiOltdfQ==
|