mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 23:06:16 -04:00
133 lines
3.2 KiB
JavaScript
133 lines
3.2 KiB
JavaScript
/**
|
|
* This script generates the exports functionality for the node API.
|
|
*
|
|
* it exports chef as default, but all the wrapped operations as
|
|
* other top level exports.
|
|
*
|
|
* @author d98762656 [d98762625@gmail.com]
|
|
* @copyright Crown Copyright 2018
|
|
* @license Apache-2.0
|
|
*/
|
|
|
|
/*eslint no-console: 0 */
|
|
|
|
import fs from "fs";
|
|
import path from "path";
|
|
import * as operations from "../../../core/operations/index";
|
|
import { decapitalise } from "../../apiUtils";
|
|
import excludedOperations from "../excludedOperations";
|
|
|
|
const includedOperations = Object.keys(operations).filter((op => excludedOperations.indexOf(op) === -1));
|
|
|
|
const dir = path.join(`${process.cwd()}/src/node`);
|
|
if (!fs.existsSync(dir)) {
|
|
console.log("\nCWD: " + process.cwd());
|
|
console.log("Error: generateNodeIndex.mjs should be run from the project root");
|
|
console.log("Example> node --experimental-modules src/core/config/scripts/generateNodeIndex.mjs");
|
|
process.exit(1);
|
|
}
|
|
|
|
let code = `/**
|
|
* THIS FILE IS AUTOMATICALLY GENERATED BY src/node/config/scripts/generateNodeIndex.mjs
|
|
*
|
|
* @author d98762625 [d98762625@gmail.com]
|
|
* @copyright Crown Copyright ${new Date().getUTCFullYear()}
|
|
* @license Apache-2.0
|
|
*/
|
|
|
|
/* eslint camelcase: 0 */
|
|
|
|
|
|
import "babel-polyfill";
|
|
import SyncDish from "./SyncDish";
|
|
import { wrap, help, bake, explainExludedFunction } from "./api";
|
|
import {
|
|
// import as core_ to avoid name clashes after wrap.
|
|
`;
|
|
|
|
includedOperations.forEach((op) => {
|
|
// prepend with core_ to avoid name collision later.
|
|
code += ` ${op} as core_${op},\n`;
|
|
});
|
|
|
|
code +=`
|
|
} from "../core/operations/index";
|
|
|
|
// Define global environment functions
|
|
global.ENVIRONMENT_IS_WORKER = function() {
|
|
return typeof importScripts === "function";
|
|
};
|
|
global.ENVIRONMENT_IS_NODE = function() {
|
|
return typeof process === "object" && typeof require === "function";
|
|
};
|
|
global.ENVIRONMENT_IS_WEB = function() {
|
|
return typeof window === "object";
|
|
};
|
|
|
|
/**
|
|
* generateChef
|
|
*
|
|
* Creates decapitalised, wrapped ops in chef object for default export.
|
|
*/
|
|
function generateChef() {
|
|
return {
|
|
`;
|
|
|
|
includedOperations.forEach((op) => {
|
|
code += ` "${decapitalise(op)}": wrap(core_${op}),\n`;
|
|
});
|
|
|
|
excludedOperations.forEach((op) => {
|
|
code += ` "${decapitalise(op)}": explainExludedFunction("${op}"),\n`;
|
|
});
|
|
|
|
code += ` };
|
|
}
|
|
|
|
const chef = generateChef();
|
|
// Add some additional features to chef object.
|
|
chef.help = help;
|
|
chef.Dish = SyncDish;
|
|
|
|
// Define consts here so we can add to top-level export - wont allow
|
|
// export of chef property.
|
|
`;
|
|
|
|
Object.keys(operations).forEach((op) => {
|
|
code += `const ${decapitalise(op)} = chef.${decapitalise(op)};\n`;
|
|
});
|
|
|
|
code +=`
|
|
|
|
// Define array of all operations to create register for bake.
|
|
const operations = [\n`;
|
|
|
|
Object.keys(operations).forEach((op) => {
|
|
code += ` ${decapitalise(op)},\n`;
|
|
});
|
|
|
|
code += `];
|
|
|
|
const prebaked = bake(operations);
|
|
chef.bake = prebaked;
|
|
export default chef;
|
|
|
|
// Operations as top level exports.
|
|
export {
|
|
operations,
|
|
`;
|
|
|
|
Object.keys(operations).forEach((op) => {
|
|
code += ` ${decapitalise(op)},\n`;
|
|
});
|
|
|
|
code += " SyncDish as Dish,\n";
|
|
code += " prebaked as bake,\n";
|
|
code += " help,\n";
|
|
code += "};\n";
|
|
|
|
|
|
fs.writeFileSync(
|
|
path.join(dir, "./index.mjs"),
|
|
code
|
|
);
|