mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-28 13:13:37 +08:00
This provides consistency of how imports are order, reducing differences in authored files. Bug: none Change-Id: I45ddd71e3e0004aca32f101cb926101544a34157 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/6218490 Commit-Queue: Nikolay Vitkov <nvitkov@chromium.org> Reviewed-by: Benedikt Meurer <bmeurer@chromium.org>
177 lines
5.4 KiB
JavaScript
177 lines
5.4 KiB
JavaScript
// 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 os = require('os');
|
|
const path = require('path');
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* We can use process.argv[1], which is the path to the file currently being
|
|
* executed without any symlinks resolution. If we assume that file is always in
|
|
* the devtools-frontend repository/directory, we can use that file as the
|
|
* starting point for figuring out if we're in Chromium or not. until we find
|
|
* the scripts directory, at which point we've found this file and can use it
|
|
* for all subsequent logic.
|
|
*
|
|
* e.g. the user executes a script: scripts/test/run_lint_check.mjs
|
|
*
|
|
* process.argv[1] =
|
|
* /full/path/devtools-frontend/src/scripts/test/run_lint_check.mjs
|
|
*/
|
|
const PATH_TO_EXECUTED_FILE = process.argv[1];
|
|
|
|
const _lookUpCaches = new Map([['chromium', null]]);
|
|
/**
|
|
* This function figures out if we're within a chromium directory, and therefore
|
|
* we are in the integrated workflow mode, rather than working in a standalone
|
|
* devtools-frontend repository.
|
|
*/
|
|
function isInChromiumDirectory() {
|
|
const cached = _lookUpCaches.get('chromium');
|
|
if (cached) {
|
|
return cached;
|
|
}
|
|
|
|
const normalizedPath = PATH_TO_EXECUTED_FILE.split(path.sep).join('/');
|
|
const devtoolsPath = 'src/third_party/devtools-frontend';
|
|
const isInChromium = normalizedPath.includes(devtoolsPath);
|
|
const potentialChromiumDir = PATH_TO_EXECUTED_FILE.substring(
|
|
0,
|
|
normalizedPath.indexOf(devtoolsPath),
|
|
);
|
|
const result = {isInChromium, chromiumDirectory: potentialChromiumDir};
|
|
_lookUpCaches.set('chromium', result);
|
|
return result;
|
|
}
|
|
/**
|
|
* Returns the path to the root of the devtools-frontend repository.
|
|
*
|
|
* If we're in Chromium, this will be /path/to/chromium/src/third_party/devtools-frontend/src
|
|
* If it's standalone, it will be /path/to/devtools-frontend
|
|
*/
|
|
function devtoolsRootPath() {
|
|
return path.dirname(__dirname);
|
|
}
|
|
|
|
/**
|
|
* Returns the path to the root of the main repository we're in.
|
|
* if we're in Chromium, this is /path/to/chromium/src
|
|
* if we're in standalone, this is /path/to/devtools-frontend
|
|
*
|
|
* Note this is different to devtoolsRootPath(), which always returns the path
|
|
* to the devtools-frontend source code.
|
|
*/
|
|
function rootPath() {
|
|
const {isInChromium, chromiumDirectory} = isInChromiumDirectory();
|
|
if (isInChromium) {
|
|
return path.join(chromiumDirectory, 'src');
|
|
}
|
|
return devtoolsRootPath();
|
|
}
|
|
|
|
/**
|
|
* Path to the third_party directory. Used because if we're running in Chromium
|
|
* land we need to use e.g. the Node executable from Chromium's third_party
|
|
* directory, not from the devtools-frontend third_party directory.
|
|
*/
|
|
function thirdPartyPath() {
|
|
return path.join(rootPath(), 'third_party');
|
|
}
|
|
|
|
function devToolsThirdPartyPath() {
|
|
const {isInChromium} = isInChromiumDirectory();
|
|
if (isInChromium) {
|
|
return path.join(
|
|
rootPath(),
|
|
'third_party',
|
|
'devtools-frontend',
|
|
'src',
|
|
'third_party',
|
|
);
|
|
}
|
|
return thirdPartyPath();
|
|
}
|
|
|
|
function nodePath() {
|
|
const paths = {
|
|
darwin: path.join(
|
|
process.arch === 'arm64' ? 'mac_arm64' : 'mac',
|
|
process.arch === 'arm64' ? 'node-darwin-arm64' : '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()]);
|
|
}
|
|
|
|
/**
|
|
* The path to the devtools-frontend node_modules folder.
|
|
*/
|
|
function nodeModulesPath() {
|
|
return path.join(devtoolsRootPath(), 'node_modules');
|
|
}
|
|
|
|
function stylelintExecutablePath() {
|
|
return path.join(nodeModulesPath(), 'stylelint', 'bin', 'stylelint.js');
|
|
}
|
|
|
|
function mochaExecutablePath() {
|
|
return path.join(nodeModulesPath(), 'mocha', 'bin', 'mocha');
|
|
}
|
|
|
|
function litAnalyzerExecutablePath() {
|
|
return path.join(nodeModulesPath(), 'lit-analyzer', 'cli.js');
|
|
}
|
|
|
|
/**
|
|
* Computes the path to the toplevel `tsconfig.json`.
|
|
*
|
|
* @returns the path to the toplevel `tsconfig.json`.
|
|
*/
|
|
function tsconfigJsonPath() {
|
|
return path.join(devtoolsRootPath(), 'tsconfig.json');
|
|
}
|
|
|
|
function downloadedChromeBinaryPath() {
|
|
const paths = {
|
|
linux: path.join('chrome-linux', 'chrome'),
|
|
darwin: path.join(
|
|
'chrome-mac',
|
|
'Google Chrome for Testing.app',
|
|
'Contents',
|
|
'MacOS',
|
|
'Google Chrome for Testing',
|
|
),
|
|
win32: path.join('chrome-win', 'chrome.exe'),
|
|
};
|
|
return path.join(devToolsThirdPartyPath(), 'chrome', paths[os.platform()]);
|
|
}
|
|
|
|
module.exports = {
|
|
devtoolsRootPath,
|
|
downloadedChromeBinaryPath,
|
|
litAnalyzerExecutablePath,
|
|
mochaExecutablePath,
|
|
nodeModulesPath,
|
|
nodePath,
|
|
stylelintExecutablePath,
|
|
thirdPartyPath,
|
|
tsconfigJsonPath,
|
|
};
|