UNPKG

@cloudbase/app

Version:
221 lines 21.5 kB
"use strict"; var __assign = (this && this.__assign) || function () { __assign = Object.assign || function(t) { for (var s, i = 1, n = arguments.length; i < n; i++) { s = arguments[i]; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; } return t; }; return __assign.apply(this, arguments); }; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.createWebStreamFromNodeReadableStream = exports.parseQueryString = exports.headersInit2Indexable = exports.obj2StrRecord = exports.safeParseJson = exports.validateUid = exports.getCurrRunEnvTag = exports.checkIsInTencentCloud = exports.isNonEmptyString = exports.checkIsInSumeru = exports.checkIsInCBR = exports.checkIsInScf = exports.getEnv = exports.toQueryString = exports.isFormData = void 0; var utilities_1 = require("@cloudbase/utilities"); var web_streams_polyfill_1 = require("web-streams-polyfill"); var constants_1 = require("./constants"); var metadata_1 = require("./metadata"); exports.isFormData = (_a = utilities_1.utils, _a.isFormData), exports.toQueryString = _a.toQueryString; function getEnv(key) { if (typeof process === 'undefined' || !process.env) { return key !== undefined ? undefined : {}; } return key !== undefined ? process.env[key] : process.env; } exports.getEnv = getEnv; var checkIsInScf = function () { return getEnv('TENCENTCLOUD_RUNENV') === 'SCF'; }; exports.checkIsInScf = checkIsInScf; function checkIsInCBR() { return !!getEnv('CBR_ENV_ID'); } exports.checkIsInCBR = checkIsInCBR; var kSumeruEnvSet = new Set(['formal', 'pre', 'test']); function checkIsInSumeru() { return kSumeruEnvSet.has(getEnv('SUMERU_ENV') || ''); } exports.checkIsInSumeru = checkIsInSumeru; function isNonEmptyString(str) { return typeof str === 'string' && str !== ''; } exports.isNonEmptyString = isNonEmptyString; function checkIsInTencentCloud() { return __awaiter(this, void 0, void 0, function () { var _a; return __generator(this, function (_b) { switch (_b.label) { case 0: if (getEnv('TENCENTCLOUD') === 'true') { return [2, true]; } _a = isNonEmptyString; return [4, (0, metadata_1.lookupAppId)()]; case 1: return [2, _a.apply(void 0, [_b.sent()])]; } }); }); } exports.checkIsInTencentCloud = checkIsInTencentCloud; var getCurrRunEnvTag = function () { return __awaiter(void 0, void 0, void 0, function () { return __generator(this, function (_a) { switch (_a.label) { case 0: if ((0, exports.checkIsInScf)()) { return [2, 'scf']; } if (checkIsInCBR()) { return [2, 'cbr']; } if (checkIsInSumeru()) { return [2, 'sumeru']; } return [4, checkIsInTencentCloud()]; case 1: if (_a.sent()) { return [2, 'tencentcloud']; } return [2, 'unknown']; } }); }); }; exports.getCurrRunEnvTag = getCurrRunEnvTag; var validateUid = function (uid) { if (typeof uid !== 'string') { throw __assign(__assign({}, constants_1.ERROR.INVALID_PARAM), { message: 'uid must be a string' }); } if (!constants_1.checkCustomUserIdRegex.test(uid)) { throw __assign(__assign({}, constants_1.ERROR.INVALID_PARAM), { message: "Invalid uid: \"".concat(uid, "\"") }); } }; exports.validateUid = validateUid; function safeParseJson(text) { if (!text || !text.trim()) { return null; } try { return JSON.parse(text); } catch (e) { console.warn('catch an error', { e: e, text: text }); return text; } } exports.safeParseJson = safeParseJson; function obj2StrRecord(obj) { return Object.entries(obj).reduce(function (acc, cur) { var key = cur[0], value = cur[1]; acc[key] = String(value); return acc; }, {}); } exports.obj2StrRecord = obj2StrRecord; function headersInit2Indexable(h) { if (isHeaders(h)) { var ret_1 = {}; h.forEach(function (val, key) { ret_1[key] = val; }); return ret_1; } return h; function isHeaders(h) { try { return h instanceof Headers; } catch (_) { return false; } } } exports.headersInit2Indexable = headersInit2Indexable; function parseQueryString(search) { var params = {}; var cleanSearch = search.replace(/^[?#]/, ''); if (!cleanSearch) { return params; } var pairs = cleanSearch.split('&'); pairs.forEach(function (item) { var _a = item.split('='), key = _a[0], value = _a[1]; key = decodeURIComponent(key); value = decodeURIComponent(value || ''); if (key) { if (params[key]) { if (Array.isArray(params[key])) { params[key].push(value); } else { params[key] = [params[key], value]; } } else { params[key] = value; } } }); return params; } exports.parseQueryString = parseQueryString; function createWebStreamFromNodeReadableStream(stream) { var asyncIterator = stream[Symbol.asyncIterator](); return new web_streams_polyfill_1.ReadableStream({ pull: function (controller) { return __awaiter(this, void 0, void 0, function () { var next; return __generator(this, function (_a) { switch (_a.label) { case 0: return [4, asyncIterator.next()]; case 1: next = _a.sent(); if (next.done) { controller.close(); } else { controller.enqueue(next.value); } return [2]; } }); }); }, }); } exports.createWebStreamFromNodeReadableStream = createWebStreamFromNodeReadableStream; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvbGlicy9hZGFwdGVyLW5vZGUvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsa0RBQTRDO0FBQzVDLDZEQUFxRDtBQUNyRCx5Q0FBMkQ7QUFDM0QsdUNBQXdDO0FBR3pCLFFBQUEsVUFBVSxJQUFaLEtBQWdDLGlCQUc1QyxrQkFIMEIsUUFBQSxhQUFhLG9CQUd2QztBQVFELFNBQWdCLE1BQU0sQ0FBQyxHQUFZO0lBQ2pDLElBQUksT0FBTyxPQUFPLEtBQUssV0FBVyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRTtRQUNsRCxPQUFPLEdBQUcsS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO0tBQzFDO0lBQ0QsT0FBTyxHQUFHLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFBO0FBQzNELENBQUM7QUFMRCx3QkFLQztBQUdNLElBQU0sWUFBWSxHQUFHLGNBQU0sT0FBQSxNQUFNLENBQUMscUJBQXFCLENBQUMsS0FBSyxLQUFLLEVBQXZDLENBQXVDLENBQUE7QUFBNUQsUUFBQSxZQUFZLGdCQUFnRDtBQUV6RSxTQUFnQixZQUFZO0lBRTFCLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQTtBQUMvQixDQUFDO0FBSEQsb0NBR0M7QUFFRCxJQUFNLGFBQWEsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtBQUN4RCxTQUFnQixlQUFlO0lBRTdCLE9BQU8sYUFBYSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENB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QUMsQ0FBQTtpQkFDbkM7YUFDRjtpQkFBTTtnQkFDTCxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFBO2FBQ3BCO1NBQ0Y7SUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNGLE9BQU8sTUFBTSxDQUFBO0FBQ2YsQ0FBQztBQTVCRCw0Q0E0QkM7QUFNRCxTQUFnQixxQ0FBcUMsQ0FBQyxNQUE2QjtJQUNqRixJQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUE7SUFFcEQsT0FBTyxJQUFJLHFDQUFjLENBQUM7UUFDbEIsSUFBSSxZQUFDLFVBQVU7Ozs7O2dDQUNOLFdBQU0sYUFBYSxDQUFDLElBQUksRUFBRSxFQUFBOzs0QkFBakMsSUFBSSxHQUFHLFNBQTBCOzRCQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7Z0NBQ2IsVUFBVSxDQUFDLEtBQUssRUFBRSxDQUFBOzZCQUNuQjtpQ0FBTTtnQ0FDTCxVQUFVLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQTs2QkFDL0I7Ozs7O1NBQ0Y7S0FDRixDQUFDLENBQUE7QUFDSixDQUFDO0FBZEQsc0ZBY0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB1dGlscyB9IGZyb20gJ0BjbG91ZGJhc2UvdXRpbGl0aWVzJ1xuaW1wb3J0IHsgUmVhZGFibGVTdHJlYW0gfSBmcm9tICd3ZWItc3RyZWFtcy1wb2x5ZmlsbCdcbmltcG9ydCB7IEVSUk9SLCBjaGVja0N1c3RvbVVzZXJJZFJlZ2V4IH0gZnJvbSAnLi9jb25zdGFudHMnXG5pbXBvcnQgeyBsb29rdXBBcHBJZCB9IGZyb20gJy4vbWV0YWRhdGEnXG5cbi8qKiDku44gQGNsb3VkYmFzZS91dGlsaXRpZXMg5Lit5o+Q5Y+W55qE6KGo5Y2V5ZKM5p+l6K+i5a2X56ym5Liy5bel5YW3ICovXG5leHBvcnQgY29uc3QgeyBpc0Zvcm1EYXRhLCB0b1F1ZXJ5U3RyaW5nIH0gPSB1dGlscyBhcyB7XG4gIGlzRm9ybURhdGE6IChvYmo6IHVua25vd24pID0+IGJvb2xlYW5cbiAgdG9RdWVyeVN0cmluZzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHN0cmluZ1xufVxuXG4vKipcbiAqIOi3qOerr+WuieWFqOiOt+WPlueOr+Wig+WPmOmHj1xuICogV2ViIOerr+OAgeWwj+a4uOaIj+err+etieayoeaciSBwcm9jZXNzIOWFqOWxgOWvueixoe+8jOebtOaOpeiuv+mXriBwcm9jZXNzLmVudiDkvJrmiqXplJlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEVudigpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleTogc3RyaW5nKTogc3RyaW5nIHwgdW5kZWZpbmVkXG5leHBvcnQgZnVuY3Rpb24gZ2V0RW52KGtleT86IHN0cmluZyk6IHN0cmluZyB8IHVuZGVmaW5lZCB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4ge1xuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09ICd1bmRlZmluZWQnIHx8ICFwcm9jZXNzLmVudikge1xuICAgIHJldHVybiBrZXkgIT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHt9XG4gIH1cbiAgcmV0dXJuIGtleSAhPT0gdW5kZWZpbmVkID8gcHJvY2Vzcy5lbnZba2V5XSA6IHByb2Nlc3MuZW52XG59XG5cbi8qKiDliKTmlq3lvZPliY3mmK/lkKblnKggU0NG77yI5LqR5Ye95pWw77yJ6L+Q6KGM546v5aKD5LitICovXG5leHBvcnQgY29uc3QgY2hlY2tJc0luU2NmID0gKCkgPT4gZ2V0RW52KCdURU5DRU5UQ0xPVURfUlVORU5WJykgPT09ICdTQ0YnXG5cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzSW5DQlIoKSB7XG4gIC8vIENCUiA9IENMT1VEQkFTRV9SVU5cbiAgcmV0dXJuICEhZ2V0RW52KCdDQlJfRU5WX0lEJylcbn1cblxuY29uc3Qga1N1bWVydUVudlNldCA9IG5ldyBTZXQoWydmb3JtYWwnLCAncHJlJywgJ3Rlc3QnXSlcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0lzSW5TdW1lcnUoKSB7XG4gIC8vIFNVTUVSVV9FTlY9Zm9ybWFsIHwgdGVzdCB8IHByZVxuICByZXR1cm4ga1N1bWVydUVudlNldC5oYXMoZ2V0RW52KCdTVU1FUlVfRU5WJykgfHwgJycpXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc05vbkVtcHR5U3RyaW5nKHN0cjogc3RyaW5nKSB7XG4gIHJldHVybiB0eXBlb2Ygc3RyID09PSAnc3RyaW5nJyAmJiBzdHIgIT09ICcnXG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjaGVja0lzSW5UZW5jZW50Q2xvdWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGlmIChnZXRFbnYoJ1RFTkNFTlRDTE9VRCcpID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBpc05vbkVtcHR5U3RyaW5nKGF3YWl0IGxvb2t1cEFwcElkKCkpXG59XG5cbmV4cG9ydCBjb25zdCBnZXRDdXJyUnVuRW52VGFnID0gYXN5bmMgKCk6IFByb21pc2U8c3RyaW5nPiA9PiB7XG4gIGlmIChjaGVja0lzSW5TY2YoKSkge1xuICAgIHJldHVybiAnc2NmJ1xuICB9IGlmIChjaGVja0lzSW5DQlIoKSkge1xuICAgIHJldHVybiAnY2JyJ1xuICB9IGlmIChjaGVja0lzSW5TdW1lcnUoKSkge1xuICAgIHJldHVybiAnc3VtZXJ1J1xuICB9IGlmIChhd2FpdCBjaGVja0lzSW5UZW5jZW50Q2xvdWQoKSkge1xuICAgIHJldHVybiAndGVuY2VudGNsb3VkJ1xuICB9XG4gIHJldHVybiAndW5rbm93bidcbn1cblxuLyoqXG4gKiDmoKHpqozoh6rlrprkuYnnlKjmiLcgSUQg5qC85byPXG4gKiBAdGhyb3dzIOagvOW8j+S4jeWQiOazleaXtuaKm+WHuiBJTlZBTElEX1BBUkFNIOmUmeivr1xuICovXG5leHBvcnQgY29uc3QgdmFsaWRhdGVVaWQgPSAodWlkOiBzdHJpbmcpOiB2b2lkID0+IHtcbiAgaWYgKHR5cGVvZiB1aWQgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgeyAuLi5FUlJPUi5JTlZBTElEX1BBUkFNLCBtZXNzYWdlOiAndWlkIG11c3QgYmUgYSBzdHJpbmcnIH1cbiAgfVxuICBpZiAoIWNoZWNrQ3VzdG9tVXNlcklkUmVnZXgudGVzdCh1aWQpKSB7XG4gICAgdGhyb3cgeyAuLi5FUlJPUi5JTlZBTElEX1BBUkFNLCBtZXNzYWdlOiBgSW52YWxpZCB1aWQ6IFwiJHt1aWR9XCJgIH1cbiAgfVxufVxuXG4vKipcbiAqIOWuieWFqOeahCBKU09OIOino+aekO+8jOino+aekOWksei0peaXtui/lOWbnuWOn+Wni+aWh+acrOiAjOmdnuaKm+W8guW4uFxuICogQHBhcmFtIHRleHQgLSDlvoXop6PmnpDnmoTlrZfnrKbkuLJcbiAqIEByZXR1cm5zIOino+aekOWQjueahOWvueixoe+8jOepuuWtl+espuS4sui/lOWbniBudWxs77yM6Kej5p6Q5aSx6LSl6L+U5Zue5Y6f5aeL5paH5pysXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzYWZlUGFyc2VKc29uKHRleHQ6IHN0cmluZyk6IGFueSB7XG4gIGlmICghdGV4dCB8fCAhdGV4dC50cmltKCkpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodGV4dClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGNvbnNvbGUud2FybignY2F0Y2ggYW4gZXJyb3InLCB7IGUsIHRleHQgfSlcbiAgICByZXR1cm4gdGV4dFxuICB9XG59XG5cbi8qKlxuICog5bCG5a+56LGh55qE5omA5pyJ5YC86L2s5Li65a2X56ym5Liy57G75Z6LXG4gKiDnlKjkuo7lsIYgaGVhZGVycyDnrYnlr7nosaHnu5/kuIDkuLogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICovXG5leHBvcnQgZnVuY3Rpb24gb2JqMlN0clJlY29yZChvYmo6IG9iamVjdCk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4ge1xuICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqKS5yZWR1Y2U8UmVjb3JkPHN0cmluZywgc3RyaW5nPj4oKGFjYywgY3VyOiBbc3RyaW5nLCB1bmtub3duXSkgPT4ge1xuICAgIGNvbnN0IFtrZXksIHZhbHVlXSA9IGN1clxuICAgIGFjY1trZXldID0gU3RyaW5nKHZhbHVlKVxuICAgIHJldHVybiBhY2NcbiAgfSwge30pXG59XG5cbi8qKlxuICog5bCGIEhlYWRlcnNJbml0IOi9rOS4uuWPr+e0ouW8leeahOaZrumAmuWvueixoVxuICog5YW85a65IEhlYWRlcnMg5a6e5L6L5ZKM5pmu6YCa5a+56LGh5Lik56eN5b2i5byPXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoZWFkZXJzSW5pdDJJbmRleGFibGUoaDogSGVhZGVyc0luaXQpIHtcbiAgaWYgKGlzSGVhZGVycyhoKSkge1xuICAgIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgc3RyaW5nPiA9IHt9XG4gICAgaC5mb3JFYWNoKCh2YWwsIGtleSkgPT4ge1xuICAgICAgcmV0W2tleV0gPSB2YWxcbiAgICB9KVxuICAgIHJldHVybiByZXRcbiAgfVxuICByZXR1cm4gaFxuXG4gIGZ1bmN0aW9uIGlzSGVhZGVycyhoOiBIZWFkZXJzSW5pdCk6IGggaXMgSGVhZGVycyB7XG4gICAgdHJ5IHtcbiAgICAgIC8vIE5vZGUg5L2O54mI5pys5Y+v6IO95rKh5pyJ5YWo5bGAIEhlYWRlcnNcbiAgICAgIHJldHVybiBoIGluc3RhbmNlb2YgSGVhZGVyc1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIOaJi+WKqOino+aekOafpeivouWtl+espuS4su+8jOmBv+WFjSBVUkxTZWFyY2hQYXJhbXMg55qE5YW85a655oCn6Zeu6aKYXG4gKiDmlK/mjIHph43lpI0ga2V5IOiHquWKqOi9rOS4uuaVsOe7hFxuICogQHBhcmFtIHNlYXJjaCAtIOafpeivouWtl+espuS4su+8jOWPr+W4puWJjeWvvCA/IOaIliAjXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwYXJzZVF1ZXJ5U3RyaW5nKHNlYXJjaDogc3RyaW5nKTogUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgc3RyaW5nW10+IHtcbiAgY29uc3QgcGFyYW1zOiBhbnkgPSB7fVxuICBjb25zdCBjbGVhblNlYXJjaCA9IHNlYXJjaC5yZXBsYWNlKC9eWz8jXS8sICcnKVxuXG4gIGlmICghY2xlYW5TZWFyY2gpIHtcbiAgICByZXR1cm4gcGFyYW1zXG4gIH1cblxuICBjb25zdCBwYWlycyA9IGNsZWFuU2VhcmNoLnNwbGl0KCcmJylcblxuICBwYWlycy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgbGV0IFtrZXksIHZhbHVlXSA9IGl0ZW0uc3BsaXQoJz0nKVxuICAgIGtleSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXkpXG4gICAgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQodmFsdWUgfHwgJycpXG4gICAgaWYgKGtleSkge1xuICAgICAgaWYgKHBhcmFtc1trZXldKSB7XG4gICAgICAgIC8vIOW3suWtmOWcqOWQjOWQjSBrZXnvvIzovazkuLrmlbDnu4RcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGFyYW1zW2tleV0pKSB7XG4gICAgICAgICAgcGFyYW1zW2tleV0ucHVzaCh2YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwYXJhbXNba2V5XSA9IFtwYXJhbXNba2V5XSwgdmFsdWVdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcmFtc1trZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG4gIH0pXG4gIHJldHVybiBwYXJhbXNcbn1cblxuLyoqXG4gKiDlsIYgTm9kZSBSZWFkYWJsZVN0cmVhbSDovazmjaLkuLogV2ViIFJlYWRhYmxlU3RyZWFtIChwb2x5ZmlsbClcbiAqIOeUqOS6jiBmZXRjaCDmtYHlvI/lk43lupTlnKggTm9kZSDnjq/looPkuIvnmoTpgILphY1cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdlYlN0cmVhbUZyb21Ob2RlUmVhZGFibGVTdHJlYW0oc3RyZWFtOiBOb2RlSlMuUmVhZGFibGVTdHJlYW0pOiBSZWFkYWJsZVN0cmVhbSB7XG4gIGNvbnN0IGFzeW5jSXRlcmF0b3IgPSBzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIGNvbnN0IG5leHQgPSBhd2FpdCBhc3luY0l0ZXJhdG9yLm5leHQoKVxuXG4gICAgICBpZiAobmV4dC5kb25lKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5leHQudmFsdWUpXG4gICAgICB9XG4gICAgfSxcbiAgfSlcbn1cbiJdfQ==