mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-28 13:13:37 +08:00
Since we have the major version jump, we needed to update quite
a few things to make this work:
1. rollup4 ships with native binaries. We can't check them into
our node_modules for all platforms. Luckily they also ship a
a wasm version. This requires us to adjust the 'binary' path
to `node_modules/@rollup/wasm-node/dist/bin/rollup` instead.
2. rollup4 is more strict when it comes to ES modules vs
CommonJS. We adjust this by renaming the rollup config files.
3. Some plugins got deprecated so we had to replace them with
the newer versions (source maps and terser).
Bug: None
Change-Id: If13d590c8185db6ad85b3992d0a869111909dc8c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5999255
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
209 lines
6.9 KiB
JavaScript
209 lines
6.9 KiB
JavaScript
var isCore = require('is-core-module');
|
|
var fs = require('fs');
|
|
var path = require('path');
|
|
var getHomedir = require('./homedir');
|
|
var caller = require('./caller');
|
|
var nodeModulesPaths = require('./node-modules-paths');
|
|
var normalizeOptions = require('./normalize-options');
|
|
|
|
var realpathFS = process.platform !== 'win32' && fs.realpathSync && typeof fs.realpathSync.native === 'function' ? fs.realpathSync.native : fs.realpathSync;
|
|
|
|
var homedir = getHomedir();
|
|
var defaultPaths = function () {
|
|
return [
|
|
path.join(homedir, '.node_modules'),
|
|
path.join(homedir, '.node_libraries')
|
|
];
|
|
};
|
|
|
|
var defaultIsFile = function isFile(file) {
|
|
try {
|
|
var stat = fs.statSync(file, { throwIfNoEntry: false });
|
|
} catch (e) {
|
|
if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
|
|
throw e;
|
|
}
|
|
return !!stat && (stat.isFile() || stat.isFIFO());
|
|
};
|
|
|
|
var defaultIsDir = function isDirectory(dir) {
|
|
try {
|
|
var stat = fs.statSync(dir, { throwIfNoEntry: false });
|
|
} catch (e) {
|
|
if (e && (e.code === 'ENOENT' || e.code === 'ENOTDIR')) return false;
|
|
throw e;
|
|
}
|
|
return !!stat && stat.isDirectory();
|
|
};
|
|
|
|
var defaultRealpathSync = function realpathSync(x) {
|
|
try {
|
|
return realpathFS(x);
|
|
} catch (realpathErr) {
|
|
if (realpathErr.code !== 'ENOENT') {
|
|
throw realpathErr;
|
|
}
|
|
}
|
|
return x;
|
|
};
|
|
|
|
var maybeRealpathSync = function maybeRealpathSync(realpathSync, x, opts) {
|
|
if (opts && opts.preserveSymlinks === false) {
|
|
return realpathSync(x);
|
|
}
|
|
return x;
|
|
};
|
|
|
|
var defaultReadPackageSync = function defaultReadPackageSync(readFileSync, pkgfile) {
|
|
var body = readFileSync(pkgfile);
|
|
try {
|
|
var pkg = JSON.parse(body);
|
|
return pkg;
|
|
} catch (jsonErr) {}
|
|
};
|
|
|
|
var getPackageCandidates = function getPackageCandidates(x, start, opts) {
|
|
var dirs = nodeModulesPaths(start, opts, x);
|
|
for (var i = 0; i < dirs.length; i++) {
|
|
dirs[i] = path.join(dirs[i], x);
|
|
}
|
|
return dirs;
|
|
};
|
|
|
|
module.exports = function resolveSync(x, options) {
|
|
if (typeof x !== 'string') {
|
|
throw new TypeError('Path must be a string.');
|
|
}
|
|
var opts = normalizeOptions(x, options);
|
|
|
|
var isFile = opts.isFile || defaultIsFile;
|
|
var readFileSync = opts.readFileSync || fs.readFileSync;
|
|
var isDirectory = opts.isDirectory || defaultIsDir;
|
|
var realpathSync = opts.realpathSync || defaultRealpathSync;
|
|
var readPackageSync = opts.readPackageSync || defaultReadPackageSync;
|
|
if (opts.readFileSync && opts.readPackageSync) {
|
|
throw new TypeError('`readFileSync` and `readPackageSync` are mutually exclusive.');
|
|
}
|
|
var packageIterator = opts.packageIterator;
|
|
|
|
var extensions = opts.extensions || ['.js'];
|
|
var includeCoreModules = opts.includeCoreModules !== false;
|
|
var basedir = opts.basedir || path.dirname(caller());
|
|
var parent = opts.filename || basedir;
|
|
|
|
opts.paths = opts.paths || defaultPaths();
|
|
|
|
// ensure that `basedir` is an absolute path at this point, resolving against the process' current working directory
|
|
var absoluteStart = maybeRealpathSync(realpathSync, path.resolve(basedir), opts);
|
|
|
|
if ((/^(?:\.\.?(?:\/|$)|\/|([A-Za-z]:)?[/\\])/).test(x)) {
|
|
var res = path.resolve(absoluteStart, x);
|
|
if (x === '.' || x === '..' || x.slice(-1) === '/') res += '/';
|
|
var m = loadAsFileSync(res) || loadAsDirectorySync(res);
|
|
if (m) return maybeRealpathSync(realpathSync, m, opts);
|
|
} else if (includeCoreModules && isCore(x)) {
|
|
return x;
|
|
} else {
|
|
var n = loadNodeModulesSync(x, absoluteStart);
|
|
if (n) return maybeRealpathSync(realpathSync, n, opts);
|
|
}
|
|
|
|
var err = new Error("Cannot find module '" + x + "' from '" + parent + "'");
|
|
err.code = 'MODULE_NOT_FOUND';
|
|
throw err;
|
|
|
|
function loadAsFileSync(x) {
|
|
var pkg = loadpkg(path.dirname(x));
|
|
|
|
if (pkg && pkg.dir && pkg.pkg && opts.pathFilter) {
|
|
var rfile = path.relative(pkg.dir, x);
|
|
var r = opts.pathFilter(pkg.pkg, x, rfile);
|
|
if (r) {
|
|
x = path.resolve(pkg.dir, r); // eslint-disable-line no-param-reassign
|
|
}
|
|
}
|
|
|
|
if (isFile(x)) {
|
|
return x;
|
|
}
|
|
|
|
for (var i = 0; i < extensions.length; i++) {
|
|
var file = x + extensions[i];
|
|
if (isFile(file)) {
|
|
return file;
|
|
}
|
|
}
|
|
}
|
|
|
|
function loadpkg(dir) {
|
|
if (dir === '' || dir === '/') return;
|
|
if (process.platform === 'win32' && (/^\w:[/\\]*$/).test(dir)) {
|
|
return;
|
|
}
|
|
if ((/[/\\]node_modules[/\\]*$/).test(dir)) return;
|
|
|
|
var pkgfile = path.join(maybeRealpathSync(realpathSync, dir, opts), 'package.json');
|
|
|
|
if (!isFile(pkgfile)) {
|
|
return loadpkg(path.dirname(dir));
|
|
}
|
|
|
|
var pkg = readPackageSync(readFileSync, pkgfile);
|
|
|
|
if (pkg && opts.packageFilter) {
|
|
// v2 will pass pkgfile
|
|
pkg = opts.packageFilter(pkg, /*pkgfile,*/ dir); // eslint-disable-line spaced-comment
|
|
}
|
|
|
|
return { pkg: pkg, dir: dir };
|
|
}
|
|
|
|
function loadAsDirectorySync(x) {
|
|
var pkgfile = path.join(maybeRealpathSync(realpathSync, x, opts), '/package.json');
|
|
if (isFile(pkgfile)) {
|
|
try {
|
|
var pkg = readPackageSync(readFileSync, pkgfile);
|
|
} catch (e) {}
|
|
|
|
if (pkg && opts.packageFilter) {
|
|
// v2 will pass pkgfile
|
|
pkg = opts.packageFilter(pkg, /*pkgfile,*/ x); // eslint-disable-line spaced-comment
|
|
}
|
|
|
|
if (pkg && pkg.main) {
|
|
if (typeof pkg.main !== 'string') {
|
|
var mainError = new TypeError('package “' + pkg.name + '” `main` must be a string');
|
|
mainError.code = 'INVALID_PACKAGE_MAIN';
|
|
throw mainError;
|
|
}
|
|
if (pkg.main === '.' || pkg.main === './') {
|
|
pkg.main = 'index';
|
|
}
|
|
try {
|
|
var m = loadAsFileSync(path.resolve(x, pkg.main));
|
|
if (m) return m;
|
|
var n = loadAsDirectorySync(path.resolve(x, pkg.main));
|
|
if (n) return n;
|
|
} catch (e) {}
|
|
}
|
|
}
|
|
|
|
return loadAsFileSync(path.join(x, '/index'));
|
|
}
|
|
|
|
function loadNodeModulesSync(x, start) {
|
|
var thunk = function () { return getPackageCandidates(x, start, opts); };
|
|
var dirs = packageIterator ? packageIterator(x, start, thunk, opts) : thunk();
|
|
|
|
for (var i = 0; i < dirs.length; i++) {
|
|
var dir = dirs[i];
|
|
if (isDirectory(path.dirname(dir))) {
|
|
var m = loadAsFileSync(dir);
|
|
if (m) return m;
|
|
var n = loadAsDirectorySync(dir);
|
|
if (n) return n;
|
|
}
|
|
}
|
|
}
|
|
};
|