UNPKG

22.9 kBJavaScriptView Raw
1"use strict";
2// tslint:disable:no-unsafe-any
3Object.defineProperty(exports, "__esModule", { value: true });
4const fs_1 = require("fs");
5const path = require("path");
6const typescript_1 = require("typescript");
7const error_models_1 = require("../error-models");
8const utils_1 = require("../utils");
9const load_ts_config_1 = require("./load-ts-config");
10const to_ts_script_target_1 = require("./to-ts-script-target");
11// tslint:disable-next-line:max-func-body-length
12function initTsTranspilationOptions(tsConfigPath, tsTranspilation, i, libConfig) {
13 load_ts_config_1.loadTsConfig(tsConfigPath, tsTranspilation, libConfig);
14 if (!tsTranspilation._tsCompilerConfig) {
15 throw new error_models_1.InternalError("The 'tsTranspilation._tsCompilerConfig' is not set.");
16 }
17 const compilerOptions = tsTranspilation._tsCompilerConfig.options;
18 // scriptTarget
19 let scriptTarget = typescript_1.ScriptTarget.ES2015;
20 if (tsTranspilation.target) {
21 const tsScriptTarget = to_ts_script_target_1.toTsScriptTarget(tsTranspilation.target);
22 if (tsScriptTarget) {
23 scriptTarget = tsScriptTarget;
24 }
25 }
26 else if (compilerOptions.target) {
27 scriptTarget = compilerOptions.target;
28 }
29 // declaration
30 let declaration = true;
31 if (tsTranspilation.declaration === false) {
32 declaration = false;
33 }
34 else if (!tsTranspilation.declaration && !compilerOptions.declaration) {
35 declaration = false;
36 }
37 // tsOutDir
38 const outputRootDir = libConfig._outputPath;
39 let tsOutDir;
40 if (tsTranspilation.outDir) {
41 if (!outputRootDir) {
42 throw new error_models_1.InvalidConfigError(`The 'projects[${libConfig.name || libConfig._index}].outputPath' value is required.`);
43 }
44 tsOutDir =
45 path.resolve(outputRootDir, tsTranspilation.outDir);
46 tsTranspilation._customTsOutDir = tsOutDir;
47 }
48 else {
49 if (compilerOptions.outDir) {
50 tsOutDir = path.isAbsolute(compilerOptions.outDir)
51 ? path.resolve(compilerOptions.outDir)
52 : path.resolve(path.dirname(tsConfigPath), compilerOptions.outDir);
53 }
54 else {
55 if (!outputRootDir) {
56 throw new error_models_1.InvalidConfigError(`The 'projects[${libConfig.name || libConfig._index}].outputPath' value is required.`);
57 }
58 tsOutDir = outputRootDir;
59 tsTranspilation._customTsOutDir = tsOutDir;
60 }
61 }
62 if (compilerOptions.rootDir &&
63 !utils_1.isSamePaths(compilerOptions.rootDir, path.dirname(tsConfigPath))) {
64 const relSubDir = utils_1.isInFolder(compilerOptions.rootDir, path.dirname(tsConfigPath))
65 ? utils_1.normalizeRelativePath(path.relative(compilerOptions.rootDir, path.dirname(tsConfigPath)))
66 : utils_1.normalizeRelativePath(path.relative(path.dirname(tsConfigPath), compilerOptions.rootDir));
67 tsOutDir = path.resolve(tsOutDir, relSubDir);
68 }
69 // typingsOutDir
70 if (tsTranspilation.moveTypingFilesToPackageRoot) {
71 tsTranspilation._typingsOutDir = libConfig._packageJsonOutDir;
72 }
73 else {
74 tsTranspilation._typingsOutDir = tsOutDir;
75 }
76 // detect entry
77 if (libConfig.packageEntryFileForTsTranspilation) {
78 tsTranspilation._detectedEntryName =
79 libConfig.packageEntryFileForTsTranspilation.replace(/\.(js|ts)$/i, '');
80 }
81 else {
82 const flatModuleOutFile = !tsTranspilation.useTsc &&
83 tsTranspilation._angularCompilerOptions &&
84 tsTranspilation._angularCompilerOptions.flatModuleOutFile
85 ? tsTranspilation._angularCompilerOptions.flatModuleOutFile
86 : null;
87 if (flatModuleOutFile) {
88 tsTranspilation._detectedEntryName = flatModuleOutFile.replace(/\.js$/i, '');
89 }
90 else {
91 const tsSrcDir = path.dirname(tsConfigPath);
92 if (fs_1.existsSync(path.resolve(tsSrcDir, 'index.ts'))) {
93 tsTranspilation._detectedEntryName = 'index';
94 }
95 else if (fs_1.existsSync(path.resolve(tsSrcDir, 'main.ts'))) {
96 tsTranspilation._detectedEntryName = 'main';
97 }
98 }
99 }
100 // package entry points
101 if (libConfig._packageJsonOutDir && tsTranspilation._detectedEntryName) {
102 libConfig._packageEntryPoints = libConfig._packageEntryPoints || {};
103 const packageEntryPoints = libConfig._packageEntryPoints;
104 const packageJsonOutDir = libConfig._packageJsonOutDir;
105 const entryFileAbs = path.resolve(tsOutDir, `${tsTranspilation._detectedEntryName}.js`);
106 if ((compilerOptions.module === typescript_1.ModuleKind.ES2015 ||
107 compilerOptions.module === typescript_1.ModuleKind.ESNext) &&
108 (tsTranspilation.target === 'es2015' ||
109 (!tsTranspilation.target && compilerOptions.target === typescript_1.ScriptTarget.ES2015))) {
110 packageEntryPoints.es2015 = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, entryFileAbs));
111 packageEntryPoints.esm2015 = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, entryFileAbs));
112 }
113 else if ((compilerOptions.module === typescript_1.ModuleKind.ES2015 ||
114 compilerOptions.module === typescript_1.ModuleKind.ESNext) &&
115 (tsTranspilation.target === 'es5' ||
116 (!tsTranspilation.target && compilerOptions.target === typescript_1.ScriptTarget.ES5))) {
117 packageEntryPoints.esm5 = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, entryFileAbs));
118 packageEntryPoints.module = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, entryFileAbs));
119 }
120 else if (compilerOptions.module === typescript_1.ModuleKind.UMD ||
121 compilerOptions.module === typescript_1.ModuleKind.CommonJS) {
122 packageEntryPoints.main = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, entryFileAbs));
123 }
124 if (compilerOptions._declaration && tsTranspilation._typingsOutDir) {
125 packageEntryPoints.typings = utils_1.normalizeRelativePath(path.relative(packageJsonOutDir, path.join(tsTranspilation._typingsOutDir, `${tsTranspilation._detectedEntryName}.d.ts`)));
126 }
127 }
128 return Object.assign({}, tsTranspilation, { _index: i, _scriptTarget: scriptTarget, _tsConfigPath: tsConfigPath,
129 // tslint:disable-next-line:no-any
130 _tsConfigJson: tsTranspilation._tsConfigJson, _tsCompilerConfig: tsTranspilation._tsCompilerConfig, _declaration: declaration, _tsOutDirRootResolved: tsOutDir });
131}
132exports.initTsTranspilationOptions = initTsTranspilationOptions;
133//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC10cy10cmFuc3BpbGF0aW9uLW9wdGlvbnMuanMiLCJzb3VyY2VSb290IjoiQzovcHJvamVjdHMvYW5ndWxhci1idWlsZC8iLCJzb3VyY2VzIjpbInNyYy9oZWxwZXJzL2luaXQtdHMtdHJhbnNwaWxhdGlvbi1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwrQkFBK0I7O0FBRS9CLDJCQUFnQztBQUNoQyw2QkFBNkI7QUFFN0IsMkNBQXNEO0FBRXRELGtEQUFvRTtBQUVwRSxvQ0FBMEU7QUFFMUUscURBQWdEO0FBQ2hELCtEQUF5RDtBQUV6RCxnREFBZ0Q7QUFDaEQsb0NBQTJDLFlBQW9CLEVBQzNELGVBQXdELEVBQ3hELENBQVMsRUFDVCxTQUFtQztJQUVuQyw2QkFBWSxDQUFDLFlBQVksRUFBRSxlQUFlLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDdkQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsRUFBRTtRQUNwQyxNQUFNLElBQUksNEJBQWEsQ0FBQyxxREFBcUQsQ0FBQyxDQUFDO0tBQ2xGO0lBQ0QsTUFBTSxlQUFlLEdBQUcsZUFBZSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztJQUVsRSxlQUFlO0lBQ2YsSUFBSSxZQUFZLEdBQWlCLHlCQUFZLENBQUMsTUFBTSxDQUFDO0lBQ3JELElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtRQUN4QixNQUFNLGNBQWMsR0FBRyxzQ0FBZ0IsQ0FBQyxlQUFlLENBQUMsTUFBZ0IsQ0FBQyxDQUFDO1FBQzFFLElBQUksY0FBYyxFQUFFO1lBQ2hCLFlBQVksR0FBRyxjQUFjLENBQUM7U0FDakM7S0FDSjtTQUFNLElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRTtRQUMvQixZQUFZLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQztLQUN6QztJQUVELGNBQWM7SUFDZCxJQUFJLFdBQVcsR0FBRyxJQUFJLENBQUM7SUFDdkIsSUFBSSxlQUFlLENBQUMsV0FBVyxLQUFLLEtBQUssRUFBRTtRQUN2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QUksZUFBZSxDQUFDLGNBQWMsRUFBRTtZQUNoRSxrQkFBa0IsQ0FBQyxPQUFPLEdBQUcsNkJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsRUFDOUUsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxFQUFFLEdBQUcsZUFBZSxDQUFDLGtCQUFrQixPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDakc7S0FDSjtJQUVELHlCQUNPLGVBQWUsSUFDbEIsTUFBTSxFQUFFLENBQUMsRUFDVCxhQUFhLEVBQUUsWUFBWSxFQUMzQixhQUFhLEVBQUUsWUFBWTtRQUMzQixrQ0FBa0M7UUFDbEMsYUFBYSxFQUFFLGVBQWUsQ0FBQyxhQUF1QyxFQUN0RSxpQkFBaUIsRUFBRSxlQUFlLENBQUMsaUJBQWlCLEVBQ3BELFlBQVksRUFBRSxXQUFXLEVBQ3pCLHFCQUFxQixFQUFFLFFBQVEsSUFDakM7QUFDTixDQUFDO0FBakpELGdFQWlKQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIHRzbGludDpkaXNhYmxlOm5vLXVuc2FmZS1hbnlcblxuaW1wb3J0IHsgZXhpc3RzU3luYyB9IGZyb20gJ2ZzJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5cbmltcG9ydCB7IE1vZHVsZUtpbmQsIFNjcmlwdFRhcmdldCB9IGZyb20gJ3R5cGVzY3JpcHQnO1xuXG5pbXBvcnQgeyBJbnRlcm5hbEVycm9yLCBJbnZhbGlkQ29uZmlnRXJyb3IgfSBmcm9tICcuLi9lcnJvci1tb2RlbHMnO1xuaW1wb3J0IHsgTGliUHJvamVjdENvbmZpZ0ludGVybmFsLCBUc1RyYW5zcGlsYXRpb25PcHRpb25zSW50ZXJuYWwgfSBmcm9tICcuLi9pbnRlcmZhY2VzL2ludGVybmFscyc7XG5pbXBvcnQgeyBpc0luRm9sZGVyLCBpc1NhbWVQYXRocywgbm9ybWFsaXplUmVsYXRpdmVQYXRoIH0gZnJvbSAnLi4vdXRpbHMnO1xuXG5pbXBvcnQgeyBsb2FkVHNDb25maWcgfSBmcm9tICcuL2xvYWQtdHMtY29uZmlnJztcbmltcG9ydCB7IHRvVHNTY3JpcHRUYXJnZXQgfSBmcm9tICcuL3RvLXRzLXNjcmlwdC10YXJnZXQnO1xuXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bWF4LWZ1bmMtYm9keS1sZW5ndGhcbmV4cG9ydCBmdW5jdGlvbiBpbml0VHNUcmFuc3BpbGF0aW9uT3B0aW9ucyh0c0NvbmZpZ1BhdGg6IHN0cmluZyxcbiAgICB0c1RyYW5zcGlsYXRpb246IFBhcnRpYWw8VHNUcmFuc3BpbGF0aW9uT3B0aW9uc0ludGVybmFsPixcbiAgICBpOiBudW1iZXIsXG4gICAgbGliQ29uZmlnOiBMaWJQcm9qZWN0Q29uZmlnSW50ZXJuYWwpOlxuICAgIFRzVHJhbnNwaWxhdGlvbk9wdGlvbnNJbnRlcm5hbCB7XG4gICAgbG9hZFRzQ29uZmlnKHRzQ29uZmlnUGF0aCwgdHNUcmFuc3BpbGF0aW9uLCBsaWJDb25maWcpO1xuICAgIGlmICghdHNUcmFuc3BpbGF0aW9uLl90c0NvbXBpbGVyQ29uZmlnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnRlcm5hbEVycm9yKFwiVGhlICd0c1RyYW5zcGlsYXRpb24uX3RzQ29tcGlsZXJDb25maWcnIGlzIG5vdCBzZXQuXCIpO1xuICAgIH1cbiAgICBjb25zdCBjb21waWxlck9wdGlvbnMgPSB0c1RyYW5zcGlsYXRpb24uX3RzQ29tcGlsZXJDb25maWcub3B0aW9ucztcblxuICAgIC8vIHNjcmlwdFRhcmdldFxuICAgIGxldCBzY3JpcHRUYXJnZXQ6IFNjcmlwdFRhcmdldCA9IFNjcmlwdFRhcmdldC5FUzIwMTU7XG4gICAgaWYgKHRzVHJhbnNwaWxhdGlvbi50YXJnZXQpIHtcbiAgICAgICAgY29uc3QgdHNTY3JpcHRUYXJnZXQgPSB0b1RzU2NyaXB0VGFyZ2V0KHRzVHJhbnNwaWxhdGlvbi50YXJnZXQgYXMgc3RyaW5nKTtcbiAgICAgICAgaWYgKHRzU2NyaXB0VGFyZ2V0KSB7XG4gICAgICAgICAgICBzY3JpcHRUYXJnZXQgPSB0c1NjcmlwdFRhcmdldDtcbiAgICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29tcGlsZXJPcHRpb25zLnRhcmdldCkge1xuICAgICAgICBzY3JpcHRUYXJnZXQgPSBjb21waWxlck9wdGlvbnMudGFyZ2V0O1xuICAgIH1cblxuICAgIC8vIGRlY2xhcmF0aW9uXG4gICAgbGV0IGRlY2xhcmF0aW9uID0gdHJ1ZTtcbiAgICBpZiAodHNUcmFuc3BpbGF0aW9uLmRlY2xhcmF0aW9uID09PSBmYWxzZSkge1xuICAgICAgICBkZWNsYXJhdGlvbiA9IGZhbHNlO1xuICAgIH0gZWxzZSBpZiAoIXRzVHJhbnNwaWxhdGlvbi5kZWNsYXJhdGlvbiAmJiAhY29tcGlsZXJPcHRpb25zLmRlY2xhcmF0aW9uKSB7XG4gICAgICAgIGRlY2xhcmF0aW9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gdHNPdXREaXJcbiAgICBjb25zdCBvdXRwdXRSb290RGlyID0gbGliQ29uZmlnLl9vdXRwdXRQYXRoO1xuICAgIGxldCB0c091dERpcjogc3RyaW5nO1xuICAgIGlmICh0c1RyYW5zcGlsYXRpb24ub3V0RGlyKSB7XG4gICAgICAgIGlmICghb3V0cHV0Um9vdERpcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWdFcnJvcihcbiAgICAgICAgICAgICAgICBgVGhlICdwcm9qZWN0c1ske2xpYkNvbmZpZy5uYW1lIHx8IGxpYkNvbmZpZy5faW5kZXh9XS5vdXRwdXRQYXRoJyB2YWx1ZSBpcyByZXF1aXJlZC5gKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRzT3V0RGlyID1cbiAgICAgICAgICAgIHBhdGgucmVzb2x2ZShvdXRwdXRSb290RGlyLCB0c1RyYW5zcGlsYXRpb24ub3V0RGlyKTtcbiAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl9jdXN0b21Uc091dERpciA9IHRzT3V0RGlyO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChjb21waWxlck9wdGlvbnMub3V0RGlyKSB7XG4gICAgICAgICAgICB0c091dERpciA9IHBhdGguaXNBYnNvbHV0ZShjb21waWxlck9wdGlvbnMub3V0RGlyKVxuICAgICAgICAgICAgICAgID8gcGF0aC5yZXNvbHZlKGNvbXBpbGVyT3B0aW9ucy5vdXREaXIpXG4gICAgICAgICAgICAgICAgOiBwYXRoLnJlc29sdmUocGF0aC5kaXJuYW1lKHRzQ29uZmlnUGF0aCksIGNvbXBpbGVyT3B0aW9ucy5vdXREaXIpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCFvdXRwdXRSb290RGlyKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRDb25maWdFcnJvcihcbiAgICAgICAgICAgICAgICAgICAgYFRoZSAncHJvamVjdHNbJHtsaWJDb25maWcubmFtZSB8fCBsaWJDb25maWcuX2luZGV4fV0ub3V0cHV0UGF0aCcgdmFsdWUgaXMgcmVxdWlyZWQuYCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRzT3V0RGlyID0gb3V0cHV0Um9vdERpcjtcbiAgICAgICAgICAgIHRzVHJhbnNwaWxhdGlvbi5fY3VzdG9tVHNPdXREaXIgPSB0c091dERpcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpZiAoY29tcGlsZXJPcHRpb25zLnJvb3REaXIgJiZcbiAgICAgICAgIWlzU2FtZVBhdGhzKGNvbXBpbGVyT3B0aW9ucy5yb290RGlyLCBwYXRoLmRpcm5hbWUodHNDb25maWdQYXRoKSkpIHtcbiAgICAgICAgY29uc3QgcmVsU3ViRGlyID0gaXNJbkZvbGRlcihjb21waWxlck9wdGlvbnMucm9vdERpciwgcGF0aC5kaXJuYW1lKHRzQ29uZmlnUGF0aCkpXG4gICAgICAgICAgICA/IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChcbiAgICAgICAgICAgICAgICBwYXRoLnJlbGF0aXZlKGNvbXBpbGVyT3B0aW9ucy5yb290RGlyLCBwYXRoLmRpcm5hbWUodHNDb25maWdQYXRoKSkpXG4gICAgICAgICAgICA6IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhdGguZGlybmFtZSh0c0NvbmZpZ1BhdGgpLCBjb21waWxlck9wdGlvbnMucm9vdERpcikpO1xuICAgICAgICB0c091dERpciA9IHBhdGgucmVzb2x2ZSh0c091dERpciwgcmVsU3ViRGlyKTtcbiAgICB9XG5cbiAgICAvLyB0eXBpbmdzT3V0RGlyXG4gICAgaWYgKHRzVHJhbnNwaWxhdGlvbi5tb3ZlVHlwaW5nRmlsZXNUb1BhY2thZ2VSb290KSB7XG4gICAgICAgIHRzVHJhbnNwaWxhdGlvbi5fdHlwaW5nc091dERpciA9IGxpYkNvbmZpZy5fcGFja2FnZUpzb25PdXREaXI7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl90eXBpbmdzT3V0RGlyID0gdHNPdXREaXI7XG4gICAgfVxuXG4gICAgLy8gZGV0ZWN0IGVudHJ5XG4gICAgaWYgKGxpYkNvbmZpZy5wYWNrYWdlRW50cnlGaWxlRm9yVHNUcmFuc3BpbGF0aW9uKSB7XG4gICAgICAgIHRzVHJhbnNwaWxhdGlvbi5fZGV0ZWN0ZWRFbnRyeU5hbWUgPVxuICAgICAgICAgICAgbGliQ29uZmlnLnBhY2thZ2VFbnRyeUZpbGVGb3JUc1RyYW5zcGlsYXRpb24ucmVwbGFjZSgvXFwuKGpzfHRzKSQvaSwgJycpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGZsYXRNb2R1bGVPdXRGaWxlID1cbiAgICAgICAgICAgICF0c1RyYW5zcGlsYXRpb24udXNlVHNjICYmXG4gICAgICAgICAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl9hbmd1bGFyQ29tcGlsZXJPcHRpb25zICYmXG4gICAgICAgICAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl9hbmd1bGFyQ29tcGlsZXJPcHRpb25zLmZsYXRNb2R1bGVPdXRGaWxlXG4gICAgICAgICAgICAgICAgPyB0c1RyYW5zcGlsYXRpb24uX2FuZ3VsYXJDb21waWxlck9wdGlvbnMuZmxhdE1vZHVsZU91dEZpbGUgYXMgc3RyaW5nXG4gICAgICAgICAgICAgICAgOiBudWxsO1xuXG4gICAgICAgIGlmIChmbGF0TW9kdWxlT3V0RmlsZSkge1xuICAgICAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl9kZXRlY3RlZEVudHJ5TmFtZSA9IGZsYXRNb2R1bGVPdXRGaWxlLnJlcGxhY2UoL1xcLmpzJC9pLCAnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB0c1NyY0RpciA9IHBhdGguZGlybmFtZSh0c0NvbmZpZ1BhdGgpO1xuICAgICAgICAgICAgaWYgKGV4aXN0c1N5bmMocGF0aC5yZXNvbHZlKHRzU3JjRGlyLCAnaW5kZXgudHMnKSkpIHtcbiAgICAgICAgICAgICAgICB0c1RyYW5zcGlsYXRpb24uX2RldGVjdGVkRW50cnlOYW1lID0gJ2luZGV4JztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXhpc3RzU3luYyhwYXRoLnJlc29sdmUodHNTcmNEaXIsICdtYWluLnRzJykpKSB7XG4gICAgICAgICAgICAgICAgdHNUcmFuc3BpbGF0aW9uLl9kZXRlY3RlZEVudHJ5TmFtZSA9ICdtYWluJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHBhY2thZ2UgZW50cnkgcG9pbnRzXG4gICAgaWYgKGxpYkNvbmZpZy5fcGFja2FnZUpzb25PdXREaXIgJiYgdHNUcmFuc3BpbGF0aW9uLl9kZXRlY3RlZEVudHJ5TmFtZSkge1xuICAgICAgICBsaWJDb25maWcuX3BhY2thZ2VFbnRyeVBvaW50cyA9IGxpYkNvbmZpZy5fcGFja2FnZUVudHJ5UG9pbnRzIHx8IHt9O1xuICAgICAgICBjb25zdCBwYWNrYWdlRW50cnlQb2ludHMgPSBsaWJDb25maWcuX3BhY2thZ2VFbnRyeVBvaW50cztcbiAgICAgICAgY29uc3QgcGFja2FnZUpzb25PdXREaXIgPSBsaWJDb25maWcuX3BhY2thZ2VKc29uT3V0RGlyO1xuXG4gICAgICAgIGNvbnN0IGVudHJ5RmlsZUFicyA9XG4gICAgICAgICAgICBwYXRoLnJlc29sdmUodHNPdXREaXIsIGAke3RzVHJhbnNwaWxhdGlvbi5fZGV0ZWN0ZWRFbnRyeU5hbWV9LmpzYCk7XG5cbiAgICAgICAgaWYgKChjb21waWxlck9wdGlvbnMubW9kdWxlID09PSBNb2R1bGVLaW5kLkVTMjAxNSB8fFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLm1vZHVsZSA9PT0gTW9kdWxlS2luZC5FU05leHQpICYmXG4gICAgICAgICAgICAodHNUcmFuc3BpbGF0aW9uLnRhcmdldCA9PT0gJ2VzMjAxNScgfHxcbiAgICAgICAgICAgICAgICAoIXRzVHJhbnNwaWxhdGlvbi50YXJnZXQgJiYgY29tcGlsZXJPcHRpb25zLnRhcmdldCA9PT0gU2NyaXB0VGFyZ2V0LkVTMjAxNSkpKSB7XG4gICAgICAgICAgICBwYWNrYWdlRW50cnlQb2ludHMuZXMyMDE1ID0gbm9ybWFsaXplUmVsYXRpdmVQYXRoKHBhdGgucmVsYXRpdmUocGFja2FnZUpzb25PdXREaXIsXG4gICAgICAgICAgICAgICAgZW50cnlGaWxlQWJzKSk7XG4gICAgICAgICAgICBwYWNrYWdlRW50cnlQb2ludHMuZXNtMjAxNSA9IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZUFicykpO1xuICAgICAgICB9IGVsc2UgaWYgKChjb21waWxlck9wdGlvbnMubW9kdWxlID09PSBNb2R1bGVLaW5kLkVTMjAxNSB8fFxuICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zLm1vZHVsZSA9PT0gTW9kdWxlS2luZC5FU05leHQpICYmXG4gICAgICAgICAgICAodHNUcmFuc3BpbGF0aW9uLnRhcmdldCA9PT0gJ2VzNScgfHxcbiAgICAgICAgICAgICAgICAoIXRzVHJhbnNwaWxhdGlvbi50YXJnZXQgJiYgY29tcGlsZXJPcHRpb25zLnRhcmdldCA9PT0gU2NyaXB0VGFyZ2V0LkVTNSkpKSB7XG4gICAgICAgICAgICBwYWNrYWdlRW50cnlQb2ludHMuZXNtNSA9IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZUFicykpO1xuICAgICAgICAgICAgcGFja2FnZUVudHJ5UG9pbnRzLm1vZHVsZSA9IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZUFicykpO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbXBpbGVyT3B0aW9ucy5tb2R1bGUgPT09IE1vZHVsZUtpbmQuVU1EIHx8XG4gICAgICAgICAgICBjb21waWxlck9wdGlvbnMubW9kdWxlID09PSBNb2R1bGVLaW5kLkNvbW1vbkpTKSB7XG4gICAgICAgICAgICBwYWNrYWdlRW50cnlQb2ludHMubWFpbiA9IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICAgICAgICAgIGVudHJ5RmlsZUFicykpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbXBpbGVyT3B0aW9ucy5fZGVjbGFyYXRpb24gJiYgdHNUcmFuc3BpbGF0aW9uLl90eXBpbmdzT3V0RGlyKSB7XG4gICAgICAgICAgICBwYWNrYWdlRW50cnlQb2ludHMudHlwaW5ncyA9IG5vcm1hbGl6ZVJlbGF0aXZlUGF0aChwYXRoLnJlbGF0aXZlKHBhY2thZ2VKc29uT3V0RGlyLFxuICAgICAgICAgICAgICAgIHBhdGguam9pbih0c1RyYW5zcGlsYXRpb24uX3R5cGluZ3NPdXREaXIsIGAke3RzVHJhbnNwaWxhdGlvbi5fZGV0ZWN0ZWRFbnRyeU5hbWV9LmQudHNgKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4udHNUcmFuc3BpbGF0aW9uLFxuICAgICAgICBfaW5kZXg6IGksXG4gICAgICAgIF9zY3JpcHRUYXJnZXQ6IHNjcmlwdFRhcmdldCxcbiAgICAgICAgX3RzQ29uZmlnUGF0aDogdHNDb25maWdQYXRoLFxuICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6bm8tYW55XG4gICAgICAgIF90c0NvbmZpZ0pzb246IHRzVHJhbnNwaWxhdGlvbi5fdHNDb25maWdKc29uIGFzIHsgW2tleTogc3RyaW5nXTogYW55IH0sXG4gICAgICAgIF90c0NvbXBpbGVyQ29uZmlnOiB0c1RyYW5zcGlsYXRpb24uX3RzQ29tcGlsZXJDb25maWcsXG4gICAgICAgIF9kZWNsYXJhdGlvbjogZGVjbGFyYXRpb24sXG4gICAgICAgIF90c091dERpclJvb3RSZXNvbHZlZDogdHNPdXREaXJcbiAgICB9O1xufVxuIl19
\No newline at end of file