From 7d83453434171800d63b925f9470b68cc84ce0db Mon Sep 17 00:00:00 2001 From: anikethsaha Date: Mon, 27 May 2019 22:45:40 +0530 Subject: [PATCH] chore: added a generatePluginName method in generators utils Added generatePluginName in generators/utils/plugins.ts and also moved the replaceAt method from add-generator.ts to generators/utils/plugins.ts. Added tests for the plugin name method --- .../__tests__/add-generator.test.ts | 14 +++++++ packages/generators/add-generator.ts | 23 +---------- packages/generators/utils/plugins.ts | 41 ++++++++++++++++++- 3 files changed, 56 insertions(+), 22 deletions(-) create mode 100644 packages/generators/__tests__/add-generator.test.ts diff --git a/packages/generators/__tests__/add-generator.test.ts b/packages/generators/__tests__/add-generator.test.ts new file mode 100644 index 00000000000..d8a657f527d --- /dev/null +++ b/packages/generators/__tests__/add-generator.test.ts @@ -0,0 +1,14 @@ +import { generatePluginName } from "../utils/plugins" + +describe("generatePluginName", () => { + it("should return webpack Standard Plugin Name for Name : extract-text-webpack-plugin", () => { + const pluginName = generatePluginName("extract-text-webpack-plugin"); + expect(pluginName).toEqual("ExtractTextWebpackPlugin"); + }); + + it("should return webpack Standard Plugin Name for Name : webpack.DefinePlugin", () => { + const pluginName = generatePluginName("webpack.DefinePlugin"); + expect(pluginName).toEqual("Webpack.DefinePlugin"); + }); +}); + diff --git a/packages/generators/add-generator.ts b/packages/generators/add-generator.ts index a911b75e6ce..03d8619c895 100644 --- a/packages/generators/add-generator.ts +++ b/packages/generators/add-generator.ts @@ -11,26 +11,11 @@ import { AutoComplete, Confirm, Input, List } from "@webpack-cli/webpack-scaffol import { SchemaProperties, WebpackOptions } from "./types"; import entryQuestions from "./utils/entry"; - +import { generatePluginName } from "./utils/plugins"; import webpackDevServerSchema from "webpack-dev-server/lib/options.json"; import webpackSchema from "./utils/optionsSchema.json"; const PROPS: string[] = Array.from(PROP_TYPES.keys()); -/** - * - * Replaces the string with a substring at the given index - * https://gist.github.com/efenacigiray/9367920 - * - * @param {String} str - string to be modified - * @param {Number} index - index to replace from - * @param {String} replace - string to replace starting from index - * - * @returns {String} string - The newly mutated string - * - */ -function replaceAt(str: string, index: number, replace: string): string { - return str.substring(0, index) + replace + str.substring(index + 1); -} /** * @@ -395,11 +380,7 @@ export default class AddGenerator extends Generator { (p: boolean): void => { if (p) { this.dependencies.push(answerToAction.actionAnswer); - let myPluginNameArray = answerToAction.actionAnswer.split("-") - for (let i = 0; i < myPluginNameArray.length; i++) { - myPluginNameArray[i] = replaceAt(myPluginNameArray[i], 0, myPluginNameArray[i].charAt(0).toUpperCase()); - } - const pluginName = myPluginNameArray.join("") + const pluginName = generatePluginName(answerToAction.actionAnswer) this.configuration.config.topScope.push( `const ${pluginName} = require("${answerToAction.actionAnswer}")` ); diff --git a/packages/generators/utils/plugins.ts b/packages/generators/utils/plugins.ts index 6dedb1fab9e..3982df796f2 100644 --- a/packages/generators/utils/plugins.ts +++ b/packages/generators/utils/plugins.ts @@ -1,3 +1,4 @@ + /** * * Callable function with the initial plugins @@ -6,6 +7,44 @@ * that consists of terser-webpack-plugin */ -export default function(): string[] { +export default function (): string[] { return ["new TerserPlugin()"]; } + +/** + * + * Replaces the string with a substring at the given index + * https://gist.github.com/efenacigiray/9367920 + * + * @param {String} str - string to be modified + * @param {Number} index - index to replace from + * @param {String} replace - string to replace starting from index + * + * @returns {String} string - The newly mutated string + * + */ + +export const replaceAt = (str: string, index: number, replace: string) : string => { + return str.substring(0, index) + replace + str.substring(index + 1); +} + + +/** + * + * Generate a webpack standard webpack plugin name from the plugin name from the Answer + * + * @param {String} rawPluginName - plugin name from answer + * + * @returns {String} string - the webpack standard plugin name + * + */ + + +export const generatePluginName = (rawPluginName: string): string => { + let myPluginNameArray : string[]; + myPluginNameArray = rawPluginName.split("-"); + for (let i = 0; i < myPluginNameArray.length; i++) { + myPluginNameArray[i] = replaceAt(myPluginNameArray[i], 0, myPluginNameArray[i].charAt(0).toUpperCase()); + } + return myPluginNameArray.join("") +}