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
JavaScript
;
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==