/** * This script automatically generates src/core/operations/index.mjs, containing * imports for all operations in src/core/operations. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2018 * @license Apache-2.0 */ /* eslint no-console: ["off"] */ import path from "path"; import fs from "fs"; import process from "process"; const dir = path.join(process.cwd() + "/src/core/config/"); if (!fs.existsSync(dir)) { console.log("\nCWD: " + process.cwd()); console.log("Error: generateOpsIndex.mjs should be run from the project root"); console.log("Example> node --experimental-modules src/core/config/scripts/generateOpsIndex.mjs"); process.exit(1); } // Find all operation files const opObjs = []; fs.readdirSync(path.join(dir, "../operations")).forEach(file => { if (!file.endsWith(".mjs") || file === "index.mjs") return; opObjs.push(file.split(".mjs")[0]); }); // Construct index file let code = `/** * THIS FILE IS AUTOMATICALLY GENERATED BY src/core/config/scripts/generateOpsIndex.mjs * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright ${new Date().getUTCFullYear()} * @license Apache-2.0 */ `; opObjs.forEach(obj => { code += `import ${obj} from "./${obj}.mjs";\n`; }); code += ` export { `; opObjs.forEach(obj => { code += ` ${obj},\n`; }); code += "};\n"; // Write file fs.writeFileSync( path.join(dir, "../operations/index.mjs"), code ); console.log("Written operation index."); // find all test files const testsDir = path.join(process.cwd() + "/tests/operations/tests/"); const testObjs = []; fs.readdirSync(testsDir).forEach(file => { if (!file.endsWith(".mjs")) return; testObjs.push(file.split(".mjs")[0]); }); // Construct test index file code = `/** * THIS FILE IS AUTOMATICALLY GENERATED BY src/core/config/scripts/generateOpsIndex.mjs * * @author john [john19696@protonmail.com] * @author tlwr [toby@toby.codes] * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright ${new Date().getUTCFullYear()} * @license Apache-2.0 */ import { setLongTestFailure, logTestReport, } from "../lib/utils.mjs"; import "../lib/wasmFetchPolyfill.mjs"; import TestRegister from "../lib/TestRegister.mjs"; `; testObjs.forEach(obj => { if (obj !== "SplitColourChannels") code += `import "./tests/${obj}.mjs";\n`; else code += `// Cannot test operations that use the File type yet // import "./tests/SplitColourChannels.mjs";\n`; }); code += ` const testStatus = { allTestsPassing: true, counts: { total: 0, } }; setLongTestFailure(); const logOpsTestReport = logTestReport.bind(null, testStatus); (async function() { const results = await TestRegister.runTests(); logOpsTestReport(results); })(); `; // Write tests file fs.writeFileSync( path.join(testsDir, "../index.mjs"), code ); console.log("Written operation tests index.");