124 lines
2.9 KiB
JavaScript
124 lines
2.9 KiB
JavaScript
/**
|
|
* 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.");
|