1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 | 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 7× 7× 7× 7× 7× 7× 7× 1× 2× 2× 1× 1× 1× 2× 2× 2× 2× 1× 1× 1× 1× 1× 12× 12× 12× 12× 12× 12× 12× 12× 12× 12× 12× 12× 12× 12× 1× 1× 1× 1× 3× 3× 4× 3× 3× 1× 2× 2× 3× 3× 2× 2× 1× 1× 1× 2× 1× 1× 1× 4× 3× 1× 1× 4× 1× 3× 5× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1× 1× 1× 2× 1× 1× 1× 3× 1× 2× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 6× 6× 1× 6× 72× 34× 6× 1× 1× | /// <reference path="./all.d.ts" /> "use strict"; Iif (!global.Promise) { require('es6-promise').polyfill(); } var request = require('requestretry'); var assign = require('object-assign'); var qs = require('qs'); var util_1 = require('./util'); var SEARCH = '/search'; var REFINEMENTS = '/refinements'; var REFINEMENT_SEARCH = '/refinement'; var CLUSTER = '/cluster'; var BIASING_DEFAULTS = { biases: [], bringToTop: [], augmentBiases: false }; var CloudBridge = (function () { function CloudBridge(clientKey, customerId) { this.clientKey = clientKey; this.customerId = customerId; var baseUrl = "https://" + customerId + ".groupbycloud.com:443/api/v1"; this.bridgeUrl = baseUrl + SEARCH; this.bridgeRefinementsUrl = baseUrl + REFINEMENTS; this.bridgeRefinementsSearchUrl = baseUrl + REFINEMENT_SEARCH; this.bridgeClusterUrl = baseUrl + CLUSTER; } CloudBridge.prototype.search = function (query, callback) { var response = this.fireRequest(this.bridgeUrl, query.build(), query.queryParams); if (callback) { response.then(function (res) { return callback(undefined, res); }) .catch(function (err) { return callback(err); }); } else { return response; } }; CloudBridge.prototype.fireRequest = function (url, body, queryParams) { var _this = this; var options = { method: 'POST', uri: this.bridgeUrl, qs: queryParams, body: assign(body, { clientKey: this.clientKey }), json: true, timeout: 1500, maxAttempts: 3, retryDelay: 80, fullResponse: false }; return request(options) .then(function (res) { return res.records ? assign(res, { records: res.records.map(_this.convertRecordFields) }) : res; }); }; CloudBridge.prototype.convertRecordFields = function (record) { var converted = assign(record, { id: record._id, url: record._u, title: record._t }); delete converted._id; delete converted._u; delete converted._t; if (record._snippet) { converted.snippet = record._snippet; delete converted._snippet; } return converted; }; return CloudBridge; }()); exports.CloudBridge = CloudBridge; var Query = (function () { function Query(query) { Iif (query === void 0) { query = ''; } this.request = {}; this.unprocessedNavigations = []; this.queryParams = {}; this.request.query = query; this.request.sort = []; this.request.fields = []; this.request.orFields = []; this.request.refinements = []; this.request.customUrlParams = []; this.request.includedNavigations = []; this.request.excludedNavigations = []; this.request.wildcardSearchEnabled = false; this.request.pruneRefinements = true; } Query.prototype.withConfiguration = function (configuration) { assign(this.request, configuration); return this; }; Query.prototype.withSelectedRefinements = function () { var refinements = []; for (var _i = 0; _i < arguments.length; _i++) { refinements[_i - 0] = arguments[_i]; } (_a = this.request.refinements).push.apply(_a, refinements); return this; var _a; }; Query.prototype.withRefinements = function (navigationName) { var refinements = []; for (var _i = 1; _i < arguments.length; _i++) { refinements[_i - 1] = arguments[_i]; } var convert = function (refinement) { return assign(refinement, { navigationName: navigationName }); }; (_a = this.request.refinements).push.apply(_a, refinements.map(convert)); return this; var _a; }; Query.prototype.withNavigations = function () { var navigations = []; for (var _i = 0; _i < arguments.length; _i++) { navigations[_i - 0] = arguments[_i]; } (_a = this.unprocessedNavigations).push.apply(_a, navigations); return this; var _a; }; Query.prototype.withCustomUrlParams = function (customUrlParams) { if (typeof customUrlParams === 'string') { (_a = this.request.customUrlParams).push.apply(_a, this.convertParamString(customUrlParams)); } else Eif (customUrlParams instanceof Array) { (_b = this.request.customUrlParams).push.apply(_b, customUrlParams); } return this; var _a, _b; }; Query.prototype.convertParamString = function (customUrlParams) { var parsed = qs.parse(customUrlParams); return Object.keys(parsed).reduce(function (converted, key) { return converted.concat({ key: key, value: parsed[key] }); }, []); }; Query.prototype.withFields = function () { var fields = []; for (var _i = 0; _i < arguments.length; _i++) { fields[_i - 0] = arguments[_i]; } (_a = this.request.fields).push.apply(_a, fields); return this; var _a; }; Query.prototype.withOrFields = function () { var orFields = []; for (var _i = 0; _i < arguments.length; _i++) { orFields[_i - 0] = arguments[_i]; } (_a = this.request.orFields).push.apply(_a, orFields); return this; var _a; }; Query.prototype.withSorts = function () { var sorts = []; for (var _i = 0; _i < arguments.length; _i++) { sorts[_i - 0] = arguments[_i]; } (_a = this.request.sort).push.apply(_a, sorts); return this; var _a; }; Query.prototype.withIncludedNavigations = function () { var navigationNames = []; for (var _i = 0; _i < arguments.length; _i++) { navigationNames[_i - 0] = arguments[_i]; } (_a = this.request.includedNavigations).push.apply(_a, navigationNames); return this; var _a; }; Query.prototype.withExcludedNavigations = function () { var navigationNames = []; for (var _i = 0; _i < arguments.length; _i++) { navigationNames[_i - 0] = arguments[_i]; } (_a = this.request.excludedNavigations).push.apply(_a, navigationNames); return this; var _a; }; Query.prototype.withQueryParams = function (queryParams) { switch (typeof queryParams) { case 'string': return assign(this, { queryParams: this.convertQueryString(queryParams) }); case 'object': return assign(this, { queryParams: queryParams }); } }; Query.prototype.convertQueryString = function (queryParams) { return qs.parse(queryParams); }; Query.prototype.refineByValue = function (navigationName, value, exclude) { Iif (exclude === void 0) { exclude = false; } return this.withSelectedRefinements({ navigationName: navigationName, value: value, exclude: exclude, type: 'Value' }); }; Query.prototype.refineByRange = function (navigationName, low, high, exclude) { Eif (exclude === void 0) { exclude = false; } return this.withSelectedRefinements({ navigationName: navigationName, low: low, high: high, exclude: exclude, type: 'Range' }); }; Query.prototype.restrictNavigation = function (restrictNavigation) { this.request.restrictNavigation = restrictNavigation; return this; }; Query.prototype.skip = function (skip) { this.request.skip = skip; return this; }; Query.prototype.withPageSize = function (pageSize) { this.request.pageSize = pageSize; return this; }; Query.prototype.withMatchStrategy = function (matchStrategy) { this.request.matchStrategy = matchStrategy; return this; }; Query.prototype.withBiasing = function (biasing) { this.request.biasing = biasing; return this; }; Query.prototype.enableWildcardSearch = function () { this.request.wildcardSearchEnabled = true; return this; }; Query.prototype.disableAutocorrection = function () { this.request.disableAutocorrection = true; return this; }; Query.prototype.disableBinaryPayload = function () { this.request.returnBinary = false; return this; }; Query.prototype.allowPrunedRefinements = function () { this.request.pruneRefinements = false; return this; }; Query.prototype.build = function () { (_a = this.request.refinements).push.apply(_a, util_1.NavigationConverter.convert(this.unprocessedNavigations)); return this.clearEmptyArrays(this.request); var _a; }; Query.prototype.clearEmptyArrays = function (request) { for (var key in request) { if (request[key] instanceof Array && request[key].length === 0) { delete request[key]; } } return request; }; return Query; }()); exports.Query = Query; //# sourceMappingURL=data:application/json;base64,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SUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUMsSUFBSSxXQUFJLDBCQUFtQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsQ0FBQyxDQUFDO1FBRTNGLE1BQU0sQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDOztJQUM3QyxDQUFDO0lBRU8sZ0NBQWdCLEdBQXhCLFVBQXlCLE9BQWdCO1FBQ3ZDLEdBQUcsQ0FBQyxDQUFDLElBQUksR0FBRyxJQUFJLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDeEIsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEtBQUssSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQy9ELE9BQU8sT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3RCLENBQUM7UUFDSCxDQUFDO1FBQ0QsTUFBTSxDQUFDLE9BQU8sQ0FBQztJQUNqQixDQUFDO0lBRUgsWUFBQztBQUFELENBL0tBLEFBK0tDLElBQUE7QUEvS1ksYUFBSyxRQStLakIsQ0FBQSIsImZpbGUiOiJsaWIvY29yZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCIuL2FsbC5kLnRzXCIgLz5cblxuaWYgKCFnbG9iYWwuUHJvbWlzZSkge1xuICByZXF1aXJlKCdlczYtcHJvbWlzZScpLnBvbHlmaWxsKCk7XG59XG5pbXBvcnQgcmVxdWVzdCA9IHJlcXVpcmUoJ3JlcXVlc3RyZXRyeScpO1xuaW1wb3J0IGFzc2lnbiA9IHJlcXVpcmUoJ29iamVjdC1hc3NpZ24nKTtcbmltcG9ydCBxcyA9IHJlcXVpcmUoJ3FzJyk7XG5pbXBvcnQge1xuICBSZXF1ZXN0LFxuICBTZWxlY3RlZFZhbHVlUmVmaW5lbWVudCxcbiAgU2VsZWN0ZWRSYW5nZVJlZmluZW1lbnQsXG4gIFNlbGVjdGVkUmVmaW5lbWVudCxcbiAgQ3VzdG9tVXJsUGFyYW0sXG4gIFJlc3RyaWN0TmF2aWdhdGlvbixcbiAgU29ydCxcbiAgTWF0Y2hTdHJhdGVneSxcbiAgQmlhc2luZyxcbiAgQmlhc1xufSBmcm9tICcuL3JlcXVlc3QtbW9kZWxzJztcbmltcG9ydCB7XG4gIFJlc3VsdHMsXG4gIFJlY29yZCxcbiAgVmFsdWVSZWZpbmVtZW50LFxuICBSYW5nZVJlZmluZW1lbnQsXG4gIFJlZmluZW1lbnQsXG4gIFJlZmluZW1lbnRUeXBlLFxuICBOYXZpZ2F0aW9uXG59IGZyb20gJy4vcmVzcG9uc2UtbW9kZWxzJztcbmltcG9ydCB7IE5hdmlnYXRpb25Db252ZXJ0ZXIgfSBmcm9tICcuL3V0aWwnO1xuXG5jb25zdCBTRUFSQ0ggPSAnL3NlYXJjaCc7XG5jb25zdCBSRUZJTkVNRU5UUyA9ICcvcmVmaW5lbWVudHMnO1xuY29uc3QgUkVGSU5FTUVOVF9TRUFSQ0ggPSAnL3JlZmluZW1lbnQnO1xuY29uc3QgQ0xVU1RFUiA9ICcvY2x1c3Rlcic7XG5cbmNvbnN0IEJJQVNJTkdfREVGQVVMVFMgPSB7XG4gIGJpYXNlczogW10sXG4gIGJyaW5nVG9Ub3A6IFtdLFxuICBhdWdtZW50Qmlhc2VzOiBmYWxzZVxufTtcblxuZXhwb3J0IGNsYXNzIENsb3VkQnJpZGdlIHtcblxuICBwcml2YXRlIGJyaWRnZVVybDogc3RyaW5nO1xuICBwcml2YXRlIGJyaWRnZVJlZmluZW1lbnRzVXJsOiBzdHJpbmc7XG4gIHByaXZhdGUgYnJpZGdlUmVmaW5lbWVudHNTZWFyY2hVcmw6IHN0cmluZztcbiAgcHJpdmF0ZSBicmlkZ2VDbHVzdGVyVXJsOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBjbGllbnRLZXk6IHN0cmluZywgcHJpdmF0ZSBjdXN0b21lcklkOiBzdHJpbmcpIHtcbiAgICBsZXQgYmFzZVVybCA9IGBodHRwczovLyR7Y3VzdG9tZXJJZH0uZ3JvdXBieWNsb3VkLmNvbTo0NDMvYXBpL3YxYDtcbiAgICB0aGlzLmJyaWRnZVVybCA9IGJhc2VVcmwgKyBTRUFSQ0g7XG4gICAgdGhpcy5icmlkZ2VSZWZpbmVtZW50c1VybCA9IGJhc2VVcmwgKyBSRUZJTkVNRU5UUztcbiAgICB0aGlzLmJyaWRnZVJlZmluZW1lbnRzU2VhcmNoVXJsID0gYmFzZVVybCArIFJFRklORU1FTlRfU0VBUkNIO1xuICAgIHRoaXMuYnJpZGdlQ2x1c3RlclVybCA9IGJhc2VVcmwgKyBDTFVTVEVSO1xuICB9XG5cbiAgc2VhcmNoKHF1ZXJ5OiBRdWVyeSwgY2FsbGJhY2s6IChFcnJvcj8sIFJlc3VsdHM/KSA9PiB2b2lkKTogUHJvbWlzZUxpa2U8UmVzdWx0cz4gfCB2b2lkIHtcbiAgICBsZXQgcmVzcG9uc2UgPSB0aGlzLmZpcmVSZXF1ZXN0KHRoaXMuYnJpZGdlVXJsLCBxdWVyeS5idWlsZCgpLCBxdWVyeS5xdWVyeVBhcmFtcyk7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICByZXNwb25zZS50aGVuKHJlcyA9PiBjYWxsYmFjayh1bmRlZmluZWQsIHJlcykpXG4gICAgICAgIC5jYXRjaChlcnIgPT4gY2FsbGJhY2soZXJyKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiByZXNwb25zZTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpcmVSZXF1ZXN0KHVybDogc3RyaW5nLCBib2R5OiBSZXF1ZXN0LCBxdWVyeVBhcmFtczogT2JqZWN0KTogUHJvbWlzZUxpa2U8UmVzdWx0cz4ge1xuICAgIGxldCBvcHRpb25zID0ge1xuICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICB1cmk6IHRoaXMuYnJpZGdlVXJsLFxuICAgICAgcXM6IHF1ZXJ5UGFyYW1zLFxuICAgICAgYm9keTogYXNzaWduKGJvZHksIHsgY2xpZW50S2V5OiB0aGlzLmNsaWVudEtleSB9KSxcbiAgICAgIGpzb246IHRydWUsXG5cbiAgICAgIHRpbWVvdXQ6IDE1MDAsXG4gICAgICBtYXhBdHRlbXB0czogMyxcbiAgICAgIHJldHJ5RGVsYXk6IDgwLFxuICAgICAgZnVsbFJlc3BvbnNlOiBmYWxzZVxuICAgIH07XG4gICAgcmV0dXJuIHJlcXVlc3Qob3B0aW9ucylcbiAgICAgIC50aGVuKHJlcyA9PiByZXMucmVjb3JkcyA/IGFzc2lnbihyZXMsIHsgcmVjb3JkczogcmVzLnJlY29yZHMubWFwKHRoaXMuY29udmVydFJlY29yZEZpZWxkcykgfSkgOiByZXMpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb252ZXJ0UmVjb3JkRmllbGRzKHJlY29yZDogUmF3UmVjb3JkKTogUmVjb3JkIHtcbiAgICBsZXQgY29udmVydGVkID0gYXNzaWduKHJlY29yZCwgeyBpZDogcmVjb3JkLl9pZCwgdXJsOiByZWNvcmQuX3UsIHRpdGxlOiByZWNvcmQuX3QgfSk7XG4gICAgZGVsZXRlIGNvbnZlcnRlZC5faWQ7XG4gICAgZGVsZXRlIGNvbnZlcnRlZC5fdTtcbiAgICBkZWxldGUgY29udmVydGVkLl90O1xuICAgIGlmIChyZWNvcmQuX3NuaXBwZXQpIHtcbiAgICAgIGNvbnZlcnRlZC5zbmlwcGV0ID0gcmVjb3JkLl9zbmlwcGV0O1xuICAgICAgZGVsZXRlIGNvbnZlcnRlZC5fc25pcHBldDtcbiAgICB9XG4gICAgcmV0dXJuIGNvbnZlcnRlZDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgUmF3UmVjb3JkIHtcbiAgX2lkOiBzdHJpbmc7XG4gIF91OiBzdHJpbmc7XG4gIF90OiBzdHJpbmc7XG4gIF9zbmlwcGV0Pzogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5Q29uZmlndXJhdGlvbiB7XG4gIHVzZXJJZD86IHN0cmluZztcbiAgbGFuZ3VhZ2U/OiBzdHJpbmc7XG4gIGNvbGxlY3Rpb24/OiBzdHJpbmc7XG4gIGFyZWE/OiBzdHJpbmc7XG4gIGJpYXNpbmdQcm9maWxlPzogc3RyaW5nO1xufVxuXG5leHBvcnQgY2xhc3MgUXVlcnkge1xuICBwcml2YXRlIHJlcXVlc3Q6IFJlcXVlc3Q7XG4gIHByaXZhdGUgdW5wcm9jZXNzZWROYXZpZ2F0aW9uczogQXJyYXk8TmF2aWdhdGlvbj47XG4gIHF1ZXJ5UGFyYW1zOiBPYmplY3Q7XG5cbiAgY29uc3RydWN0b3IocXVlcnk6IHN0cmluZyA9ICcnKSB7XG4gICAgdGhpcy5yZXF1ZXN0ID0gPFJlcXVlc3Q+e307XG4gICAgdGhpcy51bnByb2Nlc3NlZE5hdmlnYXRpb25zID0gW107XG4gICAgdGhpcy5xdWVyeVBhcmFtcyA9IHt9O1xuXG4gICAgdGhpcy5yZXF1ZXN0LnF1ZXJ5ID0gcXVlcnk7XG4gICAgdGhpcy5yZXF1ZXN0LnNvcnQgPSBbXTtcbiAgICB0aGlzLnJlcXVlc3QuZmllbGRzID0gW107XG4gICAgdGhpcy5yZXF1ZXN0Lm9yRmllbGRzID0gW107XG4gICAgdGhpcy5yZXF1ZXN0LnJlZmluZW1lbnRzID0gW107XG4gICAgdGhpcy5yZXF1ZXN0LmN1c3RvbVVybFBhcmFtcyA9IFtdO1xuICAgIHRoaXMucmVxdWVzdC5pbmNsdWRlZE5hdmlnYXRpb25zID0gW107XG4gICAgdGhpcy5yZXF1ZXN0LmV4Y2x1ZGVkTmF2aWdhdGlvbnMgPSBbXTtcblxuICAgIHRoaXMucmVxdWVzdC53aWxkY2FyZFNlYXJjaEVuYWJsZWQgPSBmYWxzZTtcbiAgICB0aGlzLnJlcXVlc3QucHJ1bmVSZWZpbmVtZW50cyA9IHRydWU7XG4gIH1cblxuICB3aXRoQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uOiBRdWVyeUNvbmZpZ3VyYXRpb24pOiBRdWVyeSB7XG4gICAgYXNzaWduKHRoaXMucmVxdWVzdCwgY29uZmlndXJhdGlvbik7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoU2VsZWN0ZWRSZWZpbmVtZW50cyguLi5yZWZpbmVtZW50czogQXJyYXk8U2VsZWN0ZWRWYWx1ZVJlZmluZW1lbnQgfCBTZWxlY3RlZFJhbmdlUmVmaW5lbWVudD4pOiBRdWVyeSB7XG4gICAgdGhpcy5yZXF1ZXN0LnJlZmluZW1lbnRzLnB1c2goLi4ucmVmaW5lbWVudHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aFJlZmluZW1lbnRzKG5hdmlnYXRpb25OYW1lOiBzdHJpbmcsIC4uLnJlZmluZW1lbnRzOiBBcnJheTxWYWx1ZVJlZmluZW1lbnQgfCBSYW5nZVJlZmluZW1lbnQ+KTogUXVlcnkge1xuICAgIGxldCBjb252ZXJ0ID0gKHJlZmluZW1lbnQ6IFJlZmluZW1lbnQpID0+IDxTZWxlY3RlZFJlZmluZW1lbnQ+YXNzaWduKHJlZmluZW1lbnQsIHsgbmF2aWdhdGlvbk5hbWUgfSk7XG4gICAgdGhpcy5yZXF1ZXN0LnJlZmluZW1lbnRzLnB1c2goLi4ucmVmaW5lbWVudHMubWFwKGNvbnZlcnQpKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhOYXZpZ2F0aW9ucyguLi5uYXZpZ2F0aW9uczogQXJyYXk8TmF2aWdhdGlvbj4pOiBRdWVyeSB7XG4gICAgdGhpcy51bnByb2Nlc3NlZE5hdmlnYXRpb25zLnB1c2goLi4ubmF2aWdhdGlvbnMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aEN1c3RvbVVybFBhcmFtcyhjdXN0b21VcmxQYXJhbXM6IEFycmF5PEN1c3RvbVVybFBhcmFtPiB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICBpZiAodHlwZW9mIGN1c3RvbVVybFBhcmFtcyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMucmVxdWVzdC5jdXN0b21VcmxQYXJhbXMucHVzaCguLi50aGlzLmNvbnZlcnRQYXJhbVN0cmluZyhjdXN0b21VcmxQYXJhbXMpKTtcbiAgICB9IGVsc2UgaWYgKGN1c3RvbVVybFBhcmFtcyBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICB0aGlzLnJlcXVlc3QuY3VzdG9tVXJsUGFyYW1zLnB1c2goLi4uY3VzdG9tVXJsUGFyYW1zKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRQYXJhbVN0cmluZyhjdXN0b21VcmxQYXJhbXM6IHN0cmluZyk6IEFycmF5PEN1c3RvbVVybFBhcmFtPiB7XG4gICAgbGV0IHBhcnNlZCA9IHFzLnBhcnNlKGN1c3RvbVVybFBhcmFtcyk7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKHBhcnNlZCkucmVkdWNlKChjb252ZXJ0ZWQsIGtleSkgPT4gY29udmVydGVkLmNvbmNhdCh7IGtleSwgdmFsdWU6IHBhcnNlZFtrZXldIH0pLCBbXSk7XG4gIH1cblxuICB3aXRoRmllbGRzKC4uLmZpZWxkczogQXJyYXk8c3RyaW5nPik6IFF1ZXJ5IHtcbiAgICB0aGlzLnJlcXVlc3QuZmllbGRzLnB1c2goLi4uZmllbGRzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhPckZpZWxkcyguLi5vckZpZWxkczogQXJyYXk8c3RyaW5nPik6IFF1ZXJ5IHtcbiAgICB0aGlzLnJlcXVlc3Qub3JGaWVsZHMucHVzaCguLi5vckZpZWxkcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoU29ydHMoLi4uc29ydHM6IEFycmF5PFNvcnQ+KTogUXVlcnkge1xuICAgIHRoaXMucmVxdWVzdC5zb3J0LnB1c2goLi4uc29ydHMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aEluY2x1ZGVkTmF2aWdhdGlvbnMoLi4ubmF2aWdhdGlvbk5hbWVzOiBBcnJheTxzdHJpbmc+KTogUXVlcnkge1xuICAgIHRoaXMucmVxdWVzdC5pbmNsdWRlZE5hdmlnYXRpb25zLnB1c2goLi4ubmF2aWdhdGlvbk5hbWVzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhFeGNsdWRlZE5hdmlnYXRpb25zKC4uLm5hdmlnYXRpb25OYW1lczogQXJyYXk8c3RyaW5nPik6IFF1ZXJ5IHtcbiAgICB0aGlzLnJlcXVlc3QuZXhjbHVkZWROYXZpZ2F0aW9ucy5wdXNoKC4uLm5hdmlnYXRpb25OYW1lcyk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoUXVlcnlQYXJhbXMocXVlcnlQYXJhbXM6IE9iamVjdCB8IHN0cmluZyk6IFF1ZXJ5IHtcbiAgICBzd2l0Y2ggKHR5cGVvZiBxdWVyeVBhcmFtcykge1xuICAgICAgY2FzZSAnc3RyaW5nJzpcbiAgICAgICAgcmV0dXJuIGFzc2lnbih0aGlzLCB7IHF1ZXJ5UGFyYW1zOiB0aGlzLmNvbnZlcnRRdWVyeVN0cmluZyg8c3RyaW5nPnF1ZXJ5UGFyYW1zKSB9KTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHJldHVybiBhc3NpZ24odGhpcywgeyBxdWVyeVBhcmFtcyB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNvbnZlcnRRdWVyeVN0cmluZyhxdWVyeVBhcmFtczogc3RyaW5nKTogT2JqZWN0IHtcbiAgICByZXR1cm4gcXMucGFyc2UocXVlcnlQYXJhbXMpO1xuICB9XG5cbiAgcmVmaW5lQnlWYWx1ZShuYXZpZ2F0aW9uTmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBleGNsdWRlOiBib29sZWFuID0gZmFsc2UpOiBRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFNlbGVjdGVkUmVmaW5lbWVudHMoPFNlbGVjdGVkVmFsdWVSZWZpbmVtZW50PntcbiAgICAgIG5hdmlnYXRpb25OYW1lLFxuICAgICAgdmFsdWUsXG4gICAgICBleGNsdWRlLFxuICAgICAgdHlwZTogJ1ZhbHVlJ1xuICAgIH0pO1xuICB9XG5cbiAgcmVmaW5lQnlSYW5nZShuYXZpZ2F0aW9uTmFtZTogc3RyaW5nLCBsb3c6IG51bWJlciwgaGlnaDogbnVtYmVyLCBleGNsdWRlOiBib29sZWFuID0gZmFsc2UpOiBRdWVyeSB7XG4gICAgcmV0dXJuIHRoaXMud2l0aFNlbGVjdGVkUmVmaW5lbWVudHMoPFNlbGVjdGVkUmFuZ2VSZWZpbmVtZW50PntcbiAgICAgIG5hdmlnYXRpb25OYW1lLFxuICAgICAgbG93LFxuICAgICAgaGlnaCxcbiAgICAgIGV4Y2x1ZGUsXG4gICAgICB0eXBlOiAnUmFuZ2UnXG4gICAgfSk7XG4gIH1cblxuICByZXN0cmljdE5hdmlnYXRpb24ocmVzdHJpY3ROYXZpZ2F0aW9uOiBSZXN0cmljdE5hdmlnYXRpb24pOiBRdWVyeSB7XG4gICAgdGhpcy5yZXF1ZXN0LnJlc3RyaWN0TmF2aWdhdGlvbiA9IHJlc3RyaWN0TmF2aWdhdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHNraXAoc2tpcDogbnVtYmVyKTogUXVlcnkge1xuICAgIHRoaXMucmVxdWVzdC5za2lwID0gc2tpcDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIHdpdGhQYWdlU2l6ZShwYWdlU2l6ZTogbnVtYmVyKTogUXVlcnkge1xuICAgIHRoaXMucmVxdWVzdC5wYWdlU2l6ZSA9IHBhZ2VTaXplO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgd2l0aE1hdGNoU3RyYXRlZ3kobWF0Y2hTdHJhdGVneTogTWF0Y2hTdHJhdGVneSk6IFF1ZXJ5IHtcbiAgICB0aGlzLnJlcXVlc3QubWF0Y2hTdHJhdGVneSA9IG1hdGNoU3RyYXRlZ3k7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICB3aXRoQmlhc2luZyhiaWFzaW5nOiBCaWFzaW5nKTogUXVlcnkge1xuICAgIHRoaXMucmVxdWVzdC5iaWFzaW5nID0gYmlhc2luZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGVuYWJsZVdpbGRjYXJkU2VhcmNoKCk6IFF1ZXJ5IHtcbiAgICB0aGlzLnJlcXVlc3Qud2lsZGNhcmRTZWFyY2hFbmFibGVkID0gdHJ1ZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGRpc2FibGVBdXRvY29ycmVjdGlvbigpOiBRdWVyeSB7XG4gICAgdGhpcy5yZXF1ZXN0LmRpc2FibGVBdXRvY29ycmVjdGlvbiA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBkaXNhYmxlQmluYXJ5UGF5bG9hZCgpOiBRdWVyeSB7XG4gICAgdGhpcy5yZXF1ZXN0LnJldHVybkJpbmFyeSA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgYWxsb3dQcnVuZWRSZWZpbmVtZW50cygpOiBRdWVyeSB7XG4gICAgdGhpcy5yZXF1ZXN0LnBydW5lUmVmaW5lbWVudHMgPSBmYWxzZTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGJ1aWxkKCk6IFJlcXVlc3Qge1xuICAgIHRoaXMucmVxdWVzdC5yZWZpbmVtZW50cy5wdXNoKC4uLk5hdmlnYXRpb25Db252ZXJ0ZXIuY29udmVydCh0aGlzLnVucHJvY2Vzc2VkTmF2aWdhdGlvbnMpKTtcblxuICAgIHJldHVybiB0aGlzLmNsZWFyRW1wdHlBcnJheXModGhpcy5yZXF1ZXN0KTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYXJFbXB0eUFycmF5cyhyZXF1ZXN0OiBSZXF1ZXN0KTogUmVxdWVzdCB7XG4gICAgZm9yIChsZXQga2V5IGluIHJlcXVlc3QpIHtcbiAgICAgIGlmIChyZXF1ZXN0W2tleV0gaW5zdGFuY2VvZiBBcnJheSAmJiByZXF1ZXN0W2tleV0ubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGRlbGV0ZSByZXF1ZXN0W2tleV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXF1ZXN0O1xuICB9XG5cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ== |