UNPKG

lib-tools

Version:

The lib-tools helps you simplify the build, bundle, test and npm packaging workflows for Typescript, JavaScript, Angular library projects and assets module projects.

110 lines 19.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getTestConfigFromKarma = void 0; const path = require("path"); const helpers_1 = require("../helpers"); const utils_1 = require("../utils"); async function getTestConfigFromKarma(karmaConfig, commandOptions) { const karmaConfigDir = path.dirname(karmaConfig.configFile); const foundWorkflowConfigPath = await utils_1.findUp(['workflow.json'], karmaConfigDir, path.parse(karmaConfigDir).root); let testConfigInternal = null; if (foundWorkflowConfigPath) { const workflowConfig = await helpers_1.readWorkflowConfig(foundWorkflowConfigPath); const workspaceRoot = path.dirname(foundWorkflowConfigPath); const projectConfigs = Object.keys(workflowConfig.projects).map((projectName) => { const projectConfig = workflowConfig.projects[projectName]; if (projectConfig.root && path.isAbsolute(projectConfig.root)) { throw new Error(`Invalid workflow configuration. The 'projects[${projectName}].root' must be relative path.`); } const projectRoot = path.resolve(workspaceRoot, projectConfig.root || ''); const projectConfigInternal = Object.assign(Object.assign({}, projectConfig), { _workspaceRoot: workspaceRoot, _config: foundWorkflowConfigPath, _projectName: projectName, _projectRoot: projectRoot }); return projectConfigInternal; }); for (const projectConfig of projectConfigs) { await helpers_1.applyProjectExtends(projectConfig, projectConfigs, projectConfig._config); if (!projectConfig.tasks || !projectConfig.tasks.test) { continue; } const testConfig = projectConfig.tasks.test; if (testConfig.skip) { continue; } const projectRoot = projectConfig._projectRoot; if (testConfig.karmaConfig && !utils_1.isSamePaths(karmaConfig.configFile, path.resolve(projectRoot, testConfig.karmaConfig))) { continue; } let tsConfigPath = null; let testIndexFilePath = null; if (testConfig.tsConfig) { tsConfigPath = path.resolve(projectRoot, testConfig.tsConfig); } else { tsConfigPath = await helpers_1.findTestTsconfigFile(projectRoot, workspaceRoot); } if (testConfig.testIndexFile) { testIndexFilePath = path.resolve(projectRoot, testConfig.testIndexFile); } else { testIndexFilePath = await helpers_1.findTestIndexFile(projectRoot, workspaceRoot, tsConfigPath); } let packageJson = null; const packageJsonPath = await helpers_1.findPackageJsonPath(projectRoot, workspaceRoot); if (packageJsonPath) { packageJson = await helpers_1.readPackageJson(packageJsonPath); } testConfigInternal = Object.assign(Object.assign({}, testConfig), { _config: projectConfig._config, _workspaceRoot: workspaceRoot, _projectRoot: projectRoot, _projectName: projectConfig._projectName, _packageJson: packageJson, _testIndexFilePath: testIndexFilePath, _tsConfigPath: tsConfigPath, _karmaConfigPath: karmaConfig.configFile }); break; } } else { const workspaceRoot = utils_1.isInFolder(process.cwd(), karmaConfigDir) ? process.cwd() : karmaConfigDir; const tsConfigPath = await helpers_1.findTestTsconfigFile(karmaConfigDir, workspaceRoot); const testIndexFilePath = await helpers_1.findTestIndexFile(karmaConfigDir, workspaceRoot, tsConfigPath); if (!testIndexFilePath) { return null; } const packageJsonPath = await utils_1.findUp('package.json', karmaConfigDir, workspaceRoot); let packageJson = null; if (!packageJsonPath) { return null; } packageJson = await helpers_1.readPackageJson(packageJsonPath); const packageName = packageJson.name; if (!packageName) { return null; } let packageNameWithoutScope = packageName; const slashIndex = packageName.indexOf('/'); if (slashIndex > -1 && packageName.startsWith('@')) { packageNameWithoutScope = packageName.substr(slashIndex + 1); } const projectName = packageNameWithoutScope.replace(/\//g, '-'); testConfigInternal = { _config: 'auto', _workspaceRoot: workspaceRoot, _projectRoot: karmaConfigDir, _projectName: projectName, _packageJson: packageJson, _tsConfigPath: tsConfigPath, _testIndexFilePath: testIndexFilePath, _karmaConfigPath: karmaConfig.configFile }; } if (!testConfigInternal) { return null; } if (commandOptions.reporters != null) { testConfigInternal.reporters = Array.isArray(commandOptions.reporters) ? commandOptions.reporters : commandOptions.reporters.split(',').filter((r) => r.length > 0); } if (commandOptions.browsers != null) { testConfigInternal.browsers = Array.isArray(commandOptions.browsers) ? commandOptions.browsers : commandOptions.browsers.split(',').filter((b) => b.length > 0); } return testConfigInternal; } exports.getTestConfigFromKarma = getTestConfigFromKarma; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRlc3QtY29uZmlnLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJoZWxwZXJzL2dldC10ZXN0LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFJN0Isd0NBT29CO0FBRXBCLG9DQUEyRDtBQU1wRCxLQUFLLFVBQVUsc0JBQXNCLENBQ3hDLFdBQStCLEVBQy9CLGNBQWtDO0lBRWxDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzVELE1BQU0sdUJBQXVCLEdBQUcsTUFBTSxjQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsRUFBRSxjQUFjLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNqSCxJQUFJLGtCQUFrQixHQUE4QixJQUFJLENBQUM7SUFDekQsSUFBSSx1QkFBdUIsRUFBRTtRQUN6QixNQUFNLGNBQWMsR0FBRyxNQUFNLDRCQUFrQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDekUsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDO1FBQzVELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzVFLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDM0QsSUFBSSxhQUFhLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMzRCxNQUFNLElBQUksS0FBSyxDQUNYLGlEQUFpRCxXQUFXLGdDQUFnQyxDQUMvRixDQUFDO2FBQ0w7WUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEs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O1FBQ3JCLE9BQU8sSUFBSSxDQUFDO0tBQ2Y7SUFFRCxJQUFJLGNBQWMsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO1FBQ2xDLGtCQUFrQixDQUFDLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUM7WUFDbEUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxTQUFTO1lBQzFCLENBQUMsQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDekU7SUFFRCxJQUFJLGNBQWMsQ0FBQyxRQUFRLElBQUksSUFBSSxFQUFFO1FBQ2pDLGtCQUFrQixDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUM7WUFDaEUsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxRQUFRO1lBQ3pCLENBQUMsQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDeEU7SUFFRCxPQUFPLGtCQUFrQixDQUFDO0FBQzlCLENBQUM7QUFoSkQsd0RBZ0pDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcblxuaW1wb3J0IHsgQ29uZmlnT3B0aW9ucyBhcyBLYXJtYUNvbmZpZ09wdGlvbnMgfSBmcm9tICdrYXJtYSc7XG5cbmltcG9ydCB7XG4gICAgYXBwbHlQcm9qZWN0RXh0ZW5kcyxcbiAgICBmaW5kUGFja2FnZUpzb25QYXRoLFxuICAgIGZpbmRUZXN0SW5kZXhGaWxlLFxuICAgIGZpbmRUZXN0VHNjb25maWdGaWxlLFxuICAgIHJlYWRQYWNrYWdlSnNvbixcbiAgICByZWFkV29ya2Zsb3dDb25maWdcbn0gZnJvbSAnLi4vaGVscGVycyc7XG5pbXBvcnQgeyBQYWNrYWdlSnNvbkxpa2UsIFByb2plY3RDb25maWdJbnRlcm5hbCwgVGVzdENvbW1hbmRPcHRpb25zLCBUZXN0Q29uZmlnSW50ZXJuYWwgfSBmcm9tICcuLi9tb2RlbHMnO1xuaW1wb3J0IHsgZmluZFVwLCBpc0luRm9sZGVyLCBpc1NhbWVQYXRocyB9IGZyb20gJy4uL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBLYXJtYVBsdWdpbk9wdGlvbnMgZXh0ZW5kcyBLYXJtYUNvbmZpZ09wdGlvbnMge1xuICAgIGNvbmZpZ0ZpbGU6IHN0cmluZztcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGdldFRlc3RDb25maWdGcm9tS2FybWEoXG4gICAga2FybWFDb25maWc6IEthcm1hUGx1Z2luT3B0aW9ucyxcbiAgICBjb21tYW5kT3B0aW9uczogVGVzdENvbW1hbmRPcHRpb25zXG4pOiBQcm9taXNlPFRlc3RDb25maWdJbnRlcm5hbCB8IG51bGw+IHtcbiAgICBjb25zdCBrYXJtYUNvbmZpZ0RpciA9IHBhdGguZGlybmFtZShrYXJtYUNvbmZpZy5jb25maWdGaWxlKTtcbiAgICBjb25zdCBmb3VuZFdvcmtmbG93Q29uZmlnUGF0aCA9IGF3YWl0IGZpbmRVcChbJ3dvcmtmbG93Lmpzb24nXSwga2FybWFDb25maWdEaXIsIHBhdGgucGFyc2Uoa2FybWFDb25maWdEaXIpLnJvb3QpO1xuICAgIGxldCB0ZXN0Q29uZmlnSW50ZXJuYWw6IFRlc3RDb25maWdJbnRlcm5hbCB8IG51bGwgPSBudWxsO1xuICAgIGlmIChmb3VuZFdvcmtmbG93Q29uZmlnUGF0aCkge1xuICAgICAgICBjb25zdCB3b3JrZmxvd0NvbmZpZyA9IGF3YWl0IHJlYWRXb3JrZmxvd0NvbmZpZyhmb3VuZFdvcmtmbG93Q29uZmlnUGF0aCk7XG4gICAgICAgIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBwYXRoLmRpcm5hbWUoZm91bmRXb3JrZmxvd0NvbmZpZ1BhdGgpO1xuICAgICAgICBjb25zdCBwcm9qZWN0Q29uZmlncyA9IE9iamVjdC5rZXlzKHdvcmtmbG93Q29uZmlnLnByb2plY3RzKS5tYXAoKHByb2plY3ROYW1lKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0Q29uZmlnID0gd29ya2Zsb3dDb25maWcucHJvamVjdHNbcHJvamVjdE5hbWVdO1xuICAgICAgICAgICAgaWYgKHByb2plY3RDb25maWcucm9vdCAmJiBwYXRoLmlzQWJzb2x1dGUocHJvamVjdENvbmZpZy5yb290KSkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYEludmFsaWQgd29ya2Zsb3cgY29uZmlndXJhdGlvbi4gVGhlICdwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0ucm9vdCcgbXVzdCBiZSByZWxhdGl2ZSBwYXRoLmBcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHBhdGgucmVzb2x2ZSh3b3Jrc3BhY2VSb290LCBwcm9qZWN0Q29uZmlnLnJvb3QgfHwgJycpO1xuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0Q29uZmlnSW50ZXJuYWw6IFByb2plY3RDb25maWdJbnRlcm5hbCA9IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9qZWN0Q29uZmlnLFxuICAgICAgICAgICAgICAgIF93b3Jrc3BhY2VSb290OiB3b3Jrc3BhY2VSb290LFxuICAgICAgICAgICAgICAgIF9jb25maWc6IGZvdW5kV29ya2Zsb3dDb25maWdQYXRoLFxuICAgICAgICAgICAgICAgIF9wcm9qZWN0TmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICAgICAgX3Byb2plY3RSb290OiBwcm9qZWN0Um9vdFxuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgcmV0dXJuIHByb2plY3RDb25maWdJbnRlcm5hbDtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgZm9yIChjb25zdCBwcm9qZWN0Q29uZmlnIG9mIHByb2plY3RDb25maWdzKSB7XG4gICAgICAgICAgICBhd2FpdCBhcHBseVByb2plY3RFeHRlbmRzKHByb2plY3RDb25maWcsIHByb2plY3RDb25maWdzLCBwcm9qZWN0Q29uZmlnLl9jb25maWcpO1xuICAgICAgICAgICAgaWYgKCFwcm9qZWN0Q29uZmlnLnRhc2tzIHx8ICFwcm9qZWN0Q29uZmlnLnRhc2tzLnRlc3QpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgdGVzdENvbmZpZyA9IHByb2plY3RDb25maWcudGFza3MudGVzdDtcblxuICAgICAgICAgICAgaWYgKHRlc3RDb25maWcuc2tpcCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBwcm9qZWN0Um9vdCA9IHByb2plY3RDb25maWcuX3Byb2plY3RSb290O1xuXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGVzdENvbmZpZy5rYXJtYUNvbmZpZyAmJlxuICAgICAgICAgICAgICAgICFpc1NhbWVQYXRocyhrYXJtYUNvbmZpZy5jb25maWdGaWxlLCBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QsIHRlc3RDb25maWcua2FybWFDb25maWcpKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGxldCB0c0NvbmZpZ1BhdGg6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgICAgICAgICAgbGV0IHRlc3RJbmRleEZpbGVQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgaWYgKHRlc3RDb25maWcudHNDb25maWcpIHtcbiAgICAgICAgICAgICAgICB0c0NvbmZpZ1BhdGggPSBwYXRoLnJlc29sdmUocHJvamVjdFJvb3QsIHRlc3RDb25maWcudHNDb25maWcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0c0NvbmZpZ1BhdGggPSBhd2FpdCBmaW5kVGVzdFRzY29uZmlnRmlsZShwcm9qZWN0Um9vdCwgd29ya3NwYWNlUm9vdCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0ZXN0Q29uZmlnLnRlc3RJbmRleEZpbGUpIHtcbiAgICAgICAgICAgICAgICB0ZXN0SW5kZXhGaWxlUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0Um9vdCwgdGVzdENvbmZpZy50ZXN0SW5kZXhGaWxlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGVzdEluZGV4RmlsZVBhdGggPSBhd2FpdCBmaW5kVGVzdEluZGV4RmlsZShwcm9qZWN0Um9vdCwgd29ya3NwYWNlUm9vdCwgdHNDb25maWdQYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IHBhY2thZ2VKc29uOiBQYWNrYWdlSnNvbkxpa2UgfCBudWxsID0gbnVsbDtcblxuICAgICAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYXdhaXQgZmluZFBhY2thZ2VKc29uUGF0aChwcm9qZWN0Um9vdCwgd29ya3NwYWNlUm9vdCk7XG4gICAgICAgICAgICBpZiAocGFja2FnZUpzb25QYXRoKSB7XG4gICAgICAgICAgICAgICAgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24ocGFja2FnZUpzb25QYXRoKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGVzdENvbmZpZ0ludGVybmFsID0ge1xuICAgICAgICAgICAgICAgIC4uLnRlc3RDb25maWcsXG4gICAgICAgICAgICAgICAgX2NvbmZpZzogcHJvamVjdENvbmZpZy5fY29uZmlnLFxuICAgICAgICAgICAgICAgIF93b3Jrc3BhY2VSb290OiB3b3Jrc3BhY2VSb290LFxuICAgICAgICAgICAgICAgIF9wcm9qZWN0Um9vdDogcHJvamVjdFJvb3QsXG4gICAgICAgICAgICAgICAgX3Byb2plY3ROYW1lOiBwcm9qZWN0Q29uZmlnLl9wcm9qZWN0TmFtZSxcbiAgICAgICAgICAgICAgICBfcGFja2FnZUpzb246IHBhY2thZ2VKc29uLFxuICAgICAgICAgICAgICAgIF90ZXN0SW5kZXhGaWxlUGF0aDogdGVzdEluZGV4RmlsZVBhdGgsXG4gICAgICAgICAgICAgICAgX3RzQ29uZmlnUGF0aDogdHNDb25maWdQYXRoLFxuICAgICAgICAgICAgICAgIF9rYXJtYUNvbmZpZ1BhdGg6IGthcm1hQ29uZmlnLmNvbmZpZ0ZpbGVcbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd29ya3NwYWNlUm9vdCA9IGlzSW5Gb2xkZXIocHJvY2Vzcy5jd2QoKSwga2FybWFDb25maWdEaXIpID8gcHJvY2Vzcy5jd2QoKSA6IGthcm1hQ29uZmlnRGlyO1xuICAgICAgICBjb25zdCB0c0NvbmZpZ1BhdGggPSBhd2FpdCBmaW5kVGVzdFRzY29uZmlnRmlsZShrYXJtYUNvbmZpZ0Rpciwgd29ya3NwYWNlUm9vdCk7XG4gICAgICAgIGNvbnN0IHRlc3RJbmRleEZpbGVQYXRoID0gYXdhaXQgZmluZFRlc3RJbmRleEZpbGUoa2FybWFDb25maWdEaXIsIHdvcmtzcGFjZVJvb3QsIHRzQ29uZmlnUGF0aCk7XG4gICAgICAgIGlmICghdGVzdEluZGV4RmlsZVBhdGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYXdhaXQgZmluZFVwKCdwYWNrYWdlLmpzb24nLCBrYXJtYUNvbmZpZ0Rpciwgd29ya3NwYWNlUm9vdCk7XG4gICAgICAgIGxldCBwYWNrYWdlSnNvbjogUGFja2FnZUpzb25MaWtlIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhY2thZ2VKc29uID0gYXdhaXQgcmVhZFBhY2thZ2VKc29uKHBhY2thZ2VKc29uUGF0aCk7XG4gICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gcGFja2FnZUpzb24ubmFtZTtcbiAgICAgICAgaWYgKCFwYWNrYWdlTmFtZSkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFja2FnZU5hbWVXaXRob3V0U2NvcGUgPSBwYWNrYWdlTmFtZTtcbiAgICAgICAgY29uc3Qgc2xhc2hJbmRleCA9IHBhY2thZ2VOYW1lLmluZGV4T2YoJy8nKTtcbiAgICAgICAgaWYgKHNsYXNoSW5kZXggPiAtMSAmJiBwYWNrYWdlTmFtZS5zdGFydHNXaXRoKCdAJykpIHtcbiAgICAgICAgICAgIHBhY2thZ2VOYW1lV2l0aG91dFNjb3BlID0gcGFja2FnZU5hbWUuc3Vic3RyKHNsYXNoSW5kZXggKyAxKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwcm9qZWN0TmFtZSA9IHBhY2thZ2VOYW1lV2l0aG91dFNjb3BlLnJlcGxhY2UoL1xcLy9nLCAnLScpO1xuXG4gICAgICAgIHRlc3RDb25maWdJbnRlcm5hbCA9IHtcbiAgICAgICAgICAgIF9jb25maWc6ICdhdXRvJyxcbiAgICAgICAgICAgIF93b3Jrc3BhY2VSb290OiB3b3Jrc3BhY2VSb290LFxuICAgICAgICAgICAgX3Byb2plY3RSb290OiBrYXJtYUNvbmZpZ0RpcixcbiAgICAgICAgICAgIF9wcm9qZWN0TmFtZTogcHJvamVjdE5hbWUsXG4gICAgICAgICAgICBfcGFja2FnZUpzb246IHBhY2thZ2VKc29uLFxuICAgICAgICAgICAgX3RzQ29uZmlnUGF0aDogdHNDb25maWdQYXRoLFxuICAgICAgICAgICAgX3Rlc3RJbmRleEZpbGVQYXRoOiB0ZXN0SW5kZXhGaWxlUGF0aCxcbiAgICAgICAgICAgIF9rYXJtYUNvbmZpZ1BhdGg6IGthcm1hQ29uZmlnLmNvbmZpZ0ZpbGVcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoIXRlc3RDb25maWdJbnRlcm5hbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZE9wdGlvbnMucmVwb3J0ZXJzICE9IG51bGwpIHtcbiAgICAgICAgdGVzdENvbmZpZ0ludGVybmFsLnJlcG9ydGVycyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZE9wdGlvbnMucmVwb3J0ZXJzKVxuICAgICAgICAgICAgPyBjb21tYW5kT3B0aW9ucy5yZXBvcnRlcnNcbiAgICAgICAgICAgIDogY29tbWFuZE9wdGlvbnMucmVwb3J0ZXJzLnNwbGl0KCcsJykuZmlsdGVyKChyKSA9PiByLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIGlmIChjb21tYW5kT3B0aW9ucy5icm93c2VycyAhPSBudWxsKSB7XG4gICAgICAgIHRlc3RDb25maWdJbnRlcm5hbC5icm93c2VycyA9IEFycmF5LmlzQXJyYXkoY29tbWFuZE9wdGlvbnMuYnJvd3NlcnMpXG4gICAgICAgICAgICA/IGNvbW1hbmRPcHRpb25zLmJyb3dzZXJzXG4gICAgICAgICAgICA6IGNvbW1hbmRPcHRpb25zLmJyb3dzZXJzLnNwbGl0KCcsJykuZmlsdGVyKChiKSA9PiBiLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHJldHVybiB0ZXN0Q29uZmlnSW50ZXJuYWw7XG59XG4iXX0=