From b6a438d6925ba9ca1fa866f412ed074b509f3d70 Mon Sep 17 00:00:00 2001 From: Rishabh Date: Fri, 31 May 2019 12:34:15 +0530 Subject: [PATCH] chore: update parseMerge --- packages/utils/ast-utils.ts | 27 ++++++++++++++++++++++++--- packages/utils/recursive-parser.ts | 2 +- packages/utils/scaffold.ts | 7 ------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/packages/utils/ast-utils.ts b/packages/utils/ast-utils.ts index ed0745ef53b..f52645dd87a 100644 --- a/packages/utils/ast-utils.ts +++ b/packages/utils/ast-utils.ts @@ -606,7 +606,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 createMergeProperty(p: Node): boolean { + function createMergeProperty(p: Node, configIdentifier: string): boolean { // FIXME Use j.callExp() const exportsDecl: Node[] = (p.value as Node).body.map( (n: Node): Node => { @@ -626,14 +626,35 @@ function parseMerge(j: JSCodeshift, ast: Node, value: string[], action: string): type: "MemberExpression" }, operator: "=", - right: j.callExpression(j.identifier("merge"), [j.identifier(value[0]), exportsDecl.pop()]), + right: j.callExpression(j.identifier("merge"), [j.identifier(configIdentifier), exportsDecl.pop()]), type: "AssignmentExpression" }; (p.value as Node).body[bodyLength - 1] = newVal; return false; // TODO: debug later } + + function addMergeImports(ast: Node, mergeImports: string[]) { + ast.find(j.Program).filter((program: Node): boolean => { + mergeImports.forEach( + (imp: string): void => { + if ((program.value as Node).body.indexOf(imp) === -1){ + (program.value as Node).body.splice(-1, 0, imp); + } + } + ) + return false; + }); + return ast; + } + if (value) { - return ast.find(j.Program).filter((p: Node): boolean => createMergeProperty(p)); + const [configIdentifier, configPath] = value; + const mergeImports = [ + `const ${configIdentifier} = require('${configPath}')`, + `const merge = require('webpack-merge')` + ]; + ast = addMergeImports(ast, mergeImports); + return ast.find(j.Program).filter((p: Node): boolean => createMergeProperty(p, configIdentifier)); } else { return ast; } diff --git a/packages/utils/recursive-parser.ts b/packages/utils/recursive-parser.ts index a592581f651..275c30651af 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[0] === "string" && Array.isArray(value)) { + if (Array.isArray(value) && typeof value[0] === "string" && typeof value[1] === "string") { return utils.parseMerge(j, ast, value, action); } } diff --git a/packages/utils/scaffold.ts b/packages/utils/scaffold.ts index 688e3978de6..855bf2c6ff7 100644 --- a/packages/utils/scaffold.ts +++ b/packages/utils/scaffold.ts @@ -58,13 +58,6 @@ export default function runTransform(transformConfig: TransformConfig, action: s 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 = {}"); const transformAction: string = action || null;