Code coverage report for src/request-builder.js

Statements: 79.78% (71 / 89)      Branches: 66.67% (4 / 6)      Functions: 69.81% (37 / 53)      Lines: 80.46% (70 / 87)      Ignored: none     

All files » src/ » request-builder.js
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 2001     1   72   1   1   1   1                     1 1 72   72 72 72                       1 21 147 147                     1 34 34     1     1   1 4 4       1 13 13       1           1           1 5 5       1 6 6       1 6 6       1             1 34 34       1 17 17       1 38 38       1           1           1 1 1       1 11 11       1           1           1 3 3       1 1 1       1           1 8       8 8            
System.register(['aurelia-path', './http-request-message', './jsonp-request-message'], function (_export) {
  'use strict';
 
  var join, HttpRequestMessage, JSONPRequestMessage, RequestBuilder;
 
  function _classCallCheck(instance, Constructor) { Iif (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
 
  return {
    setters: [function (_aureliaPath) {
      join = _aureliaPath.join;
    }, function (_httpRequestMessage) {
      HttpRequestMessage = _httpRequestMessage.HttpRequestMessage;
    }, function (_jsonpRequestMessage) {
      JSONPRequestMessage = _jsonpRequestMessage.JSONPRequestMessage;
    }],
    execute: function () {
 
      /**
       * A builder class allowing fluent composition of HTTP requests.
       *
       * @class RequestBuilder
       * @constructor
       */
 
      RequestBuilder = (function () {
        function RequestBuilder(client) {
          _classCallCheck(this, RequestBuilder);
 
          this.client = client;
          this.transformers = client.requestTransformers.slice(0);
          this.useJsonp = false;
        }
 
        /**
         * Adds a user-defined request transformer to the RequestBuilder.
         *
         * @method addHelper
         * @param {String} name The name of the helper to add.
         * @param {Function} fn The helper function.
         * @chainable
         */
 
        RequestBuilder.addHelper = function addHelper(name, fn) {
          RequestBuilder.prototype[name] = function () {
            this.transformers.push(fn.apply(this, arguments));
            return this;
          };
        };
 
        /**
         * Sends the request.
         *
         * @method send
         * @return {Promise} A cancellable promise object.
         */
 
        RequestBuilder.prototype.send = function send() {
          var message = this.useJsonp ? new JSONPRequestMessage() : new HttpRequestMessage();
          return this.client.send(message, this.transformers);
        };
 
        return RequestBuilder;
      })();
 
      _export('RequestBuilder', RequestBuilder);
 
      RequestBuilder.addHelper('asDelete', function () {
        return function (client, processor, message) {
          message.method = 'DELETE';
        };
      });
 
      RequestBuilder.addHelper('asGet', function () {
        return function (client, processor, message) {
          message.method = 'GET';
        };
      });
 
      RequestBuilder.addHelper('asHead', function () {
        return function (client, processor, message) {
          message.method = 'HEAD';
        };
      });
 
      RequestBuilder.addHelper('asOptions', function () {
        return function (client, processor, message) {
          message.method = 'OPTIONS';
        };
      });
 
      RequestBuilder.addHelper('asPatch', function () {
        return function (client, processor, message) {
          message.method = 'PATCH';
        };
      });
 
      RequestBuilder.addHelper('asPost', function () {
        return function (client, processor, message) {
          message.method = 'POST';
        };
      });
 
      RequestBuilder.addHelper('asPut', function () {
        return function (client, processor, message) {
          message.method = 'PUT';
        };
      });
 
      RequestBuilder.addHelper('asJsonp', function (callbackParameterName) {
        this.useJsonp = true;
        return function (client, processor, message) {
          message.callbackParameterName = callbackParameterName;
        };
      });
 
      RequestBuilder.addHelper('withUrl', function (url) {
        return function (client, processor, message) {
          message.url = url;
        };
      });
 
      RequestBuilder.addHelper('withContent', function (content) {
        return function (client, processor, message) {
          message.content = content;
        };
      });
 
      RequestBuilder.addHelper('withBaseUrl', function (baseUrl) {
        return function (client, processor, message) {
          message.baseUrl = baseUrl;
        };
      });
 
      RequestBuilder.addHelper('withParams', function (params) {
        return function (client, processor, message) {
          message.params = params;
        };
      });
 
      RequestBuilder.addHelper('withResponseType', function (responseType) {
        return function (client, processor, message) {
          message.responseType = responseType;
        };
      });
 
      RequestBuilder.addHelper('withTimeout', function (timeout) {
        return function (client, processor, message) {
          message.timeout = timeout;
        };
      });
 
      RequestBuilder.addHelper('withHeader', function (key, value) {
        return function (client, processor, message) {
          message.headers.add(key, value);
        };
      });
 
      RequestBuilder.addHelper('withCredentials', function (value) {
        return function (client, processor, message) {
          message.withCredentials = value;
        };
      });
 
      RequestBuilder.addHelper('withReviver', function (reviver) {
        return function (client, processor, message) {
          message.reviver = reviver;
        };
      });
 
      RequestBuilder.addHelper('withReplacer', function (replacer) {
        return function (client, processor, message) {
          message.replacer = replacer;
        };
      });
 
      RequestBuilder.addHelper('withProgressCallback', function (progressCallback) {
        return function (client, processor, message) {
          message.progressCallback = progressCallback;
        };
      });
 
      RequestBuilder.addHelper('withCallbackParameterName', function (callbackParameterName) {
        return function (client, processor, message) {
          message.callbackParameterName = callbackParameterName;
        };
      });
 
      RequestBuilder.addHelper('withInterceptor', function (interceptor) {
        return function (client, processor, message) {
          // NOTE: Interceptors are stored in reverse order. Inner interceptors before outer interceptors.
          // This reversal is needed so that we can build up the interception chain around the
          // server request.
          message.interceptors = message.interceptors || [];
          message.interceptors.unshift(interceptor);
        };
      });
    }
  };
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9FaXNlbmJlcmdFZmZlY3QvRG9jdW1lbnRzL0dpdEh1Yi9UaGUgRHVyYW5kYWwgUHJvamVjdC9hdXJlbGlhL2h0dHAtY2xpZW50L3NyYy9yZXF1ZXN0LWJ1aWxkZXIuanMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O3FEQVVhLGNBQWM7Ozs7OzswQkFWbkIsSUFBSTs7K0NBQ0osa0JBQWtCOztpREFDbEIsbUJBQW1COzs7Ozs7Ozs7OztBQVFkLG9CQUFjO0FBQ2QsaUJBREEsY0FBYyxDQUNiLE1BQU0sRUFBQztnQ0FEUixjQUFjOztBQUV2QixjQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUNyQixjQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEQsY0FBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7U0FDdkI7Ozs7Ozs7Ozs7O0FBTFUsc0JBQWMsQ0FlbEIsU0FBUyxHQUFBLG1CQUFDLElBQUksRUFBRSxFQUFFLEVBQUM7QUFDeEIsd0JBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBVTtBQUN6QyxnQkFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNsRCxtQkFBTyxJQUFJLENBQUM7V0FDYixDQUFDO1NBQ0g7Ozs7Ozs7OztBQXBCVSxzQkFBYyxXQTRCekIsSUFBSSxHQUFBLGdCQUFFO0FBQ0osY0FBSSxPQUFPLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLG1CQUFtQixFQUFFLEdBQUcsSUFBSSxrQkFBa0IsRUFBRSxDQUFDO0FBQ25GLGlCQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7U0FDckQ7O2VBL0JVLGNBQWM7OztnQ0FBZCxjQUFjOztB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QyxPQUFPLEdBQUcsT0FBTyxDQUFDO1NBQzNCLENBQUM7T0FDSCxDQUFDLENBQUM7O0FBRUgsb0JBQWMsQ0FBQyxTQUFTLENBQUMsY0FBYyxFQUFFLFVBQVMsUUFBUSxFQUFDO0FBQ3pELGVBQU8sVUFBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQztBQUN6QyxpQkFBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7U0FDN0IsQ0FBQztPQUNILENBQUMsQ0FBQzs7QUFFSCxvQkFBYyxDQUFDLFNBQVMsQ0FBQyxzQkFBc0IsRUFBRSxVQUFTLGdCQUFnQixFQUFDO0FBQ3pFLGVBQU8sVUFBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBQztBQUN6QyxpQkFBTyxDQUFDLGdCQUFnQixHQUFHLGdCQUFnQixDQUFDO1NBQzdDLENBQUM7T0FDSCxDQUFDLENBQUM7O0FBRUgsb0JBQWMsQ0FBQyxTQUFTLENBQUMsMkJBQTJCLEVBQUUsVUFBUyxxQkFBcUIsRUFBQztBQUNuRixlQUFPLFVBQVMsTUFBTSxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUM7QUFDekMsaUJBQU8sQ0FBQyxxQkFBcUIsR0FBRyxxQkFBcUIsQ0FBQztTQUN2RCxDQUFDO09BQ0gsQ0FBQyxDQUFDOztBQUVILG9CQUFjLENBQUMsU0FBUyxDQUFDLGlCQUFpQixFQUFFLFVBQVMsV0FBVyxFQUFFO0FBQ2hFLGVBQU8sVUFBUyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRTs7OztBQUkxQyxpQkFBTyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQztBQUNsRCxpQkFBTyxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDM0MsQ0FBQztPQUNILENBQUMsQ0FBQyIsImZpbGUiOiIvVXNlcnMvRWlzZW5iZXJnRWZmZWN0L0RvY3VtZW50cy9HaXRIdWIvVGhlIER1cmFuZGFsIFByb2plY3QvYXVyZWxpYS9odHRwLWNsaWVudC9zcmMvcmVxdWVzdC1idWlsZGVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtqb2lufSBmcm9tICdhdXJlbGlhLXBhdGgnO1xuaW1wb3J0IHtIdHRwUmVxdWVzdE1lc3NhZ2V9IGZyb20gJy4vaHR0cC1yZXF1ZXN0LW1lc3NhZ2UnO1xuaW1wb3J0IHtKU09OUFJlcXVlc3RNZXNzYWdlfSBmcm9tICcuL2pzb25wLXJlcXVlc3QtbWVzc2FnZSc7XG5cbi8qKlxuICogQSBidWlsZGVyIGNsYXNzIGFsbG93aW5nIGZsdWVudCBjb21wb3NpdGlvbiBvZiBIVFRQIHJlcXVlc3RzLlxuICpcbiAqIEBjbGFzcyBSZXF1ZXN0QnVpbGRlclxuICogQGNvbnN0cnVjdG9yXG4gKi9cbmV4cG9ydCBjbGFzcyBSZXF1ZXN0QnVpbGRlciB7XG4gIGNvbnN0cnVjdG9yKGNsaWVudCl7XG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnQ7XG4gICAgdGhpcy50cmFuc2Zvcm1lcnMgPSBjbGllbnQucmVxdWVzdFRyYW5zZm9ybWVycy5zbGljZSgwKTtcbiAgICB0aGlzLnVzZUpzb25wID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHVzZXItZGVmaW5lZCByZXF1ZXN0IHRyYW5zZm9ybWVyIHRvIHRoZSBSZXF1ZXN0QnVpbGRlci5cbiAgICpcbiAgICogQG1ldGhvZCBhZGRIZWxwZXJcbiAgICogQHBhcmFtIHtTdHJpbmd9IG5hbWUgVGhlIG5hbWUgb2YgdGhlIGhlbHBlciB0byBhZGQuXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBoZWxwZXIgZnVuY3Rpb24uXG4gICAqIEBjaGFpbmFibGVcbiAgICovXG4gIHN0YXRpYyBhZGRIZWxwZXIobmFtZSwgZm4pe1xuICAgIFJlcXVlc3RCdWlsZGVyLnByb3RvdHlwZVtuYW1lXSA9IGZ1bmN0aW9uKCl7XG4gICAgICB0aGlzLnRyYW5zZm9ybWVycy5wdXNoKGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cykpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZW5kcyB0aGUgcmVxdWVzdC5cbiAgICpcbiAgICogQG1ldGhvZCBzZW5kXG4gICAqIEByZXR1cm4ge1Byb21pc2V9IEEgY2FuY2VsbGFibGUgcHJvbWlzZSBvYmplY3QuXG4gICAqL1xuICBzZW5kKCl7XG4gICAgbGV0IG1lc3NhZ2UgPSB0aGlzLnVzZUpzb25wID8gbmV3IEpTT05QUmVxdWVzdE1lc3NhZ2UoKSA6IG5ldyBIdHRwUmVxdWVzdE1lc3NhZ2UoKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQuc2VuZChtZXNzYWdlLCB0aGlzLnRyYW5zZm9ybWVycyk7XG4gIH1cbn1cblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCdhc0RlbGV0ZScsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5tZXRob2QgPSAnREVMRVRFJztcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ2FzR2V0JywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLm1ldGhvZCA9ICdHRVQnO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignYXNIZWFkJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLm1ldGhvZCA9ICdIRUFEJztcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ2FzT3B0aW9ucycsIGZ1bmN0aW9uKCl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5tZXRob2QgPSAnT1BUSU9OUyc7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCdhc1BhdGNoJywgZnVuY3Rpb24oKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLm1ldGhvZCA9ICdQQVRDSCc7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCdhc1Bvc3QnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UubWV0aG9kID0gJ1BPU1QnO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignYXNQdXQnLCBmdW5jdGlvbigpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UubWV0aG9kID0gJ1BVVCc7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCdhc0pzb25wJywgZnVuY3Rpb24oY2FsbGJhY2tQYXJhbWV0ZXJOYW1lKXtcbiAgdGhpcy51c2VKc29ucCA9IHRydWU7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5jYWxsYmFja1BhcmFtZXRlck5hbWUgPSBjYWxsYmFja1BhcmFtZXRlck5hbWU7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCd3aXRoVXJsJywgZnVuY3Rpb24odXJsKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLnVybCA9IHVybDtcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhDb250ZW50JywgZnVuY3Rpb24oY29udGVudCl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5jb250ZW50ID0gY29udGVudDtcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhCYXNlVXJsJywgZnVuY3Rpb24oYmFzZVVybCl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5iYXNlVXJsID0gYmFzZVVybDtcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhQYXJhbXMnLCBmdW5jdGlvbihwYXJhbXMpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UucGFyYW1zID0gcGFyYW1zO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignd2l0aFJlc3BvbnNlVHlwZScsIGZ1bmN0aW9uKHJlc3BvbnNlVHlwZSl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5yZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGU7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCd3aXRoVGltZW91dCcsIGZ1bmN0aW9uKHRpbWVvdXQpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UudGltZW91dCA9IHRpbWVvdXQ7XG4gIH07XG59KTtcblxuUmVxdWVzdEJ1aWxkZXIuYWRkSGVscGVyKCd3aXRoSGVhZGVyJywgZnVuY3Rpb24oa2V5LCB2YWx1ZSl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5oZWFkZXJzLmFkZChrZXksIHZhbHVlKTtcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhDcmVkZW50aWFscycsIGZ1bmN0aW9uKHZhbHVlKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLndpdGhDcmVkZW50aWFscyA9IHZhbHVlO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignd2l0aFJldml2ZXInLCBmdW5jdGlvbihyZXZpdmVyKXtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKXtcbiAgICBtZXNzYWdlLnJldml2ZXIgPSByZXZpdmVyO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignd2l0aFJlcGxhY2VyJywgZnVuY3Rpb24ocmVwbGFjZXIpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UucmVwbGFjZXIgPSByZXBsYWNlcjtcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhQcm9ncmVzc0NhbGxiYWNrJywgZnVuY3Rpb24ocHJvZ3Jlc3NDYWxsYmFjayl7XG4gIHJldHVybiBmdW5jdGlvbihjbGllbnQsIHByb2Nlc3NvciwgbWVzc2FnZSl7XG4gICAgbWVzc2FnZS5wcm9ncmVzc0NhbGxiYWNrID0gcHJvZ3Jlc3NDYWxsYmFjaztcbiAgfTtcbn0pO1xuXG5SZXF1ZXN0QnVpbGRlci5hZGRIZWxwZXIoJ3dpdGhDYWxsYmFja1BhcmFtZXRlck5hbWUnLCBmdW5jdGlvbihjYWxsYmFja1BhcmFtZXRlck5hbWUpe1xuICByZXR1cm4gZnVuY3Rpb24oY2xpZW50LCBwcm9jZXNzb3IsIG1lc3NhZ2Upe1xuICAgIG1lc3NhZ2UuY2FsbGJhY2tQYXJhbWV0ZXJOYW1lID0gY2FsbGJhY2tQYXJhbWV0ZXJOYW1lO1xuICB9O1xufSk7XG5cblJlcXVlc3RCdWlsZGVyLmFkZEhlbHBlcignd2l0aEludGVyY2VwdG9yJywgZnVuY3Rpb24oaW50ZXJjZXB0b3IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uKGNsaWVudCwgcHJvY2Vzc29yLCBtZXNzYWdlKSB7XG4gICAgLy8gTk9URTogSW50ZXJjZXB0b3JzIGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlci4gSW5uZXIgaW50ZXJjZXB0b3JzIGJlZm9yZSBvdXRlciBpbnRlcmNlcHRvcnMuXG4gICAgLy8gVGhpcyByZXZlcnNhbCBpcyBuZWVkZWQgc28gdGhhdCB3ZSBjYW4gYnVpbGQgdXAgdGhlIGludGVyY2VwdGlvbiBjaGFpbiBhcm91bmQgdGhlXG4gICAgLy8gc2VydmVyIHJlcXVlc3QuXG4gICAgbWVzc2FnZS5pbnRlcmNlcHRvcnMgPSBtZXNzYWdlLmludGVyY2VwdG9ycyB8fCBbXTtcbiAgICBtZXNzYWdlLmludGVyY2VwdG9ycy51bnNoaWZ0KGludGVyY2VwdG9yKTtcbiAgfTtcbn0pO1xuIl19