UNPKG

@umbraco/headless-client

Version:
262 lines 24.7 kB
"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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29udGVudERlbGl2ZXJ5Q2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL0NsaWVudHMvRGVsaXZlcnkvQ29udGVudERlbGl2ZXJ5Q2xpZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLDZDQUEyQztBQVczQzs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBa0JHO0FBQ0g7SUFDRSxnQkFBZ0I7SUFDaEIsK0JBQThCLE1BQWM7UUFBNUMsaUJBQWdEO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVE7UUFFM0IsZ0JBQVcsR0FBRyxVQUFVLFFBQXFCLEVBQUUsSUFBVTs7Ozs0QkFDekQscUJBQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUksUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFBOzt3QkFBekQsTUFBTSxHQUFHLFNBQWdEO3dCQUMvRCxzQkFBTyxNQUFNLEVBQUE7OzthQUNkLENBQUE7SUFMOEMsQ0FBQztJQU9oRDs7Ozs7T0FLRztJQUNHLG9DQUFJLEdBQVYsVUFBK0IsT0FBb0M7OztnQkFDakUsc0JBQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxxQkFBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFJLE9BQU8sQ0FBQyxDQUFDLEVBQUE7OztLQUNyRTtJQUVEOzs7OztPQUtHO0lBQ0csb0NBQUksR0FBVixVQUErQixFQUFVLEVBQUUsT0FBb0M7Ozs7Ozs7d0JBRXBFLHFCQUFNLElBQUksQ0FBQyxXQUFXLENBQUMscUJBQVMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBSSxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs0QkFBOUUsc0JBQU8sU0FBdUUsRUFBQTs7O3dCQUU5RSxJQUFJLEtBQUcsQ0FBQyxRQUFRLElBQUksS0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssR0FBRyxFQUFFOzRCQUMv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QUFJLEVBQUUsT0FBTyxDQUFDLENBQUMsRUFBQTs7O0tBQzdFO0lBQ0gsNEJBQUM7QUFBRCxDQUFDLEFBcklELElBcUlDO0FBcklZLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENsaWVudCB9IGZyb20gJy4uLy4uL0NsaWVudCdcbmltcG9ydCB7IEVuZHBvaW50cyB9IGZyb20gJy4uLy4uL0VuZHBvaW50cydcbmltcG9ydCB7IEVuZHBvaW50IH0gZnJvbSAnLi4vLi4vRW5kcG9pbnQnXG5pbXBvcnQge1xuICBDb250ZW50RGVsaXZlcnlBbmNlc3RvcnNPcHRpb25zLCBDb250ZW50RGVsaXZlcnlCeUNvbnRlbnRUeXBlT3B0aW9ucyxcbiAgQ29udGVudERlbGl2ZXJ5QnlJZE9wdGlvbnMsXG4gIENvbnRlbnREZWxpdmVyeUJ5VXJsT3B0aW9ucywgQ29udGVudERlbGl2ZXJ5Q2hpbGRyZW5PcHRpb25zLCBDb250ZW50RGVsaXZlcnlEZXNjZW5kYW50c09wdGlvbnMsXG4gIENvbnRlbnREZWxpdmVyeVJvb3RPcHRpb25zLCBDb250ZW50RGVsaXZlcnlTZWFyY2hPcHRpb25zLCBDb250ZW50RGVsaXZlcnlGaWx0ZXJPcHRpb25zfSBmcm9tICcuLi8uLi9SZXF1ZXN0T3B0aW9ucydcbmltcG9ydCB7IENvbnRlbnQgfSBmcm9tICcuLi8uLi9SZXNwb25zZXMnXG5pbXBvcnQgeyBQYWdlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vUmVzcG9uc2VzL1BhZ2VkUmVzcG9uc2UnXG5pbXBvcnQgeyBDb250ZW50RmlsdGVyIH0gZnJvbSAnLi4vLi4vUmVxdWVzdE9wdGlvbnMvQ29udGVudEZpbHRlck9wdGlvbnMnXG5cbi8qKlxuICogQ29udGVudERlbGl2ZXJ5Q2xpZW50IGlzIHVzZWQgdG8gYWNjZXNzIHRoZSBDb250ZW50IHBhcnQgb2YgdGhlIENvbnRlbnQgRGVsaXZlcnkgQVBJLlxuICogQHB1YmxpY1xuICpcbiAqIEBleGFtcGxlXG4gKiBUaGUge0BsaW5rIENvbnRlbnREZWxpdmVyeUNsaWVudH0gbXVzdCBiZSBhY2Nlc3NlZCB0aHJvdWdoIHtAbGluayBDbGllbnR9LlxuICpcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IENsaWVudCB9IGZyb20gJ0B1bWJyYWNvL2hlYWRsZXNzLWNsaWVudCdcbiAqXG4gKiBjb25zdCBjbGllbnQgPSBuZXcgQ2xpZW50KHtcbiAqICBwcm9qZWN0QWxpYXM6ICc8eW91ci1wcm9qZWN0LWFsaWFzPicsXG4gKiAgYXBpS2V5OiAnPHlvdXItYXBpLWtleT4nLFxuICogIGxhbmd1YWdlOiAnPGlzby1jb2RlPicsXG4gKiB9KVxuICpcbiAqIGNvbnN0IGNvbnRlbnRDbGllbnQgPSBjbGllbnQuZGVsaXZlcnkuY29udGVudFxuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBDb250ZW50RGVsaXZlcnlDbGllbnQge1xuICAvKiogQGludGVybmFsICovXG4gIGNvbnN0cnVjdG9yIChwcml2YXRlIHJlYWRvbmx5IGNsaWVudDogQ2xpZW50KSB7fVxuXG4gIHByaXZhdGUgcmVhZG9ubHkgbWFrZVJlcXVlc3QgPSBhc3luYyA8Uj4oZW5kcG9pbnQ6IEVuZHBvaW50PFI+LCBkYXRhPzogYW55KTogUHJvbWlzZTxSPiA9PiB7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5jbGllbnQubWFrZVJlcXVlc3Q8Uj4oZW5kcG9pbnQsIGRhdGEpXG4gICAgcmV0dXJuIHJlc3VsdFxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFsbCBDb250ZW50IGF0IHRoZSByb290LlxuICAgKlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlcXVlc3Qgb3B0aW9ucy4gU2VlIHtAbGluayBDb250ZW50RGVsaXZlcnlSb290T3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9LlxuICAgKi9cbiAgYXN5bmMgcm9vdDxUIGV4dGVuZHMgQ29udGVudD4gKG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlSb290T3B0aW9ucykge1xuICAgIHJldHVybiB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LnJvb3Q8VD4ob3B0aW9ucykpXG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYSBzaW5nbGUgQ29udGVudCBpdGVtIGJ5IGl0cyBpZC5cbiAgICogQHBhcmFtIGlkIC0gR1VJRCBpZCBvZiB0aGUgQ29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gb3B0aW9ucyAtIFJlcXVlc3Qgb3B0aW9ucy4gU2VlIHtAbGluayBDb250ZW50RGVsaXZlcnlCeUlkT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudH0gaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGJ5SWQ8VCBleHRlbmRzIENvbnRlbnQ+IChpZDogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlJZE9wdGlvbnMpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuYnlJZDxUPihpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0aCBhIHNpbmdsZSBDb250aW50IGl0ZW0gYnkgaXRzIFVybC5cbiAgICogQHBhcmFtIHVybCAtIFVybCBmb3IgdGhlIGNvbnRlbnQgdG8gcmV0cmlldmUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUJ5VXJsT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgQ29udGVudH0gaWYgZm91bmQsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAgICovXG4gIGFzeW5jIGJ5VXJsPCBUIGV4dGVuZHMgQ29udGVudD4gKHVybDogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlVcmxPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LmJ5VXJsPFQ+KHVybCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggY2hpbGRyZW4gZm9yIGEgQ29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gaWQgLSBHVUlEIGlkIG9mIHRoZSBDb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUNoaWxkcmVuT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgUGFnZWRSZXNwb25zZX0gb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBjaGlsZHJlbjxUIGV4dGVuZHMgQ29udGVudD4gKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlDaGlsZHJlbk9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4gfCB1bmRlZmluZWQ+IHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuY2hpbGRyZW48VD4oaWQsIG9wdGlvbnMpKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5yZXNwb25zZSAmJiBlcnIucmVzcG9uc2Uuc3RhdHVzID09PSA0MDQpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZFxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuY2VzdG9ycyBmb3IgYSBjb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBpZCAtIEdVSUQgaWQgb2YgdGhlIENvbnRlbnQgaXRlbS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZXF1ZXN0IG9wdGlvbnMuIFNlZSB7QGxpbmsgQ29udGVudERlbGl2ZXJ5QW5jZXN0b3JzT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBhbmNlc3RvcnMgKGlkOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlBbmNlc3RvcnNPcHRpb25zKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCB0aGlzLm1ha2VSZXF1ZXN0KEVuZHBvaW50cy5kZWxpdmVyeS5jb250ZW50LmFuY2VzdG9ycyhpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggZGVzY2VuZGFudHMgZm9yIGEgY29udGVudCBpdGVtLlxuICAgKiBAcGFyYW0gaWQgLSBHVUlEIGlkIG9mIHRoZSBDb250ZW50IGl0ZW0uXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeURlc2NlbmRhbnRzT3B0aW9uc30uXG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYW4gYXJyYXkgb2Yge0BsaW5rIENvbnRlbnR9IGlmIGZvdW5kLCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gICAqL1xuICBhc3luYyBkZXNjZW5kYW50cyAoaWQ6IHN0cmluZywgb3B0aW9ucz86IENvbnRlbnREZWxpdmVyeURlc2NlbmRhbnRzT3B0aW9ucykge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5kZXNjZW5kYW50cyhpZCwgb3B0aW9ucykpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyLnJlc3BvbnNlICYmIGVyci5yZXNwb25zZS5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggQ29udGVudCBvZiBhIHNwZWNpZmljIHR5cGUuXG4gICAqIEBwYXJhbSBjb250ZW50VHlwZSAtIENvbnRlbnQgVHlwZSB0byBmaWx0ZXIgYnkuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUJ5Q29udGVudFR5cGVPcHRpb25zfVxuICAgKiBAcmV0dXJucyBhIGBQcm9taXNlYCB0aGF0IHJlc29sdmVzIHRvIGEge0BsaW5rIFBhZ2VkUmVzcG9uc2V9IG9mIHtAbGluayBDb250ZW50fS5cbiAgICovXG4gIGFzeW5jIGJ5Q29udGVudFR5cGU8VCBleHRlbmRzIENvbnRlbnQ+IChjb250ZW50VHlwZTogc3RyaW5nLCBvcHRpb25zPzogQ29udGVudERlbGl2ZXJ5QnlDb250ZW50VHlwZU9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5ieUNvbnRlbnRUeXBlPFQ+KGNvbnRlbnRUeXBlLCBvcHRpb25zKSlcbiAgfVxuXG4gIC8qKlxuICAgKiBGaWx0ZXIgZm9yIENvbnRlbnQgY29udGFpbmluZyBzcGVjaWZpYyBwcm9wZXJ0eSB2YWx1ZXNcbiAgICogQHBhcmFtIGNvbnRlbnRGaWx0ZXIgLSBGaWx0ZXIgb2JqZWN0LiBTZWUge0BsaW5rIENvbnRlbnRGaWx0ZXJ9XG4gICAqIEBwYXJhbSBvcHRpb25zIC0gUmVxdWVzdCBvcHRpb25zLiBTZWUge0BsaW5rIENvbnRlbnREZWxpdmVyeUZpbHRlck9wdGlvbnN9XG4gICAqIEByZXR1cm5zIGEgYFByb21pc2VgIHRoYXQgcmVzb2x2ZXMgdG8gYSB7QGxpbmsgUGFnZWRSZXNwb25zZX0gb2Yge0BsaW5rIENvbnRlbnR9LlxuICAgKi9cbiAgYXN5bmMgZmlsdGVyPFQgZXh0ZW5kcyBDb250ZW50PiAoYm9keTogQ29udGVudEZpbHRlciwgb3B0aW9ucz86IENvbnRlbnREZWxpdmVyeUZpbHRlck9wdGlvbnMpOiBQcm9taXNlPFBhZ2VkUmVzcG9uc2U8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5tYWtlUmVxdWVzdChFbmRwb2ludHMuZGVsaXZlcnkuY29udGVudC5maWx0ZXI8VD4ob3B0aW9ucyksIGJvZHkpXG4gIH1cblxuICAvKipcbiAgICogU2VhcmNoIGZvciBDb250ZW50IGNvbnRhaW5pbmcgdGVybSxcbiAgICogQHBhcmFtIHRlcm0gLSBUZXJtIHRvIHNlYXJjaCBmb3JcbiAgICogQHBhcmFtIG9wdGlvbnMgLSBSZXF1ZXN0IG9wdGlvbnMuIFNlZSB7QGxpbmsgQ29udGVudERlbGl2ZXJ5U2VhcmNoT3B0aW9uc31cbiAgICogQHJldHVybnMgYSBgUHJvbWlzZWAgdGhhdCByZXNvbHZlcyB0byBhIHtAbGluayBQYWdlZFJlc3BvbnNlfSBvZiB7QGxpbmsgQ29udGVudH0uXG4gICAqL1xuICBhc3luYyBzZWFyY2g8VCBleHRlbmRzIENvbnRlbnQ+ICh0ZXJtOiBzdHJpbmcsIG9wdGlvbnM/OiBDb250ZW50RGVsaXZlcnlTZWFyY2hPcHRpb25zKTogUHJvbWlzZTxQYWdlZFJlc3BvbnNlPFQ+PiB7XG4gICAgcmV0dXJuIHRoaXMubWFrZVJlcXVlc3QoRW5kcG9pbnRzLmRlbGl2ZXJ5LmNvbnRlbnQuc2VhcmNoPFQ+KHRlcm0sIG9wdGlvbnMpKVxuICB9XG59XG4iXX0=