react-monaco-editor
Version:
Monaco Editor for React
76 lines (70 loc) • 2.22 kB
JavaScript
;
const fs = require("fs");
const path = require("path");
const chalk = require("chalk");
const yeoman = require("yeoman-environment");
const runTransform = require("../init/index");
const Generator = require("yeoman-generator");
/**
*
* Looks up the webpack.config in the user's path and runs a given
* generator scaffold followed up by a transform
*
* @param {String} action — action to be done (add, remove, update, init)
* @param {Class} name - Name for the given function
* @returns {Function} runTransform - Returns a transformation instance
*/
module.exports = function modifyHelperUtil(action, generator, packages) {
let configPath = path.resolve(process.cwd(), "webpack.config.js");
const webpackConfigExists = fs.existsSync(configPath);
if (!webpackConfigExists) {
configPath = null;
}
const env = yeoman.createEnv("webpack", null);
const generatorName = `webpack-${action}-generator`;
if (!generator) {
generator = class extends Generator {
initializing() {
packages.forEach(pkgPath => {
return this.composeWith(require.resolve(pkgPath));
});
}
};
}
env.registerStub(generator, generatorName);
env.run(generatorName).on("end", () => {
let configModule;
try {
const configPath = path.resolve(process.cwd(), ".yo-rc.json");
configModule = require(configPath);
// Change structure of the config to be transformed
let tmpConfig = {};
Object.keys(configModule).forEach(prop => {
const configs = Object.keys(configModule[prop].configuration);
configs.forEach(config => {
tmpConfig[config] = configModule[prop].configuration[config];
});
});
configModule = tmpConfig;
} catch (err) {
console.error(
chalk.red("\nCould not find a yeoman configuration file.\n")
);
console.error(
chalk.red(
"\nPlease make sure to use 'this.config.set('configuration', this.configuration);' at the end of the generator.\n"
)
);
Error.stackTraceLimit = 0;
process.exitCode = -1;
}
const config = Object.assign(
{
configFile: !configPath ? null : fs.readFileSync(configPath, "utf8"),
configPath: configPath
},
configModule
);
return runTransform(config, action);
});
};