filestack-js
Version:
Official JavaScript library for Filestack
197 lines (195 loc) • 21.7 kB
JavaScript
/*
* Copyright (c) 2018 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 * as assert from 'assert';
import { getValidator, PickerParamsSchema } from './';
import * as jsdom from 'jsdom';
var JSDOM = jsdom.JSDOM;
describe('Picker Params Schema', function () {
var validator = getValidator(PickerParamsSchema);
var validate = function (params) {
var res = validator(params);
// if (res.errors.length) {
// console.log(res.errors);
// }
return res.errors.length === 0 ? true : false;
};
var assertFail = function (res) { return assert.ok(!res); };
it('should validate allow manual retry', function () {
assert.ok(validate({ allowManualRetry: true }));
assertFail(validate({ allowManualRetry: {} }));
});
it('should validate accept param', function () {
assert.ok(validate({ accept: 'image/jpeg' }));
assert.ok(validate({ accept: ['image/jpeg', 'image/png', '*'] }));
assertFail(validate({ accept: {} }));
});
it('should validate fromSources param', function () {
assert.ok(validate({ fromSources: ['url', 'facebook'] }));
assertFail(validate({ fromSources: ['wrong_source'] }));
});
it('should validate fromSources param type object', function () {
assert.ok(validate({ fromSources: ['url', { test: 123 }, { test: function () { return console.log; } }] }));
});
it('should validate container param', function () {
assert.ok(validate({ container: 'test' }));
var nodeDiv = JSDOM.fragment("<div>Hello</div>").querySelector('div');
var nodeP = JSDOM.fragment("<p>Hello</p>").querySelector('p');
assert.ok(validate({ container: nodeDiv }));
assert.ok(validate({ container: nodeP }));
assertFail(validate({ container: {} }));
});
it('should validate cleanupImageExif param', function () {
assert.ok(validate({ cleanupImageExif: true }));
assert.ok(validate({
cleanupImageExif: {
keepOrientation: true,
},
}));
assertFail(validate({
cleanupImageExif: {
test: 1,
},
}));
});
it('should validate displayMode param', function () {
assert.ok(validate({ displayMode: 'inline' }));
assert.ok(validate({ displayMode: 'overlay' }));
assert.ok(validate({ displayMode: 'dropPane' }));
assertFail(validate({ displayMode: 'test' }));
});
it('should validate imageDim param', function () {
assert.ok(validate({ imageDim: [100, 100] }));
assertFail(validate({ imageDim: [0, 1] }));
assertFail(validate({ imageDim: [100, 100, 3] }));
});
it('should validate storeTo Params', function () {
assert.ok(validate({
storeTo: {
filename: 'test',
location: 's3',
path: '/test/',
region: 'test',
access: 'public',
workflows: ['test'],
},
}));
assert.ok(validate({
storeTo: {
filename: 'test',
location: 's3',
path: '/test/',
region: 'test',
access: 'private',
workflows: [
{
id: 'test',
},
],
},
}));
assertFail(validate({
storeTo: {
workflows: {},
access: 'none',
},
}));
});
it('should validate transformations param', function () {
assert.ok(validate({
transformations: {
circle: true,
rotate: true,
crop: true,
},
}));
assert.ok(validate({
transformations: {
circle: false,
rotate: false,
crop: {
force: true,
aspectRatio: 1 / 2,
},
},
}));
assertFail(validate({
transformations: {
test: 123,
},
}));
});
it('should validate customText param', function () {
assert.ok(validate({
customText: {
sometest: 'testtext',
},
}));
assertFail(validate({ customText: ['test', 'ts1'] }));
});
it('should validate customAuthText param', function () {
assert.ok(validate({
customAuthText: {
test: {
top: 'test',
bottom: 'test2',
},
},
}));
assertFail(validate({
customAuthText: {
test: {
top: 'test',
},
},
}));
assertFail(validate({
customAuthText: {
test: '123',
},
}));
});
it('should validate ', function () {
assert.ok(validate({
uploadConfig: {
partSize: 5 * 1024 * 1024,
intelligent: true,
onProgress: function () { return console; },
},
}));
assert.ok(validate({
uploadConfig: {
intelligent: 'fallback',
},
}));
assertFail(validate({
uploadConfig: {
partSize: 100,
},
}));
assertFail(validate({
uploadConfig: {
progressInterval: 0,
},
}));
assertFail(validate({
uploadConfig: {
concurrency: 0,
},
}));
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9zY2hlbWEvcGlja2VyLnNjaGVtYS5zcGVjLmJyb3dzZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsT0FBTyxLQUFLLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDakMsT0FBTyxFQUFFLFlBQVksRUFBRSxrQkFBa0IsRUFBRSxNQUFNLElBQUksQ0FBQztBQUV0RCxPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUN2QixJQUFBLEtBQUssR0FBSyxLQUFLLE1BQVYsQ0FBVztBQUV4QixRQUFRLENBQUMsc0JBQXNCLEVBQUU7SUFDL0IsSUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLGtCQUFrQixDQUFDLENBQUM7SUFFbkQsSUFBTSxRQUFRLEdBQUcsVUFBQSxNQUFNO1FBQ3JCLElBQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUU5QiwyQkFBMkI7UUFDM0IsNkJBQTZCO1FBQzdCLElBQUk7UUFFSixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7SUFDaEQsQ0FBQyxDQUFDO0lBRUYsSUFBTSxVQUFVLEdBQUcsVUFBQSxHQUFHLElBQUksT0FBQSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQWYsQ0FBZSxDQUFDO0lBRTFDLEVBQUUsQ0FBQyxvQ0FBb0MsRUFBRTtRQUN2QyxNQUFNLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLGdCQUFnQixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNoRCxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLDhCQUE4QixFQUFFO1FBQ2pDLE1BQU0s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a2VyLnNjaGVtYS5zcGVjLmJyb3dzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxuICogQ29weXJpZ2h0IChjKSAyMDE4IGJ5IEZpbGVzdGFjay5cbiAqIFNvbWUgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBcIkxpY2Vuc2VcIik7XG4gKiB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuXG4gKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXRcbiAqXG4gKiAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqL1xuXG5pbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnYXNzZXJ0JztcbmltcG9ydCB7IGdldFZhbGlkYXRvciwgUGlja2VyUGFyYW1zU2NoZW1hIH0gZnJvbSAnLi8nO1xuXG5pbXBvcnQgKiBhcyBqc2RvbSBmcm9tICdqc2RvbSc7XG5jb25zdCB7IEpTRE9NIH0gPSBqc2RvbTtcblxuZGVzY3JpYmUoJ1BpY2tlciBQYXJhbXMgU2NoZW1hJywgKCkgPT4ge1xuICBjb25zdCB2YWxpZGF0b3IgPSBnZXRWYWxpZGF0b3IoUGlja2VyUGFyYW1zU2NoZW1hKTtcblxuICBjb25zdCB2YWxpZGF0ZSA9IHBhcmFtcyA9PiB7XG4gICAgY29uc3QgcmVzID0gdmFsaWRhdG9yKHBhcmFtcyk7XG5cbiAgICAvLyBpZiAocmVzLmVycm9ycy5sZW5ndGgpIHtcbiAgICAvLyAgIGNvbnNvbGUubG9nKHJlcy5lcnJvcnMpO1xuICAgIC8vIH1cblxuICAgIHJldHVybiByZXMuZXJyb3JzLmxlbmd0aCA9PT0gMCA/IHRydWUgOiBmYWxzZTtcbiAgfTtcblxuICBjb25zdCBhc3NlcnRGYWlsID0gcmVzID0+IGFzc2VydC5vayghcmVzKTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFsbG93IG1hbnVhbCByZXRyeScsICgpID0+IHtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBhbGxvd01hbnVhbFJldHJ5OiB0cnVlIH0pKTtcbiAgICBhc3NlcnRGYWlsKHZhbGlkYXRlKHsgYWxsb3dNYW51YWxSZXRyeToge30gfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGFjY2VwdCBwYXJhbScsICgpID0+IHtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBhY2NlcHQ6ICdpbWFnZS9qcGVnJyB9KSk7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlKHsgYWNjZXB0OiBbJ2ltYWdlL2pwZWcnLCAnaW1hZ2UvcG5nJywgJyonXSB9KSk7XG4gICAgYXNzZXJ0RmFpbCh2YWxpZGF0ZSh7IGFjY2VwdDoge30gfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGZyb21Tb3VyY2VzIHBhcmFtJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZSh7IGZyb21Tb3VyY2VzOiBbJ3VybCcsICdmYWNlYm9vayddIH0pKTtcbiAgICBhc3NlcnRGYWlsKHZhbGlkYXRlKHsgZnJvbVNvdXJjZXM6IFsnd3Jvbmdfc291cmNlJ10gfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGZyb21Tb3VyY2VzIHBhcmFtIHR5cGUgb2JqZWN0JywgKCkgPT4ge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZSh7IGZyb21Tb3VyY2VzOiBbJ3VybCcsIHsgdGVzdDogMTIzIH0sIHsgdGVzdDogKCkgPT4gY29uc29sZS5sb2cgfV0gfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGNvbnRhaW5lciBwYXJhbScsICgpID0+IHtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBjb250YWluZXI6ICd0ZXN0JyB9KSk7XG5cbiAgICBjb25zdCBub2RlRGl2ID0gSlNET00uZnJhZ21lbnQoYDxkaXY+SGVsbG88L2Rpdj5gKS5xdWVyeVNlbGVjdG9yKCdkaXYnKTtcbiAgICBjb25zdCBub2RlUCA9IEpTRE9NLmZyYWdtZW50KGA8cD5IZWxsbzwvcD5gKS5xdWVyeVNlbGVjdG9yKCdwJyk7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlKHsgY29udGFpbmVyOiBub2RlRGl2IH0pKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBjb250YWluZXI6IG5vZGVQIH0pKTtcbiAgICBhc3NlcnRGYWlsKHZhbGlkYXRlKHsgY29udGFpbmVyOiB7fSB9KSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgY2xlYW51cEltYWdlRXhpZiBwYXJhbScsICgpID0+IHtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBjbGVhbnVwSW1hZ2VFeGlmOiB0cnVlIH0pKTtcbiAgICBhc3NlcnQub2soXG4gICAgICB2YWxpZGF0ZSh7XG4gICAgICAgIGNsZWFudXBJbWFnZUV4aWY6IHtcbiAgICAgICAgICBrZWVwT3JpZW50YXRpb246IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgYXNzZXJ0RmFpbChcbiAgICAgIHZhbGlkYXRlKHtcbiAgICAgICAgY2xlYW51cEltYWdlRXhpZjoge1xuICAgICAgICAgIHRlc3Q6IDEsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgZGlzcGxheU1vZGUgcGFyYW0nLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKHZhbGlkYXRlKHsgZGlzcGxheU1vZGU6ICdpbmxpbmUnIH0pKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBkaXNwbGF5TW9kZTogJ292ZXJsYXknIH0pKTtcbiAgICBhc3NlcnQub2sodmFsaWRhdGUoeyBkaXNwbGF5TW9kZTogJ2Ryb3BQYW5lJyB9KSk7XG4gICAgYXNzZXJ0RmFpbCh2YWxpZGF0ZSh7IGRpc3BsYXlNb2RlOiAndGVzdCcgfSkpO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGltYWdlRGltIHBhcmFtJywgKCkgPT4ge1xuICAgIGFzc2VydC5vayh2YWxpZGF0ZSh7IGltYWdlRGltOiBbMTAwLCAxMDBdIH0pKTtcbiAgICBhc3NlcnRGYWlsKHZhbGlkYXRlKHsgaW1hZ2VEaW06IFswLCAxXSB9KSk7XG4gICAgYXNzZXJ0RmFpbCh2YWxpZGF0ZSh7IGltYWdlRGltOiBbMTAwLCAxMDAsIDNdIH0pKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSBzdG9yZVRvIFBhcmFtcycsICgpID0+IHtcbiAgICBhc3NlcnQub2soXG4gICAgICB2YWxpZGF0ZSh7XG4gICAgICAgIHN0b3JlVG86IHtcbiAgICAgICAgICBmaWxlbmFtZTogJ3Rlc3QnLFxuICAgICAgICAgIGxvY2F0aW9uOiAnczMnLFxuICAgICAgICAgIHBhdGg6ICcvdGVzdC8nLFxuICAgICAgICAgIHJlZ2lvbjogJ3Rlc3QnLFxuICAgICAgICAgIGFjY2VzczogJ3B1YmxpYycsXG4gICAgICAgICAgd29ya2Zsb3dzOiBbJ3Rlc3QnXSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGFzc2VydC5vayhcbiAgICAgIHZhbGlkYXRlKHtcbiAgICAgICAgc3RvcmVUbzoge1xuICAgICAgICAgIGZpbGVuYW1lOiAndGVzdCcsXG4gICAgICAgICAgbG9jYXRpb246ICdzMycsXG4gICAgICAgICAgcGF0aDogJy90ZXN0LycsXG4gICAgICAgICAgcmVnaW9uOiAndGVzdCcsXG4gICAgICAgICAgYWNjZXNzOiAncHJpdmF0ZScsXG4gICAgICAgICAgd29ya2Zsb3dzOiBbXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIGlkOiAndGVzdCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhc3NlcnRGYWlsKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICBzdG9yZVRvOiB7XG4gICAgICAgICAgd29ya2Zsb3dzOiB7fSxcbiAgICAgICAgICBhY2Nlc3M6ICdub25lJyxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcbiAgfSk7XG5cbiAgaXQoJ3Nob3VsZCB2YWxpZGF0ZSB0cmFuc2Zvcm1hdGlvbnMgcGFyYW0nLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICB0cmFuc2Zvcm1hdGlvbnM6IHtcbiAgICAgICAgICBjaXJjbGU6IHRydWUsXG4gICAgICAgICAgcm90YXRlOiB0cnVlLFxuICAgICAgICAgIGNyb3A6IHRydWUsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhc3NlcnQub2soXG4gICAgICB2YWxpZGF0ZSh7XG4gICAgICAgIHRyYW5zZm9ybWF0aW9uczoge1xuICAgICAgICAgIGNpcmNsZTogZmFsc2UsXG4gICAgICAgICAgcm90YXRlOiBmYWxzZSxcbiAgICAgICAgICBjcm9wOiB7XG4gICAgICAgICAgICBmb3JjZTogdHJ1ZSxcbiAgICAgICAgICAgIGFzcGVjdFJhdGlvOiAxIC8gMixcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXNzZXJ0RmFpbChcbiAgICAgIHZhbGlkYXRlKHtcbiAgICAgICAgdHJhbnNmb3JtYXRpb25zOiB7XG4gICAgICAgICAgdGVzdDogMTIzLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlIGN1c3RvbVRleHQgcGFyYW0nLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICBjdXN0b21UZXh0OiB7XG4gICAgICAgICAgc29tZXRlc3Q6ICd0ZXN0dGV4dCcsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG4gICAgYXNzZXJ0RmFpbCh2YWxpZGF0ZSh7IGN1c3RvbVRleHQ6IFsndGVzdCcsICd0czEnXSB9KSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgdmFsaWRhdGUgY3VzdG9tQXV0aFRleHQgcGFyYW0nLCAoKSA9PiB7XG4gICAgYXNzZXJ0Lm9rKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICBjdXN0b21BdXRoVGV4dDoge1xuICAgICAgICAgIHRlc3Q6IHtcbiAgICAgICAgICAgIHRvcDogJ3Rlc3QnLFxuICAgICAgICAgICAgYm90dG9tOiAndGVzdDInLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhc3NlcnRGYWlsKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICBjdXN0b21BdXRoVGV4dDoge1xuICAgICAgICAgIHRlc3Q6IHtcbiAgICAgICAgICAgIHRvcDogJ3Rlc3QnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhc3NlcnRGYWlsKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICBjdXN0b21BdXRoVGV4dDoge1xuICAgICAgICAgIHRlc3Q6ICcxMjMnLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIHZhbGlkYXRlICcsICgpID0+IHtcbiAgICBhc3NlcnQub2soXG4gICAgICB2YWxpZGF0ZSh7XG4gICAgICAgIHVwbG9hZENvbmZpZzoge1xuICAgICAgICAgIHBhcnRTaXplOiA1ICogMTAyNCAqIDEwMjQsXG4gICAgICAgICAgaW50ZWxsaWdlbnQ6IHRydWUsXG4gICAgICAgICAgb25Qcm9ncmVzczogKCkgPT4gY29uc29sZSxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGFzc2VydC5vayhcbiAgICAgIHZhbGlkYXRlKHtcbiAgICAgICAgdXBsb2FkQ29uZmlnOiB7XG4gICAgICAgICAgaW50ZWxsaWdlbnQ6ICdmYWxsYmFjaycsXG4gICAgICAgIH0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICBhc3NlcnRGYWlsKFxuICAgICAgdmFsaWRhdGUoe1xuICAgICAgICB1cGxvYWRDb25maWc6IHtcbiAgICAgICAgICBwYXJ0U2l6ZTogMTAwLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuXG4gICAgYXNzZXJ0RmFpbChcbiAgICAgIHZhbGlkYXRlKHtcbiAgICAgICAgdXBsb2FkQ29uZmlnOiB7XG4gICAgICAgICAgcHJvZ3Jlc3NJbnRlcnZhbDogMCxcbiAgICAgICAgfSxcbiAgICAgIH0pXG4gICAgKTtcblxuICAgIGFzc2VydEZhaWwoXG4gICAgICB2YWxpZGF0ZSh7XG4gICAgICAgIHVwbG9hZENvbmZpZzoge1xuICAgICAgICAgIGNvbmN1cnJlbmN5OiAwLFxuICAgICAgICB9LFxuICAgICAgfSlcbiAgICApO1xuICB9KTtcbn0pO1xuIl19