795 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			795 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| "use strict";
 | |
| var __assign = (this && this.__assign) || function () {
 | |
|     __assign = Object.assign || function(t) {
 | |
|         for (var s, i = 1, n = arguments.length; i < n; i++) {
 | |
|             s = arguments[i];
 | |
|             for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
 | |
|                 t[p] = s[p];
 | |
|         }
 | |
|         return t;
 | |
|     };
 | |
|     return __assign.apply(this, arguments);
 | |
| };
 | |
| var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
 | |
|     var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | |
|     if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | |
|     else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | |
|     return c > 3 && r && Object.defineProperty(target, key, r), r;
 | |
| };
 | |
| var __values = (this && this.__values) || function (o) {
 | |
|     var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
 | |
|     if (m) return m.call(o);
 | |
|     return {
 | |
|         next: function () {
 | |
|             if (o && i >= o.length) o = void 0;
 | |
|             return { value: o && o[i++], done: !o };
 | |
|         }
 | |
|     };
 | |
| };
 | |
| var __read = (this && this.__read) || function (o, n) {
 | |
|     var m = typeof Symbol === "function" && o[Symbol.iterator];
 | |
|     if (!m) return o;
 | |
|     var i = m.call(o), r, ar = [], e;
 | |
|     try {
 | |
|         while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
 | |
|     }
 | |
|     catch (error) { e = { error: error }; }
 | |
|     finally {
 | |
|         try {
 | |
|             if (r && !r.done && (m = i["return"])) m.call(i);
 | |
|         }
 | |
|         finally { if (e) throw e.error; }
 | |
|     }
 | |
|     return ar;
 | |
| };
 | |
| var __spread = (this && this.__spread) || function () {
 | |
|     for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
 | |
|     return ar;
 | |
| };
 | |
| var __importDefault = (this && this.__importDefault) || function (mod) {
 | |
|     return (mod && mod.__esModule) ? mod : { "default": mod };
 | |
| };
 | |
| Object.defineProperty(exports, "__esModule", { value: true });
 | |
| var bs_logger_1 = require("bs-logger");
 | |
| var fs_1 = require("fs");
 | |
| var json5_1 = __importDefault(require("json5"));
 | |
| var path_1 = require("path");
 | |
| var semver_1 = __importDefault(require("semver"));
 | |
| var __1 = require("..");
 | |
| var compiler_1 = require("../compiler");
 | |
| var transformers_1 = require("../transformers");
 | |
| var backports_1 = require("../util/backports");
 | |
| var get_package_version_1 = require("../util/get-package-version");
 | |
| var importer_1 = require("../util/importer");
 | |
| var json_1 = require("../util/json");
 | |
| var jsonable_value_1 = require("../util/jsonable-value");
 | |
| var logger_1 = require("../util/logger");
 | |
| var memoize_1 = require("../util/memoize");
 | |
| var messages_1 = require("../util/messages");
 | |
| var normalize_slashes_1 = require("../util/normalize-slashes");
 | |
| var sha1_1 = require("../util/sha1");
 | |
| var ts_error_1 = require("../util/ts-error");
 | |
| var logger = logger_1.rootLogger.child({ namespace: 'config' });
 | |
| exports.MATCH_NOTHING = /a^/;
 | |
| exports.IGNORE_DIAGNOSTIC_CODES = [
 | |
|     6059,
 | |
|     18002,
 | |
|     18003,
 | |
| ];
 | |
| var DiagnosticCodes;
 | |
| (function (DiagnosticCodes) {
 | |
|     DiagnosticCodes[DiagnosticCodes["TsJest"] = 151000] = "TsJest";
 | |
|     DiagnosticCodes[DiagnosticCodes["ConfigModuleOption"] = 151001] = "ConfigModuleOption";
 | |
| })(DiagnosticCodes = exports.DiagnosticCodes || (exports.DiagnosticCodes = {}));
 | |
| var normalizeRegex = function (pattern) {
 | |
|     return pattern ? (typeof pattern === 'string' ? pattern : pattern.source) : undefined;
 | |
| };
 | |
