From 093a36d8ddf129bb646dc2d1213dd708fba4c219 Mon Sep 17 00:00:00 2001 From: "devid.farinelli@gmail.com" Date: Mon, 22 Apr 2019 12:43:50 +0200 Subject: [PATCH] feat(init): wip typescript support --- packages/generators/init-generator.ts | 23 +++++++--------- .../utils/{module.ts => language.ts} | 26 +++++++++++++++++-- 2 files changed, 33 insertions(+), 16 deletions(-) rename packages/generators/utils/{module.ts => language.ts} (55%) diff --git a/packages/generators/init-generator.ts b/packages/generators/init-generator.ts index 8ef4cdfdc23..e54995c3327 100644 --- a/packages/generators/init-generator.ts +++ b/packages/generators/init-generator.ts @@ -10,7 +10,7 @@ import { Confirm, Input, List } from "@webpack-cli/webpack-scaffold"; import { WebpackOptions } from "./types"; import entryQuestions from "./utils/entry"; -import getBabelPlugin from "./utils/module"; +import langQuestionHandler from "./utils/language"; import styleQuestionHandler, { ILoader, StylingType } from "./utils/style"; import tooltip from "./utils/tooltip"; @@ -194,22 +194,17 @@ export default class InitGenerator extends Generator { }) .then(() => this.prompt([ - Confirm("useBabel", "Will you be using ES2015?"), + List("langType", "Will you use one of the below JS solutions?", [ + "ES6", + "Typescript", + "No", + ]), ]), ) - .then((useBabelAnswer: { - useBabel: boolean; + .then((langTypeAnswer: { + langType: boolean; }) => { - if (useBabelAnswer.useBabel) { - this.configuration.config.webpackOptions.module.rules.push( - getBabelPlugin(), - ); - this.dependencies.push( - "babel-loader", - "@babel/core", - "@babel/preset-env", - ); - } + langQuestionHandler(this, langTypeAnswer.langType); }) .then(() => this.prompt([ diff --git a/packages/generators/utils/module.ts b/packages/generators/utils/language.ts similarity index 55% rename from packages/generators/utils/module.ts rename to packages/generators/utils/language.ts index 25b846723f1..ffa887de45d 100644 --- a/packages/generators/utils/module.ts +++ b/packages/generators/utils/language.ts @@ -1,4 +1,9 @@ -interface Module extends Object { +export enum LangType { + ES6 = "ES6", + Typescript = "Typescript", +} + +interface ModuleRule extends Object { include: string[]; loader: string; options: { @@ -16,7 +21,7 @@ type Preset = string | object; * * @returns {Function} A callable function that adds the babel-loader with env preset */ -export default function(): Module { +export function getBabelPlugin(): ModuleRule { return { include: ["path.resolve(__dirname, 'src')"], loader: "'babel-loader'", @@ -34,3 +39,20 @@ export default function(): Module { test: `${new RegExp(/\.js$/)}` }; } + +export default function language(self, langType) { + switch (langType) { + case LangType.ES6: + self.configuration.config.webpackOptions.module.rules.push( + getBabelPlugin(), + ); + self.dependencies.push( + "babel-loader", + "@babel/core", + "@babel/preset-env", + ); + break; + case LangType.Typescript: + break; + } +}