filestack-js
Version:
Official JavaScript library for Filestack
227 lines (225 loc) • 21.7 kB
JavaScript
/*
* 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