angular-odata
Version:
Client side OData typescript library for Angular
125 lines • 17.4 kB
JavaScript
import { map } from 'rxjs/operators';
import { PathSegment } from '../../types';
import { ODataPathSegments } from '../path';
import { ODataResource } from '../resource';
import { ODataActionResource } from './action';
import { ODataFunctionResource } from './function';
import { ODataNavigationPropertyResource } from './navigation-property';
import { ODataPropertyResource } from './property';
export class ODataSingletonResource extends ODataResource {
//#region Factory
static factory(api, { path, type, }) {
const segments = new ODataPathSegments();
const segment = segments.add(PathSegment.singleton, path);
if (type !== undefined) {
segment.outgoingType(type);
segment.incomingType(type);
}
return new ODataSingletonResource(api, { segments });
}
clone() {
return super.clone();
}
//#endregion
key(value) {
const singleton = this.clone();
var key = this.resolveKey(value);
if (key !== undefined)
singleton.segment((s) => s.singleton().key(key));
return singleton;
}
keys(values) {
const singleton = this.clone();
const types = this.pathSegments.types({ key: true });
const keys = values.map((value, index) => ODataResource.resolveKey(value, this.api.findStructuredType(types[index])));
singleton.segment((s) => s.keys(keys));
return singleton;
}
navigationProperty(path) {
return ODataNavigationPropertyResource.fromResource(this, path);
}
property(path) {
return ODataPropertyResource.fromResource(this, path);
}
action(path) {
return ODataActionResource.fromResource(this, path);
}
function(path) {
return ODataFunctionResource.fromResource(this, path);
}
//#region Requests
post(attrs, options = {}) {
return super.post(attrs, { responseType: 'entity', ...options });
}
put(attrs, options = {}) {
return super.put(attrs, { responseType: 'entity', ...options });
}
patch(attrs, options = {}) {
return super.patch(attrs, { responseType: 'entity', ...options });
}
delete(options = {}) {
return super.delete({ responseType: 'entity', ...options });
}
get(options = {}) {
return super.get({ responseType: 'entity', ...options });
}
//#endregion
//#region Shortcuts
/**
* Creates a new entity.
* @param attrs The entity attributes to create.
* @param options The options for the request.
* @returns The created entity with the annotations.
*/
create(attrs, options) {
return this.post(attrs, options);
}
/**
* Updates an existing entity.
* @param attrs The entity attributes to update.
* @param options The options for the request.
* @returns The updated entity with the annotations.
*/
update(attrs, options) {
return this.put(attrs, options);
}
/**
* Modifies an existing entity.
* @param attrs The entity attributes to modify.
* @param options The options for the request.
* @returns The modified entity with the annotations.
*/
modify(attrs, options) {
return this.patch(attrs, options);
}
/**
* Delete an existing entity.
* @param options The options for the request.
* @returns Observable of the deleted entity.
*/
destroy(options) {
return this.delete(options);
}
/**
* Fetch an existing entity.
* @param options The options for the request.
* @returns Observable of the entity with the annotations.
*/
fetch(options) {
return this.get(options);
}
/**
* Fetch an existing entity.
* @param options The options for the request.
* @returns Observable of the entity.
*/
fetchEntity(options) {
return this.fetch(options).pipe(map(({ entity }) => entity));
}
fetchModel(options) {
return this.fetch(options).pipe(map(({ entity, annots }) => entity
? this.asModel(entity, { annots, ModelType: options?.ModelType })
: null));
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1vZGF0YS9zcmMvbGliL3Jlc291cmNlcy90eXBlcy9zaW5nbGV0b24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR3JDLE9BQU8sRUFBRSxXQUFXLEVBQWUsTUFBTSxhQUFhLENBQUM7QUFDdkQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNuRCxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUV4RSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFFbkQsTUFBTSxPQUFPLHNCQUEwQixTQUFRLGFBQWdCO0lBQzdELGlCQUFpQjtJQUNqQixNQUFNLENBQUMsT0FBTyxDQUNaLEdBQWEsRUFDYixFQUNFLElBQUksRUFDSixJQUFJLEdBSUw7UUFFRCxNQUFNLFFBQVEsR0FBRyxJQUFJLGlCQUFpQixFQUFFLENBQUM7UUFDekMsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsT0FBTyxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM3QixDQUFDO1FBQ0QsT0FBTyxJQUFJLHNCQUFzQixDQUFJLEdBQUcsRUFBRSxF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QUFFLEVBQUUsQ0FDekIsTUFBTTtZQUNKLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxDQUFDO1lBQ2pFLENBQUMsQ0FBQyxJQUFJLENBQ1QsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgT0RhdGFBcGkgfSBmcm9tICcuLi8uLi9hcGknO1xuaW1wb3J0IHsgTW9kZWxJbnRlcmZhY2UsIE9EYXRhTW9kZWwgfSBmcm9tICcuLi8uLi9tb2RlbHMnO1xuaW1wb3J0IHsgUGF0aFNlZ21lbnQsIFF1ZXJ5T3B0aW9uIH0gZnJvbSAnLi4vLi4vdHlwZXMnO1xuaW1wb3J0IHsgT0RhdGFQYXRoU2VnbWVudHMgfSBmcm9tICcuLi9wYXRoJztcbmltcG9ydCB7IE9EYXRhUmVzb3VyY2UgfSBmcm9tICcuLi9yZXNvdXJjZSc7XG5pbXBvcnQgeyBPRGF0YUVudGl0eSB9IGZyb20gJy4uL3Jlc3BvbnNlJztcbmltcG9ydCB7IE9EYXRhQWN0aW9uUmVzb3VyY2UgfSBmcm9tICcuL2FjdGlvbic7XG5pbXBvcnQgeyBPRGF0YUZ1bmN0aW9uUmVzb3VyY2UgfSBmcm9tICcuL2Z1bmN0aW9uJztcbmltcG9ydCB7IE9EYXRhTmF2aWdhdGlvblByb3BlcnR5UmVzb3VyY2UgfSBmcm9tICcuL25hdmlnYXRpb24tcHJvcGVydHknO1xuaW1wb3J0IHsgT0RhdGFPcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zJztcbmltcG9ydCB7IE9EYXRhUHJvcGVydHlSZXNvdXJjZSB9IGZyb20gJy4vcHJvcGVydHknO1xuXG5leHBvcnQgY2xhc3MgT0RhdGFTaW5nbGV0b25SZXNvdXJjZTxUPiBleHRlbmRzIE9EYXRhUmVzb3VyY2U8VD4ge1xuICAvLyNyZWdpb24gRmFjdG9yeVxuICBzdGF0aWMgZmFjdG9yeTxTPihcbiAgICBhcGk6IE9EYXRhQXBpLFxuICAgIHtcbiAgICAgIHBhdGgsXG4gICAgICB0eXBlLFxuICAgIH06IHtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICAgIHR5cGU/OiBzdHJpbmc7XG4gICAgfSxcbiAgKSB7XG4gICAgY29uc3Qgc2VnbWVudHMgPSBuZXcgT0RhdGFQYXRoU2VnbWVudHMoKTtcbiAgICBjb25zdCBzZWdtZW50ID0gc2VnbWVudHMuYWRkKFBhdGhTZWdtZW50LnNpbmdsZXRvbiwgcGF0aCk7XG4gICAgaWYgKHR5cGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgc2VnbWVudC5vdXRnb2luZ1R5cGUodHlwZSk7XG4gICAgICBzZWdtZW50LmluY29taW5nVHlwZSh0eXBlKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBPRGF0YVNpbmdsZXRvblJlc291cmNlPFM+KGFwaSwgeyBzZWdtZW50cyB9KTtcbiAgfVxuICBvdmVycmlkZSBjbG9uZSgpOiBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+IHtcbiAgICByZXR1cm4gc3VwZXIuY2xvbmUoKSBhcyBPRGF0YVNpbmdsZXRvblJlc291cmNlPFQ+O1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIGtleSh2YWx1ZTogYW55KSB7XG4gICAgY29uc3Qgc2luZ2xldG9uID0gdGhpcy5jbG9uZSgpO1xuICAgIHZhciBrZXkgPSB0aGlzLnJlc29sdmVLZXkodmFsdWUpO1xuICAgIGlmIChrZXkgIT09IHVuZGVmaW5lZCkgc2luZ2xldG9uLnNlZ21lbnQoKHMpID0+IHMuc2luZ2xldG9uKCkua2V5KGtleSkpO1xuICAgIHJldHVybiBzaW5nbGV0b247XG4gIH1cblxuICBrZXlzKHZhbHVlczogYW55W10pIHtcbiAgICBjb25zdCBzaW5nbGV0b24gPSB0aGlzLmNsb25lKCk7XG4gICAgY29uc3QgdHlwZXMgPSB0aGlzLnBhdGhTZWdtZW50cy50eXBlcyh7IGtleTogdHJ1ZSB9KTtcbiAgICBjb25zdCBrZXlzID0gdmFsdWVzLm1hcCgodmFsdWUsIGluZGV4KSA9PlxuICAgICAgT0RhdGFSZXNvdXJjZS5yZXNvbHZlS2V5KFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdGhpcy5hcGkuZmluZFN0cnVjdHVyZWRUeXBlPFQ+KHR5cGVzW2luZGV4XSksXG4gICAgICApLFxuICAgICk7XG4gICAgc2luZ2xldG9uLnNlZ21lbnQoKHMpID0+IHMua2V5cyhrZXlzKSk7XG4gICAgcmV0dXJuIHNpbmdsZXRvbjtcbiAgfVxuXG4gIG5hdmlnYXRpb25Qcm9wZXJ0eTxOPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFOYXZpZ2F0aW9uUHJvcGVydHlSZXNvdXJjZS5mcm9tUmVzb3VyY2U8Tj4odGhpcywgcGF0aCk7XG4gIH1cblxuICBwcm9wZXJ0eTxQPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFQcm9wZXJ0eVJlc291cmNlLmZyb21SZXNvdXJjZTxQPih0aGlzLCBwYXRoKTtcbiAgfVxuXG4gIGFjdGlvbjxQLCBSPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFBY3Rpb25SZXNvdXJjZS5mcm9tUmVzb3VyY2U8UCwgUj4odGhpcywgcGF0aCk7XG4gIH1cblxuICBmdW5jdGlvbjxQLCBSPihwYXRoOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gT0RhdGFGdW5jdGlvblJlc291cmNlLmZyb21SZXNvdXJjZTxQLCBSPih0aGlzLCBwYXRoKTtcbiAgfVxuXG4gIC8vI3JlZ2lvbiBSZXF1ZXN0c1xuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcG9zdChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucG9zdChhdHRycywgeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIHB1dChcbiAgICBhdHRyczogUGFydGlhbDxUPixcbiAgICBvcHRpb25zOiBPRGF0YU9wdGlvbnMgPSB7fSxcbiAgKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIucHV0KGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgcGF0Y2goXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zID0ge30sXG4gICk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHN1cGVyLnBhdGNoKGF0dHJzLCB7IHJlc3BvbnNlVHlwZTogJ2VudGl0eScsIC4uLm9wdGlvbnMgfSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgb3ZlcnJpZGUgZGVsZXRlKG9wdGlvbnM6IE9EYXRhT3B0aW9ucyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gc3VwZXIuZGVsZXRlKHsgcmVzcG9uc2VUeXBlOiAnZW50aXR5JywgLi4ub3B0aW9ucyB9KTtcbiAgfVxuXG4gIHByb3RlY3RlZCBvdmVycmlkZSBnZXQoXG4gICAgb3B0aW9uczogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSA9IHt9LFxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiBzdXBlci5nZXQoeyByZXNwb25zZVR5cGU6ICdlbnRpdHknLCAuLi5vcHRpb25zIH0pO1xuICB9XG4gIC8vI2VuZHJlZ2lvblxuXG4gIC8vI3JlZ2lvbiBTaG9ydGN1dHNcbiAgLyoqXG4gICAqIENyZWF0ZXMgYSBuZXcgZW50aXR5LlxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzIHRvIGNyZWF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBUaGUgY3JlYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnMuXG4gICAqL1xuICBjcmVhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnBvc3QoYXR0cnMsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVwZGF0ZXMgYW4gZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzIHRvIHVwZGF0ZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBUaGUgdXBkYXRlZCBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnMuXG4gICAqL1xuICB1cGRhdGUoXG4gICAgYXR0cnM6IFBhcnRpYWw8VD4sXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLnB1dChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogTW9kaWZpZXMgYW4gZXhpc3RpbmcgZW50aXR5LlxuICAgKiBAcGFyYW0gYXR0cnMgVGhlIGVudGl0eSBhdHRyaWJ1dGVzIHRvIG1vZGlmeS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBUaGUgbW9kaWZpZWQgZW50aXR5IHdpdGggdGhlIGFubm90YXRpb25zLlxuICAgKi9cbiAgbW9kaWZ5KFxuICAgIGF0dHJzOiBQYXJ0aWFsPFQ+LFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMsXG4gICk6IE9ic2VydmFibGU8T0RhdGFFbnRpdHk8VD4+IHtcbiAgICByZXR1cm4gdGhpcy5wYXRjaChhdHRycywgb3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogRGVsZXRlIGFuIGV4aXN0aW5nIGVudGl0eS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBkZWxldGVkIGVudGl0eS5cbiAgICovXG4gIGRlc3Ryb3kob3B0aW9ucz86IE9EYXRhT3B0aW9ucyk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuZGVsZXRlKG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIGFuIGV4aXN0aW5nIGVudGl0eS5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkgd2l0aCB0aGUgYW5ub3RhdGlvbnMuXG4gICAqL1xuICBmZXRjaChcbiAgICBvcHRpb25zPzogT0RhdGFPcHRpb25zICYge1xuICAgICAgYm9keVF1ZXJ5T3B0aW9ucz86IFF1ZXJ5T3B0aW9uW107XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxPRGF0YUVudGl0eTxUPj4ge1xuICAgIHJldHVybiB0aGlzLmdldChvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGZXRjaCBhbiBleGlzdGluZyBlbnRpdHkuXG4gICAqIEBwYXJhbSBvcHRpb25zIFRoZSBvcHRpb25zIGZvciB0aGUgcmVxdWVzdC5cbiAgICogQHJldHVybnMgT2JzZXJ2YWJsZSBvZiB0aGUgZW50aXR5LlxuICAgKi9cbiAgZmV0Y2hFbnRpdHkoXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8VCB8IG51bGw+IHtcbiAgICByZXR1cm4gdGhpcy5mZXRjaChvcHRpb25zKS5waXBlKG1hcCgoeyBlbnRpdHkgfSkgPT4gZW50aXR5KSk7XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggYW4gZXhpc3RpbmcgZW50aXR5IGFuZCByZXR1cm4gYSBtb2RlbC5cbiAgICogQHBhcmFtIG9wdGlvbnMgVGhlIG9wdGlvbnMgZm9yIHRoZSByZXF1ZXN0LlxuICAgKiBAcmV0dXJucyBPYnNlcnZhYmxlIG9mIHRoZSBlbnRpdHkuXG4gICAqL1xuICBmZXRjaE1vZGVsKFxuICAgIG9wdGlvbnM/OiBPRGF0YU9wdGlvbnMgJiB7XG4gICAgICBib2R5UXVlcnlPcHRpb25zPzogUXVlcnlPcHRpb25bXTtcbiAgICAgIE1vZGVsVHlwZT86IHR5cGVvZiBPRGF0YU1vZGVsO1xuICAgIH0sXG4gICk6IE9ic2VydmFibGU8KE9EYXRhTW9kZWw8VD4gJiBNb2RlbEludGVyZmFjZTxUPikgfCBudWxsPjtcbiAgZmV0Y2hNb2RlbDxNIGV4dGVuZHMgT0RhdGFNb2RlbDxUPj4oXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgTW9kZWxUeXBlPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgfSxcbiAgKTogT2JzZXJ2YWJsZTxNIHwgbnVsbD47XG4gIGZldGNoTW9kZWwoXG4gICAgb3B0aW9ucz86IE9EYXRhT3B0aW9ucyAmIHtcbiAgICAgIGJvZHlRdWVyeU9wdGlvbnM/OiBRdWVyeU9wdGlvbltdO1xuICAgICAgTW9kZWxUeXBlPzogdHlwZW9mIE9EYXRhTW9kZWw7XG4gICAgfSxcbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuZmV0Y2gob3B0aW9ucykucGlwZShcbiAgICAgIG1hcCgoeyBlbnRpdHksIGFubm90cyB9KSA9PlxuICAgICAgICBlbnRpdHlcbiAgICAgICAgICA/IHRoaXMuYXNNb2RlbChlbnRpdHksIHsgYW5ub3RzLCBNb2RlbFR5cGU6IG9wdGlvbnM/Lk1vZGVsVHlwZSB9KVxuICAgICAgICAgIDogbnVsbCxcbiAgICAgICksXG4gICAgKTtcbiAgfVxuICAvLyNlbmRyZWdpb25cbn1cbiJdfQ==