1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 2× 3× 3× 2× 1× 2× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 7× 7× 3× 4× 2× 2× 1× 1× 1× 6× 6× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× 1× | 'use strict'; // istanbul ignore next var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; // istanbul ignore next function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var _expect = require('expect'); var _expect2 = _interopRequireDefault(_expect); var _redux = require('redux'); var _src = require('./src'); describe('redux-await', function () { it('exports AWAIT_MARKER', function () { _expect2['default'](_src.AWAIT_MARKER).toBeTruthy(); }); it('exports AWAIT_META_CONTAINER', function () { _expect2['default'](_src.AWAIT_META_CONTAINER).toBeTruthy(); }); it('exports AWAIT_INFO_CONTAINER', function () { _expect2['default'](_src.AWAIT_INFO_CONTAINER).toBeTruthy(); }); it('exports middleware', function () { _expect2['default'](_src.middleware).toBeTruthy(); }); it('exports createReducer', function () { _expect2['default'](_src.createReducer).toBeTruthy(); }); it('exports getInfo', function () { _expect2['default'](_src.getInfo).toBeTruthy(); }); describe('createReducer', function () { describe('wraps a reducer', function () { var reducer = undefined; var wrappedReducer = undefined; beforeEach(function () { reducer = function (state, action) { if (state === undefined) state = {}; if (action.type === 'TESTING') { return _extends({}, state, { wasTested: true }); } return state; }; wrappedReducer = _src.createReducer(reducer); }); it('still runs on actions it was reducing', function () { var initalState = wrappedReducer(undefined, { type: 'FOOBAR' }); _expect2['default'](initalState).toEqual({}); var nextState = wrappedReducer({}, { type: 'TESTING' }); _expect2['default'](nextState).toEqual({ wasTested: true }); }); it('handles events with action.meta[AWAIT_META_CONTAINER]', function () { // istanbul ignore next var _meta; var nextState = wrappedReducer({ a: true, b: true }, { type: 'TESTING', meta: (_meta = {}, _meta[_src.AWAIT_META_CONTAINER] = { promiseKeys: ['a'], status: 'success' }, _meta) }); _expect2['default'](nextState.b).toBeTruthy(); _expect2['default'](nextState.wasTested).toBeTruthy(); }); }); }); it("does it's thing", function (done) { var createStoreWithMiddleware = _redux.applyMiddleware(_src.middleware)(_redux.createStore); var reducer = function reducer(state, action) { if (state === undefined) state = {}; if (action.type === _src.getPendingActionType('TESTING')) { return _extends({}, state, { wasPending: true }); }; if (action.type === 'TESTING') { return _extends({}, state, { wasTested: true, soon: action.payload.soon + '!' }); } return state; }; var store = createStoreWithMiddleware(_src.createReducer(reducer)); var states = []; store.subscribe(function () { states.push(store.getState()); if (states.length === 6) { try { _expect2['default'](_src.getInfo(states[0]).statuses.soon).toEqual('pending'); _expect2['default'](states[0].wasPending).toEqual(true); _expect2['default'](_src.getInfo(states[1]).statuses.soon).toEqual('pending'); _expect2['default'](_src.getInfo(states[2]).statuses.soon).toEqual('success'); _expect2['default'](states[2].soon).toEqual('v!'); _expect2['default'](states[2].wasTested).toEqual(true); _expect2['default'](_src.getInfo(states[3]).statuses.soon).toEqual('failure'); _expect2['default'](_src.getInfo(states[3]).errors.soon.message).toEqual('no!'); _expect2['default'](_src.getInfo(states[4]).statuses.soon).toEqual('pending'); _expect2['default'](_src.getInfo(states[5]).statuses.soon).toEqual('success'); _expect2['default'](_src.getInfo(states[4]).errors.soon).toBeFalsy(); _expect2['default'](_src.getInfo(states[5]).errors.soon).toBeFalsy(); done(); } catch (e) { done(e); } } }); var generateRejection = function generateRejection() { return new Promise(function (_, reject) { return setTimeout(function () { return reject(new Error('no!')); }, 15); }); }; // smiley face; store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: Promise.resolve('v'), heyo: Promise.resolve('heyo'), ignore: 123 } }); store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: generateRejection(), ignore: 123 } }); setTimeout(function () { return store.dispatch({ type: 'TESTING', AWAIT_MARKER: _src.AWAIT_MARKER, payload: { soon: Promise.resolve('v'), heyo: Promise.resolve('heyo'), ignore: 123 } }); }, 20); }); }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9Vc2Vycy9tb3NoZS9Eb2N1bWVudHMvUmFuZG9tUHJvamVjdHMvcmVkdXgtYXdhaXQvdGVzdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O3NCQUFtQixRQUFROzs7O3FCQUNrQixPQUFPOzttQkFTN0MsT0FBTzs7QUFFZCxRQUFRLENBQUMsYUFBYSxFQUFFLFlBQU07QUFDNUIsSUFBRSxDQUFDLHNCQUFzQixFQUFFLFlBQU07QUFDL0IsMENBQW9CLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDbkMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLDhCQUE4QixFQUFFLFlBQU07QUFDdkMsa0RBQTRCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDM0MsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLG9CQUFvQixFQUFFLFlBQU07QUFDN0Isd0NBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDakMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLHVCQUF1QixFQUFFLFlBQU07QUFDaEMsMkNBQXFCLENBQUMsVUFBVSxFQUFFLENBQUM7R0FDcEMsQ0FBQyxDQUFDO0FBQ0gsSUFBRSxDQUFDLGlCQUFpQixFQUFFLFlBQU07QUFDMUIscUNBQWUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztHQUM5QixDQUFDLENBQUM7O0FBRUgsVUFBUSxDQUFDLGVBQWUsRUFBRSxZQUFNO0FBQzlCLFlBQVEsQ0FBQyxpQkFBaUIsRUFBRSxZQUFNO0FBQ2hDLFVBQUksT0FBTyxZQUFBLENBQUM7QUFDWixVQUFJLGNBQWMsWUFBQSxDQUFDO0FBQ25CLGdCQUFVLENBQUMsWUFBTTtBQUNmLGVBQU8sR0FBRyxVQUFDLEtBQUssRUFBTyxNQUFNLEVBQUs7Y0FBdkIsS0FBSyxnQkFBTCxLQUFLLEdBQUcsRUFBRTs7QUFDbkIsY0FBSSxNQUFN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Q0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCw4QkFBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JDLDhCQUFPLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsOEJBQU8sYUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDOUQsOEJBQU8sYUFBUSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzVELDhCQUFPLGFBQVEsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUM1RCw4QkFBTyxhQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRCw4QkFBTyxhQUFRLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsQ0FBQztBQUNuRCxjQUFJLEVBQUUsQ0FBQztTQUNSLENBQUMsT0FBTyxDQUFDLEVBQUU7QUFDVixjQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDVDtPQUNGO0tBQ0YsQ0FBQyxDQUFDO0FBQ0gsUUFBTSxpQkFBaUIsR0FBRyxTQUFwQixpQkFBaUI7YUFBUyxJQUFJLE9BQU8sQ0FBQyxVQUFDLENBQUMsRUFBRSxNQUFNO2VBQUssVUFBVSxDQUFDO2lCQUFNLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUFBLEVBQUUsRUFBRSxDQUFDO09BQUEsQ0FBQztLQUFBLENBQUM7OztBQUczRyxTQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2SSxTQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUN2RyxjQUFVLENBQUM7YUFBTSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxZQUFZLG1CQUFBLEVBQUUsT0FBTyxFQUFFLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUM7S0FBQSxFQUFFLEVBQUUsQ0FBQyxDQUFBO0dBRTdKLENBQUMsQ0FBQztDQUVKLENBQUMsQ0FBQyIsImZpbGUiOiIvVXNlcnMvbW9zaGUvRG9jdW1lbnRzL1JhbmRvbVByb2plY3RzL3JlZHV4LWF3YWl0L3Rlc3QuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZXhwZWN0IGZyb20gJ2V4cGVjdCc7XG5pbXBvcnQgeyBjcmVhdGVTdG9yZSwgYXBwbHlNaWRkbGV3YXJlIH0gZnJvbSAncmVkdXgnO1xuaW1wb3J0IHtcbiAgQVdBSVRfTUFSS0VSLFxuICBBV0FJVF9NRVRBX0NPTlRBSU5FUixcbiAgQVdBSVRfSU5GT19DT05UQUlORVIsXG4gIG1pZGRsZXdhcmUsXG4gIGNyZWF0ZVJlZHVjZXIsXG4gIGdldEluZm8sXG4gIGdldFBlbmRpbmdBY3Rpb25UeXBlLFxufSBmcm9tICcuL3NyYyc7XG5cbmRlc2NyaWJlKCdyZWR1eC1hd2FpdCcsICgpID0+IHtcbiAgaXQoJ2V4cG9ydHMgQVdBSVRfTUFSS0VSJywgKCkgPT4ge1xuICAgIGV4cGVjdChBV0FJVF9NQVJLRVIpLnRvQmVUcnV0aHkoKTtcbiAgfSk7XG4gIGl0KCdleHBvcnRzIEFXQUlUX01FVEFfQ09OVEFJTkVSJywgKCkgPT4ge1xuICAgIGV4cGVjdChBV0FJVF9NRVRBX0NPTlRBSU5FUikudG9CZVRydXRoeSgpO1xuICB9KTtcbiAgaXQoJ2V4cG9ydHMgQVdBSVRfSU5GT19DT05UQUlORVInLCAoKSA9PiB7XG4gICAgZXhwZWN0KEFXQUlUX0lORk9fQ09OVEFJTkVSKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBtaWRkbGV3YXJlJywgKCkgPT4ge1xuICAgIGV4cGVjdChtaWRkbGV3YXJlKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBjcmVhdGVSZWR1Y2VyJywgKCkgPT4ge1xuICAgIGV4cGVjdChjcmVhdGVSZWR1Y2VyKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuICBpdCgnZXhwb3J0cyBnZXRJbmZvJywgKCkgPT4ge1xuICAgIGV4cGVjdChnZXRJbmZvKS50b0JlVHJ1dGh5KCk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdjcmVhdGVSZWR1Y2VyJywgKCkgPT4ge1xuICAgIGRlc2NyaWJlKCd3cmFwcyBhIHJlZHVjZXInLCAoKSA9PiB7XG4gICAgICBsZXQgcmVkdWNlcjtcbiAgICAgIGxldCB3cmFwcGVkUmVkdWNlcjtcbiAgICAgIGJlZm9yZUVhY2goKCkgPT4ge1xuICAgICAgICByZWR1Y2VyID0gKHN0YXRlID0ge30sIGFjdGlvbikgPT4ge1xuICAgICAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ1RFU1RJTkcnKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNUZXN0ZWQ6IHRydWUgfSB9XG4gICAgICAgICAgcmV0dXJuIHN0YXRlO1xuICAgICAgICB9O1xuICAgICAgICB3cmFwcGVkUmVkdWNlciA9IGNyZWF0ZVJlZHVjZXIocmVkdWNlcik7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ3N0aWxsIHJ1bnMgb24gYWN0aW9ucyBpdCB3YXMgcmVkdWNpbmcnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGluaXRhbFN0YXRlID0gd3JhcHBlZFJlZHVjZXIodW5kZWZpbmVkLCB7IHR5cGU6ICdGT09CQVInIH0pO1xuICAgICAgICBleHBlY3QoaW5pdGFsU3RhdGUpLnRvRXF1YWwoe30pO1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSB3cmFwcGVkUmVkdWNlcih7fSwgeyB0eXBlOiAnVEVTVElORycgfSk7XG4gICAgICAgIGV4cGVjdChuZXh0U3RhdGUpLnRvRXF1YWwoeyB3YXNUZXN0ZWQ6IHRydWUgfSk7XG4gICAgICB9KTtcblxuICAgICAgaXQoJ2hhbmRsZXMgZXZlbnRzIHdpdGggYWN0aW9uLm1ldGFbQVdBSVRfTUVUQV9DT05UQUlORVJdJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBuZXh0U3RhdGUgPSB3cmFwcGVkUmVkdWNlcih7YTogdHJ1ZSwgYjogdHJ1ZX0sIHtcbiAgICAgICAgICB0eXBlOiAnVEVTVElORycsXG4gICAgICAgICAgbWV0YToge1xuICAgICAgICAgICAgW0FXQUlUX01FVEFfQ09OVEFJTkVSXToge1xuICAgICAgICAgICAgICBwcm9taXNlS2V5czogWydhJ10sXG4gICAgICAgICAgICAgIHN0YXR1czogJ3N1Y2Nlc3MnLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgZXhwZWN0KG5leHRTdGF0ZS5iKS50b0JlVHJ1dGh5KCk7XG4gICAgICAgIGV4cGVjdChuZXh0U3RhdGUud2FzVGVzdGVkKS50b0JlVHJ1dGh5KCk7XG4gICAgICB9KTtcblxuICAgIH0pO1xuICB9KTtcblxuICBpdChcImRvZXMgaXQncyB0aGluZ1wiLCBkb25lID0+IHtcbiAgICBjb25zdCBjcmVhdGVTdG9yZVdpdGhNaWRkbGV3YXJlID0gYXBwbHlNaWRkbGV3YXJlKG1pZGRsZXdhcmUpKGNyZWF0ZVN0b3JlKTtcbiAgICBjb25zdCByZWR1Y2VyID0gKHN0YXRlID0ge30sIGFjdGlvbikgPT4ge1xuICAgICAgaWYgKGFjdGlvbi50eXBlID09PSBnZXRQZW5kaW5nQWN0aW9uVHlwZSgnVEVTVElORycpKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNQZW5kaW5nOiB0cnVlIH0gfTtcbiAgICAgIGlmIChhY3Rpb24udHlwZSA9PT0gJ1RFU1RJTkcnKSB7IHJldHVybiB7IC4uLnN0YXRlLCB3YXNUZXN0ZWQ6IHRydWUsIHNvb246IGFjdGlvbi5wYXlsb2FkLnNvb24gKyAnIScgfSB9XG4gICAgICByZXR1cm4gc3RhdGU7XG4gICAgfTtcbiAgICBjb25zdCBzdG9yZSA9IGNyZWF0ZVN0b3JlV2l0aE1pZGRsZXdhcmUoICBjcmVhdGVSZWR1Y2VyKHJlZHVjZXIpICApO1xuICAgIGNvbnN0IHN0YXRlcyA9IFtdO1xuICAgIHN0b3JlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICBzdGF0ZXMucHVzaChzdG9yZS5nZXRTdGF0ZSgpKTtcbiAgICAgIGlmIChzdGF0ZXMubGVuZ3RoID09PSA2KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZXhwZWN0KGdldEluZm8oc3RhdGVzWzBdKS5zdGF0dXNlcy5zb29uKS50b0VxdWFsKCdwZW5kaW5nJyk7XG4gICAgICAgICAgZXhwZWN0KHN0YXRlc1swXS53YXNQZW5kaW5nKS50b0VxdWFsKHRydWUpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1sxXSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgncGVuZGluZycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1syXSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgnc3VjY2VzcycpO1xuICAgICAgICAgIGV4cGVjdChzdGF0ZXNbMl0uc29vbikudG9FcXVhbCgndiEnKTtcbiAgICAgICAgICBleHBlY3Qoc3RhdGVzWzJdLndhc1Rlc3RlZCkudG9FcXVhbCh0cnVlKTtcbiAgICAgICAgICBleHBlY3QoZ2V0SW5mbyhzdGF0ZXNbM10pLnN0YXR1c2VzLnNvb24pLnRvRXF1YWwoJ2ZhaWx1cmUnKTtcbiAgICAgICAgICBleHBlY3QoZ2V0SW5mbyhzdGF0ZXNbM10pLmVycm9ycy5zb29uLm1lc3NhZ2UpLnRvRXF1YWwoJ25vIScpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s0XSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgncGVuZGluZycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s1XSkuc3RhdHVzZXMuc29vbikudG9FcXVhbCgnc3VjY2VzcycpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s0XSkuZXJyb3JzLnNvb24pLnRvQmVGYWxzeSgpO1xuICAgICAgICAgIGV4cGVjdChnZXRJbmZvKHN0YXRlc1s1XSkuZXJyb3JzLnNvb24pLnRvQmVGYWxzeSgpO1xuICAgICAgICAgIGRvbmUoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCBnZW5lcmF0ZVJlamVjdGlvbiA9ICgpID0+IG5ldyBQcm9taXNlKChfLCByZWplY3QpID0+IHNldFRpbWVvdXQoKCkgPT4gcmVqZWN0KG5ldyBFcnJvcignbm8hJykpLCAxNSkpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzbWlsZXkgZmFjZTtcbiAgICBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IFByb21pc2UucmVzb2x2ZSgndicpLCBoZXlvOiBQcm9taXNlLnJlc29sdmUoJ2hleW8nKSwgaWdub3JlOiAxMjMgfSB9KTtcbiAgICBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IGdlbmVyYXRlUmVqZWN0aW9uKCksIGlnbm9yZTogMTIzIH0gfSk7XG4gICAgc2V0VGltZW91dCgoKSA9PiBzdG9yZS5kaXNwYXRjaCh7IHR5cGU6ICdURVNUSU5HJywgQVdBSVRfTUFSS0VSLCBwYXlsb2FkOiB7IHNvb246IFByb21pc2UucmVzb2x2ZSgndicpLCBoZXlvOiBQcm9taXNlLnJlc29sdmUoJ2hleW8nKSwgaWdub3JlOiAxMjMgfSB9KSwgMjApXG5cbiAgfSk7XG5cbn0pO1xuIl19 |