UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

227 lines (225 loc) 21.7 kB
/* * Copyright (c) 2019 by Filestack. * Some rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import { __awaiter, __generator } from "tslib"; import { FsRequest } from './request'; import { FsHttpMethod } from './types'; import { Dispatch } from './dispatch'; jest.mock('./dispatch'); var dispatchSpy = jest.fn(function () { return Promise.resolve('response'); }); // @ts-ignore Dispatch.prototype.request.mockImplementation(dispatchSpy); describe('Request/Request', function () { var url = 'https://filestack.com'; describe('dispatch', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var fsRequest, response; return __generator(this, function (_a) { switch (_a.label) { case 0: fsRequest = new FsRequest(); return [4 /*yield*/, fsRequest.dispatch({ method: FsHttpMethod.GET })]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.GET }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('dispatch with url', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.dispatch(url, { url: url })]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.GET, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('dispatch static method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.dispatch(url, { method: FsHttpMethod.GET })]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.GET, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static get method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.get(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.GET, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static head method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.head(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.HEAD, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static options method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.options(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.OPTIONS, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static purge method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.purge(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.PURGE, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static delete method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.delete(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.DELETE, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static post method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.post(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.POST, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static put method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.put(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.PUT, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); describe('static path method', function () { it('should return response', function () { return __awaiter(void 0, void 0, void 0, function () { var response; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4 /*yield*/, FsRequest.path(url)]; case 1: response = _a.sent(); expect(dispatchSpy).toHaveBeenCalledWith({ method: FsHttpMethod.PATH, url: url, }); expect(response).toBe('response'); return [2 /*return*/]; } }); }); }); }); }); //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvcmVxdWVzdC9yZXF1ZXN0LnNwZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUVILE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDdEMsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN2QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRXRDLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7QUFFeEIsSUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFNLE9BQUEsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBM0IsQ0FBMkIsQ0FBQyxDQUFDO0FBQy9ELGFBQWE7QUFDYixRQUFRLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUUzRCxRQUFRLENBQUMsaUJBQWlCLEVBQUU7SUFDMUIsSUFBTSxHQUFHLEdBQUcsdUJBQXVCLENBQUM7SUFFcEMsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUNuQixFQUFFLENBQUMsd0JBQXdCLEVBQUU7Ozs7O3dCQUNyQixTQUFTLEdBQUcsSUFBSSxTQUFTLEVBQUUsQ0FBQzt3QkFDakIscUJBQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsR0FBRyxFQUFFLENBQUMsRUFBQTs7d0JBQWpFLFFBQVEsR0FBRyxTQUFzRDt3QkFFdkUsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO3dCQUV2RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOzs7O2FBQ25DLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0lBRUgs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Q0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7Ozs7YUFDbkMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFFSCxRQUFRLENBQUMsbUJBQW1CLEVBQUU7UUFDNUIsRUFBRSxDQUFDLHdCQUF3QixFQUFFOzs7OzRCQUNWLHFCQUFNLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUE7O3dCQUFuQyxRQUFRLEdBQUcsU0FBd0I7d0JBRXpDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxvQkFBb0IsQ0FBQzs0QkFDdkMsTUFBTSxFQUFFLFlBQVksQ0FBQyxHQUFHOzRCQUN4QixHQUFHLEVBQUUsR0FBRzt5QkFDVCxDQUFDLENBQUM7d0JBRUgsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQzs7OzthQUNuQyxDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUVILFFBQVEsQ0FBQyxvQkFBb0IsRUFBRTtRQUM3QixFQUFFLENBQUMsd0JBQXdCLEVBQUU7Ozs7NEJBQ1YscUJBQU0sU0FBUyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBQTs7d0JBQXBDLFFBQVEsR0FBRyxTQUF5Qjt3QkFFMUMsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDLG9CQUFvQixDQUFDOzRCQUN2QyxNQUFNLEVBQUUsWUFBWSxDQUFDLElBQUk7NEJBQ3pCLEdBQUcsRUFBRSxHQUFHO3lCQUNULENBQUMsQ0FBQzt3QkFFSCxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDOzs7O2FBQ25DLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoibGliL3JlcXVlc3QvcmVxdWVzdC5zcGVjLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOSBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgRnNSZXF1ZXN0IH0gZnJvbSAnLi9yZXF1ZXN0JztcbmltcG9ydCB7IEZzSHR0cE1ldGhvZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgRGlzcGF0Y2ggfSBmcm9tICcuL2Rpc3BhdGNoJztcblxuamVzdC5tb2NrKCcuL2Rpc3BhdGNoJyk7XG5cbmNvbnN0IGRpc3BhdGNoU3B5ID0gamVzdC5mbigoKSA9PiBQcm9taXNlLnJlc29sdmUoJ3Jlc3BvbnNlJykpO1xuLy8gQHRzLWlnbm9yZVxuRGlzcGF0Y2gucHJvdG90eXBlLnJlcXVlc3QubW9ja0ltcGxlbWVudGF0aW9uKGRpc3BhdGNoU3B5KTtcblxuZGVzY3JpYmUoJ1JlcXVlc3QvUmVxdWVzdCcsICgpID0+IHtcbiAgY29uc3QgdXJsID0gJ2h0dHBzOi8vZmlsZXN0YWNrLmNvbSc7XG5cbiAgZGVzY3JpYmUoJ2Rpc3BhdGNoJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgZnNSZXF1ZXN0ID0gbmV3IEZzUmVxdWVzdCgpO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmc1JlcXVlc3QuZGlzcGF0Y2goeyBtZXRob2Q6IEZzSHR0cE1ldGhvZC5HRVQgfSk7XG5cbiAgICAgIGV4cGVjdChkaXNwYXRjaFNweSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoeyBtZXRob2Q6IEZzSHR0cE1ldGhvZC5HRVQgfSk7XG5cbiAgICAgIGV4cGVjdChyZXNwb25zZSkudG9CZSgncmVzcG9uc2UnKTtcbiAgICB9KTtcbiAgfSk7XG5cbiAgZGVzY3JpYmUoJ2Rpc3BhdGNoIHdpdGggdXJsJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3QuZGlzcGF0Y2godXJsLCB7IHVybDogdXJsIH0pO1xuXG4gICAgICBleHBlY3QoZGlzcGF0Y2hTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgbWV0aG9kOiBGc0h0dHBNZXRob2QuR0VULFxuICAgICAgICB1cmw6IHVybCxcbiAgICAgIH0pO1xuXG4gICAgICBleHBlY3QocmVzcG9uc2UpLnRvQmUoJ3Jlc3BvbnNlJyk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGRlc2NyaWJlKCdkaXNwYXRjaCBzdGF0aWMgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3QuZGlzcGF0Y2godXJsLCB7IG1ldGhvZDogRnNIdHRwTWV0aG9kLkdFVCB9KTtcblxuICAgICAgZXhwZWN0KGRpc3BhdGNoU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIG1ldGhvZDogRnNIdHRwTWV0aG9kLkdFVCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIGdldCBtZXRob2QnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IEZzUmVxdWVzdC5nZXQodXJsKTtcblxuICAgICAgZXhwZWN0KGRpc3BhdGNoU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIG1ldGhvZDogRnNIdHRwTWV0aG9kLkdFVCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIGhlYWQgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3QuaGVhZCh1cmwpO1xuXG4gICAgICBleHBlY3QoZGlzcGF0Y2hTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgbWV0aG9kOiBGc0h0dHBNZXRob2QuSEVBRCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIG9wdGlvbnMgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3Qub3B0aW9ucyh1cmwpO1xuXG4gICAgICBleHBlY3QoZGlzcGF0Y2hTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgbWV0aG9kOiBGc0h0dHBNZXRob2QuT1BUSU9OUyxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIHB1cmdlIG1ldGhvZCcsICgpID0+IHtcbiAgICBpdCgnc2hvdWxkIHJldHVybiByZXNwb25zZScsIGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgRnNSZXF1ZXN0LnB1cmdlKHVybCk7XG5cbiAgICAgIGV4cGVjdChkaXNwYXRjaFNweSkudG9IYXZlQmVlbkNhbGxlZFdpdGgoe1xuICAgICAgICBtZXRob2Q6IEZzSHR0cE1ldGhvZC5QVVJHRSxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIGRlbGV0ZSBtZXRob2QnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IEZzUmVxdWVzdC5kZWxldGUodXJsKTtcblxuICAgICAgZXhwZWN0KGRpc3BhdGNoU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIG1ldGhvZDogRnNIdHRwTWV0aG9kLkRFTEVURSxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIHBvc3QgbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3QucG9zdCh1cmwpO1xuXG4gICAgICBleHBlY3QoZGlzcGF0Y2hTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgbWV0aG9kOiBGc0h0dHBNZXRob2QuUE9TVCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIHB1dCBtZXRob2QnLCAoKSA9PiB7XG4gICAgaXQoJ3Nob3VsZCByZXR1cm4gcmVzcG9uc2UnLCBhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IEZzUmVxdWVzdC5wdXQodXJsKTtcblxuICAgICAgZXhwZWN0KGRpc3BhdGNoU3B5KS50b0hhdmVCZWVuQ2FsbGVkV2l0aCh7XG4gICAgICAgIG1ldGhvZDogRnNIdHRwTWV0aG9kLlBVVCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcblxuICBkZXNjcmliZSgnc3RhdGljIHBhdGggbWV0aG9kJywgKCkgPT4ge1xuICAgIGl0KCdzaG91bGQgcmV0dXJuIHJlc3BvbnNlJywgYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBGc1JlcXVlc3QucGF0aCh1cmwpO1xuXG4gICAgICBleHBlY3QoZGlzcGF0Y2hTcHkpLnRvSGF2ZUJlZW5DYWxsZWRXaXRoKHtcbiAgICAgICAgbWV0aG9kOiBGc0h0dHBNZXRob2QuUEFUSCxcbiAgICAgICAgdXJsOiB1cmwsXG4gICAgICB9KTtcblxuICAgICAgZXhwZWN0KHJlc3BvbnNlKS50b0JlKCdyZXNwb25zZScpO1xuICAgIH0pO1xuICB9KTtcbn0pO1xuIl19