UNPKG

jsii-release

Version:

Release jsii modules to multiple package managers

221 lines 18.9 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.identify = exports.email = exports.username = exports.checkout = exports.push = exports.tag = exports.init = exports.commit = exports.add = exports.diffIndex = exports.detectSSH = exports.getToken = exports.detectGHE = exports.clone = void 0; const shell = __importStar(require("./shell")); /** * Clones a repository from GitHub. Requires a `GITHUB_TOKEN` env variable. * * @param repositoryUrl the repository to clone. * @param targetDir the clone directory. */ function clone(repositoryUrl, targetDir) { const gitHubUseSsh = detectSSH(); if (gitHubUseSsh) { const sshRepositoryUrl = repositoryUrl.replace('/', ':'); shell.run(`git clone git@${sshRepositoryUrl}.git ${targetDir}`); } else { const gitHubToken = getToken(detectGHE()); if (!gitHubToken) { throw new Error('GITHUB_TOKEN env variable is required when GITHUB_USE_SSH env variable is not used'); } shell.run(`git clone https://${gitHubToken}@${repositoryUrl}.git ${targetDir}`); } } exports.clone = clone; /** * Checks if the current environment is an GHE environment. * * This check is using GITHUB_API_URL set in GitHub Actions workflow, as well as common gh cli env variables. * https://docs.github.com/en/actions/learn-github-actions/variables#default-environment-variables * https://cli.github.com/manual/gh_help_environment * * @return - `true` if GH_HOST or GITHUB_API_URL env var are defined and not equal to the public github endpoint, otherwise `false` */ function detectGHE() { const githubApiUrl = process.env.GITHUB_API_URL; const ghHost = process.env.GH_HOST; return (Boolean(ghHost) && ghHost.trim().toLowerCase() != 'github.com') || (Boolean(githubApiUrl) && githubApiUrl.trim().toLowerCase() != 'https://api.github.com'); } exports.detectGHE = detectGHE; /** * Returns an appropriate github token from the environment. * * @return GH_ENTERPRISE_TOKEN or GITHUB_ENTERPRISE_TOKEN or GITHUB_TOKEN if in an GHE environment, otherwise GITHUB_TOKEN */ function getToken(isGHE) { var _a, _b; if (isGHE) { const githubEnterpiseToken = (_b = (_a = process.env.GH_ENTERPRISE_TOKEN) !== null && _a !== void 0 ? _a : process.env.GITHUB_ENTERPRISE_TOKEN) !== null && _b !== void 0 ? _b : process.env.GITHUB_TOKEN; return githubEnterpiseToken; } return process.env.GITHUB_TOKEN; } exports.getToken = getToken; /** * Checks if SSH should be used to clone repo. * This checks the presence and values of the GIT_USE_SSH env variable and the deprecated GITHUB_USE_SSH for legacy reason. Returns true if either of these env vars are defined and not falsy. */ function detectSSH() { var _a; return Boolean((_a = process.env.GIT_USE_SSH) !== null && _a !== void 0 ? _a : process.env.GITHUB_USE_SSH); } exports.detectSSH = detectSSH; /** * Query the git index for changes. * * @return True if changes exist, False otherwise. */ function diffIndex() { try { shell.run('git diff-index --exit-code HEAD --'); return false; } catch (err) { return true; } } exports.diffIndex = diffIndex; /** * Add files to the index. * * @param p the path. */ function add(p) { shell.run(`git add ${p}`); } exports.add = add; /** * Commit. * * @param message the commit message. */ function commit(message) { shell.run(`git commit -m "${message}"`); } exports.commit = commit; /** * Initialize a repository. */ function init() { shell.run('git init'); } exports.init = init; /** * Cerate a tag. * * @param name tag name. * @returns true if the tag was created, false if it already exists. */ function tag(name) { try { shell.run(`git tag -a ${name} -m ${name}`, { capture: true }); return true; } catch (e) { if (e instanceof Error && e.message.includes('already exists')) { return false; } throw e; } } exports.tag = tag; /** * Push a ref to origin. * * @param ref the ref */ function push(ref) { shell.run(`git push origin ${ref}`); } exports.push = push; /** * Checkout to a new branch. Creates a new one if `options.createIfMissing` is True and the branch doesn't exist. * * @param branch the branch. * @param options options. */ function checkout(branch, options) { if (options.createIfMissing) { try { shell.run(`git show-branch origin/${branch}`, { capture: true }); } catch (e) { if (e instanceof Error && e.message.includes('fatal: bad sha1 reference')) { console.log('Remote branch not found, creating new branch.'); shell.run(`git checkout -B ${branch}`); return; } } } shell.run(`git checkout ${branch}`); } exports.checkout = checkout; /** * Fetch the configured git user name for the current directory. * Returns undefined if not configured. */ function username() { try { return shell.run('git config user.name', { capture: true }); } catch (err) { if (err instanceof Error) { console.warn(err.message); } return undefined; } } exports.username = username; /** * Fetch the configured git user email for the current directory. * Returns undefined if not configured. */ function email() { try { return shell.run('git config user.email', { capture: true }); } catch (err) { if (err instanceof Error) { console.warn(err.message); } return undefined; } } exports.email = email; /** * Identify the committer with a username and email. * * @param user the username. * @param email the email address. */ function identify(user, address) { shell.run(`git config user.name "${user}"`); shell.run(`git config user.email "${address}"`); } exports.identify = identify; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2hlbHAvZ2l0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsK0NBQWlDO0FBRWpDOzs7OztHQUtHO0FBQ0gsU0FBZ0IsS0FBSyxDQUFDLGFBQXFCLEVBQUUsU0FBaUI7SUFDNUQsTUFBTSxZQUFZLEdBQUcsU0FBUyxFQUFFLENBQUM7SUFDakMsSUFBSSxZQUFZLEVBQUU7UUFDaEIsTUFBTSxnQkFBZ0IsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUN6RCxLQUFLLENBQUMsR0FBRyxDQUFDLGlCQUFpQixnQkFBZ0IsUUFBUSxTQUFTLEVBQUUsQ0FBQyxDQUFDO0tBQ2pFO1NBQU07UUFDTCxNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ2hCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztTQUN2RztRQUNELEtBQUssQ0FBQyxHQUFHLENBQUMscUJBQXFCLFdBQVcsSUFBSSxhQUFhLFFBQVEsU0FBUyxFQUFFLENBQUMsQ0FBQztLQUVqRjtBQUNILENBQUM7QUFiRCxzQkFhQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IsU0FBUztJQUN2QixNQUFNLFlBQVksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsQ0FBQztJQUNoRCxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQztJQUVuQyxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLE1BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsSUFBSSxZQUFZLENBQUM7V0FDbkUsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLElBQUksWUFBYSxDQUFDLElBQUksRUFB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ZXMgYSByZXBvc2l0b3J5IGZyb20gR2l0SHViLiBSZXF1aXJlcyBhIGBHSVRIVUJfVE9LRU5gIGVudiB2YXJpYWJsZS5cbiAqXG4gKiBAcGFyYW0gcmVwb3NpdG9yeVVybCB0aGUgcmVwb3NpdG9yeSB0byBjbG9uZS5cbiAqIEBwYXJhbSB0YXJnZXREaXIgdGhlIGNsb25lIGRpcmVjdG9yeS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lKHJlcG9zaXRvcnlVcmw6IHN0cmluZywgdGFyZ2V0RGlyOiBzdHJpbmcpIHtcbiAgY29uc3QgZ2l0SHViVXNlU3NoID0gZGV0ZWN0U1NIKCk7XG4gIGlmIChnaXRIdWJVc2VTc2gpIHtcbiAgICBjb25zdCBzc2hSZXBvc2l0b3J5VXJsID0gcmVwb3NpdG9yeVVybC5yZXBsYWNlKCcvJywgJzonKTtcbiAgICBzaGVsbC5ydW4oYGdpdCBjbG9uZSBnaXRAJHtzc2hSZXBvc2l0b3J5VXJsfS5naXQgJHt0YXJnZXREaXJ9YCk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgZ2l0SHViVG9rZW4gPSBnZXRUb2tlbihkZXRlY3RHSEUoKSk7XG4gICAgaWYgKCFnaXRIdWJUb2tlbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdHSVRIVUJfVE9LRU4gZW52IHZhcmlhYmxlIGlzIHJlcXVpcmVkIHdoZW4gR0lUSFVCX1VTRV9TU0ggZW52IHZhcmlhYmxlIGlzIG5vdCB1c2VkJyk7XG4gICAgfVxuICAgIHNoZWxsLnJ1bihgZ2l0IGNsb25lIGh0dHBzOi8vJHtnaXRIdWJUb2tlbn1AJHtyZXBvc2l0b3J5VXJsfS5naXQgJHt0YXJnZXREaXJ9YCk7XG5cbiAgfVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgY3VycmVudCBlbnZpcm9ubWVudCBpcyBhbiBHSEUgZW52aXJvbm1lbnQuXG4gKlxuICogVGhpcyBjaGVjayBpcyB1c2luZyBHSVRIVUJfQVBJX1VSTCBzZXQgaW4gR2l0SHViIEFjdGlvbnMgd29ya2Zsb3csIGFzIHdlbGwgYXMgY29tbW9uIGdoIGNsaSBlbnYgdmFyaWFibGVzLlxuICogaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vZW4vYWN0aW9ucy9sZWFybi1naXRodWItYWN0aW9ucy92YXJpYWJsZXMjZGVmYXVsdC1lbnZpcm9ubWVudC12YXJpYWJsZXNcbiAqIGh0dHBzOi8vY2xpLmdpdGh1Yi5jb20vbWFudWFsL2doX2hlbHBfZW52aXJvbm1lbnRcbiAqXG4gKiBAcmV0dXJuIC0gYHRydWVgIGlmIEdIX0hPU1Qgb3IgR0lUSFVCX0FQSV9VUkwgZW52IHZhciBhcmUgZGVmaW5lZCBhbmQgbm90IGVxdWFsIHRvIHRoZSBwdWJsaWMgZ2l0aHViIGVuZHBvaW50LCBvdGhlcndpc2UgYGZhbHNlYFxuICovXG5leHBvcnQgZnVuY3Rpb24gZGV0ZWN0R0hFKCk6IGJvb2xlYW4ge1xuICBjb25zdCBnaXRodWJBcGlVcmwgPSBwcm9jZXNzLmVudi5HSVRIVUJfQVBJX1VSTDtcbiAgY29uc3QgZ2hIb3N0ID0gcHJvY2Vzcy5lbnYuR0hfSE9TVDtcblxuICByZXR1cm4gKEJvb2xlYW4oZ2hIb3N0KSAmJiBnaEhvc3QhLnRyaW0oKS50b0xvd2VyQ2FzZSgpICE9ICdnaXRodWIuY29tJylcbiAgICB8fCAoQm9vbGVhbihnaXRodWJBcGlVcmwpICYmIGdpdGh1YkFwaVVybCEudHJpbSgpLnRvTG93ZXJDYXNlKCkgIT0gJ2h0dHBzOi8vYXBpLmdpdGh1Yi5jb20nKTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIGFwcHJvcHJpYXRlIGdpdGh1YiB0b2tlbiBmcm9tIHRoZSBlbnZpcm9ubWVudC5cbiAqXG4gKiBAcmV0dXJuIEdIX0VOVEVSUFJJU0VfVE9LRU4gb3IgR0lUSFVCX0VOVEVSUFJJU0VfVE9LRU4gb3IgR0lUSFVCX1RPS0VOIGlmIGluIGFuIEdIRSBlbnZpcm9ubWVudCwgb3RoZXJ3aXNlIEdJVEhVQl9UT0tFTlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRUb2tlbihpc0dIRTogYm9vbGVhbik6IChzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgaWYgKGlzR0hFKSB7XG4gICAgY29uc3QgZ2l0aHViRW50ZXJwaXNlVG9rZW4gPSBwcm9jZXNzLmVudi5HSF9FTlRFUlBSSVNFX1RPS0VOID8/IHByb2Nlc3MuZW52LkdJVEhVQl9FTlRFUlBSSVNFX1RPS0VOID8/IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTjtcbiAgICByZXR1cm4gZ2l0aHViRW50ZXJwaXNlVG9rZW47XG4gIH1cbiAgcmV0dXJuIHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTjtcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgU1NIIHNob3VsZCBiZSB1c2VkIHRvIGNsb25lIHJlcG8uXG4gKiBUaGlzIGNoZWNrcyB0aGUgcHJlc2VuY2UgYW5kIHZhbHVlcyBvZiB0aGUgR0lUX1VTRV9TU0ggZW52IHZhcmlhYmxlIGFuZCB0aGUgZGVwcmVjYXRlZCBHSVRIVUJfVVNFX1NTSCBmb3IgbGVnYWN5IHJlYXNvbi4gUmV0dXJucyB0cnVlIGlmIGVpdGhlciBvZiB0aGVzZSBlbnYgdmFycyBhcmUgZGVmaW5lZCBhbmQgbm90IGZhbHN5LlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBkZXRlY3RTU0goKTogYm9vbGVhbiB7XG4gIHJldHVybiBCb29sZWFuKHByb2Nlc3MuZW52LkdJVF9VU0VfU1NIID8/IHByb2Nlc3MuZW52LkdJVEhVQl9VU0VfU1NIKTtcbn1cblxuLyoqXG4gKiBRdWVyeSB0aGUgZ2l0IGluZGV4IGZvciBjaGFuZ2VzLlxuICpcbiAqIEByZXR1cm4gVHJ1ZSBpZiBjaGFuZ2VzIGV4aXN0LCBGYWxzZSBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkaWZmSW5kZXgoKTogYm9vbGVhbiB7XG4gIHRyeSB7XG4gICAgc2hlbGwucnVuKCdnaXQgZGlmZi1pbmRleCAtLWV4aXQtY29kZSBIRUFEIC0tJyk7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufVxuXG4vKipcbiAqIEFkZCBmaWxlcyB0byB0aGUgaW5kZXguXG4gKlxuICogQHBhcmFtIHAgdGhlIHBhdGguXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGQocDogc3RyaW5nKSB7XG4gIHNoZWxsLnJ1bihgZ2l0IGFkZCAke3B9YCk7XG59XG5cbi8qKlxuICogQ29tbWl0LlxuICpcbiAqIEBwYXJhbSBtZXNzYWdlIHRoZSBjb21taXQgbWVzc2FnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbW1pdChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgc2hlbGwucnVuKGBnaXQgY29tbWl0IC1tIFwiJHttZXNzYWdlfVwiYCk7XG59XG5cbi8qKlxuICogSW5pdGlhbGl6ZSBhIHJlcG9zaXRvcnkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICBzaGVsbC5ydW4oJ2dpdCBpbml0Jyk7XG59XG5cbi8qKlxuICogQ2VyYXRlIGEgdGFnLlxuICpcbiAqIEBwYXJhbSBuYW1lIHRhZyBuYW1lLlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFnIHdhcyBjcmVhdGVkLCBmYWxzZSBpZiBpdCBhbHJlYWR5IGV4aXN0cy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRhZyhuYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgdHJ5IHtcbiAgICBzaGVsbC5ydW4oYGdpdCB0YWcgLWEgJHtuYW1lfSAtbSAke25hbWV9YCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIHJldHVybiB0cnVlO1xuICB9IGNhdGNoIChlKSB7XG4gICAgaWYgKGUgaW5zdGFuY2VvZiBFcnJvciAmJiBlLm1lc3NhZ2UuaW5jbHVkZXMoJ2FscmVhZHkgZXhpc3RzJykpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgdGhyb3cgZTtcbiAgfVxufVxuXG4vKipcbiAqIFB1c2ggYSByZWYgdG8gb3JpZ2luLlxuICpcbiAqIEBwYXJhbSByZWYgdGhlIHJlZlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHVzaChyZWY6IHN0cmluZykge1xuICBzaGVsbC5ydW4oYGdpdCBwdXNoIG9yaWdpbiAke3JlZn1gKTtcbn1cblxuLyoqXG4gKiBDaGVja291dCB0byBhIG5ldyBicmFuY2guIENyZWF0ZXMgYSBuZXcgb25lIGlmIGBvcHRpb25zLmNyZWF0ZUlmTWlzc2luZ2AgaXMgVHJ1ZSBhbmQgdGhlIGJyYW5jaCBkb2Vzbid0IGV4aXN0LlxuICpcbiAqIEBwYXJhbSBicmFuY2ggdGhlIGJyYW5jaC5cbiAqIEBwYXJhbSBvcHRpb25zIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja291dChicmFuY2g6IHN0cmluZywgb3B0aW9uczogeyBjcmVhdGVJZk1pc3Npbmc/OiBib29sZWFuIH0gKSB7XG4gIGlmIChvcHRpb25zLmNyZWF0ZUlmTWlzc2luZykge1xuICAgIHRyeSB7XG4gICAgICBzaGVsbC5ydW4oYGdpdCBzaG93LWJyYW5jaCBvcmlnaW4vJHticmFuY2h9YCwgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlIGluc3RhbmNlb2YgRXJyb3IgJiYgZS5tZXNzYWdlLmluY2x1ZGVzKCdmYXRhbDogYmFkIHNoYTEgcmVmZXJlbmNlJykpIHtcbiAgICAgICAgY29uc29sZS5sb2coJ1JlbW90ZSBicmFuY2ggbm90IGZvdW5kLCBjcmVhdGluZyBuZXcgYnJhbmNoLicpO1xuICAgICAgICBzaGVsbC5ydW4oYGdpdCBjaGVja291dCAtQiAke2JyYW5jaH1gKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBzaGVsbC5ydW4oYGdpdCBjaGVja291dCAke2JyYW5jaH1gKTtcbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgY29uZmlndXJlZCBnaXQgdXNlciBuYW1lIGZvciB0aGUgY3VycmVudCBkaXJlY3RvcnkuXG4gKiBSZXR1cm5zIHVuZGVmaW5lZCBpZiBub3QgY29uZmlndXJlZC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVzZXJuYW1lKCkge1xuICB0cnkge1xuICAgIHJldHVybiBzaGVsbC5ydW4oJ2dpdCBjb25maWcgdXNlci5uYW1lJywgeyBjYXB0dXJlOiB0cnVlIH0pO1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgIGNvbnNvbGUud2FybihlcnIubWVzc2FnZSk7XG4gICAgfVxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGZXRjaCB0aGUgY29uZmlndXJlZCBnaXQgdXNlciBlbWFpbCBmb3IgdGhlIGN1cnJlbnQgZGlyZWN0b3J5LlxuICogUmV0dXJucyB1bmRlZmluZWQgaWYgbm90IGNvbmZpZ3VyZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbWFpbCgpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gc2hlbGwucnVuKCdnaXQgY29uZmlnIHVzZXIuZW1haWwnLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChlcnIgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgY29uc29sZS53YXJuKGVyci5tZXNzYWdlKTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxufVxuXG4vKipcbiAqIElkZW50aWZ5IHRoZSBjb21taXR0ZXIgd2l0aCBhIHVzZXJuYW1lIGFuZCBlbWFpbC5cbiAqXG4gKiBAcGFyYW0gdXNlciB0aGUgdXNlcm5hbWUuXG4gKiBAcGFyYW0gZW1haWwgdGhlIGVtYWlsIGFkZHJlc3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpZGVudGlmeSh1c2VyOiBzdHJpbmcsIGFkZHJlc3M6IHN0cmluZykge1xuICBzaGVsbC5ydW4oYGdpdCBjb25maWcgdXNlci5uYW1lIFwiJHt1c2VyfVwiYCk7XG4gIHNoZWxsLnJ1bihgZ2l0IGNvbmZpZyB1c2VyLmVtYWlsIFwiJHthZGRyZXNzfVwiYCk7XG59XG4iXX0=