UNPKG

@genialis/resolwe

Version:
110 lines (108 loc) 19.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var mock_1 = require("./mock"); var component_1 = require("../tests/component"); component_1.describeComponent('reactive queries', [], function () { var mockApi; var unsubscribeRequestedSpy; beforeEach(function () { mockApi = new mock_1.MockApi(); unsubscribeRequestedSpy = jasmine.createSpy('unsubscribeRequestedSpy'); mockApi.whenPost('/api/queryobserver/unsubscribe', unsubscribeRequestedSpy); mockApi.createResource('data'); mockApi.simulateDelay(true); }); it('should be disposable', function (done) { var subscriber1 = jasmine.createSpy('subscriber1'); var subscriber2 = jasmine.createSpy('subscriber2'); var subscriber3 = jasmine.createSpy('subscriber3'); mockApi.Data.query({}, { reactive: true }).subscribe(subscriber1).dispose(); mockApi.Data.query({}, { reactive: true }).subscribe(subscriber2).dispose(); var subscription3 = mockApi.Data.query({}, { reactive: true }).subscribe(subscriber3); // Ensure these queries have been delayed. expect(subscriber1).not.toHaveBeenCalled(); expect(subscriber2).not.toHaveBeenCalled(); expect(subscriber3).not.toHaveBeenCalled(); setTimeout(function () { expect(subscriber1).not.toHaveBeenCalled(); expect(subscriber2).not.toHaveBeenCalled(); expect(subscriber3).toHaveBeenCalledTimes(1); mockApi.addItem('data', { id: 1 }); expect(subscriber1).not.toHaveBeenCalled(); expect(subscriber2).not.toHaveBeenCalled(); expect(subscriber3).toHaveBeenCalledTimes(2); subscription3.dispose(); mockApi.addItem('data', { id: 1 }); expect(subscriber3).toHaveBeenCalledTimes(2); done(); }, 100); }); describe('should make unsubscribe request', function () { it('after disposing the subscription', function (done) { var subscription1 = mockApi.Data.query({}, { reactive: true }).subscribe(); setTimeout(function () { // QueryObserver is initialized. expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); subscription1.dispose(); expect(unsubscribeRequestedSpy).toHaveBeenCalled(); done(); }, 100); }); it('after disposing all subscriptions', function (done) { mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); var subscription1 = mockApi.Data.query({}, { reactive: true }).subscribe(); var subscription2 = mockApi.Data.query({}, { reactive: true }).subscribe(); setTimeout(function () { // QueryObserver is initialized. expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); subscription1.dispose(); expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); subscription2.dispose(); expect(unsubscribeRequestedSpy).toHaveBeenCalled(); done(); }, 100); }); it('after a subscription is disposed before QueryObserver is INITIALIZED', function (done) { mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); setTimeout(function () { // QueryObserver is initialized. expect(unsubscribeRequestedSpy).toHaveBeenCalled(); done(); }, 100); }); // tslint:disable-next-line:max-line-length it('after disposing a subscription that was made after another subscription is disposed before QueryObserver is INITIALIZED', function (done) { mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); var subscription3 = mockApi.Data.query({}, { reactive: true }).subscribe(); setTimeout(function () { // QueryObserver is initialized. expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); subscription3.dispose(); expect(unsubscribeRequestedSpy).toHaveBeenCalled(); done(); }, 100); }); // tslint:disable-next-line:max-line-length it('after disposing a subscription that was made after QueryObserver is INITIALIZED after another subscription is disposed before QueryObserver is INITIALIZED', function (done) { mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); mockApi.Data.query({}, { reactive: true }).subscribe().dispose(); expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); setTimeout(function () { // QueryObserver is initialized. expect(unsubscribeRequestedSpy).toHaveBeenCalled(); unsubscribeRequestedSpy.calls.reset(); var subscription3 = mockApi.Data.query({}, { reactive: true }).subscribe(); setTimeout(function () { expect(unsubscribeRequestedSpy).not.toHaveBeenCalled(); subscription3.dispose(); expect(unsubscribeRequestedSpy).toHaveBeenCalled(); done(); }, 100); }, 100); }); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9hcGkvcmVzb3VyY2Uuc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLCtCQUErQjtBQUMvQixnREFBcUQ7QUFFckQsNkJBQWlCLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxFQUFFO0lBQ3RDLElBQUksT0FBZ0IsQ0FBQztJQUNyQixJQUFJLHVCQUFvQyxDQUFDO0lBRXpDLFVBQVUsQ0FBQztRQUNQLE9BQU8sR0FBRyxJQUFJLGNBQU8sRUFBRSxDQUFDO1FBQ3hCLHVCQUF1QixHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMseUJBQXlCLENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsUUFBUSxDQUFDLGdDQUFnQyxFQUFFLHVCQUF1QixDQUFDLENBQUM7UUFFNUUsT0FBTyxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMvQixPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHNCQUFzQixFQUFFLFVBQUMsSUFBSTtRQUM1QixJQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELElBQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDckQsSUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUVyRCxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDMUUsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxFQUFFLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFD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QWdCLEVBQUUsQ0FBQztnQkFDbkQsdUJBQXVCLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUV0QyxJQUFNLGFBQWEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLEVBQUUsRUFBQyxRQUFRLEVBQUUsSUFBSSxFQUFDLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztnQkFDM0UsVUFBVSxDQUFDO29CQUNQLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO29CQUN2RCxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUM7b0JBQ3hCLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLGdCQUFnQixFQUFFLENBQUM7b0JBQ25ELElBQUksRUFBRSxDQUFDO2dCQUNYLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNaLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUNaLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsImZpbGUiOiJhcGkvcmVzb3VyY2Uuc3BlYy5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7TW9ja0FwaX0gZnJvbSAnLi9tb2NrJztcbmltcG9ydCB7ZGVzY3JpYmVDb21wb25lbnR9IGZyb20gJy4uL3Rlc3RzL2NvbXBvbmVudCc7XG5cbmRlc2NyaWJlQ29tcG9uZW50KCdyZWFjdGl2ZSBxdWVyaWVzJywgW10sICgpID0+IHtcbiAgICBsZXQgbW9ja0FwaTogTW9ja0FwaTtcbiAgICBsZXQgdW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHk6IGphc21pbmUuU3B5O1xuXG4gICAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgICAgIG1vY2tBcGkgPSBuZXcgTW9ja0FwaSgpO1xuICAgICAgICB1bnN1YnNjcmliZVJlcXVlc3RlZFNweSA9IGphc21pbmUuY3JlYXRlU3B5KCd1bnN1YnNjcmliZVJlcXVlc3RlZFNweScpO1xuICAgICAgICBtb2NrQXBpLndoZW5Qb3N0KCcvYXBpL3F1ZXJ5b2JzZXJ2ZXIvdW5zdWJzY3JpYmUnLCB1bnN1YnNjcmliZVJlcXVlc3RlZFNweSk7XG5cbiAgICAgICAgbW9ja0FwaS5jcmVhdGVSZXNvdXJjZSgnZGF0YScpO1xuICAgICAgICBtb2NrQXBpLnNpbXVsYXRlRGVsYXkodHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBpdCgnc2hvdWxkIGJlIGRpc3Bvc2FibGUnLCAoZG9uZSkgPT4ge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyMSA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWJzY3JpYmVyMScpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyMiA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWJzY3JpYmVyMicpO1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyMyA9IGphc21pbmUuY3JlYXRlU3B5KCdzdWJzY3JpYmVyMycpO1xuXG4gICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKHN1YnNjcmliZXIxKS5kaXNwb3NlKCk7XG4gICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKHN1YnNjcmliZXIyKS5kaXNwb3NlKCk7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbjMgPSBtb2NrQXBpLkRhdGEucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnN1YnNjcmliZShzdWJzY3JpYmVyMyk7XG5cbiAgICAgICAgLy8gRW5zdXJlIHRoZXNlIHF1ZXJpZXMgaGF2ZSBiZWVuIGRlbGF5ZWQuXG4gICAgICAgIGV4cGVjdChzdWJzY3JpYmVyMSkubm90LnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIyKS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjMpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjEpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjMpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcblxuICAgICAgICAgICAgbW9ja0FwaS5hZGRJdGVtKCdkYXRhJywge2lkOiAxfSk7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjEpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjIpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICBleHBlY3Qoc3Vic2NyaWJlcjMpLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygyKTtcblxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uMy5kaXNwb3NlKCk7XG5cbiAgICAgICAgICAgIG1vY2tBcGkuYWRkSXRlbSgnZGF0YScsIHtpZDogMX0pO1xuICAgICAgICAgICAgZXhwZWN0KHN1YnNjcmliZXIzKS50b0hhdmVCZWVuQ2FsbGVkVGltZXMoMik7XG5cbiAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSwgMTAwKTtcbiAgICB9KTtcblxuICAgIGRlc2NyaWJlKCdzaG91bGQgbWFrZSB1bnN1YnNjcmliZSByZXF1ZXN0JywgKCkgPT4ge1xuICAgICAgICBpdCgnYWZ0ZXIgZGlzcG9zaW5nIHRoZSBzdWJzY3JpcHRpb24nLCAoZG9uZSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uMSA9IG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFF1ZXJ5T2JzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uMS5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICBpdCgnYWZ0ZXIgZGlzcG9zaW5nIGFsbCBzdWJzY3JpcHRpb25zJywgKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCkuZGlzcG9zZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uMSA9IG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24yID0gbW9ja0FwaS5EYXRhLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoKTtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUXVlcnlPYnNlcnZlciBpcyBpbml0aWFsaXplZC5cbiAgICAgICAgICAgICAgICBleHBlY3QodW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHkpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24xLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHkpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24yLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICBleHBlY3QodW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHkpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcblxuICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGl0KCdhZnRlciBhIHN1YnNjcmlwdGlvbiBpcyBkaXNwb3NlZCBiZWZvcmUgUXVlcnlPYnNlcnZlciBpcyBJTklUSUFMSVpFRCcsIChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrQXBpLkRhdGEucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnN1YnNjcmliZSgpLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCkuZGlzcG9zZSgpO1xuICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gUXVlcnlPYnNlcnZlciBpcyBpbml0aWFsaXplZC5cbiAgICAgICAgICAgICAgICBleHBlY3QodW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHkpLnRvSGF2ZUJlZW5DYWxsZWQoKTtcbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGl0KCdhZnRlciBkaXNwb3NpbmcgYSBzdWJzY3JpcHRpb24gdGhhdCB3YXMgbWFkZSBhZnRlciBhbm90aGVyIHN1YnNjcmlwdGlvbiBpcyBkaXNwb3NlZCBiZWZvcmUgUXVlcnlPYnNlcnZlciBpcyBJTklUSUFMSVpFRCcsIChkb25lKSA9PiB7XG4gICAgICAgICAgICBtb2NrQXBpLkRhdGEucXVlcnkoe30sIHtyZWFjdGl2ZTogdHJ1ZX0pLnN1YnNjcmliZSgpLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCkuZGlzcG9zZSgpO1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uMyA9IG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCk7XG5cbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFF1ZXJ5T2JzZXJ2ZXIgaXMgaW5pdGlhbGl6ZWQuXG4gICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuXG4gICAgICAgICAgICAgICAgc3Vic2NyaXB0aW9uMy5kaXNwb3NlKCk7XG4gICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG5cbiAgICAgICAgICAgICAgICBkb25lKCk7XG4gICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICB9KTtcblxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWxpbmUtbGVuZ3RoXG4gICAgICAgIGl0KCdhZnRlciBkaXNwb3NpbmcgYSBzdWJzY3JpcHRpb24gdGhhdCB3YXMgbWFkZSBhZnRlciBRdWVyeU9ic2VydmVyIGlzIElOSVRJQUxJWkVEIGFmdGVyIGFub3RoZXIgc3Vic2NyaXB0aW9uIGlzIGRpc3Bvc2VkIGJlZm9yZSBRdWVyeU9ic2VydmVyIGlzIElOSVRJQUxJWkVEJywgKGRvbmUpID0+IHtcbiAgICAgICAgICAgIG1vY2tBcGkuRGF0YS5xdWVyeSh7fSwge3JlYWN0aXZlOiB0cnVlfSkuc3Vic2NyaWJlKCkuZGlzcG9zZSgpO1xuICAgICAgICAgICAgbW9ja0FwaS5EYXRhLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoKS5kaXNwb3NlKCk7XG4gICAgICAgICAgICBleHBlY3QodW5zdWJzY3JpYmVSZXF1ZXN0ZWRTcHkpLm5vdC50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAvLyBRdWVyeU9ic2VydmVyIGlzIGluaXRpYWxpemVkLlxuICAgICAgICAgICAgICAgIGV4cGVjdCh1bnN1YnNjcmliZVJlcXVlc3RlZFNweSkudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICAgICAgICAgIHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5LmNhbGxzLnJlc2V0KCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24zID0gbW9ja0FwaS5EYXRhLnF1ZXJ5KHt9LCB7cmVhY3RpdmU6IHRydWV9KS5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS5ub3QudG9IYXZlQmVlbkNhbGxlZCgpO1xuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpcHRpb24zLmRpc3Bvc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgZXhwZWN0KHVuc3Vic2NyaWJlUmVxdWVzdGVkU3B5KS50b0hhdmVCZWVuQ2FsbGVkKCk7XG4gICAgICAgICAgICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgfSk7XG4gICAgfSk7XG59KTtcbiJdfQ==