| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | "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);};Object.defineProperty(exports, "__esModule", { value: true });exports.loadTsconfig = exports.walkForTsConfig = exports.tsConfigLoader = void 0;var path = require("path");var fs = require("fs");// tslint:disable:no-require-importsvar JSON5 = require("json5");var StripBom = require("strip-bom");function tsConfigLoader(_a) {    var getEnv = _a.getEnv, cwd = _a.cwd, _b = _a.loadSync, loadSync = _b === void 0 ? loadSyncDefault : _b;    var TS_NODE_PROJECT = getEnv("TS_NODE_PROJECT");    var TS_NODE_BASEURL = getEnv("TS_NODE_BASEURL");    // tsconfig.loadSync handles if TS_NODE_PROJECT is a file or directory    // and also overrides baseURL if TS_NODE_BASEURL is available.    var loadResult = loadSync(cwd, TS_NODE_PROJECT, TS_NODE_BASEURL);    return loadResult;}exports.tsConfigLoader = tsConfigLoader;function loadSyncDefault(cwd, filename, baseUrl) {    // Tsconfig.loadSync uses path.resolve. This is why we can use an absolute path as filename    var configPath = resolveConfigPath(cwd, filename);    if (!configPath) {        return {            tsConfigPath: undefined,            baseUrl: undefined,            paths: undefined,        };    }    var config = loadTsconfig(configPath);    return {        tsConfigPath: configPath,        baseUrl: baseUrl ||            (config && config.compilerOptions && config.compilerOptions.baseUrl),        paths: config && config.compilerOptions && config.compilerOptions.paths,    };}function resolveConfigPath(cwd, filename) {    if (filename) {        var absolutePath = fs.lstatSync(filename).isDirectory()            ? path.resolve(filename, "./tsconfig.json")            : path.resolve(cwd, filename);        return absolutePath;    }    if (fs.statSync(cwd).isFile()) {        return path.resolve(cwd);    }    var configAbsolutePath = walkForTsConfig(cwd);    return configAbsolutePath ? path.resolve(configAbsolutePath) : undefined;}function walkForTsConfig(directory, existsSync) {    if (existsSync === void 0) { existsSync = fs.existsSync; }    var configPath = path.join(directory, "./tsconfig.json");    if (existsSync(configPath)) {        return configPath;    }    var parentDirectory = path.join(directory, "../");    // If we reached the top    if (directory === parentDirectory) {        return undefined;    }    return walkForTsConfig(parentDirectory, existsSync);}exports.walkForTsConfig = walkForTsConfig;function loadTsconfig(configFilePath, existsSync, readFileSync) {    if (existsSync === void 0) { existsSync = fs.existsSync; }    if (readFileSync === void 0) { readFileSync = function (filename) {        return fs.readFileSync(filename, "utf8");    }; }    if (!existsSync(configFilePath)) {        return undefined;    }    var configString = readFileSync(configFilePath);    var cleanedJson = StripBom(configString);    var config;    try {        config = JSON5.parse(cleanedJson);    }    catch (e) {        throw new Error("".concat(configFilePath, " is malformed ").concat(e.message));    }    var extendedConfig = config.extends;    if (extendedConfig) {        var base = void 0;        if (Array.isArray(extendedConfig)) {            base = extendedConfig.reduce(function (currBase, extendedConfigElement) {                return mergeTsconfigs(currBase, loadTsconfigFromExtends(configFilePath, extendedConfigElement, existsSync, readFileSync));            }, {});        }        else {            base = loadTsconfigFromExtends(configFilePath, extendedConfig, existsSync, readFileSync);        }        return mergeTsconfigs(base, config);    }    return config;}exports.loadTsconfig = loadTsconfig;/** * Intended to be called only from loadTsconfig. * Parameters don't have defaults because they should use the same as loadTsconfig. */function loadTsconfigFromExtends(configFilePath, extendedConfigValue, // eslint-disable-next-line no-shadowexistsSync, readFileSync) {    var _a;    if (typeof extendedConfigValue === "string" &&        extendedConfigValue.indexOf(".json") === -1) {        extendedConfigValue += ".json";    }    var currentDir = path.dirname(configFilePath);    var extendedConfigPath = path.join(currentDir, extendedConfigValue);    if (extendedConfigValue.indexOf("/") !== -1 &&        extendedConfigValue.indexOf(".") !== -1 &&        !existsSync(extendedConfigPath)) {        extendedConfigPath = path.join(currentDir, "node_modules", extendedConfigValue);    }    var config = loadTsconfig(extendedConfigPath, existsSync, readFileSync) || {};    // baseUrl should be interpreted as relative to extendedConfigPath,    // but we need to update it so it is relative to the original tsconfig being loaded    if ((_a = config.compilerOptions) === null || _a === void 0 ? void 0 : _a.baseUrl) {        var extendsDir = path.dirname(extendedConfigValue);        config.compilerOptions.baseUrl = path.join(extendsDir, config.compilerOptions.baseUrl);    }    return config;}function mergeTsconfigs(base, config) {    base = base || {};    config = config || {};    return __assign(__assign(__assign({}, base), config), { compilerOptions: __assign(__assign({}, base.compilerOptions), config.compilerOptions) });}//# sourceMappingURL=tsconfig-loader.js.map
 |