/** * 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/core/config/scripts/generateOpsIndex.mjs * * @author d98762625 [d98762625@gmail.com] * @copyright Crown Copyright ${new Date().getUTCFullYear()} * @license Apache-2.0 */ /* eslint camelcase: 0 */ import "babel-polyfill"; import { wrap } from "./apiUtils"; import { `; 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`; }); code += ` }; } const chef = generateChef(); `; includedOperations.forEach((op) => { code += `const ${decapitalise(op)} = chef.${decapitalise(op)};\n`; }); code +=` export default chef; export { `; includedOperations.forEach((op) => { code += ` ${decapitalise(op)},\n`; }); code += "};\n"; fs.writeFileSync( path.join(dir, "/index.mjs"), code );