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.

142 lines 24.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.toBuildActionInternal = void 0; const path = require("path"); const utils_1 = require("../utils"); const find_build_tsconfig_file_1 = require("./find-build-tsconfig-file"); const find_node_modules_path_1 = require("./find-node-modules-path"); const find_package_json_path_1 = require("./find-package-json-path"); const parse_ts_json_config_file_content_1 = require("./parse-ts-json-config-file-content"); const prepare_asset_entries_1 = require("./prepare-asset-entries"); const prepare_banner_text_1 = require("./prepare-banner-text"); const prepare_scripts_1 = require("./prepare-scripts"); const prepare_styles_1 = require("./prepare-styles"); const read_package_json_1 = require("./read-package-json"); const versionPlaceholderRegex = /0\.0\.0-PLACEHOLDER/i; async function toBuildActionInternal(projectConfig, buildCommandOptions) { if (!projectConfig.tasks || !projectConfig.tasks.build) { throw new Error('No build actions in configuration.'); } const buildConfig = JSON.parse(JSON.stringify(projectConfig.tasks.build)); const workspaceRoot = projectConfig._workspaceRoot; const projectRoot = projectConfig._projectRoot; const projectName = projectConfig._projectName; const packageJsonPath = await find_package_json_path_1.findPackageJsonPath(projectRoot, workspaceRoot); if (!packageJsonPath) { throw new Error('Could not detect package.json file.'); } const packageJson = await read_package_json_1.readPackageJson(packageJsonPath); const rootPackageJsonPath = await find_package_json_path_1.findPackageJsonPath(null, workspaceRoot); let rootPackageJson = null; if (rootPackageJsonPath) { rootPackageJson = await read_package_json_1.readPackageJson(rootPackageJsonPath); } const packageName = packageJson.name; const slashIndex = packageName.indexOf('/'); let packageScope = null; let packageNameWithoutScope = packageName; if (slashIndex > -1 && packageName.startsWith('@')) { packageScope = packageName.substr(0, slashIndex); packageNameWithoutScope = packageName.substr(slashIndex + 1); } let packageVersion; if (buildCommandOptions.version) { packageVersion = buildCommandOptions.version; } else { if (!packageJson.version || packageJson.version === '0.0.0' || packageJson.version === '[PLACEHOLDER]' || versionPlaceholderRegex.test(packageJson.version)) { if (rootPackageJson && rootPackageJson.version) { packageVersion = rootPackageJson.version; } else { throw new Error('The package version could not be detected.'); } } else { packageVersion = packageJson.version; } } let nestedPackage = false; if (packageName.split('/').length > 2 || (!packageName.startsWith('@') && packageName.split('/').length >= 2)) { nestedPackage = true; } let outputPathAbs = null; if (buildConfig.outputPath) { const configErrorLocation = `projects[${projectName}].outputPath`; if (path.isAbsolute(buildConfig.outputPath)) { throw new Error(`The '${configErrorLocation}' must be relative path.`); } outputPathAbs = path.resolve(projectRoot, buildConfig.outputPath); if (utils_1.isSamePaths(workspaceRoot, outputPathAbs)) { throw new Error(`The '${configErrorLocation}' must not be the same as workspace root directory.`); } if (utils_1.isSamePaths(projectRoot, outputPathAbs)) { throw new Error(`The '${configErrorLocation}' must not be the same as project root directory.`); } if (outputPathAbs === path.parse(outputPathAbs).root) { throw new Error(`The '${configErrorLocation}' must not be the same as system root directory.`); } const projectRootRoot = path.parse(projectRoot).root; if (outputPathAbs === projectRootRoot) { throw new Error(`The '${configErrorLocation}' must not be the same as system root directory.`); } if (utils_1.isInFolder(outputPathAbs, workspaceRoot)) { throw new Error(`The workspace root folder must not be inside output directory. Change outputPath in 'projects[${projectName}].outputPath'.`); } if (utils_1.isInFolder(outputPathAbs, projectRoot)) { throw new Error(`The project root folder must not be inside output directory. Change outputPath in 'projects[${projectName}].outputPath'.`); } } else { let tsConfigPath = null; if (buildConfig.script && buildConfig.script.tsConfig) { tsConfigPath = path.resolve(projectRoot, buildConfig.script.tsConfig); } else if (buildConfig.script) { tsConfigPath = await find_build_tsconfig_file_1.findBuildTsconfigFile(projectRoot, workspaceRoot); } let outputPath = null; if (tsConfigPath) { const tsCompilerConfig = parse_ts_json_config_file_content_1.parseTsJsonConfigFileContent(tsConfigPath); const compilerOptions = tsCompilerConfig.options; if (compilerOptions.outDir) { outputPath = path.isAbsolute(compilerOptions.outDir) ? path.resolve(compilerOptions.outDir) : path.resolve(path.dirname(tsConfigPath), compilerOptions.outDir); } } else { outputPath = path.resolve(workspaceRoot, `dist/packages/${packageNameWithoutScope}`); } if (outputPath && !utils_1.isSamePaths(projectRoot, outputPath) && !utils_1.isInFolder(outputPath, projectRoot)) { outputPathAbs = outputPath; } } if (!outputPathAbs) { throw new Error(`The outputPath could not be automatically detected. Set value in 'projects[${projectName}].tasks.build.outputPath' manually.`); } let packageJsonOutDir; if (nestedPackage) { const nestedPath = packageNameWithoutScope.substr(packageNameWithoutScope.indexOf('/') + 1); packageJsonOutDir = path.resolve(outputPathAbs, nestedPath); } else { packageJsonOutDir = outputPathAbs; } const nodeModulesPath = await find_node_modules_path_1.findNodeModulesPath(workspaceRoot); const buildConfigInternal = Object.assign(Object.assign({}, buildConfig), { _config: projectConfig._config, _workspaceRoot: workspaceRoot, _nodeModulesPath: nodeModulesPath, _projectRoot: projectRoot, _projectName: projectName, _outputPath: outputPathAbs, _packageJsonPath: packageJsonPath, _packageJson: packageJson, _packageName: packageName, _packageNameWithoutScope: packageNameWithoutScope, _packageVersion: packageVersion, _nestedPackage: nestedPackage, _packageScope: packageScope, _rootPackageJsonPath: rootPackageJsonPath, _rootPackageJson: rootPackageJson, _assetEntries: [], _styleEntries: [], _packageJsonOutDir: packageJsonOutDir, _packageJsonEntryPoint: {} }); // Banner await prepare_banner_text_1.prepareBannerText(buildConfigInternal); // Copy assets await prepare_asset_entries_1.prepareAssetEntries(buildConfigInternal); // Styles await prepare_styles_1.prepareStyles(buildConfigInternal); // Scripts await prepare_scripts_1.prepareScripts(buildConfigInternal); return buildConfigInternal; } exports.toBuildActionInternal = toBuildActionInternal; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG8tYnVpbGQtY29uZmlnLWludGVybmFsLmpzIiwic291cmNlUm9vdCI6Ii4vIiwic291cmNlcyI6WyJoZWxwZXJzL3RvLWJ1aWxkLWNvbmZpZy1pbnRlcm5hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSw2QkFBNkI7QUFTN0Isb0NBQW1EO0FBRW5ELHlFQUFtRTtBQUNuRSxxRUFBK0Q7QUFDL0QscUVBQStEO0FBQy9ELDJGQUFtRjtBQUNuRixtRUFBOEQ7QUFDOUQsK0RBQTBEO0FBQzFELHVEQUFtRDtBQUNuRCxxREFBaUQ7QUFDakQsMkRBQXNEO0FBRXRELE1BQU0sdUJBQXVCLEdBQUcsc0JBQXNCLENBQUM7QUFFaEQsS0FBSyxVQUFVLHFCQUFxQixDQUN2QyxhQUFvQyxFQUNwQyxtQkFBd0M7SUFFeEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtRQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUM7S0FDekQ7SUFFRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBZ0IsQ0FBQztJQUN6RixNQUFNLGFBQWEsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDO0lBQ25ELE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUM7SUFDL0MsTUFBTSxXQUFXLEdBQUcsYUFBYSxDQUFDLFlBQVksQ0FBQztJQUUvQyxNQUFNLGVBQWUsR0FBRyxNQUFNLDRDQUFtQixDQUFDLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztJQUM5RSxJQUFJLENBQUMsZUFBZSxFQUFFO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMscUNBQXFDLENBQUMsQ0FBQztLQUMxRDtJQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sbUNBQWUsQ0FBQyxlQUFlLENBQUMsQ0FB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QUFFLGVBQWUsRUFDakMsWUFBWSxFQUFFLFdBQVcsRUFDekIsWUFBWSxFQUFFLFdBQVcsRUFDekIsV0FBVyxFQUFFLGFBQWEsRUFDMUIsZ0JBQWdCLEVBQUUsZUFBZSxFQUNqQyxZQUFZLEVBQUUsV0FBVyxFQUN6QixZQUFZLEVBQUUsV0FBVyxFQUN6Qix3QkFBd0IsRUFBRSx1QkFBdUIsRUFDakQsZUFBZSxFQUFFLGNBQWMsRUFDL0IsY0FBYyxFQUFFLGFBQWEsRUFDN0IsYUFBYSxFQUFFLFlBQVksRUFDM0Isb0JBQW9CLEVBQUUsbUJBQW1CLEVBQ3pDLGdCQUFnQixFQUFFLGVBQWUsRUFDakMsYUFBYSxFQUFFLEVBQUUsRUFDakIsYUFBYSxFQUFFLEVBQUUsRUFDakIsa0JBQWtCLEVBQUUsaUJBQWlCLEVBQ3JDLHNCQUFzQixFQUFFLEVBQUUsR0FDN0IsQ0FBQztJQUVGLFNBQVM7SUFDVCxNQUFNLHVDQUFpQixDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFN0MsY0FBYztJQUNkLE1BQU0sMkNBQW1CLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUUvQyxTQUFTO0lBQ1QsTUFBTSw4QkFBYSxDQUFDLG1CQUFtQixDQUFDLENBQUM7SUFFekMsVUFBVTtJQUNWLE1BQU0sZ0NBQWMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBRTFDLE9BQU8sbUJBQW1CLENBQUM7QUFDL0IsQ0FBQztBQWpMRCxzREFpTEMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuXG5pbXBvcnQge1xuICAgIEJ1aWxkQ29tbWFuZE9wdGlvbnMsXG4gICAgQnVpbGRDb25maWcsXG4gICAgQnVpbGRDb25maWdJbnRlcm5hbCxcbiAgICBQYWNrYWdlSnNvbkxpa2UsXG4gICAgUHJvamVjdENvbmZpZ0ludGVybmFsXG59IGZyb20gJy4uL21vZGVscyc7XG5pbXBvcnQgeyBpc0luRm9sZGVyLCBpc1NhbWVQYXRocyB9IGZyb20gJy4uL3V0aWxzJztcblxuaW1wb3J0IHsgZmluZEJ1aWxkVHNjb25maWdGaWxlIH0gZnJvbSAnLi9maW5kLWJ1aWxkLXRzY29uZmlnLWZpbGUnO1xuaW1wb3J0IHsgZmluZE5vZGVNb2R1bGVzUGF0aCB9IGZyb20gJy4vZmluZC1ub2RlLW1vZHVsZXMtcGF0aCc7XG5pbXBvcnQgeyBmaW5kUGFja2FnZUpzb25QYXRoIH0gZnJvbSAnLi9maW5kLXBhY2thZ2UtanNvbi1wYXRoJztcbmltcG9ydCB7IHBhcnNlVHNKc29uQ29uZmlnRmlsZUNvbnRlbnQgfSBmcm9tICcuL3BhcnNlLXRzLWpzb24tY29uZmlnLWZpbGUtY29udGVudCc7XG5pbXBvcnQgeyBwcmVwYXJlQXNzZXRFbnRyaWVzIH0gZnJvbSAnLi9wcmVwYXJlLWFzc2V0LWVudHJpZXMnO1xuaW1wb3J0IHsgcHJlcGFyZUJhbm5lclRleHQgfSBmcm9tICcuL3ByZXBhcmUtYmFubmVyLXRleHQnO1xuaW1wb3J0IHsgcHJlcGFyZVNjcmlwdHMgfSBmcm9tICcuL3ByZXBhcmUtc2NyaXB0cyc7XG5pbXBvcnQgeyBwcmVwYXJlU3R5bGVzIH0gZnJvbSAnLi9wcmVwYXJlLXN0eWxlcyc7XG5pbXBvcnQgeyByZWFkUGFja2FnZUpzb24gfSBmcm9tICcuL3JlYWQtcGFja2FnZS1qc29uJztcblxuY29uc3QgdmVyc2lvblBsYWNlaG9sZGVyUmVnZXggPSAvMFxcLjBcXC4wLVBMQUNFSE9MREVSL2k7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0b0J1aWxkQWN0aW9uSW50ZXJuYWwoXG4gICAgcHJvamVjdENvbmZpZzogUHJvamVjdENvbmZpZ0ludGVybmFsLFxuICAgIGJ1aWxkQ29tbWFuZE9wdGlvbnM6IEJ1aWxkQ29tbWFuZE9wdGlvbnNcbik6IFByb21pc2U8QnVpbGRDb25maWdJbnRlcm5hbD4ge1xuICAgIGlmICghcHJvamVjdENvbmZpZy50YXNrcyB8fCAhcHJvamVjdENvbmZpZy50YXNrcy5idWlsZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGJ1aWxkIGFjdGlvbnMgaW4gY29uZmlndXJhdGlvbi4nKTtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZENvbmZpZyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkocHJvamVjdENvbmZpZy50YXNrcy5idWlsZCkpIGFzIEJ1aWxkQ29uZmlnO1xuICAgIGNvbnN0IHdvcmtzcGFjZVJvb3QgPSBwcm9qZWN0Q29uZmlnLl93b3Jrc3BhY2VSb290O1xuICAgIGNvbnN0IHByb2plY3RSb290ID0gcHJvamVjdENvbmZpZy5fcHJvamVjdFJvb3Q7XG4gICAgY29uc3QgcHJvamVjdE5hbWUgPSBwcm9qZWN0Q29uZmlnLl9wcm9qZWN0TmFtZTtcblxuICAgIGNvbnN0IHBhY2thZ2VKc29uUGF0aCA9IGF3YWl0IGZpbmRQYWNrYWdlSnNvblBhdGgocHJvamVjdFJvb3QsIHdvcmtzcGFjZVJvb3QpO1xuICAgIGlmICghcGFja2FnZUpzb25QYXRoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGRldGVjdCBwYWNrYWdlLmpzb24gZmlsZS4nKTtcbiAgICB9XG4gICAgY29uc3QgcGFja2FnZUpzb24gPSBhd2FpdCByZWFkUGFja2FnZUpzb24ocGFja2FnZUpzb25QYXRoKTtcblxuICAgIGNvbnN0IHJvb3RQYWNrYWdlSnNvblBhdGggPSBhd2FpdCBmaW5kUGFja2FnZUpzb25QYXRoKG51bGwsIHdvcmtzcGFjZVJvb3QpO1xuICAgIGxldCByb290UGFja2FnZUpzb246IFBhY2thZ2VKc29uTGlrZSB8IG51bGwgPSBudWxsO1xuICAgIGlmIChyb290UGFja2FnZUpzb25QYXRoKSB7XG4gICAgICAgIHJvb3RQYWNrYWdlSnNvbiA9IGF3YWl0IHJlYWRQYWNrYWdlSnNvbihyb290UGFja2FnZUpzb25QYXRoKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYWNrYWdlTmFtZSA9IHBhY2thZ2VKc29uLm5hbWU7XG4gICAgY29uc3Qgc2xhc2hJbmRleCA9IHBhY2thZ2VOYW1lLmluZGV4T2YoJy8nKTtcbiAgICBsZXQgcGFja2FnZVNjb3BlOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICBsZXQgcGFja2FnZU5hbWVXaXRob3V0U2NvcGUgPSBwYWNrYWdlTmFtZTtcblxuICAgIGlmIChzbGFzaEluZGV4ID4gLTEgJiYgcGFja2FnZU5hbWUuc3RhcnRzV2l0aCgnQCcpKSB7XG4gICAgICAgIHBhY2thZ2VTY29wZSA9IHBhY2thZ2VOYW1lLnN1YnN0cigwLCBzbGFzaEluZGV4KTtcbiAgICAgICAgcGFja2FnZU5hbWVXaXRob3V0U2NvcGUgPSBwYWNrYWdlTmFtZS5zdWJzdHIoc2xhc2hJbmRleCArIDEpO1xuICAgIH1cblxuICAgIGxldCBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuICAgIGlmIChidWlsZENvbW1hbmRPcHRpb25zLnZlcnNpb24pIHtcbiAgICAgICAgcGFja2FnZVZlcnNpb24gPSBidWlsZENvbW1hbmRPcHRpb25zLnZlcnNpb247XG4gICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgIXBhY2thZ2VKc29uLnZlcnNpb24gfHxcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLnZlcnNpb24gPT09ICcwLjAuMCcgfHxcbiAgICAgICAgICAgIHBhY2thZ2VKc29uLnZlcnNpb24gPT09ICdbUExBQ0VIT0xERVJdJyB8fFxuICAgICAgICAgICAgdmVyc2lvblBsYWNlaG9sZGVyUmVnZXgudGVzdChwYWNrYWdlSnNvbi52ZXJzaW9uKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIGlmIChyb290UGFja2FnZUpzb24gJiYgcm9vdFBhY2thZ2VKc29uLnZlcnNpb24pIHtcbiAgICAgICAgICAgICAgICBwYWNrYWdlVmVyc2lvbiA9IHJvb3RQYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RoZSBwYWNrYWdlIHZlcnNpb24gY291bGQgbm90IGJlIGRldGVjdGVkLicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcGFja2FnZVZlcnNpb24gPSBwYWNrYWdlSnNvbi52ZXJzaW9uO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGV0IG5lc3RlZFBhY2thZ2UgPSBmYWxzZTtcblxuICAgIGlmIChwYWNrYWdlTmFtZS5zcGxpdCgnLycpLmxlbmd0aCA+IDIgfHwgKCFwYWNrYWdlTmFtZS5zdGFydHNXaXRoKCdAJykgJiYgcGFja2FnZU5hbWUuc3BsaXQoJy8nKS5sZW5ndGggPj0gMikpIHtcbiAgICAgICAgbmVzdGVkUGFja2FnZSA9IHRydWU7XG4gICAgfVxuXG4gICAgbGV0IG91dHB1dFBhdGhBYnM6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuXG4gICAgaWYgKGJ1aWxkQ29uZmlnLm91dHB1dFBhdGgpIHtcbiAgICAgICAgY29uc3QgY29uZmlnRXJyb3JMb2NhdGlvbiA9IGBwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0ub3V0cHV0UGF0aGA7XG4gICAgICAgIGlmIChwYXRoLmlzQWJzb2x1dGUoYnVpbGRDb25maWcub3V0cHV0UGF0aCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2NvbmZpZ0Vycm9yTG9jYXRpb259JyBtdXN0IGJlIHJlbGF0aXZlIHBhdGguYCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRwdXRQYXRoQWJzID0gcGF0aC5yZXNvbHZlKHByb2plY3RSb290LCBidWlsZENvbmZpZy5vdXRwdXRQYXRoKTtcblxuICAgICAgICBpZiAoaXNTYW1lUGF0aHMod29ya3NwYWNlUm9vdCwgb3V0cHV0UGF0aEFicykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2NvbmZpZ0Vycm9yTG9jYXRpb259JyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBhcyB3b3Jrc3BhY2Ugcm9vdCBkaXJlY3RvcnkuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNTYW1lUGF0aHMocHJvamVjdFJvb3QsIG91dHB1dFBhdGhBYnMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtjb25maWdFcnJvckxvY2F0aW9ufScgbXVzdCBub3QgYmUgdGhlIHNhbWUgYXMgcHJvamVjdCByb290IGRpcmVjdG9yeS5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChvdXRwdXRQYXRoQWJzID09PSBwYXRoLnBhcnNlKG91dHB1dFBhdGhBYnMpLnJvb3QpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVGhlICcke2NvbmZpZ0Vycm9yTG9jYXRpb259JyBtdXN0IG5vdCBiZSB0aGUgc2FtZSBhcyBzeXN0ZW0gcm9vdCBkaXJlY3RvcnkuYCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwcm9qZWN0Um9vdFJvb3QgPSBwYXRoLnBhcnNlKHByb2plY3RSb290KS5yb290O1xuICAgICAgICBpZiAob3V0cHV0UGF0aEFicyA9PT0gcHJvamVjdFJvb3RSb290KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSAnJHtjb25maWdFcnJvckxvY2F0aW9ufScgbXVzdCBub3QgYmUgdGhlIHNhbWUgYXMgc3lzdGVtIHJvb3QgZGlyZWN0b3J5LmApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSW5Gb2xkZXIob3V0cHV0UGF0aEFicywgd29ya3NwYWNlUm9vdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICBgVGhlIHdvcmtzcGFjZSByb290IGZvbGRlciBtdXN0IG5vdCBiZSBpbnNpZGUgb3V0cHV0IGRpcmVjdG9yeS4gQ2hhbmdlIG91dHB1dFBhdGggaW4gJ3Byb2plY3RzWyR7cHJvamVjdE5hbWV9XS5vdXRwdXRQYXRoJy5gXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGlzSW5Gb2xkZXIob3V0cHV0UGF0aEFicywgcHJvamVjdFJvb3QpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgYFRoZSBwcm9qZWN0IHJvb3QgZm9sZGVyIG11c3Qgbm90IGJlIGluc2lkZSBvdXRwdXQgZGlyZWN0b3J5LiBDaGFuZ2Ugb3V0cHV0UGF0aCBpbiAncHJvamVjdHNbJHtwcm9qZWN0TmFtZX1dLm91dHB1dFBhdGgnLmBcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICBsZXQgdHNDb25maWdQYXRoOiBzdHJpbmcgfCBudWxsID0gbnVsbDtcbiAgICAgICAgaWYgKGJ1aWxkQ29uZmlnLnNjcmlwdCAmJiBidWlsZENvbmZpZy5zY3JpcHQudHNDb25maWcpIHtcbiAgICAgICAgICAgIHRzQ29uZmlnUGF0aCA9IHBhdGgucmVzb2x2ZShwcm9qZWN0Um9vdCwgYnVpbGRDb25maWcuc2NyaXB0LnRzQ29uZmlnKTtcbiAgICAgICAgfSBlbHNlIGlmIChidWlsZENvbmZpZy5zY3JpcHQpIHtcbiAgICAgICAgICAgIHRzQ29uZmlnUGF0aCA9IGF3YWl0IGZpbmRCdWlsZFRzY29uZmlnRmlsZShwcm9qZWN0Um9vdCwgd29ya3NwYWNlUm9vdCk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgb3V0cHV0UGF0aDogc3RyaW5nIHwgbnVsbCA9IG51bGw7XG4gICAgICAgIGlmICh0c0NvbmZpZ1BhdGgpIHtcbiAgICAgICAgICAgIGNvbnN0IHRzQ29tcGlsZXJDb25maWcgPSBwYXJzZVRzSnNvbkNvbmZpZ0ZpbGVDb250ZW50KHRzQ29uZmlnUGF0aCk7XG4gICAgICAgICAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB0c0NvbXBpbGVyQ29uZmlnLm9wdGlvbnM7XG4gICAgICAgICAgICBpZiAoY29tcGlsZXJPcHRpb25zLm91dERpcikge1xuICAgICAgICAgICAgICAgIG91dHB1dFBhdGggPSBwYXRoLmlzQWJzb2x1dGUoY29tcGlsZXJPcHRpb25zLm91dERpcilcbiAgICAgICAgICAgICAgICAgICAgPyBwYXRoLnJlc29sdmUoY29tcGlsZXJPcHRpb25zLm91dERpcilcbiAgICAgICAgICAgICAgICAgICAgOiBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHRzQ29uZmlnUGF0aCksIGNvbXBpbGVyT3B0aW9ucy5vdXREaXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0cHV0UGF0aCA9IHBhdGgucmVzb2x2ZSh3b3Jrc3BhY2VSb290LCBgZGlzdC9wYWNrYWdlcy8ke3BhY2thZ2VOYW1lV2l0aG91dFNjb3BlfWApO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG91dHB1dFBhdGggJiYgIWlzU2FtZVBhdGhzKHByb2plY3RSb290LCBvdXRwdXRQYXRoKSAmJiAhaXNJbkZvbGRlcihvdXRwdXRQYXRoLCBwcm9qZWN0Um9vdCkpIHtcbiAgICAgICAgICAgIG91dHB1dFBhdGhBYnMgPSBvdXRwdXRQYXRoO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCFvdXRwdXRQYXRoQWJzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUaGUgb3V0cHV0UGF0aCBjb3VsZCBub3QgYmUgYXV0b21hdGljYWxseSBkZXRlY3RlZC4gU2V0IHZhbHVlIGluICdwcm9qZWN0c1ske3Byb2plY3ROYW1lfV0udGFza3MuYnVpbGQub3V0cHV0UGF0aCcgbWFudWFsbHkuYFxuICAgICAgICApO1xuICAgIH1cblxuICAgIGxldCBwYWNrYWdlSnNvbk91dERpcjogc3RyaW5nO1xuICAgIGlmIChuZXN0ZWRQYWNrYWdlKSB7XG4gICAgICAgIGNvbnN0IG5lc3RlZFBhdGggPSBwYWNrYWdlTmFtZVdpdGhvdXRTY29wZS5zdWJzdHIocGFja2FnZU5hbWVXaXRob3V0U2NvcGUuaW5kZXhPZignLycpICsgMSk7XG4gICAgICAgIHBhY2thZ2VKc29uT3V0RGlyID0gcGF0aC5yZXNvbHZlKG91dHB1dFBhdGhBYnMsIG5lc3RlZFBhdGgpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhY2thZ2VKc29uT3V0RGlyID0gb3V0cHV0UGF0aEFicztcbiAgICB9XG5cbiAgICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSBhd2FpdCBmaW5kTm9kZU1vZHVsZXNQYXRoKHdvcmtzcGFjZVJvb3QpO1xuXG4gICAgY29uc3QgYnVpbGRDb25maWdJbnRlcm5hbDogQnVpbGRDb25maWdJbnRlcm5hbCA9IHtcbiAgICAgICAgLi4uYnVpbGRDb25maWcsXG4gICAgICAgIF9jb25maWc6IHByb2plY3RDb25maWcuX2NvbmZpZyxcbiAgICAgICAgX3dvcmtzcGFjZVJvb3Q6IHdvcmtzcGFjZVJvb3QsXG4gICAgICAgIF9ub2RlTW9kdWxlc1BhdGg6IG5vZGVNb2R1bGVzUGF0aCxcbiAgICAgICAgX3Byb2plY3RSb290OiBwcm9qZWN0Um9vdCxcbiAgICAgICAgX3Byb2plY3ROYW1lOiBwcm9qZWN0TmFtZSxcbiAgICAgICAgX291dHB1dFBhdGg6IG91dHB1dFBhdGhBYnMsXG4gICAgICAgIF9wYWNrYWdlSnNvblBhdGg6IHBhY2thZ2VKc29uUGF0aCxcbiAgICAgICAgX3BhY2thZ2VKc29uOiBwYWNrYWdlSnNvbixcbiAgICAgICAgX3BhY2thZ2VOYW1lOiBwYWNrYWdlTmFtZSxcbiAgICAgICAgX3BhY2thZ2VOYW1lV2l0aG91dFNjb3BlOiBwYWNrYWdlTmFtZVdpdGhvdXRTY29wZSxcbiAgICAgICAgX3BhY2thZ2VWZXJzaW9uOiBwYWNrYWdlVmVyc2lvbixcbiAgICAgICAgX25lc3RlZFBhY2thZ2U6IG5lc3RlZFBhY2thZ2UsXG4gICAgICAgIF9wYWNrYWdlU2NvcGU6IHBhY2thZ2VTY29wZSxcbiAgICAgICAgX3Jvb3RQYWNrYWdlSnNvblBhdGg6IHJvb3RQYWNrYWdlSnNvblBhdGgsXG4gICAgICAgIF9yb290UGFja2FnZUpzb246IHJvb3RQYWNrYWdlSnNvbixcbiAgICAgICAgX2Fzc2V0RW50cmllczogW10sXG4gICAgICAgIF9zdHlsZUVudHJpZXM6IFtdLFxuICAgICAgICBfcGFja2FnZUpzb25PdXREaXI6IHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICBfcGFja2FnZUpzb25FbnRyeVBvaW50OiB7fVxuICAgIH07XG5cbiAgICAvLyBCYW5uZXJcbiAgICBhd2FpdCBwcmVwYXJlQmFubmVyVGV4dChidWlsZENvbmZpZ0ludGVybmFsKTtcblxuICAgIC8vIENvcHkgYXNzZXRzXG4gICAgYXdhaXQgcHJlcGFyZUFzc2V0RW50cmllcyhidWlsZENvbmZpZ0ludGVybmFsKTtcblxuICAgIC8vIFN0eWxlc1xuICAgIGF3YWl0IHByZXBhcmVTdHlsZXMoYnVpbGRDb25maWdJbnRlcm5hbCk7XG5cbiAgICAvLyBTY3JpcHRzXG4gICAgYXdhaXQgcHJlcGFyZVNjcmlwdHMoYnVpbGRDb25maWdJbnRlcm5hbCk7XG5cbiAgICByZXR1cm4gYnVpbGRDb25maWdJbnRlcm5hbDtcbn1cbiJdfQ==