mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-10-10 05:35:05 +08:00
This also adds Python-2.0 to the list of accepted licenses. Lastly, it fixes a bug where the package.json files were incorrectly reordered. For the `exports` of a particular package, the order that the entrypoints are defined in is crucial. Therefore, we should not alter the order of entrypoints and instead maintain the originally defined ordering. We can use an `OrderedDict` to ensure that Python always loads the JSON files in the same order. DISABLE_THIRD_PARTY_CHECK=NPM update R=jacktfranklin@chromium.org Bug: none Change-Id: I5a309782de6015edea6ba3b502aa0db1f008d973 Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2692909 Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org> Reviewed-by: Jack Franklin <jacktfranklin@chromium.org> Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
const path = require('path');
|
|
const url = require('url');
|
|
|
|
const formattedImport = async file => {
|
|
if (path.isAbsolute(file)) {
|
|
try {
|
|
return await import(url.pathToFileURL(file));
|
|
} catch (err) {
|
|
// This is a hack created because ESM in Node.js (at least in Node v15.5.1) does not emit
|
|
// the location of the syntax error in the error thrown.
|
|
// This is problematic because the user can't see what file has the problem,
|
|
// so we add the file location to the error.
|
|
// This `if` should be removed once Node.js fixes the problem.
|
|
if (
|
|
err instanceof SyntaxError &&
|
|
err.message &&
|
|
err.stack &&
|
|
!err.stack.includes(file)
|
|
) {
|
|
const newErrorWithFilename = new SyntaxError(err.message);
|
|
newErrorWithFilename.stack = err.stack.replace(
|
|
/^SyntaxError/,
|
|
`SyntaxError[ @${file} ]`
|
|
);
|
|
throw newErrorWithFilename;
|
|
}
|
|
throw err;
|
|
}
|
|
}
|
|
return import(file);
|
|
};
|
|
|
|
exports.requireOrImport = async file => {
|
|
if (path.extname(file) === '.mjs') {
|
|
return formattedImport(file);
|
|
}
|
|
// This is currently the only known way of figuring out whether a file is CJS or ESM.
|
|
// If Node.js or the community establish a better procedure for that, we can fix this code.
|
|
// Another option here would be to always use `import()`, as this also supports CJS, but I would be
|
|
// wary of using it for _all_ existing test files, till ESM is fully stable.
|
|
try {
|
|
return require(file);
|
|
} catch (err) {
|
|
if (err.code === 'ERR_REQUIRE_ESM') {
|
|
return formattedImport(file);
|
|
} else {
|
|
throw err;
|
|
}
|
|
}
|
|
};
|
|
|
|
exports.loadFilesAsync = async (files, preLoadFunc, postLoadFunc) => {
|
|
for (const file of files) {
|
|
preLoadFunc(file);
|
|
const result = await exports.requireOrImport(path.resolve(file));
|
|
postLoadFunc(file, result);
|
|
}
|
|
};
|