| var toDiagnosticCode = function (code) {
 | |
|     return code ? parseInt(("" + code).trim().replace(/^TS/, ''), 10) || undefined : undefined;
 | |
| };
 | |
| var toDiagnosticCodeList = function (items, into) {
 | |
|     if (into === void 0) { into = []; }
 | |
|     var e_1, _a;
 | |
|     if (!Array.isArray(items))
 | |
|         items = [items];
 | |
|     try {
 | |
|         for (var items_1 = __values(items), items_1_1 = items_1.next(); !items_1_1.done; items_1_1 = items_1.next()) {
 | |
|             var item = items_1_1.value;
 | |
|             if (!item)
 | |
|                 continue;
 | |
|             if (Array.isArray(item)) {
 | |
|                 toDiagnosticCodeList(item, into);
 | |
|                 continue;
 | |
|             }
 | |
|             else if (typeof item === 'string') {
 | |
|                 var children = item.trim().split(/\s*,\s*/g);
 | |
|                 if (children.length > 1) {
 | |
|                     toDiagnosticCodeList(children, into);
 | |
|                     continue;
 | |
|                 }
 | |
|                 item = children[0];
 | |
|             }
 | |
|             if (!item)
 | |
|                 continue;
 | |
|             var code = toDiagnosticCode(item);
 | |
|             if (code && !into.includes(code))
 | |
|                 into.push(code);
 | |
|         }
 | |
|     }
 | |
|     catch (e_1_1) { e_1 = { error: e_1_1 }; }
 | |
|     finally {
 | |
|         try {
 | |
|             if (items_1_1 && !items_1_1.done && (_a = items_1.return)) _a.call(items_1);
 | |
|         }
 | |
|         finally { if (e_1) throw e_1.error; }
 | |
|     }
 | |
|     return into;
 | |
| };
 | |
