Skip to content

⬅️ Back to Table of Contents

📄 getProjectConfigFiles.ts

📊 Analysis Summary

Metric Count
🔧 Functions 1
📦 Imports 3
📊 Variables & Constants 2

📚 Table of Contents

🛠️ File Location:

📂 packages/typescript-estree/src/parseSettings/getProjectConfigFiles.ts

📦 Imports

Name Source
debug debug
TSESTreeOptions ../parser-options
ParseSettings ./index

Variables & Constants

Name Type Kind Value Exported
checkedDirectories string[] const [directory]
cached string const `parseSettings.tsconfigMatchCache.get(directory) ??
(fs.existsSync(tsconfigPath) && tsconfigPath)`

Functions

`getProjectConfigFiles(parseSettings: Pick<

ParseSettings,
'filePath' | 'tsconfigMatchCache' | 'tsconfigRootDir'

, project: TSESTreeOptions['project']): string[] | null`

Code
export function getProjectConfigFiles(
  parseSettings: Pick<
    ParseSettings,
    'filePath' | 'tsconfigMatchCache' | 'tsconfigRootDir'
  >,
  project: TSESTreeOptions['project'],
): string[] | null {
  if (project !== true) {
    if (project == null || project === false) {
      return null;
    }
    if (Array.isArray(project)) {
      return project;
    }
    return [project];
  }

  log('Looking for tsconfig.json at or above file: %s', parseSettings.filePath);
  let directory = path.dirname(parseSettings.filePath);
  const checkedDirectories = [directory];

  do {
    log('Checking tsconfig.json path: %s', directory);
    const tsconfigPath = path.join(directory, 'tsconfig.json');
    const cached =
      parseSettings.tsconfigMatchCache.get(directory) ??
      (fs.existsSync(tsconfigPath) && tsconfigPath);

    if (cached) {
      for (const directory of checkedDirectories) {
        parseSettings.tsconfigMatchCache.set(directory, cached);
      }
      return [cached];
    }

    directory = path.dirname(directory);
    checkedDirectories.push(directory);
  } while (
    directory.length > 1 &&
    directory.length >= parseSettings.tsconfigRootDir.length
  );

  throw new Error(
    `project was set to \`true\` but couldn't find any tsconfig.json relative to '${parseSettings.filePath}' within '${parseSettings.tsconfigRootDir}'.`,
  );
}
  • JSDoc:

    /**
     * Checks for a matching TSConfig to a file including its parent directories,
     * permanently caching results under each directory it checks.
     *
     * @remarks
     * We don't (yet!) have a way to attach file watchers on disk, but still need to
     * cache file checks for rapid subsequent calls to fs.existsSync. See discussion
     * in https://github.com/typescript-eslint/typescript-eslint/issues/101.
     */
    

  • Parameters:

  • `parseSettings: Pick< ParseSettings, 'filePath' | 'tsconfigMatchCache' | 'tsconfigRootDir'

    `

  • project: TSESTreeOptions['project']
  • Return Type: string[] | null
  • Calls:
  • Array.isArray
  • log
  • path.dirname
  • path.join
  • parseSettings.tsconfigMatchCache.get
  • fs.existsSync
  • parseSettings.tsconfigMatchCache.set
  • checkedDirectories.push