text: // Copyright 2020 The Chromium Authors. All rights reserved.
  // Use of this source code is governed by a BSD-style license that can be
  // found in the LICENSE file.
  
  /**
   * This file contains helpers to load the correct path to various scripts and
   * directories. It is the Node equivalent of devtools_paths.py.
   *
   * Note that not all paths implemented in devtools_paths.py are implemented
   * here. Please add any paths you need that are missing.
   */
  
  const path = require('path');
  const os = require('os');
  
  /**
   * You would think we can use __filename here but we cannot because __filename
   * has any symlinks resolved. This means we can't use it to tell if the user
   * is using the external repo with a standalone build setup because the
   * symlink from chromium/src/third_party/devtools-frontend =>
   * devtools-frontend repo gets resolved by Node before it gives us __filename.
   *
   * Instead we can use process.argv, whose first two arguments are the path to
   * the Node binary, and then the path to the file being executed, but without
   * symlinks being resolved. So if this script gets run in the Chromium dir
   * through a symlink, the path will still contain
   * /path/to/chromium/src/third-party/devtools-frontend/scripts/... - this is
   * NOT the case if we were to use __filename.
   */
  const ABS_PATH_TO_CURRENT_FILE = process.argv[1];
  
  /** Find the root path of the checkout.
  * In the Chromium repository, this is the src/chromium directory.
  * In the external repository, standalone build, this is the devtools-frontend directory.
  * In the external repository, integrated build, this is the src/chromium directory.
  */
  function rootPath() {
    const scriptsPath = path.dirname(ABS_PATH_TO_CURRENT_FILE);
    const devtoolsFrontendPath = path.dirname(scriptsPath);
    const devtoolsFrontendParentPath = path.dirname(devtoolsFrontendPath);
  
    if (path.basename(devtoolsFrontendParentPath) === 'devtools-frontend') {
      // External repository, integrated build
      // So go up two levels to the src/chromium directory
      return path.dirname(path.dirname(devtoolsFrontendParentPath));
    }
  
    // External repository, standalone build
    return devtoolsFrontendPath;
  }
  
  function thirdPartyPath() {
    path.join(rootPath(), 'third_party');
  }
  
  function nodePath() {
    const paths = {
      'darwin': path.join('mac', 'node-darwin-x64', 'bin', 'node'),
      'linux': path.join('linux', 'node-linux-x64', 'bin', 'node'),
      'win32': path.join('win', 'node.exe'),
    };
    return path.join(thirdPartyPath(), 'node', paths[os.platform]);
  }
  
  function devtoolsRootPath() {
    return path.dirname(path.dirname(ABS_PATH_TO_CURRENT_FILE));
  }
  
  function nodeModulesPath() {
    return path.join(devtoolsRootPath(), 'node_modules');
  }
  
  export {thirdPartyPath, nodePath, devtoolsRootPath, nodeModulesPath};
  