| var ConfigSet = (function () {
 | |
|     function ConfigSet(jestConfig, parentOptions, parentLogger) {
 | |
|         var _a;
 | |
|         this.parentOptions = parentOptions;
 | |
|         this._jestConfig = jestConfig;
 | |
|         this.logger = parentLogger ? parentLogger.child((_a = {}, _a[bs_logger_1.LogContexts.namespace] = 'config', _a)) : logger;
 | |
|     }
 | |
|     Object.defineProperty(ConfigSet.prototype, "projectPackageJson", {
 | |
|         get: function () {
 | |
|             var packageJson = this.tsJest.packageJson;
 | |
|             if (packageJson && packageJson.kind === 'inline') {
 | |
|                 return packageJson.value;
 | |
|             }
 | |
|             if (packageJson && packageJson.kind === 'file' && packageJson.value) {
 | |
|                 var path = this.resolvePath(packageJson.value);
 | |
|                 if (fs_1.existsSync(path)) {
 | |
|                     return require(path);
 | |
|                 }
 | |
|                 this.logger.warn(messages_1.Errors.UnableToFindProjectRoot);
 | |
|                 return {};
 | |
|             }
 | |
|             var tsJestRoot = path_1.resolve(__dirname, '..', '..');
 | |
|             var pkgPath = path_1.resolve(tsJestRoot, '..', '..', 'package.json');
 | |
|             if (fs_1.existsSync(pkgPath)) {
 | |
|                 return require(pkgPath);
 | |
|             }
 | |
|             if (fs_1.realpathSync(this.rootDir) === fs_1.realpathSync(tsJestRoot)) {
 | |
|                 pkgPath = path_1.resolve(tsJestRoot, 'package.json');
 | |
|                 if (fs_1.existsSync(pkgPath)) {
 | |
|                     return require(pkgPath);
 | |
|                 }
 | |
|             }
 | |
|             this.logger.warn(messages_1.Errors.UnableToFindProjectRoot);
 | |
|             return {};
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "projectDependencies", {
 | |
|         get: function () {
 | |
|             var pkg = this.projectPackageJson;
 | |
|             var names = Object.keys(__assign({}, pkg.optionalDependencies, pkg.peerDependencies, pkg.devDependencies, pkg.dependencies));
 | |
|             return names.reduce(function (map, name) {
 | |
|                 var version = get_package_version_1.getPackageVersion(name);
 | |
|                 if (version)
 | |
|                     map[name] = version;
 | |
|                 return map;
 | |
|             }, {});
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "jest", {
 | |
|         get: function () {
 | |
|             var config = backports_1.backportJestConfig(this.logger, this._jestConfig);
 | |
|             if (this.parentOptions) {
 | |
|                 var globals = config.globals || (config.globals = {});
 | |
|                 globals['ts-jest'] = __assign({}, this.parentOptions, globals['ts-jest']);
 | |
|             }
 | |
|             this.logger.debug({ jestConfig: config }, 'normalized jest config');
 | |
|             return config;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsJest", {
 | |
|         get: function () {
 | |
|             var _this = this;
 | |
|             var parsedConfig = this.jest;
 | |
|             var _a = parsedConfig.globals, globals = _a === void 0 ? {} : _a;
 | |
|             var options = __assign({}, globals['ts-jest']);
 | |
|             var tsConfigOpt = options.tsConfig;
 | |
|             var tsConfig;
 | |
|             if (typeof tsConfigOpt === 'string' || tsConfigOpt == null || tsConfigOpt === true) {
 | |
|                 tsConfig = {
 | |
|                     kind: 'file',
 | |
|                     value: typeof tsConfigOpt === 'string' ? this.resolvePath(tsConfigOpt) : undefined,
 | |
|                 };
 | |
|             }
 | |
|             else if (typeof tsConfigOpt === 'object') {
 | |
|                 tsConfig = {
 | |
|                     kind: 'inline',
 | |
|                     value: tsConfigOpt,
 | |
|                 };
 | |
|             }
 | |
|             var packageJsonOpt = options.packageJson;
 | |
|             var packageJson;
 | |
|             if (typeof packageJsonOpt === 'string' || packageJsonOpt == null || packageJsonOpt === true) {
 | |
|                 packageJson = {
 | |
|                     kind: 'file',
 | |
|                     value: typeof packageJsonOpt === 'string' ? this.resolvePath(packageJsonOpt) : undefined,
 | |
|                 };
 | |
|             }
 | |
|             else if (typeof packageJsonOpt === 'object') {
 | |
|                 packageJson = {
 | |
|                     kind: 'inline',
 | |
|                     value: packageJsonOpt,
 | |
|                 };
 | |
|             }
 | |
|             var transformers = (options.astTransformers || []).map(function (mod) { return _this.resolvePath(mod, { nodeResolve: true }); });
 | |
|             var babelConfigOpt = options.babelConfig;
 | |
|             var babelConfig;
 | |
|             if (typeof babelConfigOpt === 'string' || babelConfigOpt === true) {
 | |
|                 babelConfig = {
 | |
|                     kind: 'file',
 | |
|                     value: babelConfigOpt === true ? undefined : this.resolvePath(babelConfigOpt),
 | |
|                 };
 | |
|             }
 | |
|             else if (babelConfigOpt) {
 | |
|                 babelConfig = {
 | |
|                     kind: 'inline',
 | |
|                     value: babelConfigOpt,
 | |
|                 };
 | |
|             }
 | |
|             var diagnostics;
 | |
|             var _b = options.diagnostics, diagnosticsOpt = _b === void 0 ? true : _b;
 | |
|             var ignoreList = [exports.IGNORE_DIAGNOSTIC_CODES, process.env.TS_JEST_IGNORE_DIAGNOSTICS];
 | |
|             if (diagnosticsOpt === true || diagnosticsOpt == null) {
 | |
|                 diagnostics = { ignoreCodes: [], pretty: true, throws: true };
 | |
|             }
 | |
|             else if (diagnosticsOpt === false) {
 | |
|                 diagnostics = {
 | |
|                     throws: false,
 | |
|                     pretty: true,
 | |
|                     ignoreCodes: [],
 | |
|                     pathRegex: exports.MATCH_NOTHING.source,
 | |
|                 };
 | |
|             }
 | |
|             else {
 | |
|                 ignoreList.push(diagnosticsOpt.ignoreCodes);
 | |
|                 diagnostics = {
 | |
|                     pretty: diagnosticsOpt.pretty == null ? true : !!diagnosticsOpt.pretty,
 | |
|                     ignoreCodes: [],
 | |
|                     pathRegex: normalizeRegex(diagnosticsOpt.pathRegex),
 | |
|                     throws: !diagnosticsOpt.warnOnly,
 | |
|                 };
 | |
|             }
 | |
|             diagnostics.ignoreCodes = toDiagnosticCodeList(ignoreList);
 | |
|             var stringifyContentPathRegex = normalizeRegex(options.stringifyContentPathRegex);
 | |
|             var res = {
 | |
|                 tsConfig: tsConfig,
 | |
|                 packageJson: packageJson,
 | |
|                 babelConfig: babelConfig,
 | |
|                 diagnostics: diagnostics,
 | |
|                 isolatedModules: !!options.isolatedModules,
 | |
|                 compiler: options.compiler || 'typescript',
 | |
|                 transformers: transformers,
 | |
|                 stringifyContentPathRegex: stringifyContentPathRegex,
 | |
|             };
 | |
|             this.logger.debug({ tsJestConfig: res }, 'normalized ts-jest config');
 | |
|             return res;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "typescript", {
 | |
|         get: function () {
 | |
|             return this._typescript.resolved;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsconfig", {
 | |
|         get: function () {
 | |
|             return this._typescript.input;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "versions", {
 | |
|         get: function () {
 | |
|             var modules = ['jest', this.tsJest.compiler];
 | |
|             if (this.tsJest.babelConfig) {
 | |
|                 modules.push('@babel/core', 'babel-jest');
 | |
|             }
 | |
|             return modules.reduce(function (map, name) {
 | |
|                 map[name] = get_package_version_1.getPackageVersion(name) || '-';
 | |
|                 return map;
 | |
|             }, { 'ts-jest': __1.version });
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "_typescript", {
 | |
|         get: function () {
 | |
|             var tsConfig = this.tsJest.tsConfig;
 | |
|             var configFilePath = tsConfig && tsConfig.kind === 'file' ? tsConfig.value : undefined;
 | |
|             var result = this.readTsConfig(tsConfig && tsConfig.kind === 'inline' ? tsConfig.value : undefined, configFilePath, tsConfig == null);
 | |
|             this.raiseDiagnostics(result.resolved.errors, configFilePath);
 | |
|             this.logger.debug({ tsconfig: result }, 'normalized typescript config');
 | |
|             return result;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "raiseDiagnostics", {
 | |
|         get: function () {
 | |
|             var _this = this;
 | |
|             var _a = this, createTsError = _a.createTsError, filterDiagnostics = _a.filterDiagnostics, throws = _a.tsJest.diagnostics.throws, DiagnosticCategory = _a.compilerModule.DiagnosticCategory;
 | |
|             return function (diagnostics, filePath, logger) {
 | |
|                 if (logger === void 0) { logger = _this.logger; }
 | |
|                 var filteredDiagnostics = filterDiagnostics(diagnostics, filePath);
 | |
|                 if (filteredDiagnostics.length === 0)
 | |
|                     return;
 | |
|                 var error = createTsError(filteredDiagnostics);
 | |
|                 var importantCategories = [DiagnosticCategory.Warning, DiagnosticCategory.Error];
 | |
|                 if (throws && filteredDiagnostics.some(function (d) { return importantCategories.includes(d.category); })) {
 | |
|                     throw error;
 | |
|                 }
 | |
|                 logger.warn({ error: error }, error.message);
 | |
|             };
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     ConfigSet.loadConfig = function (base) {
 | |
|         var _a = importer_1.importer.babelCore(messages_1.ImportReasons.BabelJest), OptionManager = _a.OptionManager, loadPartialConfig = _a.loadPartialConfig, version = _a.version;
 | |
|         if (version && semver_1.default.satisfies(version, '>=6 <7')) {
 | |
|             delete base.cwd;
 | |
|         }
 | |
|         if (typeof loadPartialConfig === 'function') {
 | |
|             var partialConfig = loadPartialConfig(base);
 | |
|             if (partialConfig) {
 | |
|                 return partialConfig.options;
 | |
|             }
 | |
|         }
 | |
|         return new OptionManager().init(base);
 | |
|     };
 | |
|     Object.defineProperty(ConfigSet.prototype, "babel", {
 | |
|         get: function () {
 | |
|             var babelConfig = this.tsJest.babelConfig;
 | |
|             if (babelConfig == null) {
 | |
|                 this.logger.debug('babel is disabled');
 | |
|                 return;
 | |
|             }
 | |
|             var base = { cwd: this.cwd };
 | |
|             if (babelConfig.kind === 'file') {
 | |
|                 if (babelConfig.value) {
 | |
|                     base = __assign({}, base, json5_1.default.parse(fs_1.readFileSync(babelConfig.value, 'utf8')));
 | |
|                 }
 | |
|             }
 | |
|             else if (babelConfig.kind === 'inline') {
 | |
|                 base = __assign({}, base, babelConfig.value);
 | |
|             }
 | |
|             var config = ConfigSet.loadConfig(base);
 | |
|             this.logger.debug({ babelConfig: config }, 'normalized babel config');
 | |
|             return config;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "compilerModule", {
 | |
|         get: function () {
 | |
|             return importer_1.importer.typescript(messages_1.ImportReasons.TsJest, this.tsJest.compiler);
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "babelJestTransformer", {
 | |
|         get: function () {
 | |
|             var babel = this.babel;
 | |
|             if (!babel)
 | |
|                 return;
 | |
|             this.logger.debug('creating babel-jest transformer');
 | |
|             return importer_1.importer.babelJest(messages_1.ImportReasons.BabelJest).createTransformer(babel);
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsCompiler", {
 | |
|         get: function () {
 | |
|             return compiler_1.createCompiler(this);
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "astTransformers", {
 | |
|         get: function () {
 | |
|             return __spread(transformers_1.internals, this.tsJest.transformers.map(function (m) { return require(m); }));
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsCustomTransformers", {
 | |
|         get: function () {
 | |
|             var _this = this;
 | |
|             return {
 | |
|                 before: this.astTransformers.map(function (t) { return t.factory(_this); }),
 | |
|             };
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "hooks", {
 | |
|         get: function () {
 | |
|             var hooksFile = process.env.TS_JEST_HOOKS;
 | |
|             if (hooksFile) {
 | |
|                 hooksFile = path_1.resolve(this.cwd, hooksFile);
 | |
|                 return importer_1.importer.tryTheseOr(hooksFile, {});
 | |
|             }
 | |
|             return {};
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "filterDiagnostics", {
 | |
|         get: function () {
 | |
|             var _a = this, ignoreCodes = _a.tsJest.diagnostics.ignoreCodes, shouldReportDiagnostic = _a.shouldReportDiagnostic;
 | |
|             return function (diagnostics, filePath) {
 | |
|                 if (filePath && !shouldReportDiagnostic(filePath))
 | |
|                     return [];
 | |
|                 return diagnostics.filter(function (diagnostic) {
 | |
|                     if (diagnostic.file && diagnostic.file.fileName && !shouldReportDiagnostic(diagnostic.file.fileName)) {
 | |
|                         return false;
 | |
|                     }
 | |
|                     return ignoreCodes.indexOf(diagnostic.code) === -1;
 | |
|                 });
 | |
|             };
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "shouldReportDiagnostic", {
 | |
|         get: function () {
 | |
|             var pathRegex = this.tsJest.diagnostics.pathRegex;
 | |
|             if (pathRegex) {
 | |
|                 var regex_1 = new RegExp(pathRegex);
 | |
|                 return function (file) { return regex_1.test(file); };
 | |
|             }
 | |
|             else {
 | |
|                 return function () { return true; };
 | |
|             }
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "shouldStringifyContent", {
 | |
|         get: function () {
 | |
|             var stringifyContentPathRegex = this.tsJest.stringifyContentPathRegex;
 | |
|             if (stringifyContentPathRegex) {
 | |
|                 var regex_2 = new RegExp(stringifyContentPathRegex);
 | |
|                 return function (file) { return regex_2.test(file); };
 | |
|             }
 | |
|             else {
 | |
|                 return function () { return false; };
 | |
|             }
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "createTsError", {
 | |
|         get: function () {
 | |
|             var _this = this;
 | |
|             var pretty = this.tsJest.diagnostics.pretty;
 | |
|             var formatDiagnostics = pretty
 | |
|                 ? this.compilerModule.formatDiagnosticsWithColorAndContext
 | |
|                 : this.compilerModule.formatDiagnostics;
 | |
|             var diagnosticHost = {
 | |
|                 getNewLine: function () { return '\n'; },
 | |
|                 getCurrentDirectory: function () { return _this.cwd; },
 | |
|                 getCanonicalFileName: function (path) { return path; },
 | |
|             };
 | |
|             return function (diagnostics) {
 | |
|                 var diagnosticText = formatDiagnostics(diagnostics, diagnosticHost);
 | |
|                 var diagnosticCodes = diagnostics.map(function (x) { return x.code; });
 | |
|                 return new ts_error_1.TSError(diagnosticText, diagnosticCodes);
 | |
|             };
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsCacheDir", {
 | |
|         get: function () {
 | |
|             if (!this.jest.cache) {
 | |
|                 logger.debug('file caching disabled');
 | |
|                 return;
 | |
|             }
 | |
|             var cacheSuffix = sha1_1.sha1(json_1.stringify({
 | |
|                 version: this.compilerModule.version,
 | |
|                 digest: this.tsJestDigest,
 | |
|                 dependencies: this.projectDependencies,
 | |
|                 compiler: this.tsJest.compiler,
 | |
|                 compilerOptions: this.typescript.options,
 | |
|                 isolatedModules: this.tsJest.isolatedModules,
 | |
|                 diagnostics: this.tsJest.diagnostics,
 | |
|             }));
 | |
|             var res = path_1.join(this.jest.cacheDirectory, 'ts-jest', cacheSuffix.substr(0, 2), cacheSuffix.substr(2));
 | |
|             logger.debug({ cacheDirectory: res }, 'will use file caching');
 | |
|             return res;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "overriddenCompilerOptions", {
 | |
|         get: function () {
 | |
|             var options = {
 | |
|                 sourceMap: true,
 | |
|                 inlineSourceMap: false,
 | |
|                 inlineSources: true,
 | |
|                 declaration: false,
 | |
|                 noEmit: false,
 | |
|                 outDir: '$$ts-jest$$',
 | |
|                 removeComments: false,
 | |
|                 out: undefined,
 | |
|                 outFile: undefined,
 | |
|                 composite: undefined,
 | |
|                 declarationDir: undefined,
 | |
|                 declarationMap: undefined,
 | |
|                 emitDeclarationOnly: undefined,
 | |
|                 sourceRoot: undefined,
 | |
|             };
 | |
|             if (!this.tsJest.babelConfig) {
 | |
|                 options.module = this.compilerModule.ModuleKind.CommonJS;
 | |
|             }
 | |
|             return options;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "rootDir", {
 | |
|         get: function () {
 | |
|             return path_1.normalize(this.jest.rootDir || this.cwd);
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "cwd", {
 | |
|         get: function () {
 | |
|             return path_1.normalize(this.jest.cwd || process.cwd());
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "isDoctoring", {
 | |
|         get: function () {
 | |
|             return !!process.env.TS_JEST_DOCTOR;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "tsJestDigest", {
 | |
|         get: function () {
 | |
|             return __1.digest;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "jsonValue", {
 | |
|         get: function () {
 | |
|             var jest = __assign({}, this.jest);
 | |
|             var globals = (jest.globals = __assign({}, jest.globals));
 | |
|             delete jest.name;
 | |
|             delete jest.cacheDirectory;
 | |
|             delete globals['ts-jest'];
 | |
|             return new jsonable_value_1.JsonableValue({
 | |
|                 versions: this.versions,
 | |
|                 projectDepVersions: this.projectDependencies,
 | |
|                 digest: this.tsJestDigest,
 | |
|                 transformers: this.astTransformers.map(function (t) { return t.name + "@" + t.version; }),
 | |
|                 jest: jest,
 | |
|                 tsJest: this.tsJest,
 | |
|                 babel: this.babel,
 | |
|                 tsconfig: this.typescript.options,
 | |
|             });
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     Object.defineProperty(ConfigSet.prototype, "cacheKey", {
 | |
|         get: function () {
 | |
|             return this.jsonValue.serialized;
 | |
|         },
 | |
|         enumerable: true,
 | |
|         configurable: true
 | |
|     });
 | |
|     ConfigSet.prototype.makeDiagnostic = function (code, messageText, options) {
 | |
|         if (options === void 0) { options = {}; }
 | |
|         var _a = options.category, category = _a === void 0 ? this.compilerModule.DiagnosticCategory.Warning : _a, file = options.file, start = options.start, length = options.length;
 | |
|         return {
 | |
|             code: code,
 | |
|             messageText: messageText,
 | |
|             category: category,
 | |
|             file: file,
 | |
|             start: start,
 | |
|             length: length,
 | |
|         };
 | |
|     };
 | |
|     ConfigSet.prototype.readTsConfig = function (compilerOptions, resolvedConfigFile, noProject) {
 | |
|         var e_2, _a;
 | |
|         var config = { compilerOptions: {} };
 | |
|         var basePath = normalize_slashes_1.normalizeSlashes(this.rootDir);
 | |
|         var configFileName;
 | |
|         var ts = this.compilerModule;
 | |
|         var input;
 | |
|         if (noProject) {
 | |
|             input = { compilerOptions: __assign({}, compilerOptions) };
 | |
|         }
 | |
|         else {
 | |
|             configFileName = resolvedConfigFile
 | |
|                 ? normalize_slashes_1.normalizeSlashes(resolvedConfigFile)
 | |
|                 : ts.findConfigFile(normalize_slashes_1.normalizeSlashes(this.rootDir), ts.sys.fileExists);
 | |
|             if (configFileName) {
 | |
|                 this.logger.debug({ tsConfigFileName: configFileName }, 'readTsConfig(): reading', configFileName);
 | |
|                 var result_1 = ts.readConfigFile(configFileName, ts.sys.readFile);
 | |
|                 if (result_1.error) {
 | |
|                     return {
 | |
|                         resolved: { errors: [result_1.error], fileNames: [], options: {} },
 | |
|                     };
 | |
|                 }
 | |
|                 config = result_1.config;
 | |
|                 input = __assign({}, result_1.config, { compilerOptions: __assign({}, (result_1.config && result_1.config.compilerOptions), compilerOptions) });
 | |
|                 basePath = normalize_slashes_1.normalizeSlashes(path_1.dirname(configFileName));
 | |
|             }
 | |
|         }
 | |
|         config.compilerOptions = __assign({}, config.compilerOptions, compilerOptions);
 | |
|         var result = ts.parseJsonConfigFileContent(config, ts.sys, basePath, undefined, configFileName);
 | |
|         var forcedOptions = this.overriddenCompilerOptions;
 | |
|         var finalOptions = result.options;
 | |
|         if (finalOptions.target === undefined) {
 | |
|             finalOptions.target = ts.ScriptTarget.ES5;
 | |
|         }
 | |
|         var target = finalOptions.target;
 | |
|         var defaultModule = [ts.ScriptTarget.ES3, ts.ScriptTarget.ES5].includes(target)
 | |
|             ? ts.ModuleKind.CommonJS
 | |
|             : ts.ModuleKind.ESNext;
 | |
|         var moduleValue = finalOptions.module == null ? defaultModule : finalOptions.module;
 | |
|         if ('module' in forcedOptions &&
 | |
|             moduleValue !== forcedOptions.module &&
 | |
|             !(finalOptions.esModuleInterop || finalOptions.allowSyntheticDefaultImports)) {
 | |
|             result.errors.push(this.makeDiagnostic(DiagnosticCodes.ConfigModuleOption, messages_1.Errors.ConfigNoModuleInterop, {
 | |
|                 category: ts.DiagnosticCategory.Message,
 | |
|             }));
 | |
|             if (!('allowSyntheticDefaultImports' in config.compilerOptions)) {
 | |
|                 finalOptions.allowSyntheticDefaultImports = true;
 | |
|             }
 | |
|         }
 | |
|         try {
 | |
|             for (var _b = __values(Object.keys(forcedOptions)), _c = _b.next(); !_c.done; _c = _b.next()) {
 | |
|                 var key = _c.value;
 | |
|                 var val = forcedOptions[key];
 | |
|                 if (val === undefined) {
 | |
|                     delete finalOptions[key];
 | |
|                 }
 | |
|                 else {
 | |
|                     finalOptions[key] = val;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|         catch (e_2_1) { e_2 = { error: e_2_1 }; }
 | |
|         finally {
 | |
|             try {
 | |
|                 if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
 | |
|             }
 | |
|             finally { if (e_2) throw e_2.error; }
 | |
|         }
 | |
|         return { input: input, resolved: result };
 | |
|     };
 | |
|     ConfigSet.prototype.resolvePath = function (inputPath, _a) {
 | |
|         var _b = _a === void 0 ? {} : _a, _c = _b.throwIfMissing, throwIfMissing = _c === void 0 ? true : _c, _d = _b.nodeResolve, nodeResolve = _d === void 0 ? false : _d;
 | |
|         var path = inputPath;
 | |
|         var nodeResolved = false;
 | |
|         if (path.startsWith('<rootDir>')) {
 | |
|             path = path_1.resolve(path_1.join(this.rootDir, path.substr(9)));
 | |
|         }
 | |
|         else if (!path_1.isAbsolute(path)) {
 | |
|             if (!path.startsWith('.') && nodeResolve) {
 | |
|                 try {
 | |
|                     path = require.resolve(path);
 | |
|                     nodeResolved = true;
 | |
|                 }
 | |
|                 catch (_) { }
 | |
|             }
 | |
|             if (!nodeResolved) {
 | |
|                 path = path_1.resolve(this.cwd, path);
 | |
|             }
 | |
|         }
 | |
|         if (!nodeResolved && nodeResolve) {
 | |
|             try {
 | |
|                 path = require.resolve(path);
 | |
|                 nodeResolved = true;
 | |
|             }
 | |
|             catch (_) { }
 | |
|         }
 | |
|         if (throwIfMissing && !fs_1.existsSync(path)) {
 | |
|             throw new Error(messages_1.interpolate(messages_1.Errors.FileNotFound, { inputPath: inputPath, resolvedPath: path }));
 | |
|         }
 | |
|         this.logger.debug({ fromPath: inputPath, toPath: path }, 'resolved path from', inputPath, 'to', path);
 | |
|         return path;
 | |
|     };
 | |
|     ConfigSet.prototype.toJSON = function () {
 | |
|         return this.jsonValue.value;
 | |
|     };
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "projectPackageJson", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "projectDependencies", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "jest", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "tsJest", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "versions", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "_typescript", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "raiseDiagnostics", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "babel", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "compilerModule", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "babelJestTransformer", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "tsCompiler", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "astTransformers", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "tsCustomTransformers", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "hooks", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "filterDiagnostics", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "shouldReportDiagnostic", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "shouldStringifyContent", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "createTsError", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "tsCacheDir", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "overriddenCompilerOptions", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "rootDir", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "cwd", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "tsJestDigest", null);
 | |
|     __decorate([
 | |
|         memoize_1.Memoize()
 | |
|     ], ConfigSet.prototype, "jsonValue", null);
 | |
|     return ConfigSet;
 | |
| }());
 | |
| exports.ConfigSet = ConfigSet;
 |