diff --git a/packages/generators/add-generator.ts b/packages/generators/add-generator.ts index dfbb660173c..e4149ed6226 100644 --- a/packages/generators/add-generator.ts +++ b/packages/generators/add-generator.ts @@ -115,6 +115,7 @@ export default class AddGenerator extends Generator { const resolvedPath = resolve(process.cwd(), mergeFileAnswer.mergeFile); // eslint-disable-next-line this.configuration.config["merge"] = [mergeFileAnswer.mergeConfigName, resolvedPath]; + done(); }); } } diff --git a/packages/generators/utils/add/questions/index.ts b/packages/generators/utils/add/questions/index.ts index 90981a70007..6b08b8709bf 100644 --- a/packages/generators/utils/add/questions/index.ts +++ b/packages/generators/utils/add/questions/index.ts @@ -31,13 +31,13 @@ export const actionTypeQuestion = AutoComplete( }, ); -export const entryTypeQuestion = Confirm( +export const entryTypeQuestion: Question = Confirm( "entryType", "Will your application have multiple bundles?", false, ); -export const topScopeQuestion = Input( +export const topScopeQuestion: Question = Input( "topScope", "What do you want to add to topScope?", ); @@ -48,9 +48,6 @@ const mergeFileQuestionsFunction = () => { const resolvedPath = resolve(process.cwd(), path); if (existsSync(resolvedPath)) { if (/\.js$/.test(path)) { - if (typeof require(resolvedPath) !== "object") { - return "Given file doesn't export an Object"; - } return true; } return "Path doesn't corresponds to a javascript file"; @@ -63,4 +60,4 @@ const mergeFileQuestionsFunction = () => { Input("mergeConfigName", mergeConfigNameQuestion) ] }; -export const mergeFileQuestion = mergeFileQuestionsFunction(); +export const mergeFileQuestion: Question[] = mergeFileQuestionsFunction(); diff --git a/packages/utils/ast-utils.ts b/packages/utils/ast-utils.ts index 7a6fed5a657..ed0745ef53b 100644 --- a/packages/utils/ast-utils.ts +++ b/packages/utils/ast-utils.ts @@ -605,7 +605,7 @@ function parseTopScope(j: JSCodeshift, ast: Node, value: string[], action: strin */ // eslint-disable-next-line @typescript-eslint/no-unused-vars -function parseMerge(j: JSCodeshift, ast: Node, value: string, action: string): boolean | Node { +function parseMerge(j: JSCodeshift, ast: Node, value: string[], action: string): boolean | Node { function createMergeProperty(p: Node): boolean { // FIXME Use j.callExp() const exportsDecl: Node[] = (p.value as Node).body.map( @@ -626,7 +626,7 @@ function parseMerge(j: JSCodeshift, ast: Node, value: string, action: string): b type: "MemberExpression" }, operator: "=", - right: j.callExpression(j.identifier("merge"), [j.identifier(value), exportsDecl.pop()]), + right: j.callExpression(j.identifier("merge"), [j.identifier(value[0]), exportsDecl.pop()]), type: "AssignmentExpression" }; (p.value as Node).body[bodyLength - 1] = newVal; diff --git a/packages/utils/recursive-parser.ts b/packages/utils/recursive-parser.ts index a6312798f5b..a592581f651 100644 --- a/packages/utils/recursive-parser.ts +++ b/packages/utils/recursive-parser.ts @@ -15,7 +15,7 @@ export default function recursiveTransform( console.error("Error in parsing top scope, Array required"); return false; } else if (key === "merge") { - if (typeof value === "string") { + if (typeof value[0] === "string" && Array.isArray(value)) { return utils.parseMerge(j, ast, value, action); } } diff --git a/packages/utils/scaffold.ts b/packages/utils/scaffold.ts index 64b4e1e07d6..dce90abb648 100644 --- a/packages/utils/scaffold.ts +++ b/packages/utils/scaffold.ts @@ -12,28 +12,6 @@ import runPrettier from "./run-prettier"; import { Node } from "./types/NodePath"; - -function mergeHandler(config: Config, transformations: string[]): [Config, string[]]{ - if(!config["topScope"]) - { - config["topScope"] = [ - `const merge = require('webpack-merge')`, - `const ${config.merge[0]} = require(${config.merge[1]})` - ]; - transformations.push("topScope"); - } else { - config.topScope.push( - `const merge = require('webpack-merge')`, - `const ${config.merge[0]} = require(${config.merge[1]})` - ) - } - - config.merge = config.merge[0]; - transformations.push("merge", "topScope"); - return [config, transformations]; -} - - /** * * Maps back transforms that needs to be run using the configuration @@ -77,7 +55,14 @@ export default function runTransform(transformConfig: TransformConfig, action: s } if (config.merge && transformations.indexOf("merge") === -1) { - [config, transformations] = mergeHandler(config, transformations); + transformations.push("merge"); + } + + if (config.merge) { + config.topScope.push( + `const merge = require('webpack-merge')`, + `const ${config.merge[0]} = require('${config.merge[1]}')` + ) } const ast: Node = j(initActionNotDefined ? transformConfig.configFile : "module.exports = {}"); diff --git a/packages/utils/types/NodePath.ts b/packages/utils/types/NodePath.ts index 1b828378ddb..61d7e539847 100644 --- a/packages/utils/types/NodePath.ts +++ b/packages/utils/types/NodePath.ts @@ -96,4 +96,4 @@ export interface JSCodeshift extends Object { }; } -export type valueType = string | number | boolean | Node | null; +export type valueType = string[] | string | number | boolean | Node | null;