Files
react/compiler/packages/babel-plugin-react-forget/scripts/test262-preprocessor.js
lauren a0dc166991 [rfc] Remove top level forget directory
Sorry about the thrash in advance! This removes the top level `forget` directory 
which adds unnecessary nesting to our repo 

Hopefully everything still works
2023-08-22 15:04:54 -04:00

51 lines
1.7 KiB
JavaScript

/**
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
const {
runReactForgetBabelPlugin,
} = require("../dist/Babel/RunReactForgetBabelPlugin");
// Preprocessor that runs Forget on the test262 test prior to execution. Compilation errors short
// circuit test execution and report an error immediately.
module.exports = (test) => {
try {
test.contents = runReactForgetBabelPlugin(
test.contents,
test.file,
"typescript"
).code;
} catch (error) {
// We use the `stderr` output to group errors so we can count them, so we need to dedupe errors
// that are the same but differ slightly.
let { name, message } = error;
message = message.replace(/^\/.*?:\s/, ""); // babel seems to output filenames
message = message.split(/\(\d+:\d+\)/)[0]; // some errors report line numbers and codeframes
message = message.trim();
message = formatReactForgetErrorMessage(message);
// For unknown reasons I don't have the energy to dig into some Babel error instances can't be
// written to, so we construct a psedudo object here so the correctly formatted error messages
// are emitted
test.result = {
stderr: `${name}: ${message}\n`,
stdout: "",
error: { name, message },
};
}
return test;
};
function formatReactForgetErrorMessage(message) {
// Strip codeframes so we can group errors
const matches = message.match(/^\[ReactForget\].*\n?/);
if (Array.isArray(matches) && matches.length > 0) {
return matches[0].replace("\n", "");
}
return message;
}