123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.getExtensionDescription = exports.ExplorerBase = void 0;
- const env_paths_1 = __importDefault(require("env-paths"));
- const os_1 = __importDefault(require("os"));
- const path_1 = __importDefault(require("path"));
- const util_js_1 = require("./util.js");
- /**
- * @internal
- */
- class ExplorerBase {
- #loadingMetaConfig = false;
- config;
- loadCache;
- searchCache;
- constructor(options) {
- this.config = options;
- if (options.cache) {
- this.loadCache = new Map();
- this.searchCache = new Map();
- }
- this.#validateConfig();
- }
- set loadingMetaConfig(value) {
- this.#loadingMetaConfig = value;
- }
- #validateConfig() {
- const config = this.config;
- for (const place of config.searchPlaces) {
- const extension = path_1.default.extname(place);
- const loader = this.config.loaders[extension || 'noExt'] ??
- this.config.loaders['default'];
- if (loader === undefined) {
- throw new Error(`Missing loader for ${getExtensionDescription(place)}.`);
- }
- if (typeof loader !== 'function') {
- throw new Error(`Loader for ${getExtensionDescription(place)} is not a function: Received ${typeof loader}.`);
- }
- }
- }
- clearLoadCache() {
- if (this.loadCache) {
- this.loadCache.clear();
- }
- }
- clearSearchCache() {
- if (this.searchCache) {
- this.searchCache.clear();
- }
- }
- clearCaches() {
- this.clearLoadCache();
- this.clearSearchCache();
- }
- toCosmiconfigResult(filepath, config) {
- if (config === null) {
- return null;
- }
- if (config === undefined) {
- return { filepath, config: undefined, isEmpty: true };
- }
- if (this.config.applyPackagePropertyPathToConfiguration ||
- this.#loadingMetaConfig) {
- const packageProp = this.config.packageProp ?? this.config.moduleName;
- config = (0, util_js_1.getPropertyByPath)(config, packageProp);
- }
- if (config === undefined) {
- return { filepath, config: undefined, isEmpty: true };
- }
- return { config, filepath };
- }
- validateImports(containingFilePath, imports, importStack) {
- const fileDirectory = path_1.default.dirname(containingFilePath);
- for (const importPath of imports) {
- if (typeof importPath !== 'string') {
- throw new Error(`${containingFilePath}: Key $import must contain a string or a list of strings`);
- }
- const fullPath = path_1.default.resolve(fileDirectory, importPath);
- if (fullPath === containingFilePath) {
- throw new Error(`Self-import detected in ${containingFilePath}`);
- }
- const idx = importStack.indexOf(fullPath);
- if (idx !== -1) {
- throw new Error(`Circular import detected:
- ${[...importStack, fullPath]
- .map((path, i) => `${i + 1}. ${path}`)
- .join('\n')} (same as ${idx + 1}.)`);
- }
- }
- }
- getSearchPlacesForDir(dir, globalConfigPlaces) {
- return (dir.isGlobalConfig ? globalConfigPlaces : this.config.searchPlaces).map((place) => path_1.default.join(dir.path, place));
- }
- getGlobalConfigDir() {
- return (0, env_paths_1.default)(this.config.moduleName, { suffix: '' }).config;
- }
- *getGlobalDirs(startDir) {
- const stopDir = path_1.default.resolve(this.config.stopDir ?? os_1.default.homedir());
- yield { path: startDir, isGlobalConfig: false };
- let currentDir = startDir;
- while (currentDir !== stopDir) {
- const parentDir = path_1.default.dirname(currentDir);
- /* istanbul ignore if -- @preserve */
- if (parentDir === currentDir) {
- // we're probably at the root of the directory structure
- break;
- }
- yield { path: parentDir, isGlobalConfig: false };
- currentDir = parentDir;
- }
- yield { path: this.getGlobalConfigDir(), isGlobalConfig: true };
- }
- }
- exports.ExplorerBase = ExplorerBase;
- /**
- * @internal
- */
- function getExtensionDescription(extension) {
- /* istanbul ignore next -- @preserve */
- return extension ? `extension "${extension}"` : 'files without extensions';
- }
- exports.getExtensionDescription = getExtensionDescription;
- //# sourceMappingURL=ExplorerBase.js.map
|