UNPKG

filestack-js

Version:

Official JavaScript library for Filestack

232 lines (230 loc) 24.3 kB
/* * 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 { __assign, __awaiter, __generator } from "tslib"; import { ExtensionsMap } from './extensions'; import { fromBuffer } from 'file-type'; import isutf8 from 'isutf8'; /** * Resolve cdn url based on handle type * * @private * @param session session object * @param handle file handle (hash, src://alias, url) */ export var resolveCdnUrl = function (session, handle) { var cdnURL = session.urls.cdnUrl; if (handle && (handle.indexOf('src:') === 0 || handle.indexOf('http') === 0)) { if (!session.apikey) { throw new Error('Api key is required when storage alias is provided'); } // apikey is required for alias or external sources call return "".concat(cdnURL, "/").concat(session.apikey); } return cdnURL; }; /** * Resolve all urls with provided cnames * * @private * @param urls * @param cname */ export var resolveHost = function (urls, cname) { if (!cname) { return urls; } var hosts = /filestackapi.com|filestackcontent.com/i; Object.keys(urls).forEach(function (key) { urls[key] = urls[key].replace(hosts, cname); }); return urls; }; /** * Removes empty options from object * * @private * @param obj */ export var removeEmpty = function (obj) { var newObj = __assign({}, obj); Object.keys(newObj).forEach(function (k) { return !newObj[k] && typeof newObj[k] !== 'boolean' && delete newObj[k]; }); return newObj; }; /** * Returns unique time */ var last; export var uniqueTime = function () { var time = Date.now(); last = time === last ? time + 1 : time; return last; }; /** * Generates random string with provided length * * @param len */ export var uniqueId = function (len) { if (len === void 0) { len = 10; } return new Array(len).join().replace(/(.|$)/g, function () { return ((Math.random() * 36) | 0).toString(36)[Math.random() < 0.5 ? 'toString' : 'toUpperCase'](); }); }; /** * Check if input is a svg * * @param {Uint8Array | Buffer} file * @returns {string} - mimetype */ export var getMimetype = function (file, name) { return __awaiter(void 0, void 0, void 0, function () { var type, e_1, excludedMimetypes, mime_1; return __generator(this, function (_a) { switch (_a.label) { case 0: _a.trys.push([0, 2, , 3]); return [4 /*yield*/, fromBuffer(file)]; case 1: type = _a.sent(); return [3 /*break*/, 3]; case 2: e_1 = _a.sent(); console.warn('An exception occurred while processing the buffer:', e_1.message); return [3 /*break*/, 3]; case 3: excludedMimetypes = ['text/plain', 'application/octet-stream', 'application/x-ms', 'application/x-msi', 'application/zip', 'audio/x-m4a']; if (type && excludedMimetypes.indexOf(type.mime) === -1) { return [2 /*return*/, type.mime]; } if (name && name.indexOf('.') > -1) { mime_1 = extensionToMime(name); if (mime_1) { return [2 /*return*/, mime_1]; } } try { if (isutf8(file)) { return [2 /*return*/, 'text/plain']; } } catch (e) { /* istanbul ignore next */ console.warn('Additional mimetype checks (text/plain) are currently not supported for browsers'); } // this is only fallback, omit it in coverage /* istanbul ignore next */ // if we cant find types by extensions and we have magic bytes fallback to it if (type) { return [2 /*return*/, type.mime]; } return [2 /*return*/, 'application/octet-stream']; } }); }); }; /** * Change extension to according mimetype using ext=>mimetype map * * @param ext - string * @return string|boolean */ export var extensionToMime = function (ext) { if (!ext || ext.length === 0) { return; } if (ext.split('/').length === 2) { return ext; } if (ext.indexOf('.') > -1) { ext = ext.split('.').pop(); } ext = ext.toLocaleLowerCase(); var keys = Object.keys(ExtensionsMap); var mapLen = keys.length; for (var i = 0; i < mapLen; i++) { if (ExtensionsMap[keys[i]].indexOf(ext) > -1) { return keys[i]; } } return; }; /** * Sanitize file name * * @param name * @param {bool} options - enable,disable sanitizer, default enabled * @param {string} options.replacement - replacement for sanitized chars defaults to "-" * @param {string[]} options.exclude - array with excluded chars default - `['\', '{', '}','|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>']` */ export var sanitizeName = function (name, options) { if (options === void 0) { options = true; } if (typeof options === 'boolean' && !options) { return name; } var ext; var replacement = typeof options !== 'boolean' && options.replacement ? options.replacement : '-'; var exclude = typeof options !== 'boolean' && options.exclude ? options.exclude : ['\\', '{', '}', '|', '%', '`', '"', "'", '~', '[', ']', '#', '|', '^', '<', '>']; if (!name || name.length === 0) { return 'undefined'; } var fileParts = name.split('.'); if (fileParts.length > 1) { ext = fileParts.pop(); } return "".concat(fileParts .join('.') .split('') .map(function (char) { return (exclude.indexOf(char) > -1 ? replacement : char); }) .join('')).concat(ext ? '.' + ext : ''); }; /** * Filter object to given fields * * @param toFilter * @param requiredFields */ export var filterObject = function (toFilter, requiredFields) { if (!requiredFields || requiredFields.length === 0) { return toFilter; } if (Object.keys(toFilter).length === 0) { return toFilter; } return Object.keys(toFilter) .filter(function (f) { return requiredFields.indexOf(f) > -1; }) .reduce(function (obj, key) { var _a; return (__assign(__assign({}, obj), (_a = {}, _a[key] = toFilter[key], _a))); }, {}); }; /** * Deep cleanup object from functions * * @param obj */ export var cleanUpCallbacks = function (obj) { if (!obj || Object.keys(obj).length === 0) { return obj; } Object.keys(obj).forEach(function (k) { if (typeof obj[k] === 'function') { obj[k] = undefined; } if (obj[k] === Object(obj[k])) { obj[k] = cleanUpCallbacks(obj[k]); } }); return obj; }; export * from './index.node'; //# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHOztBQUlILE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDN0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUN2QyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUI7Ozs7OztHQU1HO0FBQ0gsTUFBTSxDQUFDLElBQU0sYUFBYSxHQUFHLFVBQUMsT0FBZ0IsRUFBRSxNQUFjO0lBQzVELElBQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO0lBRW5DLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRTtRQUM1RSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRTtZQUNuQixNQUFNLElBQUksS0FBSyxDQUFDLG9EQUFvRCxDQUFDLENBQUM7U0FDdkU7UUFFRCx3REFBd0Q7UUFDeEQsT0FBTyxVQUFHLE1BQU0sY0FBSSxPQUFPLENBQUMsTUFBTSxDQUFFLENBQUM7S0FDdEM7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsSUFBTSxXQUFXLEdBQUcsVUFBQyxJQUFXLEVBQUUsS0FBYTtJQUNwRCxJQUFJLENBQUMsS0FBSyxFQUFFO1FBQ1YsT0FBTyxJQUFJLENBQUM7S0FDYjtJQUVELElBQU0sS0FBSyxHQUFHLHdDQUF3QyxDQUFDO0lBRXZELE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQUEsR0FBRztRQUMzQixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcs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QU8sQ0FBQyxVQUFBLENBQUM7UUFDeEIsSUFBSSxPQUFPLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxVQUFVLEVBQUU7WUFDaEMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQztTQUNwQjtRQUVELElBQUksR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtZQUM3QixHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDbkM7SUFDSCxDQUFDLENBQUMsQ0FBQztJQUVILE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQyxDQUFDO0FBRUYsY0FBYyxjQUFjLENBQUMiLCJmaWxlIjoibGliL3V0aWxzL2luZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAoYykgMjAxOCBieSBGaWxlc3RhY2suXG4gKiBTb21lIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgU2Vzc2lvbiB9IGZyb20gJy4uL2NsaWVudCc7XG5pbXBvcnQgeyBIb3N0cyB9IGZyb20gJy4vLi4vLi4vY29uZmlnJztcbmltcG9ydCB7IEV4dGVuc2lvbnNNYXAgfSBmcm9tICcuL2V4dGVuc2lvbnMnO1xuaW1wb3J0IHsgZnJvbUJ1ZmZlciB9IGZyb20gJ2ZpbGUtdHlwZSc7XG5pbXBvcnQgaXN1dGY4IGZyb20gJ2lzdXRmOCc7XG5cbi8qKlxuICogUmVzb2x2ZSBjZG4gdXJsIGJhc2VkIG9uIGhhbmRsZSB0eXBlXG4gKlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSBzZXNzaW9uIHNlc3Npb24gb2JqZWN0XG4gKiBAcGFyYW0gaGFuZGxlIGZpbGUgaGFuZGxlIChoYXNoLCBzcmM6Ly9hbGlhcywgdXJsKVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUNkblVybCA9IChzZXNzaW9uOiBTZXNzaW9uLCBoYW5kbGU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIGNvbnN0IGNkblVSTCA9IHNlc3Npb24udXJscy5jZG5Vcmw7XG5cbiAgaWYgKGhhbmRsZSAmJiAoaGFuZGxlLmluZGV4T2YoJ3NyYzonKSA9PT0gMCB8fCBoYW5kbGUuaW5kZXhPZignaHR0cCcpID09PSAwKSkge1xuICAgIGlmICghc2Vzc2lvbi5hcGlrZXkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQXBpIGtleSBpcyByZXF1aXJlZCB3aGVuIHN0b3JhZ2UgYWxpYXMgaXMgcHJvdmlkZWQnKTtcbiAgICB9XG5cbiAgICAvLyBhcGlrZXkgaXMgcmVxdWlyZWQgZm9yIGFsaWFzIG9yIGV4dGVybmFsIHNvdXJjZXMgY2FsbFxuICAgIHJldHVybiBgJHtjZG5VUkx9LyR7c2Vzc2lvbi5hcGlrZXl9YDtcbiAgfVxuXG4gIHJldHVybiBjZG5VUkw7XG59O1xuXG4vKipcbiAqIFJlc29sdmUgYWxsIHVybHMgd2l0aCBwcm92aWRlZCBjbmFtZXNcbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHVybHNcbiAqIEBwYXJhbSBjbmFtZVxuICovXG5leHBvcnQgY29uc3QgcmVzb2x2ZUhvc3QgPSAodXJsczogSG9zdHMsIGNuYW1lOiBzdHJpbmcpOiBIb3N0cyA9PiB7XG4gIGlmICghY25hbWUpIHtcbiAgICByZXR1cm4gdXJscztcbiAgfVxuXG4gIGNvbnN0IGhvc3RzID0gL2ZpbGVzdGFja2FwaS5jb218ZmlsZXN0YWNrY29udGVudC5jb20vaTtcblxuICBPYmplY3Qua2V5cyh1cmxzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgdXJsc1trZXldID0gdXJsc1trZXldLnJlcGxhY2UoaG9zdHMsIGNuYW1lKTtcbiAgfSk7XG5cbiAgcmV0dXJuIHVybHM7XG59O1xuXG4vKipcbiAqIFJlbW92ZXMgZW1wdHkgb3B0aW9ucyBmcm9tIG9iamVjdFxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gb2JqXG4gKi9cbmV4cG9ydCBjb25zdCByZW1vdmVFbXB0eSA9IChvYmo6IGFueSkgPT4ge1xuICBjb25zdCBuZXdPYmogPSB7IC4uLm9iaiB9O1xuICBPYmplY3Qua2V5cyhuZXdPYmopLmZvckVhY2goayA9PiAhbmV3T2JqW2tdICYmIHR5cGVvZiBuZXdPYmpba10gIT09ICdib29sZWFuJyAmJiBkZWxldGUgbmV3T2JqW2tdKTtcbiAgcmV0dXJuIG5ld09iajtcbn07XG5cbi8qKlxuICogUmV0dXJucyB1bmlxdWUgdGltZVxuICovXG5sZXQgbGFzdDtcbmV4cG9ydCBjb25zdCB1bmlxdWVUaW1lID0gKCkgPT4ge1xuICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTtcbiAgbGFzdCA9IHRpbWUgPT09IGxhc3QgPyB0aW1lICsgMSA6IHRpbWU7XG4gIHJldHVybiBsYXN0O1xufTtcblxuLyoqXG4gKiBHZW5lcmF0ZXMgcmFuZG9tIHN0cmluZyB3aXRoIHByb3ZpZGVkIGxlbmd0aFxuICpcbiAqIEBwYXJhbSBsZW5cbiAqL1xuZXhwb3J0IGNvbnN0IHVuaXF1ZUlkID0gKGxlbjogbnVtYmVyID0gMTApOiBzdHJpbmcgPT4ge1xuICByZXR1cm4gbmV3IEFycmF5KGxlbikuam9pbigpLnJlcGxhY2UoLygufCQpL2csICgpID0+ICgoTWF0aC5yYW5kb20oKSAqIDM2KSB8IDApLnRvU3RyaW5nKDM2KVtNYXRoLnJhbmRvbSgpIDwgMC41ID8gJ3RvU3RyaW5nJyA6ICd0b1VwcGVyQ2FzZSddKCkpO1xufTtcblxuLyoqXG4gKiBDaGVjayBpZiBpbnB1dCBpcyBhIHN2Z1xuICpcbiAqIEBwYXJhbSB7VWludDhBcnJheSB8IEJ1ZmZlcn0gZmlsZVxuICogQHJldHVybnMge3N0cmluZ30gLSBtaW1ldHlwZVxuICovXG5leHBvcnQgY29uc3QgZ2V0TWltZXR5cGUgPSBhc3luYyAoZmlsZTogVWludDhBcnJheSB8IEJ1ZmZlciwgbmFtZT86IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGxldCB0eXBlO1xuXG4gIHRyeSB7XG4gICAgdHlwZSA9IGF3YWl0IGZyb21CdWZmZXIoZmlsZSk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLndhcm4oJ0FuIGV4Y2VwdGlvbiBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIHRoZSBidWZmZXI6JywgZS5tZXNzYWdlKTtcbiAgfVxuXG4gIGNvbnN0IGV4Y2x1ZGVkTWltZXR5cGVzID0gWyd0ZXh0L3BsYWluJywgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScsICdhcHBsaWNhdGlvbi94LW1zJywgJ2FwcGxpY2F0aW9uL3gtbXNpJywgJ2FwcGxpY2F0aW9uL3ppcCcsICdhdWRpby94LW00YSddO1xuXG4gIGlmICh0eXBlICYmIGV4Y2x1ZGVkTWltZXR5cGVzLmluZGV4T2YodHlwZS5taW1lKSA9PT0gLTEpIHtcbiAgICByZXR1cm4gdHlwZS5taW1lO1xuICB9XG5cbiAgaWYgKG5hbWUgJiYgbmFtZS5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgIGNvbnN0IG1pbWUgPSBleHRlbnNpb25Ub01pbWUobmFtZSk7XG5cbiAgICBpZiAobWltZSkge1xuICAgICAgcmV0dXJuIG1pbWU7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBpZiAoaXN1dGY4KGZpbGUpKSB7XG4gICAgICByZXR1cm4gJ3RleHQvcGxhaW4nO1xuICAgIH1cbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgY29uc29sZS53YXJuKCdBZGRpdGlvbmFsIG1pbWV0eXBlIGNoZWNrcyAodGV4dC9wbGFpbikgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGZvciBicm93c2VycycpO1xuICB9XG4gIC8vIHRoaXMgaXMgb25seSBmYWxsYmFjaywgb21pdCBpdCBpbiBjb3ZlcmFnZVxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gIC8vIGlmIHdlIGNhbnQgZmluZCB0eXBlcyBieSBleHRlbnNpb25zIGFuZCB3ZSBoYXZlIG1hZ2ljIGJ5dGVzIGZhbGxiYWNrIHRvIGl0XG4gIGlmICh0eXBlKSB7XG4gICAgcmV0dXJuIHR5cGUubWltZTtcbiAgfVxuXG4gIHJldHVybiAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJztcbn07XG5cbi8qKlxuICogQ2hhbmdlIGV4dGVuc2lvbiB0byBhY2NvcmRpbmcgbWltZXR5cGUgdXNpbmcgZXh0PT5taW1ldHlwZSBtYXBcbiAqXG4gKiBAcGFyYW0gZXh0IC0gc3RyaW5nXG4gKiBAcmV0dXJuIHN0cmluZ3xib29sZWFuXG4gKi9cbmV4cG9ydCBjb25zdCBleHRlbnNpb25Ub01pbWUgPSAoZXh0OiBzdHJpbmcpID0+IHtcbiAgaWYgKCFleHQgfHwgZXh0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChleHQuc3BsaXQoJy8nKS5sZW5ndGggPT09IDIpIHtcbiAgICByZXR1cm4gZXh0O1xuICB9XG5cbiAgaWYgKGV4dC5pbmRleE9mKCcuJykgPiAtMSkge1xuICAgIGV4dCA9IGV4dC5zcGxpdCgnLicpLnBvcCgpO1xuICB9XG5cbiAgZXh0ID0gZXh0LnRvTG9jYWxlTG93ZXJDYXNlKCk7XG5cbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKEV4dGVuc2lvbnNNYXApO1xuICBjb25zdCBtYXBMZW4gPSBrZXlzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1hcExlbjsgaSsrKSB7XG4gICAgaWYgKEV4dGVuc2lvbnNNYXBba2V5c1tpXV0uaW5kZXhPZihleHQpID4gLTEpIHtcbiAgICAgIHJldHVybiBrZXlzW2ldO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybjtcbn07XG5cbi8qKlxuICogU2FuaXRpemVyIE9wdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgU2FuaXRpemVPcHRpb25zID1cbiAgfCBib29sZWFuXG4gIHwge1xuICAgICAgZXhjbHVkZT86IHN0cmluZ1tdO1xuICAgICAgcmVwbGFjZW1lbnQ/OiBzdHJpbmc7XG4gICAgfTtcblxuLyoqXG4gKiBTYW5pdGl6ZSBmaWxlIG5hbWVcbiAqXG4gKiBAcGFyYW0gbmFtZVxuICogQHBhcmFtIHtib29sfSBvcHRpb25zICAtIGVuYWJsZSxkaXNhYmxlIHNhbml0aXplciwgZGVmYXVsdCBlbmFibGVkXG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0aW9ucy5yZXBsYWNlbWVudCAtIHJlcGxhY2VtZW50IGZvciBzYW5pdGl6ZWQgY2hhcnMgZGVmYXVsdHMgdG8gXCItXCJcbiAqIEBwYXJhbSB7c3RyaW5nW119IG9wdGlvbnMuZXhjbHVkZSAtIGFycmF5IHdpdGggZXhjbHVkZWQgY2hhcnMgZGVmYXVsdCAtIGBbJ1xcJywgJ3snLCAnfScsJ3wnLCAnJScsICdgJywgJ1wiJywgXCInXCIsICd+JywgJ1snLCAnXScsICcjJywgJ3wnLCAnXicsICc8JywgJz4nXWBcbiAqL1xuZXhwb3J0IGNvbnN0IHNhbml0aXplTmFtZSA9IChuYW1lOiBzdHJpbmcsIG9wdGlvbnM6IFNhbml0aXplT3B0aW9ucyA9IHRydWUpOiBzdHJpbmcgPT4ge1xuICBpZiAodHlwZW9mIG9wdGlvbnMgPT09ICdib29sZWFuJyAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBuYW1lO1xuICB9XG5cbiAgbGV0IGV4dDtcblxuICBjb25zdCByZXBsYWNlbWVudCA9IHR5cGVvZiBvcHRpb25zICE9PSAnYm9vbGVhbicgJiYgb3B0aW9ucy5yZXBsYWNlbWVudCA/IG9wdGlvbnMucmVwbGFjZW1lbnQgOiAnLSc7XG4gIGNvbnN0IGV4Y2x1ZGUgPSB0eXBlb2Ygb3B0aW9ucyAhPT0gJ2Jvb2xlYW4nICYmIG9wdGlvbnMuZXhjbHVkZSA/IG9wdGlvbnMuZXhjbHVkZSA6IFsnXFxcXCcsICd7JywgJ30nLCAnfCcsICclJywgJ2AnLCAnXCInLCBcIidcIiwgJ34nLCAnWycsICddJywgJyMnLCAnfCcsICdeJywgJzwnLCAnPiddO1xuXG4gIGlmICghbmFtZSB8fCBuYW1lLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiAndW5kZWZpbmVkJztcbiAgfVxuXG4gIGNvbnN0IGZpbGVQYXJ0cyA9IG5hbWUuc3BsaXQoJy4nKTtcblxuICBpZiAoZmlsZVBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICBleHQgPSBmaWxlUGFydHMucG9wKCk7XG4gIH1cblxuICByZXR1cm4gYCR7ZmlsZVBhcnRzXG4gICAgLmpvaW4oJy4nKVxuICAgIC5zcGxpdCgnJylcbiAgICAubWFwKGNoYXIgPT4gKGV4Y2x1ZGUuaW5kZXhPZihjaGFyKSA+IC0xID8gcmVwbGFjZW1lbnQgOiBjaGFyKSlcbiAgICAuam9pbignJyl9JHtleHQgPyAnLicgKyBleHQgOiAnJ31gO1xufTtcblxuLyoqXG4gKiBGaWx0ZXIgb2JqZWN0IHRvIGdpdmVuIGZpZWxkc1xuICpcbiAqIEBwYXJhbSB0b0ZpbHRlclxuICogQHBhcmFtIHJlcXVpcmVkRmllbGRzXG4gKi9cbmV4cG9ydCBjb25zdCBmaWx0ZXJPYmplY3QgPSAodG9GaWx0ZXIsIHJlcXVpcmVkRmllbGRzOiBzdHJpbmdbXSkgPT4ge1xuICBpZiAoIXJlcXVpcmVkRmllbGRzIHx8IHJlcXVpcmVkRmllbGRzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0b0ZpbHRlcjtcbiAgfVxuXG4gIGlmIChPYmplY3Qua2V5cyh0b0ZpbHRlcikubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRvRmlsdGVyO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5rZXlzKHRvRmlsdGVyKVxuICAgIC5maWx0ZXIoZiA9PiByZXF1aXJlZEZpZWxkcy5pbmRleE9mKGYpID4gLTEpXG4gICAgLnJlZHVjZSgob2JqLCBrZXkpID0+ICh7IC4uLm9iaiwgW2tleV06IHRvRmlsdGVyW2tleV0gfSksIHt9KTtcbn07XG5cbi8qKlxuICogRGVlcCBjbGVhbnVwIG9iamVjdCBmcm9tIGZ1bmN0aW9uc1xuICpcbiAqIEBwYXJhbSBvYmpcbiAqL1xuZXhwb3J0IGNvbnN0IGNsZWFuVXBDYWxsYmFja3MgPSAob2JqOiBhbnkpID0+IHtcbiAgaWYgKCFvYmogfHwgT2JqZWN0LmtleXMob2JqKS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgT2JqZWN0LmtleXMob2JqKS5mb3JFYWNoKGsgPT4ge1xuICAgIGlmICh0eXBlb2Ygb2JqW2tdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBvYmpba10gPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKG9ialtrXSA9PT0gT2JqZWN0KG9ialtrXSkpIHtcbiAgICAgIG9ialtrXSA9IGNsZWFuVXBDYWxsYmFja3Mob2JqW2tdKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBvYmo7XG59O1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4Lm5vZGUnO1xuIl19