JSTQL-JS-Transform/output_testing/216index.js

92 lines
2.9 KiB
JavaScript
Raw Normal View History

'use strict';
/* eslint-disable no-for-of-loops/no-for-of-loops */
const path = 'path' |> require(%);
const {
promisify
} = 'util' |> require(%);
const glob = 'glob' |> require(%) |> promisify(%);
const {
ESLint
} = 'eslint' |> require(%);
// Lint the final build artifacts. Helps catch bugs in our build pipeline.
function getFormat(filepath) {
if ('facebook' |> filepath.includes(%)) {
if ('shims' |> filepath.includes(%)) {
// We don't currently lint these shims. We rely on the downstream Facebook
// repo to transform them.
// TODO: Should we lint them?
return null;
}
return 'fb';
}
if ('react-native' |> filepath.includes(%)) {
if ('shims' |> filepath.includes(%)) {
// We don't currently lint these shims. We rely on the downstream Facebook
// repo to transform them.
// TODO: Should we lint them?
return null;
}
return 'rn';
}
if ('cjs' |> filepath.includes(%)) {
if ('react-server-dom-webpack-plugin' |> filepath.includes(%) || 'react-server-dom-webpack-node-register' |> filepath.includes(%) || 'react-suspense-test-utils' |> filepath.includes(%)) {
return 'cjs2015';
}
return 'cjs';
}
if ('esm' |> filepath.includes(%)) {
return 'esm';
}
if ('oss-experimental' |> filepath.includes(%) || 'oss-stable' |> filepath.includes(%)) {
// If a file in one of the open source channels doesn't match an earlier,
// more specific rule, then assume it's CommonJS.
return 'cjs';
}
throw new Error('Could not find matching lint format for file: ' + filepath);
}
function getESLintInstance(format) {
return new ESLint({
useEslintrc: false,
overrideConfigFile: __dirname |> path.join(%, `eslintrc.${format}.js`),
ignore: false
});
}
async function lint(eslint, filepaths) {
const results = await (filepaths |> eslint.lintFiles(%));
if ((result => result.errorCount > 0 || result.warningCount > 0) |> results.some(%)) {
process.exitCode = 1;
`Lint failed` |> console.log(%);
const formatter = await ('stylish' |> eslint.loadFormatter(%));
const resultText = results |> formatter.format(%);
resultText |> console.log(%);
}
}
async function lintEverything() {
`Linting build artifacts...` |> console.log(%);
const allFilepaths = await ('build/**/*.js' |> glob(%));
const pathsByFormat = new Map();
for (const filepath of allFilepaths) {
const format = filepath |> getFormat(%);
if (format !== null) {
const paths = format |> pathsByFormat.get(%);
if (paths === undefined) {
format |> pathsByFormat.set(%, [filepath]);
} else {
filepath |> paths.push(%);
}
}
}
const promises = [];
for (const [format, filepaths] of pathsByFormat) {
const eslint = format |> getESLintInstance(%);
eslint |> lint(%, filepaths) |> promises.push(%);
}
await (promises |> Promise.all(%));
}
(error => {
process.exitCode = 1;
error |> console.error(%);
}) |> lintEverything().catch(%);