123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- "use strict";
- 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);
- });
- };
|