@umbraco/headless-client
Version:
Node.js client library for the Umbraco Headless APIs
262 lines • 24.7 kB
JavaScript
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ContentDeliveryClient = void 0;
var Endpoints_1 = require("../../Endpoints");
/**
* ContentDeliveryClient is used to access the Content part of the Content Delivery API.
* @public
*
* @example
* The {@link ContentDeliveryClient} must be accessed through {@link Client}.
*
* ```typescript
* import { Client } from '@umbraco/headless-client'
*
* const client = new Client({
* projectAlias: '<your-project-alias>',
* apiKey: '<your-api-key>',
* language: '<iso-code>',
* })
*
* const contentClient = client.delivery.content
* ```
*/
var ContentDeliveryClient = /** @class */ (function () {
/** @internal */
function ContentDeliveryClient(client) {
var _this = this;
this.client = client;
this.makeRequest = function (endpoint, data) { return __awaiter(_this, void 0, void 0, function () {
var result;
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.client.makeRequest(endpoint, data)];
case 1:
result = _a.sent();
return [2 /*return*/, result];
}
});
}); };
}
/**
* Fetch all Content at the root.
*
* @param options - Request options. See {@link ContentDeliveryRootOptions}.
* @returns a `Promise` that resolves to an array of {@link Content}.
*/
ContentDeliveryClient.prototype.root = function (options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.root(options))];
});
});
};
/**
* Fetch a single Content item by its id.
* @param id - GUID id of the Content item.
* @param options - Request options. See {@link ContentDeliveryByIdOptions}.
* @returns a `Promise` that resolves to a {@link Content} if found, otherwise `undefined`.
*/
ContentDeliveryClient.prototype.byId = function (id, options) {
return __awaiter(this, void 0, void 0, function () {
var err_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.byId(id, options))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_1 = _a.sent();
if (err_1.response && err_1.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_1;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Feth a single Contint item by its Url.
* @param url - Url for the content to retrieve.
* @param options - Request options. See {@link ContentDeliveryByUrlOptions}.
* @returns a `Promise` that resolves to a {@link Content} if found, otherwise `undefined`.
*/
ContentDeliveryClient.prototype.byUrl = function (url, options) {
return __awaiter(this, void 0, void 0, function () {
var err_2;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.byUrl(url, options))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_2 = _a.sent();
if (err_2.response && err_2.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_2;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Fetch children for a Content item.
* @param id - GUID id of the Content item.
* @param options - Request options. See {@link ContentDeliveryChildrenOptions}.
* @returns a `Promise` that resolves to a {@link PagedResponse} of {@link Content} if found, otherwise `undefined`.
*/
ContentDeliveryClient.prototype.children = function (id, options) {
return __awaiter(this, void 0, void 0, function () {
var err_3;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.children(id, options))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_3 = _a.sent();
if (err_3.response && err_3.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_3;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Fetch ancestors for a content item.
* @param id - GUID id of the Content item.
* @param options - Request options. See {@link ContentDeliveryAncestorsOptions}.
* @returns a `Promise` that resolves to an array of {@link Content} if found, otherwise `undefined`.
*/
ContentDeliveryClient.prototype.ancestors = function (id, options) {
return __awaiter(this, void 0, void 0, function () {
var err_4;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.ancestors(id, options))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_4 = _a.sent();
if (err_4.response && err_4.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_4;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Fetch descendants for a content item.
* @param id - GUID id of the Content item.
* @param options - Request options. See {@link ContentDeliveryDescendantsOptions}.
* @returns a `Promise` that resolves to an array of {@link Content} if found, otherwise `undefined`.
*/
ContentDeliveryClient.prototype.descendants = function (id, options) {
return __awaiter(this, void 0, void 0, function () {
var err_5;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 2, , 3]);
return [4 /*yield*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.descendants(id, options))];
case 1: return [2 /*return*/, _a.sent()];
case 2:
err_5 = _a.sent();
if (err_5.response && err_5.response.status === 404) {
return [2 /*return*/, undefined];
}
throw err_5;
case 3: return [2 /*return*/];
}
});
});
};
/**
* Fetch Content of a specific type.
* @param contentType - Content Type to filter by.
* @param options - Request options. See {@link ContentDeliveryByContentTypeOptions}
* @returns a `Promise` that resolves to a {@link PagedResponse} of {@link Content}.
*/
ContentDeliveryClient.prototype.byContentType = function (contentType, options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.byContentType(contentType, options))];
});
});
};
/**
* Filter for Content containing specific property values
* @param contentFilter - Filter object. See {@link ContentFilter}
* @param options - Request options. See {@link ContentDeliveryFilterOptions}
* @returns a `Promise` that resolves to a {@link PagedResponse} of {@link Content}.
*/
ContentDeliveryClient.prototype.filter = function (body, options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.filter(options), body)];
});
});
};
/**
* Search for Content containing term,
* @param term - Term to search for
* @param options - Request options. See {@link ContentDeliverySearchOptions}
* @returns a `Promise` that resolves to a {@link PagedResponse} of {@link Content}.
*/
ContentDeliveryClient.prototype.search = function (term, options) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
return [2 /*return*/, this.makeRequest(Endpoints_1.Endpoints.delivery.content.search(term, options))];
});
});
};
return ContentDeliveryClient;
}());
exports.ContentDeliveryClient = ContentDeliveryClient;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGVudERlbGl2ZXJ5Q2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0NsaWVudHMvRGVsaXZlcnkvQ29udGVudERlbGl2ZXJ5Q2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUEyQztBQVczQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7SUFDRSxnQkFBZ0I7SUFDaEIsK0JBQThCLE1BQWM7UUFBNUMsaUJBQWdEO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFM0IsZ0JBQVcsR0FBRyxVQUFVLFFBQXFCLEVBQUUsSUFBVTs7Ozs0QkFDekQscUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFBOzt3QkFBekQsTUFBTSxHQUFHLFNBQWdEO3dCQUMvRCxzQkFBTyxNQUFNLEVBQUE7OzthQUNkLENBQUE7SUFMOEMsQ0FBQztJQU9oRDs7Ozs7T0FLRztJQUNHLG9DQUFJLEdBQVYsVUFBK0IsT0FBb0M7OztnQkFDakUsc0JBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUE7OztLQUNyRTtJQUVEOzs7OztPQUtHO0lBQ0csb0NBQUksR0FBVixVQUErQixFQUFVLEVBQUUsT0FBb0M7Ozs7Ozs7d0JBRXBFLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs0QkFBOUUsc0JBQU8sU0FBdUUsRUFBQTs7O3dCQUU5RSxJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMvQyxzQkFBTyxTQUFTLEVBQUE7eUJBQ2pCO3dCQUNELE1BQU0sS0FBRyxDQUFBOzs7OztLQUVaO0lBRUQ7Ozs7O09BS0c7SUFDRyxxQ0FBSyxHQUFYLFVBQWlDLEdBQVcsRUFBRSxPQUFxQzs7Ozs7Ozt3QkFFeEUscUJBQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFJLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQyxFQUFBOzRCQUFoRixzQkFBTyxTQUF5RSxFQUFBOzs7d0JBRWhGLElBQUksS0FBRyxDQUFDLFFBQVEsSUFBSSxLQUFHLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxHQUFHLEVBQUU7NEJBQy9DLHNCQUFPLFNBQVMsRUFBQTt5QkFDakI7d0JBQ0QsTUFBTSxLQUFHLENBQUE7Ozs7O0tBRVo7SUFFRDs7Ozs7T0FLRztJQUNHLHdDQUFRLEdBQWQsVUFBbUMsRUFBVSxFQUFFLE9BQXdDOzs7Ozs7O3dCQUU1RSxxQkFBTSxJQUFJLENBQUMsV0FBVyxDQUFDLHFCQUFTLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUksRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDLEVBQUE7NEJBQWxGLHNCQUFPLFNBQTJFLEVBQUE7Ozt3QkFFbEYsSUFBSSxLQUFHLENBQUMsUUFBUSxJQUFJLEtBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLEdBQUcsRUFBRTs0QkFDL0Msc0JBQU8sU0FBUyxFQUFBO3lCQUNqQjt3QkFDRCxNQUFNLEtBQUcsQ0FBQTs7Ozs7S0FFWjtJQUVEOzs7OztPQUtHO0lBQ0cseUNBQVMsR0FBZixVQUFpQixFQUFVLEVBQUUsT0FBeUM7Ozs7Ozs7d0JBRTNELHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs0QkFBaEYsc0JBQU8sU0FBeUUsRUFBQTs7O3dCQUVoRixJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMvQyxzQkFBTyxTQUFTLEVBQUE7eUJBQ2pCO3dCQUNELE1BQU0sS0FBRyxDQUFBOzs7OztLQUVaO0lBRUQ7Ozs7O09BS0c7SUFDRywyQ0FBVyxHQUFqQixVQUFtQixFQUFVLEVBQUUsT0FBMkM7Ozs7Ozs7d0JBRS9ELHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs0QkFBbEYsc0JBQU8sU0FBMkUsRUFBQTs7O3dCQUVsRixJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMvQyxzQkFBTyxTQUFTLEVBQUE7eUJBQ2pCO3dCQUNELE1BQU0sS0FBRyxDQUFBOzs7OztLQUVaO0lBRUQ7Ozs7O09BS0c7SUFDRyw2Q0FBYSxHQUFuQixVQUF3QyxXQUFtQixFQUFFLE9BQTZDOzs7Z0JBQ3hHLHNCQUFPLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBSSxXQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs7O0tBQzNGO0lBRUQ7Ozs7O09BS0c7SUFDRyxzQ0FBTSxHQUFaLFVBQWlDLElBQW1CLEVBQUUsT0FBc0M7OztnQkFDMUYsc0JBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFJLE9BQU8sQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFBOzs7S0FDN0U7SUFFRDs7Ozs7T0FLRztJQUNHLHNDQUFNLEdBQVosVUFBaUMsSUFBWSxFQUFFLE9BQXNDOzs7Z0JBQ25GLHNCQUFPLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBSSxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs7O0tBQzdFO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLEFBcklELElBcUlDO0FBcklZLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uL0NsaWVudCdcbmltcG9ydCB7IEVuZHBvaW50cyB9IGZyb20gJy4uLy4uL0VuZHBvaW50cydcbmltcG9ydCB7IEVuZHBvaW50IH0gZnJvbSAnLi4vLi4vRW5kcG9pbnQnXG5pbXBvcnQge1xuICBDb250ZW50RGVsaXZlcnlBbmNlc3RvcnNPcHRpb25zLCBDb250ZW50RGVsaXZlcnlCeUNvbnRlbnRUeXBlT3B0aW9ucyxcbiAgQ29udGVudERlbGl2ZXJ5QnlJZE9wdGlvbnMsXG4gIENvbnRlbnREZWxpdmVyeUJ5VXJsT3B0aW9ucywgQ29udGVudERlbGl2ZXJ5Q2hpbGRyZW5PcHRpb25zLCBDb250ZW50RGVsaXZlcnlEZXNjZW5kYW50c09wdGlvbnMsXG4gIENvbnRlbnREZWxpdmVyeVJvb3RPcHRpb25zLCBDb250ZW50RGVsaXZlcnlTZWFyY2hPcHRpb25zLCBDb250ZW50RGVsaXZlcnlGaWx0ZXJPcHRpb25zfSBmcm9tICcuLi8uLi9SZXF1ZXN0T3B0aW9ucydcbmltcG9ydCB7IENvbnRlbnQgfSBmcm9tICcuLi8uLi9SZXNwb25zZXMnXG5pbXBvcnQgeyBQYWdlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vUmVzcG9uc2VzL1BhZ2VkUmVzcG9uc2UnXG5pbXBvcnQgeyBDb250ZW50RmlsdGVyIH0gZnJvbSAnLi4vLi4vUmVxdWVzdE9wdGlvbnMvQ29udGVudEZpbHRlck9wdGlvbnMnXG5cbi8qKlxuICogQ29udGVudERlbGl2ZXJ5Q2xpZW50IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBDb250ZW50IHBhcnQgb2YgdGhlIENvbnRlbnQgRGVsaXZlcnkgQVBJLlxuICogQHB1YmxpY1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUge0BsaW5rIENvbnRlbnREZWxpdmVyeUNsaWVudH0gbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHtAbGluayBDbGllbnR9LlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENsaWVudCB9IGZyb20gJ0B1bWJyYWNvL2hlYWRsZXNzLWNsaWVudCdcbiAqXG4gKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAqICBwcm9qZWN0QWxpYXM6ICc8eW91ci1wcm9qZWN0LWFsaWFzPicsXG4gKiAgYXBpS2V5OiAnPHlvdXItYXBpLWtleT4nLFxuICogIGxhbmd1YWdlOiAnPGlzby1jb2RlPicsXG4gKiB9KVxuICpcbiAqIGNvbnN0IGNvbnRlbnRDbGllbnQgPSBjbGllbnQuZGVsaXZlcnkuY29udGVudFxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50RGVsaXZlcnlDbGllbnQge1xuICAvKiogQGludGVybmFsICovXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50KSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFrZVJlcXVlc3QgPSBhc3luYyA8Uj4oZW5kcG9pbnQ6IEVuZHBvaW50PFI+LCBkYXRhPzogYW55KTogUHJvbWlzZTxSPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQubWFrZVJlcXVlc3Q8Uj4oZW5kcG9pbnQsIGRhdGEpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBDb250ZW50IGF0IHRoZSByb290LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlcXVlc3Qgb3B0aW9ucy4gU2VlIHtAbGluayBDb250ZW50RGVsaXZlcnlSb290T3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9LlxuICAgKi9cbiAgYXN5bmMgcm9vdDxUIGV4dGVuZHMgQ29udGVudD4gKG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlSb290T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LnJvb3Q8VD4ob3B0aW9ucykpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBzaW5nbGUgQ29udGVudCBpdGVtIGJ5IGl0cyBpZC5cbiAgICogQHBhcmFtIGlkIC0gR1VJRCBpZCBvZiB0aGUgQ29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlcXVlc3Qgb3B0aW9ucy4gU2VlIHtAbGluayBDb250ZW50RGVsaXZlcnlCeUlkT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudH0gaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGJ5SWQ8VCBleHRlbmRzIENvbnRlbnQ+IChpZDogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlJZE9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuYnlJZDxUPihpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0aCBhIHNpbmdsZSBDb250aW50IGl0ZW0gYnkgaXRzIFVybC5cbiAgICogQHBhcmFtIHVybCAtIFVybCBmb3IgdGhlIGNvbnRlbnQgdG8gcmV0cmlldmUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUJ5VXJsT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudH0gaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGJ5VXJsPCBUIGV4dGVuZHMgQ29udGVudD4gKHVybDogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlVcmxPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LmJ5VXJsPFQ+KHVybCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggY2hpbGRyZW4gZm9yIGEgQ29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gaWQgLSBHVUlEIGlkIG9mIHRoZSBDb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUNoaWxkcmVuT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgUGFnZWRSZXNwb25zZX0gb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBjaGlsZHJlbjxUIGV4dGVuZHMgQ29udGVudD4gKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlDaGlsZHJlbk9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuY2hpbGRyZW48VD4oaWQsIG9wdGlvbnMpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuY2VzdG9ycyBmb3IgYSBjb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBpZCAtIEdVSUQgaWQgb2YgdGhlIENvbnRlbnQgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZXF1ZXN0IG9wdGlvbnMuIFNlZSB7QGxpbmsgQ29udGVudERlbGl2ZXJ5QW5jZXN0b3JzT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBhbmNlc3RvcnMgKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlBbmNlc3RvcnNPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LmFuY2VzdG9ycyhpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGVzY2VuZGFudHMgZm9yIGEgY29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gaWQgLSBHVUlEIGlkIG9mIHRoZSBDb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeURlc2NlbmRhbnRzT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBkZXNjZW5kYW50cyAoaWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnRlbnREZWxpdmVyeURlc2NlbmRhbnRzT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5kZXNjZW5kYW50cyhpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggQ29udGVudCBvZiBhIHNwZWNpZmljIHR5cGUuXG4gICAqIEBwYXJhbSBjb250ZW50VHlwZSAtIENvbnRlbnQgVHlwZSB0byBmaWx0ZXIgYnkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUJ5Q29udGVudFR5cGVPcHRpb25zfVxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIFBhZ2VkUmVzcG9uc2V9IG9mIHtAbGluayBDb250ZW50fS5cbiAgICovXG4gIGFzeW5jIGJ5Q29udGVudFR5cGU8VCBleHRlbmRzIENvbnRlbnQ+IChjb250ZW50VHlwZTogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlDb250ZW50VHlwZU9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5ieUNvbnRlbnRUeXBlPFQ+KGNvbnRlbnRUeXBlLCBvcHRpb25zKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgZm9yIENvbnRlbnQgY29udGFpbmluZyBzcGVjaWZpYyBwcm9wZXJ0eSB2YWx1ZXNcbiAgICogQHBhcmFtIGNvbnRlbnRGaWx0ZXIgLSBGaWx0ZXIgb2JqZWN0LiBTZWUge0BsaW5rIENvbnRlbnRGaWx0ZXJ9XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUZpbHRlck9wdGlvbnN9XG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgUGFnZWRSZXNwb25zZX0gb2Yge0BsaW5rIENvbnRlbnR9LlxuICAgKi9cbiAgYXN5bmMgZmlsdGVyPFQgZXh0ZW5kcyBDb250ZW50PiAoYm9keTogQ29udGVudEZpbHRlciwgb3B0aW9ucz86IENvbnRlbnREZWxpdmVyeUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5maWx0ZXI8VD4ob3B0aW9ucyksIGJvZHkpXG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBDb250ZW50IGNvbnRhaW5pbmcgdGVybSxcbiAgICogQHBhcmFtIHRlcm0gLSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZXF1ZXN0IG9wdGlvbnMuIFNlZSB7QGxpbmsgQ29udGVudERlbGl2ZXJ5U2VhcmNoT3B0aW9uc31cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBQYWdlZFJlc3BvbnNlfSBvZiB7QGxpbmsgQ29udGVudH0uXG4gICAqL1xuICBhc3luYyBzZWFyY2g8VCBleHRlbmRzIENvbnRlbnQ+ICh0ZXJtOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlTZWFyY2hPcHRpb25zKTogUHJvbWlzZTxQYWdlZFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuc2VhcmNoPFQ+KHRlcm0sIG9wdGlvbnMpKVxuICB9XG59XG4iXX0=