@ethlete/query 4.3.4 → 4.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.
- package/esm2022/lib/directives/infinity-query-trigger.directive.mjs +3 -3
- package/esm2022/lib/directives/infinity-query.directive.mjs +4 -4
- package/esm2022/lib/directives/query.directive.mjs +3 -3
- package/esm2022/lib/infinite-query/infinity-query.mjs +9 -7
- package/esm2022/lib/infinite-query/infinity-query.types.mjs +1 -1
- package/esm2022/lib/query/query.mjs +7 -1
- package/esm2022/lib/query-client/query-client.types.mjs +1 -1
- package/esm2022/lib/query-creator/query-creator.mjs +2 -1
- package/esm2022/lib/request/request.types.mjs +1 -1
- package/esm2022/lib/request/request.util.mjs +22 -59
- package/fesm2022/ethlete-query.mjs +46 -74
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/lib/infinite-query/infinity-query.types.d.ts +3 -2
- package/lib/query/query.d.ts +4 -0
- package/lib/query-client/query-client.types.d.ts +5 -1
- package/lib/request/request.types.d.ts +32 -9
- package/lib/request/request.util.d.ts +3 -6
- package/package.json +2 -2
|
@@ -26,70 +26,33 @@ export const buildRoute = (options) => {
|
|
|
26
26
|
}
|
|
27
27
|
return `${options.base}${route ?? ''}`;
|
|
28
28
|
};
|
|
29
|
-
export const buildQueryString = (params) => {
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
return buildQueryArrayString(key, validParams[key]);
|
|
35
|
-
}
|
|
36
|
-
if (typeof validParams[key] === 'object' && validParams[key] !== null) {
|
|
37
|
-
return buildQueryObjectString(key, validParams[key]);
|
|
38
|
-
}
|
|
39
|
-
return `${key}=${encodeURIComponent(validParams[key])}`;
|
|
40
|
-
})
|
|
41
|
-
.join('&');
|
|
42
|
-
return queryString || null;
|
|
43
|
-
};
|
|
44
|
-
export const buildQueryArrayString = (key, array) => {
|
|
45
|
-
const uriBrackets = encodeURIComponent('[]');
|
|
46
|
-
return array
|
|
47
|
-
.slice()
|
|
48
|
-
.map((item) => `${key}${uriBrackets}=${encodeURIComponent(item)}`)
|
|
49
|
-
.join('&');
|
|
50
|
-
};
|
|
51
|
-
export const buildQueryObjectString = (key, object) => {
|
|
52
|
-
const uriBracketStart = encodeURIComponent(`${key}[`);
|
|
53
|
-
const uriBracketEnd = encodeURIComponent(`]`);
|
|
54
|
-
return Object.keys(object)
|
|
55
|
-
.map((k) => {
|
|
56
|
-
const key = `${uriBracketStart}${k}${uriBracketEnd}`;
|
|
57
|
-
if (Array.isArray(object[k])) {
|
|
58
|
-
return buildQueryArrayString(key, object[k]);
|
|
59
|
-
}
|
|
60
|
-
if (typeof object[k] === 'object' && object[k] !== null) {
|
|
61
|
-
return buildQueryObjectString(key, object[k]);
|
|
62
|
-
}
|
|
63
|
-
return `${key}=${encodeURIComponent(object[k])}`;
|
|
64
|
-
})
|
|
65
|
-
.join('&');
|
|
66
|
-
};
|
|
67
|
-
export const filterInvalidParams = (params) => {
|
|
68
|
-
const filteredParams = Object.entries(params)
|
|
69
|
-
.map(([key, value]) => {
|
|
29
|
+
export const buildQueryString = (params, config) => {
|
|
30
|
+
const objectNotation = config?.objectNotation ?? 'bracket';
|
|
31
|
+
const writeArrayIndexes = config?.writeArrayIndexes ?? false;
|
|
32
|
+
const queryParams = [];
|
|
33
|
+
function processValue(key, value) {
|
|
70
34
|
if (Array.isArray(value)) {
|
|
71
|
-
|
|
35
|
+
for (const [index, arrayValue] of value.entries()) {
|
|
36
|
+
const nestedKey = writeArrayIndexes ? `${key}[${index}]` : `${key}[]`;
|
|
37
|
+
processValue(nestedKey, arrayValue);
|
|
38
|
+
}
|
|
72
39
|
}
|
|
73
40
|
else if (typeof value === 'object' && value !== null) {
|
|
74
|
-
|
|
41
|
+
for (const [objKey, val] of Object.entries(value)) {
|
|
42
|
+
const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;
|
|
43
|
+
processValue(nestedKey, val);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
const encodedKey = encodeURIComponent(key);
|
|
48
|
+
const encodedValue = encodeURIComponent(value);
|
|
49
|
+
queryParams.push(`${encodedKey}=${encodedValue}`);
|
|
75
50
|
}
|
|
76
|
-
return [key, value];
|
|
77
|
-
})
|
|
78
|
-
.filter(([, value]) => isParamValid(value))
|
|
79
|
-
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
80
|
-
return filteredParams;
|
|
81
|
-
};
|
|
82
|
-
export const isParamValid = (primitive) => {
|
|
83
|
-
if (primitive === undefined || primitive === null || primitive === '') {
|
|
84
|
-
return false;
|
|
85
|
-
}
|
|
86
|
-
if (typeof primitive === 'string' && primitive.trim() === '') {
|
|
87
|
-
return false;
|
|
88
51
|
}
|
|
89
|
-
|
|
90
|
-
|
|
52
|
+
for (const [key, val] of Object.entries(params)) {
|
|
53
|
+
processValue(key, val);
|
|
91
54
|
}
|
|
92
|
-
return
|
|
55
|
+
return queryParams.length ? queryParams.join('&') : null;
|
|
93
56
|
};
|
|
94
57
|
export const extractExpiresInSeconds = (headers) => {
|
|
95
58
|
const cacheControl = headers['cache-control'];
|
|
@@ -257,4 +220,4 @@ export const shouldRetryRequest = (config) => {
|
|
|
257
220
|
}
|
|
258
221
|
return { retry: false };
|
|
259
222
|
};
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFZaEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQWMsS0FBYyxFQUE0QixFQUFFLENBQ3RGLEtBQUssWUFBWSxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FLMUIsRUFBRSxFQUFFO0lBQ0gsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFNLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7S0FDL0I7SUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxV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bEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEY7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztLQUNsRDtJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW52YWxpZEJhc2VSb3V0ZUVycm9yLCBpbnZhbGlkUm91dGVFcnJvciwgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vc3ltZm9ueSc7XG5pbXBvcnQge1xuICBNZXRob2QsXG4gIFBhcmFtQXJyYXksXG4gIFBhcmFtcyxcbiAgUXVlcnlQYXJhbXMsXG4gIFJlcXVlc3RFcnJvcixcbiAgUmVxdWVzdEhlYWRlcnMsXG4gIFJlcXVlc3RSZXRyeUZuLFxuICBVbmZpbHRlcmVkUGFyYW1QcmltaXRpdmUsXG59IGZyb20gJy4vcmVxdWVzdC50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBpc1JlcXVlc3RFcnJvciA9IDxUID0gdW5rbm93bj4oZXJyb3I6IHVua25vd24pOiBlcnJvciBpcyBSZXF1ZXN0RXJyb3I8VD4gPT5cbiAgZXJyb3IgaW5zdGFuY2VvZiBPYmplY3QgJiYgJ3N0YXR1cycgaW4gZXJyb3IgJiYgJ3N0YXR1c1RleHQnIGluIGVycm9yICYmICd1cmwnIGluIGVycm9yO1xuXG5leHBvcnQgY29uc3QgYnVpbGRSb3V0ZSA9IChvcHRpb25zOiB7XG4gIGJhc2U6IHN0cmluZztcbiAgcm91dGU6ICgoYXJnczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pID0+IHN0cmluZykgfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkO1xuICBwYXRoUGFyYW1zPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG4gIHF1ZXJ5UGFyYW1zPzogUXVlcnlQYXJhbXM7XG59KSA9PiB7XG4gIGlmIChvcHRpb25zLmJhc2UuZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRCYXNlUm91dGVFcnJvcihvcHRpb25zLmJhc2UpO1xuICB9XG5cbiAgbGV0IHJvdXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMucm91dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIW9wdGlvbnMucGF0aFBhcmFtcykge1xuICAgICAgdGhyb3cgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvcihvcHRpb25zLnJvdXRlKHt9KSk7XG4gICAgfVxuXG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlKG9wdGlvbnMucGF0aFBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlID8/IG51bGw7XG4gIH1cblxuICBpZiAocm91dGUgJiYgIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRSb3V0ZUVycm9yKHJvdXRlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICByb3V0ZSA9IHJvdXRlID8gYCR7cm91dGV9PyR7cXVlcnlTdHJpbmd9YCA6IGAvPyR7cXVlcnlTdHJpbmd9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7b3B0aW9ucy5iYXNlfSR7cm91dGUgPz8gJyd9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFF1ZXJ5U3RyaW5nID0gKHBhcmFtczogUXVlcnlQYXJhbXMpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3QgdmFsaWRQYXJhbXMgPSBmaWx0ZXJJbnZhbGlkUGFyYW1zKHBhcmFtcyk7XG5cbiAgY29uc3QgcXVlcnlTdHJpbmcgPSBPYmplY3Qua2V5cyh2YWxpZFBhcmFtcylcbiAgICAubWFwKChrZXkpID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbGlkUGFyYW1zW2tleV0pKSB7XG4gICAgICAgIHJldHVybiBidWlsZFF1ZXJ5QXJyYXlTdHJpbmcoa2V5LCB2YWxpZFBhcmFtc1trZXldIGFzIFBhcmFtQXJyYXkpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHZhbGlkUGFyYW1zW2tleV0gPT09ICdvYmplY3QnICYmIHZhbGlkUGFyYW1zW2tleV0gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkUXVlcnlPYmplY3RTdHJpbmcoa2V5LCB2YWxpZFBhcmFtc1trZXldIGFzIHVua25vd24gYXMgUXVlcnlQYXJhbXMpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gYCR7a2V5fT0ke2VuY29kZVVSSUNvbXBvbmVudCh2YWxpZFBhcmFtc1trZXldIGFzIHN0cmluZyB8IG51bWJlciB8IGJvb2xlYW4pfWA7XG4gICAgfSlcbiAgICAuam9pbignJicpO1xuXG4gIHJldHVybiBxdWVyeVN0cmluZyB8fCBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkUXVlcnlBcnJheVN0cmluZyA9IChrZXk6IHN0cmluZywgYXJyYXk6IFBhcmFtQXJyYXkpID0+IHtcbiAgY29uc3QgdXJpQnJhY2tldHMgPSBlbmNvZGVVUklDb21wb25lbnQoJ1tdJyk7XG5cbiAgcmV0dXJuIGFycmF5XG4gICAgLnNsaWNlKClcbiAgICAubWFwKChpdGVtKSA9PiBgJHtrZXl9JHt1cmlCcmFja2V0c309JHtlbmNvZGVVUklDb21wb25lbnQoaXRlbSBhcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKX1gKVxuICAgIC5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRRdWVyeU9iamVjdFN0cmluZyA9IChrZXk6IHN0cmluZywgb2JqZWN0OiBRdWVyeVBhcmFtcyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IHVyaUJyYWNrZXRTdGFydCA9IGVuY29kZVVSSUNvbXBvbmVudChgJHtrZXl9W2ApO1xuICBjb25zdCB1cmlCcmFja2V0RW5kID0gZW5jb2RlVVJJQ29tcG9uZW50KGBdYCk7XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iamVjdClcbiAgICAubWFwKChrKSA9PiB7XG4gICAgICBjb25zdCBrZXkgPSBgJHt1cmlCcmFja2V0U3RhcnR9JHtrfSR7dXJpQnJhY2tldEVuZH1gO1xuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3Rba10pKSB7XG4gICAgICAgIHJldHVybiBidWlsZFF1ZXJ5QXJyYXlTdHJpbmcoa2V5LCBvYmplY3Rba10gYXMgUGFyYW1BcnJheSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb2JqZWN0W2tdID09PSAnb2JqZWN0JyAmJiBvYmplY3Rba10gIT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIGJ1aWxkUXVlcnlPYmplY3RTdHJpbmcoa2V5LCBvYmplY3Rba10gYXMgdW5rbm93biBhcyBRdWVyeVBhcmFtcyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBgJHtrZXl9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KG9iamVjdFtrXSBhcyBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuKX1gO1xuICAgIH0pXG4gICAgLmpvaW4oJyYnKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmaWx0ZXJJbnZhbGlkUGFyYW1zID0gKHBhcmFtczogUXVlcnlQYXJhbXMpID0+IHtcbiAgY29uc3QgZmlsdGVyZWRQYXJhbXM6IFBhcmFtcyA9IE9iamVjdC5lbnRyaWVzKHBhcmFtcylcbiAgICAubWFwKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gW2tleSwgdmFsdWUuZmlsdGVyKCh2KSA9PiBpc1BhcmFtVmFsaWQodikpXTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gW2tleSwgZmlsdGVySW52YWxpZFBhcmFtcyh2YWx1ZSBhcyBRdWVyeVBhcmFtcyldO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gW2tleSwgdmFsdWVdO1xuICAgIH0pXG4gICAgLmZpbHRlcigoWywgdmFsdWVdKSA9PiBpc1BhcmFtVmFsaWQodmFsdWUgYXMgVW5maWx0ZXJlZFBhcmFtUHJpbWl0aXZlKSlcbiAgICAucmVkdWNlKChhY2MsIFtrZXksIHZhbHVlXSkgPT4gKHsgLi4uYWNjLCBba2V5IGFzIHN0cmluZ106IHZhbHVlIH0pLCB7fSk7XG5cbiAgcmV0dXJuIGZpbHRlcmVkUGFyYW1zO1xufTtcblxuZXhwb3J0IGNvbnN0IGlzUGFyYW1WYWxpZCA9IChwcmltaXRpdmU6IFVuZmlsdGVyZWRQYXJhbVByaW1pdGl2ZSkgPT4ge1xuICBpZiAocHJpbWl0aXZlID09PSB1bmRlZmluZWQgfHwgcHJpbWl0aXZlID09PSBudWxsIHx8IHByaW1pdGl2ZSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHByaW1pdGl2ZSA9PT0gJ3N0cmluZycgJiYgcHJpbWl0aXZlLnRyaW0oKSA9PT0gJycpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAodHlwZW9mIHByaW1pdGl2ZSA9PT0gJ251bWJlcicgJiYgaXNOYU4ocHJpbWl0aXZlKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufTtcblxuZXhwb3J0IGNvbnN0IGV4dHJhY3RFeHBpcmVzSW5TZWNvbmRzID0gKGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzKSA9PiB7XG4gIGNvbnN0IGNhY2hlQ29udHJvbCA9IGhlYWRlcnNbJ2NhY2hlLWNvbnRyb2wnXTtcbiAgY29uc3QgYWdlID0gaGVhZGVyc1snYWdlJ107XG4gIGNvbnN0IGV4cGlyZXMgPSBoZWFkZXJzWydleHBpcmVzJ107XG5cbiAgLy8gSW4gc2Vjb25kc1xuICBsZXQgZXhwaXJlc0luOiBudW1iZXIgfCBudWxsID0gbnVsbDtcbiAgbGV0IG1heEFnZTogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ25vLWNhY2hlJykpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIGlmIChjYWNoZUNvbnRyb2w/LmluY2x1ZGVzKCdtYXgtYWdlJykpIHtcbiAgICBtYXhBZ2UgPSBwYXJzZUludChjYWNoZUNvbnRyb2wuc3BsaXQoJ21heC1hZ2U9JylbMV0pO1xuICB9IGVsc2UgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ3MtbWF4YWdlJykpIHtcbiAgICBtYXhBZ2UgPSBwYXJzZUludChjYWNoZUNvbnRyb2wuc3BsaXQoJ3MtbWF4YWdlPScpWzFdKTtcbiAgfVxuXG4gIGlmIChtYXhBZ2UgJiYgYWdlKSB7XG4gICAgY29uc3QgYWdlU2Vjb25kcyA9IHBhcnNlSW50KGFnZSk7XG5cbiAgICBleHBpcmVzSW4gPSBtYXhBZ2UgLSBhZ2VTZWNvbmRzO1xuICB9IGVsc2UgaWYgKG1heEFnZSkge1xuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAvIDI7IC8vIFdlIGFzc3VtZSB0aGUgcmVzcG9uc2UgaXMgaGFsZiB3YXkgdG8gaXRzIGV4cGlyYXRpb25cbiAgfSBlbHNlIGlmIChleHBpcmVzKSB7XG4gICAgLy8gVXNlZCBieSBzb21lIGFwaXMgdG8gdGVsbCB0aGUgcmVzcG9uc2Ugd2lsbCBuZXZlciBleHBpcmVcbiAgICAvLyBJbiB0aGlzIGNhc2Ugd2UgbGV0IHRoZSByZXNwb25zZSBleHBpcmUgYWZ0ZXIgMSBob3VyXG4gICAgaWYgKGV4cGlyZXMgPT09ICctMScpIHtcbiAgICAgIGV4cGlyZXNJbiA9IDM2MDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGV4cGlyZXNEYXRlID0gbmV3IERhdGUoZXhwaXJlcyk7XG5cbiAgICAgIC8vIGNoZWNrIGlmIHRoZSBkYXRlIGlzIHZhbGlkXG4gICAgICBpZiAoZXhwaXJlc0RhdGUudG9TdHJpbmcoKSAhPT0gJ0ludmFsaWQgRGF0ZScpIHtcbiAgICAgICAgZXhwaXJlc0luID0gTWF0aC5mbG9vcigoZXhwaXJlc0RhdGUuZ2V0VGltZSgpIC0gRGF0ZS5ub3coKSkgLyAxMDAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZXhwaXJlc0luO1xufTtcblxuZXhwb3J0IGNvbnN0IGJ1aWxkVGltZXN0YW1wRnJvbVNlY29uZHMgPSAoc2Vjb25kczogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICBpZiAoc2Vjb25kcyA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIG5ldyBEYXRlKERhdGUubm93KCkgKyBzZWNvbmRzICogMTAwMCkuZ2V0VGltZSgpO1xufTtcblxuZXhwb3J0IGNvbnN0IHNlcmlhbGl6ZUJvZHkgPSAoYm9keTogdW5rbm93bik6IEFycmF5QnVmZmVyIHwgVVJMU2VhcmNoUGFyYW1zIHwgQmxvYiB8IEZvcm1EYXRhIHwgc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmIChib2R5ID09PSBudWxsIHx8IGJvZHkgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKFxuICAgIGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fFxuICAgIGJvZHkgaW5zdGFuY2VvZiBCbG9iIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcyB8fFxuICAgIHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJ1xuICApIHtcbiAgICByZXR1cm4gYm9keTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGJvZHkgPT09ICdib29sZWFuJyB8fCBBcnJheS5pc0FycmF5KGJvZHkpKSB7XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGJvZHkpO1xuICB9XG5cbiAgcmV0dXJuIChib2R5IGFzIGFueSkudG9TdHJpbmcoKTtcbn07XG5cbmV4cG9ydCBjb25zdCB0cmFuc2Zvcm1NZXRob2QgPSAoY29uZmlnOiB7IG1ldGhvZDogTWV0aG9kOyB0cmFuc2ZlclZpYT86ICdHRVQnIHwgJ1BPU1QnIH0pID0+IHtcbiAgaWYgKGNvbmZpZy5tZXRob2QgPT09ICdHUUxfUVVFUlknIHx8IGNvbmZpZy5tZXRob2QgPT09ICdHUUxfTVVUQVRFJykge1xuICAgIGlmICghY29uZmlnLnRyYW5zZmVyVmlhKSB7XG4gICAgICByZXR1cm4gJ1BPU1QnO1xuICAgIH1cblxuICAgIHJldHVybiBjb25maWcudHJhbnNmZXJWaWE7XG4gIH1cblxuICByZXR1cm4gY29uZmlnLm1ldGhvZDtcbn07XG5cbmV4cG9ydCBjb25zdCBkZXRlY3RDb250ZW50VHlwZUhlYWRlciA9IChib2R5OiB1bmtub3duKSA9PiB7XG4gIC8vIEFuIGVtcHR5IGJvZHkgaGFzIG5vIGNvbnRlbnQgdHlwZS5cbiAgaWYgKGJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBGb3JtRGF0YSBib2RpZXMgcmVseSBvbiB0aGUgYnJvd3NlcidzIGNvbnRlbnQgdHlwZSBhc3NpZ25tZW50LlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEZvcm1EYXRhKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gQmxvYnMgdXN1YWxseSBoYXZlIHRoZWlyIG93biBjb250ZW50IHR5cGUuIElmIGl0IGRvZXNuJ3QsIHRoZW5cbiAgLy8gbm8gdHlwZSBjYW4gYmUgaW5mZXJyZWQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgQmxvYikge1xuICAgIHJldHVybiBib2R5LnR5cGUgfHwgbnVsbDtcbiAgfVxuICAvLyBBcnJheSBidWZmZXJzIGhhdmUgdW5rbm93biBjb250ZW50cyBhbmQgdGh1cyBubyB0eXBlIGNhbiBiZSBpbmZlcnJlZC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIFRlY2huaWNhbGx5LCBzdHJpbmdzIGNvdWxkIGJlIGEgZm9ybSBvZiBKU09OIGRhdGEsIGJ1dCBpdCdzIHNhZmUgZW5vdWdoXG4gIC8vIHRvIGFzc3VtZSB0aGV5J3JlIHBsYWluIHN0cmluZ3MuXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gJ3RleHQvcGxhaW4nO1xuICB9XG5cbiAgLy8gQXJyYXlzLCBvYmplY3RzLCBib29sZWFuIGFuZCBudW1iZXJzIHdpbGwgYmUgZW5jb2RlZCBhcyBKU09OLlxuICBpZiAodHlwZW9mIGJvZHkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiBib2R5ID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgYm9keSA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgcmV0dXJuICdhcHBsaWNhdGlvbi9qc29uJztcbiAgfVxuICAvLyBObyB0eXBlIGNvdWxkIGJlIGluZmVycmVkLlxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydCBjb25zdCBoYXNIZWFkZXIgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMsIGhlYWRlcjogc3RyaW5nKSA9PiB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhoZWFkZXJzKS5zb21lKChrZXkpID0+IGtleS50b0xvd2VyQ2FzZSgpID09PSBoZWFkZXIudG9Mb3dlckNhc2UoKSk7XG59O1xuXG5leHBvcnQgY29uc3QgZm9yRWFjaEhlYWRlciA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycywgY2FsbGJhY2s6ICh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4gdm9pZCkgPT4ge1xuICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgICBjYWxsYmFjayhrZXksIHZhbHVlKTtcbiAgfSk7XG59O1xuXG5leHBvcnQgY29uc3QgcGFyc2VBbGxYaHJSZXNwb25zZUhlYWRlcnMgPSAoeGhyOiBYTUxIdHRwUmVxdWVzdCkgPT4ge1xuICBjb25zdCBoZWFkZXJzID0geGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpO1xuICBjb25zdCBwYXJzZWRIZWFkZXJzOiBSZXF1ZXN0SGVhZGVycyA9IHt9O1xuXG4gIGZvciAoY29uc3QgbGluZSBvZiBoZWFkZXJzLnNwbGl0KCdcXG4nKSkge1xuICAgIGNvbnN0IGluZGV4ID0gbGluZS5pbmRleE9mKCc6Jyk7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgY29uc3QgbmFtZSA9IGxpbmUuc2xpY2UoMCwgaW5kZXgpO1xuICAgICAgY29uc3Qga2V5ID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgY29uc3QgdmFsdWUgPSBsaW5lLnNsaWNlKGluZGV4ICsgMSkudHJpbSgpO1xuXG4gICAgICBwYXJzZWRIZWFkZXJzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcGFyc2VkSGVhZGVycztcbn07XG5cbmV4cG9ydCBjb25zdCBnZXRSZXNwb25zZVVybCA9ICh4aHI6IFhNTEh0dHBSZXF1ZXN0KTogc3RyaW5nIHwgbnVsbCA9PiB7XG4gIGlmICgncmVzcG9uc2VVUkwnIGluIHhociAmJiB4aHIucmVzcG9uc2VVUkwpIHtcbiAgICByZXR1cm4geGhyLnJlc3BvbnNlVVJMO1xuICB9XG4gIGlmICgvXlgtUmVxdWVzdC1VUkw6L20udGVzdCh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKSB7XG4gICAgcmV0dXJuIHhoci5nZXRSZXNwb25zZUhlYWRlcignWC1SZXF1ZXN0LVVSTCcpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IHNob3VsZFJldHJ5UmVxdWVzdDogUmVxdWVzdFJldHJ5Rm4gPSAoY29uZmlnKSA9PiB7XG4gIGNvbnN0IGRlZmF1bHRSZXRyeURlbGF5ID0gMTAwMCArIDEwMDAgKiBjb25maWcuY3VycmVudFJldHJ5Q291bnQ7XG5cbiAgaWYgKGNvbmZpZy5jdXJyZW50UmV0cnlDb3VudCA+IDMpIHtcbiAgICByZXR1cm4geyByZXRyeTogZmFsc2UgfTtcbiAgfVxuXG4gIGlmICghaXNSZXF1ZXN0RXJyb3IoY29uZmlnLmVycm9yKSkge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgY29uc3QgeyBzdGF0dXMsIGRldGFpbCB9ID0gY29uZmlnLmVycm9yO1xuXG4gIC8vIFJldHJ5IG9uIDV4eCBlcnJvcnNcbiAgaWYgKHN0YXR1cyA+PSA1MDApIHtcbiAgICAvLyBEb24ndCByZXRyeSBpZiBhIHJlcXVlc3RlZCBwYWdlIGlzIG91dCBvZiByYW5nZVxuICAgIGlmIChpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yKGRldGFpbCkpIHtcbiAgICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQwOCBvciA0MjUgZXJyb3JzXG4gIGlmIChzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlJlcXVlc3RUaW1lb3V0IHx8IHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vRWFybHkpIHtcbiAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IGRlZmF1bHRSZXRyeURlbGF5IH07XG4gIH1cblxuICAvLyBSZXRyeSBvbiA0MjkgZXJyb3JzXG4gIGlmIChzdGF0dXMgPT09IEh0dHBTdGF0dXNDb2RlLlRvb01hbnlSZXF1ZXN0cykge1xuICAgIGNvbnN0IHJldHJ5QWZ0ZXIgPVxuICAgICAgY29uZmlnLmhlYWRlcnNbJ3JldHJ5LWFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWydSZXRyeS1BZnRlciddIHx8XG4gICAgICBjb25maWcuaGVhZGVyc1sneC1yZXRyeS1hZnRlciddIHx8XG4gICAgICBjb25maWcuaGVhZGVyc1snWC1SZXRyeS1BZnRlciddO1xuXG4gICAgaWYgKHJldHJ5QWZ0ZXIpIHtcbiAgICAgIGNvbnN0IGRlbGF5ID0gcGFyc2VJbnQocmV0cnlBZnRlcikgKiAxMDAwO1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBOdW1iZXIuaXNOYU4oZGVsYXkpID8gZGVmYXVsdFJldHJ5RGVsYXkgOiBkZWxheSB9O1xuICAgIH1cblxuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IGVudW0gSHR0cFN0YXR1c0NvZGUge1xuICBVbmtub3duID0gMCxcblxuICBDb250aW51ZSA9IDEwMCxcbiAgU3dpdGNoaW5nUHJvdG9jb2xzID0gMTAxLFxuICBQcm9jZXNzaW5nID0gMTAyLFxuICBFYXJseUhpbnRzID0gMTAzLFxuXG4gIE9rID0gMjAwLFxuICBDcmVhdGVkID0gMjAxLFxuICBBY2NlcHRlZCA9IDIwMixcbiAgTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uID0gMjAzLFxuICBOb0NvbnRlbnQgPSAyMDQsXG4gIFJlc2V0Q29udGVudCA9IDIwNSxcbiAgUGFydGlhbENvbnRlbnQgPSAyMDYsXG4gIE11bHRpU3RhdHVzID0gMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQgPSAyMDgsXG4gIEltVXNlZCA9IDIyNixcblxuICBNdWx0aXBsZUNob2ljZXMgPSAzMDAsXG4gIE1vdmVkUGVybWFuZW50bHkgPSAzMDEsXG4gIEZvdW5kID0gMzAyLFxuICBTZWVPdGhlciA9IDMwMyxcbiAgTm90TW9kaWZpZWQgPSAzMDQsXG4gIFVzZVByb3h5ID0gMzA1LFxuICBVbnVzZWQgPSAzMDYsXG4gIFRlbXBvcmFyeVJlZGlyZWN0ID0gMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdCA9IDMwOCxcblxuICBCYWRSZXF1ZXN0ID0gNDAwLFxuICBVbmF1dGhvcml6ZWQgPSA0MDEsXG4gIFBheW1lbnRSZXF1aXJlZCA9IDQwMixcbiAgRm9yYmlkZGVuID0gNDAzLFxuICBOb3RGb3VuZCA9IDQwNCxcbiAgTWV0aG9kTm90QWxsb3dlZCA9IDQwNSxcbiAgTm90QWNjZXB0YWJsZSA9IDQwNixcbiAgUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNDA3LFxuICBSZXF1ZXN0VGltZW91dCA9IDQwOCxcbiAgQ29uZmxpY3QgPSA0MDksXG4gIEdvbmUgPSA0MTAsXG4gIExlbmd0aFJlcXVpcmVkID0gNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQgPSA0MTIsXG4gIFBheWxvYWRUb29MYXJnZSA9IDQxMyxcbiAgVXJpVG9vTG9uZyA9IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGUgPSA0MTUsXG4gIFJhbmdlTm90U2F0aXNmaWFibGUgPSA0MTYsXG4gIEV4cGVjdGF0aW9uRmFpbGVkID0gNDE3LFxuICBJbUFUZWFwb3QgPSA0MTgsXG4gIE1pc2RpcmVjdGVkUmVxdWVzdCA9IDQyMSxcbiAgVW5wcm9jZXNzYWJsZUVudGl0eSA9IDQyMixcbiAgTG9ja2VkID0gNDIzLFxuICBGYWlsZWREZXBlbmRlbmN5ID0gNDI0LFxuICBUb29FYXJseSA9IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkID0gNDI2LFxuICBQcmVjb25kaXRpb25SZXF1aXJlZCA9IDQyOCxcbiAgVG9vTWFueVJlcXVlc3RzID0gNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2UgPSA0MzEsXG4gIFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zID0gNDUxLFxuXG4gIEludGVybmFsU2VydmVyRXJyb3IgPSA1MDAsXG4gIE5vdEltcGxlbWVudGVkID0gNTAxLFxuICBCYWRHYXRld2F5ID0gNTAyLFxuICBTZXJ2aWNlVW5hdmFpbGFibGUgPSA1MDMsXG4gIEdhdGV3YXlUaW1lb3V0ID0gNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZCA9IDUwNSxcbiAgVmFyaWFudEFsc29OZWdvdGlhdGVzID0gNTA2LFxuICBJbnN1ZmZpY2llbnRTdG9yYWdlID0gNTA3LFxuICBMb29wRGV0ZWN0ZWQgPSA1MDgsXG4gIE5vdEV4dGVuZGVkID0gNTEwLFxuICBOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZCA9IDUxMSxcbn1cbiJdfQ==
|
|
223
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVxdWVzdC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9xdWVyeS9zcmMvbGliL3JlcXVlc3QvcmVxdWVzdC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxpQkFBaUIsRUFBRSxxQ0FBcUMsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUM1RyxPQUFPLEVBQUUsa0NBQWtDLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFVaEUsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQWMsS0FBYyxFQUE0QixFQUFFLENBQ3RGLEtBQUssWUFBWSxNQUFNLElBQUksUUFBUSxJQUFJLEtBQUssSUFBSSxZQUFZLElBQUksS0FBSyxJQUFJLEtBQUssSUFBSSxLQUFLLENBQUM7QUFFMUYsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHLENBQUMsT0FNMUIsRUFBRSxFQUFFO0lBQ0gsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFNLHFCQUFxQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMzQztJQUVELElBQUksS0FBSyxHQUFrQixJQUFJLENBQUM7SUFFaEMsSUFBSSxPQUFPLE9BQU8sQ0FBQyxLQUFLLEtBQUssVUFBVSxFQUFFO1FBQ3ZDLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3ZCLE1BQU0scUNBQXFDLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ2hFO1FBRUQsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0tBQzNDO1NBQU07UUFDTCxLQUFLLEdBQUcsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUM7S0FDL0I7SUFFRCxJQUFJLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxV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LEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLENBQUM7S0FDbEQ7SUFFRCxzQkFBc0I7SUFDdEIsSUFBSSxNQUFNLDZDQUFtQyxFQUFFO1FBQzdDLE1BQU0sVUFBVSxHQUNkLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDO1lBQy9CLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7UUFFbEMsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO1lBQzFDLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDaEY7UUFFRCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsaUJBQWlCLEVBQUUsQ0FBQztLQUNsRDtJQUVELE9BQU8sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUM7QUFDMUIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW52YWxpZEJhc2VSb3V0ZUVycm9yLCBpbnZhbGlkUm91dGVFcnJvciwgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvciB9IGZyb20gJy4uL2xvZ2dlcic7XG5pbXBvcnQgeyBpc1N5bWZvbnlQYWdlcmZhbnRhT3V0T2ZSYW5nZUVycm9yIH0gZnJvbSAnLi4vc3ltZm9ueSc7XG5pbXBvcnQge1xuICBCdWlsZFF1ZXJ5U3RyaW5nQ29uZmlnLFxuICBNZXRob2QsXG4gIFF1ZXJ5UGFyYW1zLFxuICBSZXF1ZXN0RXJyb3IsXG4gIFJlcXVlc3RIZWFkZXJzLFxuICBSZXF1ZXN0UmV0cnlGbixcbn0gZnJvbSAnLi9yZXF1ZXN0LnR5cGVzJztcblxuZXhwb3J0IGNvbnN0IGlzUmVxdWVzdEVycm9yID0gPFQgPSB1bmtub3duPihlcnJvcjogdW5rbm93bik6IGVycm9yIGlzIFJlcXVlc3RFcnJvcjxUPiA9PlxuICBlcnJvciBpbnN0YW5jZW9mIE9iamVjdCAmJiAnc3RhdHVzJyBpbiBlcnJvciAmJiAnc3RhdHVzVGV4dCcgaW4gZXJyb3IgJiYgJ3VybCcgaW4gZXJyb3I7XG5cbmV4cG9ydCBjb25zdCBidWlsZFJvdXRlID0gKG9wdGlvbnM6IHtcbiAgYmFzZTogc3RyaW5nO1xuICByb3V0ZTogKChhcmdzOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPikgPT4gc3RyaW5nKSB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWQ7XG4gIHBhdGhQYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgcXVlcnlQYXJhbXM/OiBRdWVyeVBhcmFtcztcbiAgcXVlcnlQYXJhbUNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWc7XG59KSA9PiB7XG4gIGlmIChvcHRpb25zLmJhc2UuZW5kc1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRCYXNlUm91dGVFcnJvcihvcHRpb25zLmJhc2UpO1xuICB9XG5cbiAgbGV0IHJvdXRlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMucm91dGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBpZiAoIW9wdGlvbnMucGF0aFBhcmFtcykge1xuICAgICAgdGhyb3cgcGF0aFBhcmFtc01pc3NpbmdJblJvdXRlRnVuY3Rpb25FcnJvcihvcHRpb25zLnJvdXRlKHt9KSk7XG4gICAgfVxuXG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlKG9wdGlvbnMucGF0aFBhcmFtcyk7XG4gIH0gZWxzZSB7XG4gICAgcm91dGUgPSBvcHRpb25zLnJvdXRlID8/IG51bGw7XG4gIH1cblxuICBpZiAocm91dGUgJiYgIXJvdXRlLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgIHRocm93IGludmFsaWRSb3V0ZUVycm9yKHJvdXRlKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLnF1ZXJ5UGFyYW1zKSB7XG4gICAgY29uc3QgcXVlcnlTdHJpbmcgPSBidWlsZFF1ZXJ5U3RyaW5nKG9wdGlvbnMucXVlcnlQYXJhbXMpO1xuXG4gICAgaWYgKHF1ZXJ5U3RyaW5nKSB7XG4gICAgICByb3V0ZSA9IHJvdXRlID8gYCR7cm91dGV9PyR7cXVlcnlTdHJpbmd9YCA6IGAvPyR7cXVlcnlTdHJpbmd9YDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYCR7b3B0aW9ucy5iYXNlfSR7cm91dGUgPz8gJyd9YDtcbn07XG5cbmV4cG9ydCBjb25zdCBidWlsZFF1ZXJ5U3RyaW5nID0gKHBhcmFtczogUXVlcnlQYXJhbXMsIGNvbmZpZz86IEJ1aWxkUXVlcnlTdHJpbmdDb25maWcpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgY29uc3Qgb2JqZWN0Tm90YXRpb24gPSBjb25maWc/Lm9iamVjdE5vdGF0aW9uID8/ICdicmFja2V0JztcbiAgY29uc3Qgd3JpdGVBcnJheUluZGV4ZXMgPSBjb25maWc/LndyaXRlQXJyYXlJbmRleGVzID8/IGZhbHNlO1xuXG4gIGNvbnN0IHF1ZXJ5UGFyYW1zOiBzdHJpbmdbXSA9IFtdO1xuXG4gIGZ1bmN0aW9uIHByb2Nlc3NWYWx1ZShrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pIHtcbiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZSkpIHtcbiAgICAgIGZvciAoY29uc3QgW2luZGV4LCBhcnJheVZhbHVlXSBvZiB2YWx1ZS5lbnRyaWVzKCkpIHtcbiAgICAgICAgY29uc3QgbmVzdGVkS2V5ID0gd3JpdGVBcnJheUluZGV4ZXMgPyBgJHtrZXl9WyR7aW5kZXh9XWAgOiBgJHtrZXl9W11gO1xuXG4gICAgICAgIHByb2Nlc3NWYWx1ZShuZXN0ZWRLZXksIGFycmF5VmFsdWUpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgZm9yIChjb25zdCBbb2JqS2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHZhbHVlKSkge1xuICAgICAgICBjb25zdCBuZXN0ZWRLZXkgPSBvYmplY3ROb3RhdGlvbiA9PT0gJ2RvdCcgPyBgJHtrZXl9LiR7b2JqS2V5fWAgOiBgJHtrZXl9WyR7b2JqS2V5fV1gO1xuICAgICAgICBwcm9jZXNzVmFsdWUobmVzdGVkS2V5LCB2YWwpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbmNvZGVkS2V5ID0gZW5jb2RlVVJJQ29tcG9uZW50KGtleSk7XG4gICAgICBjb25zdCBlbmNvZGVkVmFsdWUgPSBlbmNvZGVVUklDb21wb25lbnQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIHF1ZXJ5UGFyYW1zLnB1c2goYCR7ZW5jb2RlZEtleX09JHtlbmNvZGVkVmFsdWV9YCk7XG4gICAgfVxuICB9XG5cbiAgZm9yIChjb25zdCBba2V5LCB2YWxdIG9mIE9iamVjdC5lbnRyaWVzKHBhcmFtcykpIHtcbiAgICBwcm9jZXNzVmFsdWUoa2V5LCB2YWwpO1xuICB9XG5cbiAgcmV0dXJuIHF1ZXJ5UGFyYW1zLmxlbmd0aCA/IHF1ZXJ5UGFyYW1zLmpvaW4oJyYnKSA6IG51bGw7XG59O1xuXG5leHBvcnQgY29uc3QgZXh0cmFjdEV4cGlyZXNJblNlY29uZHMgPSAoaGVhZGVyczogUmVxdWVzdEhlYWRlcnMpID0+IHtcbiAgY29uc3QgY2FjaGVDb250cm9sID0gaGVhZGVyc1snY2FjaGUtY29udHJvbCddO1xuICBjb25zdCBhZ2UgPSBoZWFkZXJzWydhZ2UnXTtcbiAgY29uc3QgZXhwaXJlcyA9IGhlYWRlcnNbJ2V4cGlyZXMnXTtcblxuICAvLyBJbiBzZWNvbmRzXG4gIGxldCBleHBpcmVzSW46IG51bWJlciB8IG51bGwgPSBudWxsO1xuICBsZXQgbWF4QWdlOiBudW1iZXIgfCBudWxsID0gbnVsbDtcblxuICBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygnbm8tY2FjaGUnKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKGNhY2hlQ29udHJvbD8uaW5jbHVkZXMoJ21heC1hZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgnbWF4LWFnZT0nKVsxXSk7XG4gIH0gZWxzZSBpZiAoY2FjaGVDb250cm9sPy5pbmNsdWRlcygncy1tYXhhZ2UnKSkge1xuICAgIG1heEFnZSA9IHBhcnNlSW50KGNhY2hlQ29udHJvbC5zcGxpdCgncy1tYXhhZ2U9JylbMV0pO1xuICB9XG5cbiAgaWYgKG1heEFnZSAmJiBhZ2UpIHtcbiAgICBjb25zdCBhZ2VTZWNvbmRzID0gcGFyc2VJbnQoYWdlKTtcblxuICAgIGV4cGlyZXNJbiA9IG1heEFnZSAtIGFnZVNlY29uZHM7XG4gIH0gZWxzZSBpZiAobWF4QWdlKSB7XG4gICAgZXhwaXJlc0luID0gbWF4QWdlIC8gMjsgLy8gV2UgYXNzdW1lIHRoZSByZXNwb25zZSBpcyBoYWxmIHdheSB0byBpdHMgZXhwaXJhdGlvblxuICB9IGVsc2UgaWYgKGV4cGlyZXMpIHtcbiAgICAvLyBVc2VkIGJ5IHNvbWUgYXBpcyB0byB0ZWxsIHRoZSByZXNwb25zZSB3aWxsIG5ldmVyIGV4cGlyZVxuICAgIC8vIEluIHRoaXMgY2FzZSB3ZSBsZXQgdGhlIHJlc3BvbnNlIGV4cGlyZSBhZnRlciAxIGhvdXJcbiAgICBpZiAoZXhwaXJlcyA9PT0gJy0xJykge1xuICAgICAgZXhwaXJlc0luID0gMzYwMDtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgZXhwaXJlc0RhdGUgPSBuZXcgRGF0ZShleHBpcmVzKTtcblxuICAgICAgLy8gY2hlY2sgaWYgdGhlIGRhdGUgaXMgdmFsaWRcbiAgICAgIGlmIChleHBpcmVzRGF0ZS50b1N0cmluZygpICE9PSAnSW52YWxpZCBEYXRlJykge1xuICAgICAgICBleHBpcmVzSW4gPSBNYXRoLmZsb29yKChleHBpcmVzRGF0ZS5nZXRUaW1lKCkgLSBEYXRlLm5vdygpKSAvIDEwMDApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBleHBpcmVzSW47XG59O1xuXG5leHBvcnQgY29uc3QgYnVpbGRUaW1lc3RhbXBGcm9tU2Vjb25kcyA9IChzZWNvbmRzOiBudW1iZXIgfCBudWxsKSA9PiB7XG4gIGlmIChzZWNvbmRzID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gbmV3IERhdGUoRGF0ZS5ub3coKSArIHNlY29uZHMgKiAxMDAwKS5nZXRUaW1lKCk7XG59O1xuXG5leHBvcnQgY29uc3Qgc2VyaWFsaXplQm9keSA9IChib2R5OiB1bmtub3duKTogQXJyYXlCdWZmZXIgfCBVUkxTZWFyY2hQYXJhbXMgfCBCbG9iIHwgRm9ybURhdGEgfCBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKGJvZHkgPT09IG51bGwgfHwgYm9keSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoXG4gICAgYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyIHx8XG4gICAgYm9keSBpbnN0YW5jZW9mIEJsb2IgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgRm9ybURhdGEgfHxcbiAgICBib2R5IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zIHx8XG4gICAgdHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnXG4gICkge1xuICAgIHJldHVybiBib2R5O1xuICB9XG5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnb2JqZWN0JyB8fCB0eXBlb2YgYm9keSA9PT0gJ2Jvb2xlYW4nIHx8IEFycmF5LmlzQXJyYXkoYm9keSkpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoYm9keSk7XG4gIH1cblxuICByZXR1cm4gKGJvZHkgYXMgYW55KS50b1N0cmluZygpO1xufTtcblxuZXhwb3J0IGNvbnN0IHRyYW5zZm9ybU1ldGhvZCA9IChjb25maWc6IHsgbWV0aG9kOiBNZXRob2Q7IHRyYW5zZmVyVmlhPzogJ0dFVCcgfCAnUE9TVCcgfSkgPT4ge1xuICBpZiAoY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9RVUVSWScgfHwgY29uZmlnLm1ldGhvZCA9PT0gJ0dRTF9NVVRBVEUnKSB7XG4gICAgaWYgKCFjb25maWcudHJhbnNmZXJWaWEpIHtcbiAgICAgIHJldHVybiAnUE9TVCc7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZy50cmFuc2ZlclZpYTtcbiAgfVxuXG4gIHJldHVybiBjb25maWcubWV0aG9kO1xufTtcblxuZXhwb3J0IGNvbnN0IGRldGVjdENvbnRlbnRUeXBlSGVhZGVyID0gKGJvZHk6IHVua25vd24pID0+IHtcbiAgLy8gQW4gZW1wdHkgYm9keSBoYXMgbm8gY29udGVudCB0eXBlLlxuICBpZiAoYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIC8vIEZvcm1EYXRhIGJvZGllcyByZWx5IG9uIHRoZSBicm93c2VyJ3MgY29udGVudCB0eXBlIGFzc2lnbm1lbnQuXG4gIGlmIChib2R5IGluc3RhbmNlb2YgRm9ybURhdGEpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuICAvLyBCbG9icyB1c3VhbGx5IGhhdmUgdGhlaXIgb3duIGNvbnRlbnQgdHlwZS4gSWYgaXQgZG9lc24ndCwgdGhlblxuICAvLyBubyB0eXBlIGNhbiBiZSBpbmZlcnJlZC5cbiAgaWYgKGJvZHkgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIGJvZHkudHlwZSB8fCBudWxsO1xuICB9XG4gIC8vIEFycmF5IGJ1ZmZlcnMgaGF2ZSB1bmtub3duIGNvbnRlbnRzIGFuZCB0aHVzIG5vIHR5cGUgY2FuIGJlIGluZmVycmVkLlxuICBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgLy8gVGVjaG5pY2FsbHksIHN0cmluZ3MgY291bGQgYmUgYSBmb3JtIG9mIEpTT04gZGF0YSwgYnV0IGl0J3Mgc2FmZSBlbm91Z2hcbiAgLy8gdG8gYXNzdW1lIHRoZXkncmUgcGxhaW4gc3RyaW5ncy5cbiAgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiAndGV4dC9wbGFpbic7XG4gIH1cblxuICAvLyBBcnJheXMsIG9iamVjdHMsIGJvb2xlYW4gYW5kIG51bWJlcnMgd2lsbCBiZSBlbmNvZGVkIGFzIEpTT04uXG4gIGlmICh0eXBlb2YgYm9keSA9PT0gJ29iamVjdCcgfHwgdHlwZW9mIGJvZHkgPT09ICdudW1iZXInIHx8IHR5cGVvZiBib2R5ID09PSAnYm9vbGVhbicpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL2pzb24nO1xuICB9XG4gIC8vIE5vIHR5cGUgY291bGQgYmUgaW5mZXJyZWQuXG4gIHJldHVybiBudWxsO1xufTtcblxuZXhwb3J0IGNvbnN0IGhhc0hlYWRlciA9IChoZWFkZXJzOiBSZXF1ZXN0SGVhZGVycywgaGVhZGVyOiBzdHJpbmcpID0+IHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKGhlYWRlcnMpLnNvbWUoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09IGhlYWRlci50b0xvd2VyQ2FzZSgpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBmb3JFYWNoSGVhZGVyID0gKGhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzLCBjYWxsYmFjazogKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB2b2lkKSA9PiB7XG4gIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLmZvckVhY2goKFtrZXksIHZhbHVlXSkgPT4ge1xuICAgIGNhbGxiYWNrKGtleSwgdmFsdWUpO1xuICB9KTtcbn07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUFsbFhoclJlc3BvbnNlSGVhZGVycyA9ICh4aHI6IFhNTEh0dHBSZXF1ZXN0KSA9PiB7XG4gIGNvbnN0IGhlYWRlcnMgPSB4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCk7XG4gIGNvbnN0IHBhcnNlZEhlYWRlcnM6IFJlcXVlc3RIZWFkZXJzID0ge307XG5cbiAgZm9yIChjb25zdCBsaW5lIG9mIGhlYWRlcnMuc3BsaXQoJ1xcbicpKSB7XG4gICAgY29uc3QgaW5kZXggPSBsaW5lLmluZGV4T2YoJzonKTtcbiAgICBpZiAoaW5kZXggPiAwKSB7XG4gICAgICBjb25zdCBuYW1lID0gbGluZS5zbGljZSgwLCBpbmRleCk7XG4gICAgICBjb25zdCBrZXkgPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gICAgICBjb25zdCB2YWx1ZSA9IGxpbmUuc2xpY2UoaW5kZXggKyAxKS50cmltKCk7XG5cbiAgICAgIHBhcnNlZEhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBwYXJzZWRIZWFkZXJzO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldFJlc3BvbnNlVXJsID0gKHhocjogWE1MSHR0cFJlcXVlc3QpOiBzdHJpbmcgfCBudWxsID0+IHtcbiAgaWYgKCdyZXNwb25zZVVSTCcgaW4geGhyICYmIHhoci5yZXNwb25zZVVSTCkge1xuICAgIHJldHVybiB4aHIucmVzcG9uc2VVUkw7XG4gIH1cbiAgaWYgKC9eWC1SZXF1ZXN0LVVSTDovbS50ZXN0KHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSkpIHtcbiAgICByZXR1cm4geGhyLmdldFJlc3BvbnNlSGVhZGVyKCdYLVJlcXVlc3QtVVJMJyk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuXG5leHBvcnQgY29uc3Qgc2hvdWxkUmV0cnlSZXF1ZXN0OiBSZXF1ZXN0UmV0cnlGbiA9IChjb25maWcpID0+IHtcbiAgY29uc3QgZGVmYXVsdFJldHJ5RGVsYXkgPSAxMDAwICsgMTAwMCAqIGNvbmZpZy5jdXJyZW50UmV0cnlDb3VudDtcblxuICBpZiAoY29uZmlnLmN1cnJlbnRSZXRyeUNvdW50ID4gMykge1xuICAgIHJldHVybiB7IHJldHJ5OiBmYWxzZSB9O1xuICB9XG5cbiAgaWYgKCFpc1JlcXVlc3RFcnJvcihjb25maWcuZXJyb3IpKSB7XG4gICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gIH1cblxuICBjb25zdCB7IHN0YXR1cywgZGV0YWlsIH0gPSBjb25maWcuZXJyb3I7XG5cbiAgLy8gUmV0cnkgb24gNXh4IGVycm9yc1xuICBpZiAoc3RhdHVzID49IDUwMCkge1xuICAgIC8vIERvbid0IHJldHJ5IGlmIGEgcmVxdWVzdGVkIHBhZ2UgaXMgb3V0IG9mIHJhbmdlXG4gICAgaWYgKGlzU3ltZm9ueVBhZ2VyZmFudGFPdXRPZlJhbmdlRXJyb3IoZGV0YWlsKSkge1xuICAgICAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgLy8gUmV0cnkgb24gNDA4IG9yIDQyNSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuUmVxdWVzdFRpbWVvdXQgfHwgc3RhdHVzID09PSBIdHRwU3RhdHVzQ29kZS5Ub29FYXJseSkge1xuICAgIHJldHVybiB7IHJldHJ5OiB0cnVlLCBkZWxheTogZGVmYXVsdFJldHJ5RGVsYXkgfTtcbiAgfVxuXG4gIC8vIFJldHJ5IG9uIDQyOSBlcnJvcnNcbiAgaWYgKHN0YXR1cyA9PT0gSHR0cFN0YXR1c0NvZGUuVG9vTWFueVJlcXVlc3RzKSB7XG4gICAgY29uc3QgcmV0cnlBZnRlciA9XG4gICAgICBjb25maWcuaGVhZGVyc1sncmV0cnktYWZ0ZXInXSB8fFxuICAgICAgY29uZmlnLmhlYWRlcnNbJ1JldHJ5LUFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWyd4LXJldHJ5LWFmdGVyJ10gfHxcbiAgICAgIGNvbmZpZy5oZWFkZXJzWydYLVJldHJ5LUFmdGVyJ107XG5cbiAgICBpZiAocmV0cnlBZnRlcikge1xuICAgICAgY29uc3QgZGVsYXkgPSBwYXJzZUludChyZXRyeUFmdGVyKSAqIDEwMDA7XG4gICAgICByZXR1cm4geyByZXRyeTogdHJ1ZSwgZGVsYXk6IE51bWJlci5pc05hTihkZWxheSkgPyBkZWZhdWx0UmV0cnlEZWxheSA6IGRlbGF5IH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgcmV0cnk6IHRydWUsIGRlbGF5OiBkZWZhdWx0UmV0cnlEZWxheSB9O1xuICB9XG5cbiAgcmV0dXJuIHsgcmV0cnk6IGZhbHNlIH07XG59O1xuXG5leHBvcnQgY29uc3QgZW51bSBIdHRwU3RhdHVzQ29kZSB7XG4gIFVua25vd24gPSAwLFxuXG4gIENvbnRpbnVlID0gMTAwLFxuICBTd2l0Y2hpbmdQcm90b2NvbHMgPSAxMDEsXG4gIFByb2Nlc3NpbmcgPSAxMDIsXG4gIEVhcmx5SGludHMgPSAxMDMsXG5cbiAgT2sgPSAyMDAsXG4gIENyZWF0ZWQgPSAyMDEsXG4gIEFjY2VwdGVkID0gMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb24gPSAyMDMsXG4gIE5vQ29udGVudCA9IDIwNCxcbiAgUmVzZXRDb250ZW50ID0gMjA1LFxuICBQYXJ0aWFsQ29udGVudCA9IDIwNixcbiAgTXVsdGlTdGF0dXMgPSAyMDcsXG4gIEFscmVhZHlSZXBvcnRlZCA9IDIwOCxcbiAgSW1Vc2VkID0gMjI2LFxuXG4gIE11bHRpcGxlQ2hvaWNlcyA9IDMwMCxcbiAgTW92ZWRQZXJtYW5lbnRseSA9IDMwMSxcbiAgRm91bmQgPSAzMDIsXG4gIFNlZU90aGVyID0gMzAzLFxuICBOb3RNb2RpZmllZCA9IDMwNCxcbiAgVXNlUHJveHkgPSAzMDUsXG4gIFVudXNlZCA9IDMwNixcbiAgVGVtcG9yYXJ5UmVkaXJlY3QgPSAzMDcsXG4gIFBlcm1hbmVudFJlZGlyZWN0ID0gMzA4LFxuXG4gIEJhZFJlcXVlc3QgPSA0MDAsXG4gIFVuYXV0aG9yaXplZCA9IDQwMSxcbiAgUGF5bWVudFJlcXVpcmVkID0gNDAyLFxuICBGb3JiaWRkZW4gPSA0MDMsXG4gIE5vdEZvdW5kID0gNDA0LFxuICBNZXRob2ROb3RBbGxvd2VkID0gNDA1LFxuICBOb3RBY2NlcHRhYmxlID0gNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQgPSA0MDcsXG4gIFJlcXVlc3RUaW1lb3V0ID0gNDA4LFxuICBDb25mbGljdCA9IDQwOSxcbiAgR29uZSA9IDQxMCxcbiAgTGVuZ3RoUmVxdWlyZWQgPSA0MTEsXG4gIFByZWNvbmRpdGlvbkZhaWxlZCA9IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlID0gNDEzLFxuICBVcmlUb29Mb25nID0gNDE0LFxuICBVbnN1cHBvcnRlZE1lZGlhVHlwZSA9IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZSA9IDQxNixcbiAgRXhwZWN0YXRpb25GYWlsZWQgPSA0MTcsXG4gIEltQVRlYXBvdCA9IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0ID0gNDIxLFxuICBVbnByb2Nlc3NhYmxlRW50aXR5ID0gNDIyLFxuICBMb2NrZWQgPSA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3kgPSA0MjQsXG4gIFRvb0Vhcmx5ID0gNDI1LFxuICBVcGdyYWRlUmVxdWlyZWQgPSA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkID0gNDI4LFxuICBUb29NYW55UmVxdWVzdHMgPSA0MjksXG4gIFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZSA9IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnMgPSA0NTEsXG5cbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvciA9IDUwMCxcbiAgTm90SW1wbGVtZW50ZWQgPSA1MDEsXG4gIEJhZEdhdGV3YXkgPSA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZSA9IDUwMyxcbiAgR2F0ZXdheVRpbWVvdXQgPSA1MDQsXG4gIEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkID0gNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXMgPSA1MDYsXG4gIEluc3VmZmljaWVudFN0b3JhZ2UgPSA1MDcsXG4gIExvb3BEZXRlY3RlZCA9IDUwOCxcbiAgTm90RXh0ZW5kZWQgPSA1MTAsXG4gIE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkID0gNTExLFxufVxuIl19
|
|
@@ -94,70 +94,33 @@ const buildRoute = (options) => {
|
|
|
94
94
|
}
|
|
95
95
|
return `${options.base}${route ?? ''}`;
|
|
96
96
|
};
|
|
97
|
-
const buildQueryString = (params) => {
|
|
98
|
-
const
|
|
99
|
-
const
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
return buildQueryArrayString(key, validParams[key]);
|
|
103
|
-
}
|
|
104
|
-
if (typeof validParams[key] === 'object' && validParams[key] !== null) {
|
|
105
|
-
return buildQueryObjectString(key, validParams[key]);
|
|
106
|
-
}
|
|
107
|
-
return `${key}=${encodeURIComponent(validParams[key])}`;
|
|
108
|
-
})
|
|
109
|
-
.join('&');
|
|
110
|
-
return queryString || null;
|
|
111
|
-
};
|
|
112
|
-
const buildQueryArrayString = (key, array) => {
|
|
113
|
-
const uriBrackets = encodeURIComponent('[]');
|
|
114
|
-
return array
|
|
115
|
-
.slice()
|
|
116
|
-
.map((item) => `${key}${uriBrackets}=${encodeURIComponent(item)}`)
|
|
117
|
-
.join('&');
|
|
118
|
-
};
|
|
119
|
-
const buildQueryObjectString = (key, object) => {
|
|
120
|
-
const uriBracketStart = encodeURIComponent(`${key}[`);
|
|
121
|
-
const uriBracketEnd = encodeURIComponent(`]`);
|
|
122
|
-
return Object.keys(object)
|
|
123
|
-
.map((k) => {
|
|
124
|
-
const key = `${uriBracketStart}${k}${uriBracketEnd}`;
|
|
125
|
-
if (Array.isArray(object[k])) {
|
|
126
|
-
return buildQueryArrayString(key, object[k]);
|
|
127
|
-
}
|
|
128
|
-
if (typeof object[k] === 'object' && object[k] !== null) {
|
|
129
|
-
return buildQueryObjectString(key, object[k]);
|
|
130
|
-
}
|
|
131
|
-
return `${key}=${encodeURIComponent(object[k])}`;
|
|
132
|
-
})
|
|
133
|
-
.join('&');
|
|
134
|
-
};
|
|
135
|
-
const filterInvalidParams = (params) => {
|
|
136
|
-
const filteredParams = Object.entries(params)
|
|
137
|
-
.map(([key, value]) => {
|
|
97
|
+
const buildQueryString = (params, config) => {
|
|
98
|
+
const objectNotation = config?.objectNotation ?? 'bracket';
|
|
99
|
+
const writeArrayIndexes = config?.writeArrayIndexes ?? false;
|
|
100
|
+
const queryParams = [];
|
|
101
|
+
function processValue(key, value) {
|
|
138
102
|
if (Array.isArray(value)) {
|
|
139
|
-
|
|
103
|
+
for (const [index, arrayValue] of value.entries()) {
|
|
104
|
+
const nestedKey = writeArrayIndexes ? `${key}[${index}]` : `${key}[]`;
|
|
105
|
+
processValue(nestedKey, arrayValue);
|
|
106
|
+
}
|
|
140
107
|
}
|
|
141
108
|
else if (typeof value === 'object' && value !== null) {
|
|
142
|
-
|
|
109
|
+
for (const [objKey, val] of Object.entries(value)) {
|
|
110
|
+
const nestedKey = objectNotation === 'dot' ? `${key}.${objKey}` : `${key}[${objKey}]`;
|
|
111
|
+
processValue(nestedKey, val);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
const encodedKey = encodeURIComponent(key);
|
|
116
|
+
const encodedValue = encodeURIComponent(value);
|
|
117
|
+
queryParams.push(`${encodedKey}=${encodedValue}`);
|
|
143
118
|
}
|
|
144
|
-
return [key, value];
|
|
145
|
-
})
|
|
146
|
-
.filter(([, value]) => isParamValid(value))
|
|
147
|
-
.reduce((acc, [key, value]) => ({ ...acc, [key]: value }), {});
|
|
148
|
-
return filteredParams;
|
|
149
|
-
};
|
|
150
|
-
const isParamValid = (primitive) => {
|
|
151
|
-
if (primitive === undefined || primitive === null || primitive === '') {
|
|
152
|
-
return false;
|
|
153
|
-
}
|
|
154
|
-
if (typeof primitive === 'string' && primitive.trim() === '') {
|
|
155
|
-
return false;
|
|
156
119
|
}
|
|
157
|
-
|
|
158
|
-
|
|
120
|
+
for (const [key, val] of Object.entries(params)) {
|
|
121
|
+
processValue(key, val);
|
|
159
122
|
}
|
|
160
|
-
return
|
|
123
|
+
return queryParams.length ? queryParams.join('&') : null;
|
|
161
124
|
};
|
|
162
125
|
const extractExpiresInSeconds = (headers) => {
|
|
163
126
|
const cacheControl = headers['cache-control'];
|
|
@@ -793,6 +756,12 @@ class Query {
|
|
|
793
756
|
get _enableSmartPolling() {
|
|
794
757
|
return this._queryConfig.enableSmartPolling ?? true;
|
|
795
758
|
}
|
|
759
|
+
/**
|
|
760
|
+
* @internal
|
|
761
|
+
*/
|
|
762
|
+
get _arguments() {
|
|
763
|
+
return this._args;
|
|
764
|
+
}
|
|
796
765
|
get store() {
|
|
797
766
|
return this._queryConfig.entity?.store ?? null;
|
|
798
767
|
}
|
|
@@ -1248,10 +1217,10 @@ class QueryDirective {
|
|
|
1248
1217
|
this._viewContainerRef.createEmbeddedView(this._mainTemplateRef, this._viewContext);
|
|
1249
1218
|
}
|
|
1250
1219
|
}
|
|
1251
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.
|
|
1252
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.
|
|
1220
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: QueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1221
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: QueryDirective, isStandalone: true, selector: "[etQuery]", inputs: { query: ["etQuery", "query"], cache: ["etQueryCache", "cache"] }, ngImport: i0 }); }
|
|
1253
1222
|
}
|
|
1254
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.
|
|
1223
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: QueryDirective, decorators: [{
|
|
1255
1224
|
type: Directive,
|
|
1256
1225
|
args: [{
|
|
1257
1226
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -1308,24 +1277,26 @@ class InfinityQuery {
|
|
|
1308
1277
|
if (!queries.length) {
|
|
1309
1278
|
return of([]);
|
|
1310
1279
|
}
|
|
1311
|
-
return combineLatest(queries.map((query) => query.state
|
|
1280
|
+
return combineLatest(queries.map((query) => query.state$.pipe(map((state) => ({ state, query })))));
|
|
1312
1281
|
}), tap((states) => {
|
|
1313
|
-
const lastState = states[states.length - 1];
|
|
1282
|
+
const lastState = states[states.length - 1].state;
|
|
1283
|
+
const lastQuery = states[states.length - 1].query;
|
|
1314
1284
|
if (!isQueryStateSuccess(lastState)) {
|
|
1315
1285
|
return;
|
|
1316
1286
|
}
|
|
1317
1287
|
const totalPages = this._config.response.totalPagesExtractor?.({
|
|
1318
1288
|
response: lastState.response,
|
|
1319
1289
|
itemsPerPage: this.itemsPerPage,
|
|
1290
|
+
arguments: lastQuery._arguments,
|
|
1320
1291
|
}) ??
|
|
1321
1292
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1322
1293
|
lastState.response?.totalPages ??
|
|
1323
1294
|
null;
|
|
1324
1295
|
this._totalPages$.next(totalPages);
|
|
1325
|
-
}), map((
|
|
1326
|
-
const fullData =
|
|
1327
|
-
if (isQueryStateSuccess(state)) {
|
|
1328
|
-
let data = this._config?.response.valueExtractor(state.response);
|
|
1296
|
+
}), map((stateMaps) => {
|
|
1297
|
+
const fullData = stateMaps.reduce((acc, stateMap) => {
|
|
1298
|
+
if (isQueryStateSuccess(stateMap.state)) {
|
|
1299
|
+
let data = this._config?.response.valueExtractor(stateMap.state.response);
|
|
1329
1300
|
if (this._config.response.reverse) {
|
|
1330
1301
|
data = [...data].reverse();
|
|
1331
1302
|
}
|
|
@@ -1577,10 +1548,10 @@ class InfinityQueryDirective {
|
|
|
1577
1548
|
this._viewContext.currentQuery = null;
|
|
1578
1549
|
this._data$.next([]);
|
|
1579
1550
|
}
|
|
1580
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.
|
|
1581
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.
|
|
1551
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: InfinityQueryDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1552
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: InfinityQueryDirective, isStandalone: true, selector: "[etInfinityQuery]", inputs: { infinityQuery: ["etInfinityQuery", "infinityQuery"] }, providers: [{ provide: INFINITY_QUERY_TOKEN, useExisting: InfinityQueryDirective }], exportAs: ["etInfinityQuery"], hostDirectives: [{ directive: i1.DelayableDirective }], ngImport: i0 }); }
|
|
1582
1553
|
}
|
|
1583
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.
|
|
1554
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: InfinityQueryDirective, decorators: [{
|
|
1584
1555
|
type: Directive,
|
|
1585
1556
|
args: [{
|
|
1586
1557
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -1631,10 +1602,10 @@ class InfinityQueryTriggerDirective {
|
|
|
1631
1602
|
});
|
|
1632
1603
|
this._observer.observe(this._elementRef.nativeElement);
|
|
1633
1604
|
}
|
|
1634
|
-
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.
|
|
1635
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.
|
|
1605
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: InfinityQueryTriggerDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
|
|
1606
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.1.2", type: InfinityQueryTriggerDirective, isStandalone: true, selector: "[etInfinityQueryTrigger], et-infinity-query-trigger", inputs: { scrollContainerSelector: "scrollContainerSelector" }, ngImport: i0 }); }
|
|
1636
1607
|
}
|
|
1637
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.
|
|
1608
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.1.2", ngImport: i0, type: InfinityQueryTriggerDirective, decorators: [{
|
|
1638
1609
|
type: Directive,
|
|
1639
1610
|
args: [{
|
|
1640
1611
|
// eslint-disable-next-line @angular-eslint/directive-selector
|
|
@@ -1762,6 +1733,7 @@ class QueryCreator {
|
|
|
1762
1733
|
route: this._queryConfig.route,
|
|
1763
1734
|
pathParams: args?.pathParams,
|
|
1764
1735
|
queryParams: computeQueryQueryParams({ config: this._queryConfig, client: this._client, args }),
|
|
1736
|
+
queryParamConfig: this._client.config.request?.queryParams,
|
|
1765
1737
|
});
|
|
1766
1738
|
const cacheKey = isGqlQueryConfig(this._queryConfig) ? buildGqlCacheKey(this._queryConfig, args) : route;
|
|
1767
1739
|
if (shouldCacheQuery(this._queryConfig.method)) {
|
|
@@ -2352,5 +2324,5 @@ const def = () => null;
|
|
|
2352
2324
|
* Generated bundle index. Do not edit.
|
|
2353
2325
|
*/
|
|
2354
2326
|
|
|
2355
|
-
export { BasicAuthProvider, BearerAuthProvider, CustomHeaderAuthProvider, EntityStore, INFINITY_QUERY_TOKEN, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, Query, QueryClient, QueryCreator, QueryDirective, QueryError, QueryField, QueryForm, QueryFormGroup, QueryStore, buildErrorMessage, buildGqlCacheKey,
|
|
2327
|
+
export { BasicAuthProvider, BearerAuthProvider, CustomHeaderAuthProvider, EntityStore, INFINITY_QUERY_TOKEN, InfinityQuery, InfinityQueryDirective, InfinityQueryTriggerDirective, Query, QueryClient, QueryCreator, QueryDirective, QueryError, QueryField, QueryForm, QueryFormGroup, QueryStore, buildErrorMessage, buildGqlCacheKey, buildQueryString, buildRoute, buildTimestampFromSeconds, castQueryCreatorTypes, computeQueryAuthHeader, computeQueryBody, computeQueryHeaders, computeQueryMethod, computeQueryQueryParams, createInfinityQueryConfig, createQueryCollection, decryptBearer, deepFreeze, def, detectContentTypeHeader, extractExpiresInSeconds, extractQuery, filterFailure, filterNull, filterQueryStates, filterSuccess, forEachHeader, getDefaultHeaders, getResponseUrl, gql, hasHeader, ignoreAutoRefresh, invalidBaseRouteError, invalidBodyError, invalidRouteError, isAutoRefresh, isBasicAuthProvider, isBearerAuthProvider, isCustomHeaderAuthProvider, isGqlQueryConfig, isQuery, isQueryStateCancelled, isQueryStateFailure, isQueryStateLoading, isQueryStatePrepared, isQueryStateSuccess, isRequestError, isSymfonyError, isSymfonyPagerfantaOutOfRangeError, mapToPaginated, mergeHeaders, paginatedEntityValueUpdater, parseAllXhrResponseHeaders, pathParamsMissingInRouteFunctionError, queryStateAlreadyHasKeyError, queryStateCannotTransformError, queryStateDoesNotContainKeyError, request, resetPageOnError, serializeBody, shouldCacheQuery, shouldRetryRequest, skipPaginationPageParamCalculator, switchQueryCollectionState, switchQueryState, takeUntilResponse, transformGql, transformMethod, transformToBoolean, transformToBooleanArray, transformToDate, transformToDateArray, transformToNumber, transformToNumberArray, transformToSort, transformToSortQueryParam, transformToString, transformToStringArray };
|
|
2356
2328
|
//# sourceMappingURL=ethlete-query.mjs.map
|