UNPKG

@ngx-resource/handler-ngx-http-legacy

Version:
354 lines (325 loc) 35.7 kB
(function webpackUniversalModuleDefinition(root, factory) { if(typeof exports === 'object' && typeof module === 'object') module.exports = factory(require("@angular/core"), require("@ngx-resource/core"), require("@angular/http")); else if(typeof define === 'function' && define.amd) define(["@angular/core", "@ngx-resource/core", "@angular/http"], factory); else if(typeof exports === 'object') exports["ngx-resource-handler-ngx-http-legacy"] = factory(require("@angular/core"), require("@ngx-resource/core"), require("@angular/http")); else root["ngx-resource-handler-ngx-http-legacy"] = factory(root["@angular/core"], root["@ngx-resource/core"], root["@angular/http"]); })(this, function(__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_1__, __WEBPACK_EXTERNAL_MODULE_2__) { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function(exports, name, getter) { /******/ if(!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { /******/ configurable: false, /******/ enumerable: true, /******/ get: getter /******/ }); /******/ } /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function(module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/"; /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 4); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_0__; /***/ }), /* 1 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_1__; /***/ }), /* 2 */ /***/ (function(module, exports) { module.exports = __WEBPACK_EXTERNAL_MODULE_2__; /***/ }), /* 3 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceHandlerHttp; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__angular_core__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__angular_http__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__ResourceHandlerAbstract__ = __webpack_require__(5); var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var ResourceHandlerHttp = /** @class */ (function (_super) { __extends(ResourceHandlerHttp, _super); function ResourceHandlerHttp(http) { var _this = _super.call(this) || this; _this.http = http; return _this; } ResourceHandlerHttp.prototype.request = function (request) { return this.http.request(request); }; ResourceHandlerHttp.prototype.prepareRequest = function (req) { var options = { url: req.url, body: req.body, withCredentials: req.withCredentials }; switch (req.method) { case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Get: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Get; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Post: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Post; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Put: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Put; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Delete: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Delete; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Head: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Head; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Options: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Options; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceRequestMethod"].Patch: options.method = __WEBPACK_IMPORTED_MODULE_1__angular_http__["RequestMethod"].Patch; } switch (req.responseBodyType) { case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].Json: options.responseType = __WEBPACK_IMPORTED_MODULE_1__angular_http__["ResponseContentType"].Json; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].ArrayBuffer: options.responseType = __WEBPACK_IMPORTED_MODULE_1__angular_http__["ResponseContentType"].ArrayBuffer; break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].Blob: options.responseType = __WEBPACK_IMPORTED_MODULE_1__angular_http__["ResponseContentType"].Blob; break; default: options.responseType = __WEBPACK_IMPORTED_MODULE_1__angular_http__["ResponseContentType"].Text; } if (req.headers) { options.headers = req.headers; } if (req.query) { options.params = req.query; } return new __WEBPACK_IMPORTED_MODULE_1__angular_http__["Request"](options); }; ResourceHandlerHttp.prototype.handleResponse = function (req, response) { var body; switch (req.responseBodyType) { case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].Json: body = response.json(); break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].ArrayBuffer: body = response.arrayBuffer(); break; case __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceResponseBodyType"].Blob: body = response.blob(); break; default: body = response.text(); } return { status: response.status, body: body, headers: response.headers.toJSON() }; }; ResourceHandlerHttp = __decorate([ Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["Injectable"])(), __metadata("design:paramtypes", [__WEBPACK_IMPORTED_MODULE_1__angular_http__["Http"]]) ], ResourceHandlerHttp); return ResourceHandlerHttp; }(__WEBPACK_IMPORTED_MODULE_3__ResourceHandlerAbstract__["a" /* ResourceHandlerAbstract */])); /***/ }), /* 4 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ResourceModule", function() { return ResourceModule; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__angular_core__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__angular_http___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__angular_http__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__src_ResourceHandlerHttp__ = __webpack_require__(3); /* harmony namespace reexport (by provided) */ __webpack_require__.d(__webpack_exports__, "ResourceHandlerHttp", function() { return __WEBPACK_IMPORTED_MODULE_3__src_ResourceHandlerHttp__["a"]; }); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var ResourceModule = /** @class */ (function () { function ResourceModule() { } ResourceModule_1 = ResourceModule; /** * For root * @param {IResourceModuleConfig} config * @return {ModuleWithProviders} */ ResourceModule.forRoot = function (config) { if (config === void 0) { config = {}; } return { ngModule: ResourceModule_1, providers: [ config.handler || { provide: __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceHandler"], useClass: __WEBPACK_IMPORTED_MODULE_3__src_ResourceHandlerHttp__["a" /* ResourceHandlerHttp */], deps: [__WEBPACK_IMPORTED_MODULE_1__angular_http__["Http"]] } ] }; }; /** * For child * @param {IResourceModuleConfig} config * @return {ModuleWithProviders} */ ResourceModule.forChild = function (config) { if (config === void 0) { config = {}; } return { ngModule: ResourceModule_1, providers: [ config.handler || { provide: __WEBPACK_IMPORTED_MODULE_2__ngx_resource_core__["ResourceHandler"], useClass: __WEBPACK_IMPORTED_MODULE_3__src_ResourceHandlerHttp__["a" /* ResourceHandlerHttp */], deps: [__WEBPACK_IMPORTED_MODULE_1__angular_http__["Http"]] } ] }; }; ResourceModule = ResourceModule_1 = __decorate([ Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["NgModule"])() ], ResourceModule); return ResourceModule; var ResourceModule_1; }()); /***/ }), /* 5 */ /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return ResourceHandlerAbstract; }); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__angular_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0__angular_core__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ngx_resource_core__ = __webpack_require__(1); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__ngx_resource_core___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1__ngx_resource_core__); var __extends = (this && this.__extends) || (function () { var extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; return function (d, b) { extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var ResourceHandlerAbstract = /** @class */ (function (_super) { __extends(ResourceHandlerAbstract, _super); function ResourceHandlerAbstract() { return _super !== null && _super.apply(this, arguments) || this; } ResourceHandlerAbstract.prototype.handle = function (req) { var _this = this; var request = this.prepareRequest(req); var resp = { promise: null }; resp.promise = new Promise(function (resolve, reject) { var subscription = _this.request(request) .subscribe(function (resp) { subscription = null; resolve(_this.handleResponse(req, resp)); }, function (err) { subscription = null; reject(_this.handleResponse(req, err)); }); resp.abort = function () { if (subscription) { subscription.unsubscribe(); subscription = null; } }; }); return resp; }; ResourceHandlerAbstract = __decorate([ Object(__WEBPACK_IMPORTED_MODULE_0__angular_core__["Injectable"])() ], ResourceHandlerAbstract); return ResourceHandlerAbstract; }(__WEBPACK_IMPORTED_MODULE_1__ngx_resource_core__["ResourceHandler"])); /***/ }) /******/ ]); }); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBjNzYxNmRjZGVhNzM4ZTliYzYwYyIsIndlYnBhY2s6Ly8vZXh0ZXJuYWwgXCJAYW5ndWxhci9jb3JlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQG5neC1yZXNvdXJjZS9jb3JlXCIiLCJ3ZWJwYWNrOi8vL2V4dGVybmFsIFwiQGFuZ3VsYXIvaHR0cFwiIiwid2VicGFjazovLy8uL3NyYy9SZXNvdXJjZUhhbmRsZXJIdHRwLnRzIiwid2VicGFjazovLy8uL2luZGV4LnRzIiwid2VicGFjazovLy8uL3NyYy9SZXNvdXJjZUhhbmRsZXJBYnN0cmFjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0QsTztBQ1ZBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOzs7QUFHQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxtQ0FBMkIsMEJBQTBCLEVBQUU7QUFDdkQseUNBQWlDLGVBQWU7QUFDaEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0EsOERBQXNELCtEQUErRDs7QUFFckg7QUFDQTs7QUFFQTtBQUNBOzs7Ozs7O0FDN0RBLCtDOzs7Ozs7QUNBQSwrQzs7Ozs7O0FDQUEsK0M7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUNBMkM7QUFDaUQ7QUFNaEU7QUFDd0M7QUFHcEU7SUFBeUMsdUNBQXVCO0lBRTlELDZCQUFvQixJQUFVO1FBQTlCLFlB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LENBQUMsQ0FBQztvQkFDakIsWUFBWSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUMzQixZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUN0QixDQUFDO1lBQ0gsQ0FBQyxDQUFDO1FBRUosQ0FBQyxDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBRWQsQ0FBQztJQXBDbUIsdUJBQXVCO1FBRDVDLGlFQUFVLEVBQUU7T0FDUyx1QkFBdUIsQ0E0QzVDO0lBQUQsOEJBQUM7Q0FBQSxDQTVDcUQsbUVBQWUsR0E0Q3BFO0FBNUM0QyIsImZpbGUiOiJoYW5kbGVyLW5neC1odHRwLWxlZ2FjeS51bWQuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KHJlcXVpcmUoXCJAYW5ndWxhci9jb3JlXCIpLCByZXF1aXJlKFwiQG5neC1yZXNvdXJjZS9jb3JlXCIpLCByZXF1aXJlKFwiQGFuZ3VsYXIvaHR0cFwiKSk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXCJAYW5ndWxhci9jb3JlXCIsIFwiQG5neC1yZXNvdXJjZS9jb3JlXCIsIFwiQGFuZ3VsYXIvaHR0cFwiXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJuZ3gtcmVzb3VyY2UtaGFuZGxlci1uZ3gtaHR0cC1sZWdhY3lcIl0gPSBmYWN0b3J5KHJlcXVpcmUoXCJAYW5ndWxhci9jb3JlXCIpLCByZXF1aXJlKFwiQG5neC1yZXNvdXJjZS9jb3JlXCIpLCByZXF1aXJlKFwiQGFuZ3VsYXIvaHR0cFwiKSk7XG5cdGVsc2Vcblx0XHRyb290W1wibmd4LXJlc291cmNlLWhhbmRsZXItbmd4LWh0dHAtbGVnYWN5XCJdID0gZmFjdG9yeShyb290W1wiQGFuZ3VsYXIvY29yZVwiXSwgcm9vdFtcIkBuZ3gtcmVzb3VyY2UvY29yZVwiXSwgcm9vdFtcIkBhbmd1bGFyL2h0dHBcIl0pO1xufSkodGhpcywgZnVuY3Rpb24oX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8wX18sIF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMV9fLCBfX1dFQlBBQ0tfRVhURVJOQUxfTU9EVUxFXzJfXykge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9uIGZvciBoYXJtb255IGV4cG9ydHNcbiBcdF9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIG5hbWUsIGdldHRlcikge1xuIFx0XHRpZighX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIG5hbWUpKSB7XG4gXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIG5hbWUsIHtcbiBcdFx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gXHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuIFx0XHRcdFx0Z2V0OiBnZXR0ZXJcbiBcdFx0XHR9KTtcbiBcdFx0fVxuIFx0fTtcblxuIFx0Ly8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuIFx0XHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cbiBcdFx0XHRmdW5jdGlvbiBnZXREZWZhdWx0KCkgeyByZXR1cm4gbW9kdWxlWydkZWZhdWx0J107IH0gOlxuIFx0XHRcdGZ1bmN0aW9uIGdldE1vZHVsZUV4cG9ydHMoKSB7IHJldHVybiBtb2R1bGU7IH07XG4gXHRcdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsICdhJywgZ2V0dGVyKTtcbiBcdFx0cmV0dXJuIGdldHRlcjtcbiBcdH07XG5cbiBcdC8vIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbFxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5vID0gZnVuY3Rpb24ob2JqZWN0LCBwcm9wZXJ0eSkgeyByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwgcHJvcGVydHkpOyB9O1xuXG4gXHQvLyBfX3dlYnBhY2tfcHVibGljX3BhdGhfX1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5wID0gXCIvXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gNCk7XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay9ib290c3RyYXAgYzc2MTZkY2RlYTczOGU5YmM2MGMiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMF9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiQGFuZ3VsYXIvY29yZVwiXG4vLyBtb2R1bGUgaWQgPSAwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gX19XRUJQQUNLX0VYVEVSTkFMX01PRFVMRV8xX187XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gZXh0ZXJuYWwgXCJAbmd4LXJlc291cmNlL2NvcmVcIlxuLy8gbW9kdWxlIGlkID0gMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IF9fV0VCUEFDS19FWFRFUk5BTF9NT0RVTEVfMl9fO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGV4dGVybmFsIFwiQGFuZ3VsYXIvaHR0cFwiXG4vLyBtb2R1bGUgaWQgPSAyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHAsIFJlcXVlc3QsIFJlcXVlc3RNZXRob2QsIFJlc3BvbnNlLCBSZXNwb25zZUNvbnRlbnRUeXBlIH0gZnJvbSAnQGFuZ3VsYXIvaHR0cCc7XG5pbXBvcnQgeyBSZXF1ZXN0QXJncyB9IGZyb20gJ0Bhbmd1bGFyL2h0dHAvc3JjL2ludGVyZmFjZXMnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMvT2JzZXJ2YWJsZSc7XG5pbXBvcnQge1xuICBJUmVzb3VyY2VSZXF1ZXN0LCBJUmVzb3VyY2VSZXNwb25zZSwgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLFxuICBSZXNvdXJjZVJlc3BvbnNlQm9keVR5cGVcbn0gZnJvbSAnQG5neC1yZXNvdXJjZS9jb3JlJztcbmltcG9ydCB7IFJlc291cmNlSGFuZGxlckFic3RyYWN0IH0gZnJvbSAnLi9SZXNvdXJjZUhhbmRsZXJBYnN0cmFjdCc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZUhhbmRsZXJIdHRwIGV4dGVuZHMgUmVzb3VyY2VIYW5kbGVyQWJzdHJhY3Qge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaHR0cDogSHR0cCkge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVxdWVzdChyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLmh0dHAucmVxdWVzdChyZXF1ZXN0KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcmVwYXJlUmVxdWVzdChyZXE6IElSZXNvdXJjZVJlcXVlc3QpOiBSZXF1ZXN0IHtcblxuICAgIGNvbnN0IG9wdGlvbnM6IFJlcXVlc3RBcmdzID0ge1xuICAgICAgdXJsOiByZXEudXJsLFxuICAgICAgYm9keTogcmVxLmJvZHksXG4gICAgICB3aXRoQ3JlZGVudGlhbHM6IHJlcS53aXRoQ3JlZGVudGlhbHNcbiAgICB9O1xuXG4gICAgc3dpdGNoIChyZXEubWV0aG9kKSB7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLkdldDpcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBSZXF1ZXN0TWV0aG9kLkdldDtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLlBvc3Q6XG4gICAgICAgIG9wdGlvbnMubWV0aG9kID0gUmVxdWVzdE1ldGhvZC5Qb3N0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuUHV0OlxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IFJlcXVlc3RNZXRob2QuUHV0O1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuRGVsZXRlOlxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IFJlcXVlc3RNZXRob2QuRGVsZXRlO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlcXVlc3RNZXRob2QuSGVhZDpcbiAgICAgICAgb3B0aW9ucy5tZXRob2QgPSBSZXF1ZXN0TWV0aG9kLkhlYWQ7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVxdWVzdE1ldGhvZC5PcHRpb25zOlxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IFJlcXVlc3RNZXRob2QuT3B0aW9ucztcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXF1ZXN0TWV0aG9kLlBhdGNoOlxuICAgICAgICBvcHRpb25zLm1ldGhvZCA9IFJlcXVlc3RNZXRob2QuUGF0Y2g7XG5cbiAgICB9XG5cbiAgICBzd2l0Y2ggKHJlcS5yZXNwb25zZUJvZHlUeXBlKSB7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZUJvZHlUeXBlLkpzb246XG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gUmVzcG9uc2VDb250ZW50VHlwZS5Kc29uO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBSZXNvdXJjZVJlc3BvbnNlQm9keVR5cGUuQXJyYXlCdWZmZXI6XG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gUmVzcG9uc2VDb250ZW50VHlwZS5BcnJheUJ1ZmZlcjtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZUJvZHlUeXBlLkJsb2I6XG4gICAgICAgIG9wdGlvbnMucmVzcG9uc2VUeXBlID0gUmVzcG9uc2VDb250ZW50VHlwZS5CbG9iO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgb3B0aW9ucy5yZXNwb25zZVR5cGUgPSBSZXNwb25zZUNvbnRlbnRUeXBlLlRleHQ7XG5cbiAgICB9XG5cbiAgICBpZiAocmVxLmhlYWRlcnMpIHtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9IHJlcS5oZWFkZXJzO1xuICAgIH1cblxuICAgIGlmIChyZXEucXVlcnkpIHtcbiAgICAgIG9wdGlvbnMucGFyYW1zID0gcmVxLnF1ZXJ5O1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcHRpb25zKTtcblxuICB9XG5cbiAgcHJvdGVjdGVkIGhhbmRsZVJlc3BvbnNlKHJlcTogSVJlc291cmNlUmVxdWVzdCwgcmVzcG9uc2U6IFJlc3BvbnNlKTogSVJlc291cmNlUmVzcG9uc2Uge1xuXG4gICAgbGV0IGJvZHk6IGFueTtcbiAgICBzd2l0Y2ggKHJlcS5yZXNwb25zZUJvZHlUeXBlKSB7XG5cbiAgICAgIGNhc2UgUmVzb3VyY2VSZXNwb25zZUJvZHlUeXBlLkpzb246XG4gICAgICAgIGJvZHkgPSByZXNwb25zZS5qc29uKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZS5BcnJheUJ1ZmZlcjpcbiAgICAgICAgYm9keSA9IHJlc3BvbnNlLmFycmF5QnVmZmVyKCk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIFJlc291cmNlUmVzcG9uc2VCb2R5VHlwZS5CbG9iOlxuICAgICAgICBib2R5ID0gcmVzcG9uc2UuYmxvYigpO1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYm9keSA9IHJlc3BvbnNlLnRleHQoKTtcblxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIGJvZHksXG4gICAgICBoZWFkZXJzOiByZXNwb25zZS5oZWFkZXJzLnRvSlNPTigpXG4gICAgfTtcblxuICB9XG5cbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1Jlc291cmNlSGFuZGxlckh0dHAudHMiLCJpbXBvcnQgeyBNb2R1bGVXaXRoUHJvdmlkZXJzLCBOZ01vZHVsZSwgUHJvdmlkZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEh0dHAgfSBmcm9tICdAYW5ndWxhci9odHRwJztcbmltcG9ydCB7IFJlc291cmNlSGFuZGxlciB9IGZyb20gJ0BuZ3gtcmVzb3VyY2UvY29yZSc7XG5pbXBvcnQgeyBSZXNvdXJjZUhhbmRsZXJIdHRwIH0gZnJvbSAnLi9zcmMvUmVzb3VyY2VIYW5kbGVySHR0cCc7XG5cbmV4cG9ydCAqIGZyb20gJy4vc3JjL1Jlc291cmNlSGFuZGxlckh0dHAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZXNvdXJjZU1vZHVsZUNvbmZpZyB7XG4gIGhhbmRsZXI/OiBQcm92aWRlcjtcbn1cblxuQE5nTW9kdWxlKClcbmV4cG9ydCBjbGFzcyBSZXNvdXJjZU1vZHVsZSB7XG5cbiAgLyoqXG4gICAqIEZvciByb290XG4gICAqIEBwYXJhbSB7SVJlc291cmNlTW9kdWxlQ29uZmlnfSBjb25maWdcbiAgICogQHJldHVybiB7TW9kdWxlV2l0aFByb3ZpZGVyc31cbiAgICovXG4gIHN0YXRpYyBmb3JSb290KGNvbmZpZzogSVJlc291cmNlTW9kdWxlQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJlc291cmNlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIGNvbmZpZy5oYW5kbGVyIHx8IHtwcm92aWRlOiBSZXNvdXJjZUhhbmRsZXIsIHVzZUNsYXNzOiBSZXNvdXJjZUhhbmRsZXJIdHRwLCBkZXBzOiBbSHR0cF19XG4gICAgICBdXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3IgY2hpbGRcbiAgICogQHBhcmFtIHtJUmVzb3VyY2VNb2R1bGVDb25maWd9IGNvbmZpZ1xuICAgKiBAcmV0dXJuIHtNb2R1bGVXaXRoUHJvdmlkZXJzfVxuICAgKi9cbiAgc3RhdGljIGZvckNoaWxkKGNvbmZpZzogSVJlc291cmNlTW9kdWxlQ29uZmlnID0ge30pOiBNb2R1bGVXaXRoUHJvdmlkZXJzIHtcbiAgICByZXR1cm4ge1xuICAgICAgbmdNb2R1bGU6IFJlc291cmNlTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIGNvbmZpZy5oYW5kbGVyIHx8IHtwcm92aWRlOiBSZXNvdXJjZUhhbmRsZXIsIHVzZUNsYXNzOiBSZXNvdXJjZUhhbmRsZXJIdHRwLCBkZXBzOiBbSHR0cF19XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vaW5kZXgudHMiLCJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlIH0gZnJvbSAncnhqcy9PYnNlcnZhYmxlJztcbmltcG9ydCB7IElSZXNvdXJjZUhhbmRsZXJSZXNwb25zZSwgSVJlc291cmNlUmVxdWVzdCwgSVJlc291cmNlUmVzcG9uc2UsIFJlc291cmNlSGFuZGxlciB9IGZyb20gJ0BuZ3gtcmVzb3VyY2UvY29yZSc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBSZXNvdXJjZUhhbmRsZXJBYnN0cmFjdCBleHRlbmRzIFJlc291cmNlSGFuZGxlciB7XG5cblxuICBoYW5kbGUocmVxOiBJUmVzb3VyY2VSZXF1ZXN0KTogSVJlc291cmNlSGFuZGxlclJlc3BvbnNlIHtcblxuICAgIGNvbnN0IHJlcXVlc3QgPSB0aGlzLnByZXBhcmVSZXF1ZXN0KHJlcSk7XG5cbiAgICBjb25zdCByZXNwOiBJUmVzb3VyY2VIYW5kbGVyUmVzcG9uc2UgPSB7XG4gICAgICBwcm9taXNlOiBudWxsXG4gICAgfTtcblxuICAgIHJlc3AucHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblxuICAgICAgbGV0IHN1YnNjcmlwdGlvbiA9IHRoaXMucmVxdWVzdChyZXF1ZXN0KVxuICAgICAgICAuc3Vic2NyaWJlKFxuICAgICAgICAgIChyZXNwOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMuaGFuZGxlUmVzcG9uc2UocmVxLCByZXNwKSk7XG4gICAgICAgICAgfSxcbiAgICAgICAgICAoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgICAgICByZWplY3QodGhpcy5oYW5kbGVSZXNwb25zZShyZXEsIGVycikpO1xuICAgICAgICAgIH1cbiAgICAgICAgKTtcblxuICAgICAgcmVzcC5hYm9ydCA9ICgpID0+IHtcbiAgICAgICAgaWYgKHN1YnNjcmlwdGlvbikge1xuICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIHN1YnNjcmlwdGlvbiA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICB9KTtcblxuICAgIHJldHVybiByZXNwO1xuXG4gIH1cblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgcmVxdWVzdChyZXF1ZXN0OiBhbnkpOiBPYnNlcnZhYmxlPGFueT47XG5cbiAgcHJvdGVjdGVkIGFic3RyYWN0IHByZXBhcmVSZXF1ZXN0KHJlcTogSVJlc291cmNlUmVxdWVzdCk6IGFueTtcblxuICBwcm90ZWN0ZWQgYWJzdHJhY3QgaGFuZGxlUmVzcG9uc2UocmVxOiBJUmVzb3VyY2VSZXF1ZXN0LCByZXNwb25zZTogYW55KTogSVJlc291cmNlUmVzcG9uc2U7XG5cbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL1Jlc291cmNlSGFuZGxlckFic3RyYWN0LnRzIl0sInNvdXJjZVJvb3QiOiIifQ==