diff --git a/packages/generate-loader/.gitignore b/packages/generate-loader/.gitignore new file mode 100644 index 00000000000..a6c7c2852d0 --- /dev/null +++ b/packages/generate-loader/.gitignore @@ -0,0 +1 @@ +*.js diff --git a/packages/generate-loader/.npmignore b/packages/generate-loader/.npmignore index fc906aff603..afbdc6e4b29 100644 --- a/packages/generate-loader/.npmignore +++ b/packages/generate-loader/.npmignore @@ -1,3 +1,6 @@ examples test +types templates/test +*.ts +tsconfig.json diff --git a/packages/generate-loader/index.js b/packages/generate-loader/index.js deleted file mode 100644 index 9b2c93a65b1..00000000000 --- a/packages/generate-loader/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const yeoman = require("yeoman-environment"); -const { LoaderGenerator } = require("@webpack-cli/generators/loader-generator"); - -/** - * Runs a yeoman generator to create a new webpack loader project - * @returns {void} - */ - -function loaderCreator() { - const env = yeoman.createEnv(); - const generatorName = "webpack-loader-generator"; - - env.registerStub(LoaderGenerator, generatorName); - - env.run(generatorName); -} - -module.exports = loaderCreator; diff --git a/packages/generate-loader/index.ts b/packages/generate-loader/index.ts new file mode 100644 index 00000000000..83dc9cea9fc --- /dev/null +++ b/packages/generate-loader/index.ts @@ -0,0 +1,18 @@ +import LoaderGenerator from "@webpack-cli/generators/loader-generator"; +import * as yeoman from "yeoman-environment"; + +import { IYeoman } from "./types/Yeoman"; + +/** + * Runs a yeoman generator to create a new webpack loader project + * @returns {void} + */ + +export default function loaderCreator(): void { + const env = yeoman.createEnv(); + const generatorName: string = "webpack-loader-generator"; + + env.registerStub(LoaderGenerator, generatorName); + + env.run(generatorName); +} diff --git a/packages/generate-loader/package-lock.json b/packages/generate-loader/package-lock.json index 7ad8227fa46..85ca5a16cb0 100644 --- a/packages/generate-loader/package-lock.json +++ b/packages/generate-loader/package-lock.json @@ -16,6 +16,11 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==" }, + "@types/node": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==" + }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -1538,6 +1543,11 @@ "repeat-string": "^1.6.1" } }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", diff --git a/packages/generate-loader/package.json b/packages/generate-loader/package.json index e704f549967..76152121ce1 100644 --- a/packages/generate-loader/package.json +++ b/packages/generate-loader/package.json @@ -16,5 +16,12 @@ "dependencies": { "@webpack-cli/generators": "^0.0.8", "yeoman-environment": "^2.1.1" + }, + "devDependencies": { + "@types/node": "^10.3.6", + "typescript": "^2.9.2" + }, + "scripts": { + "build": "tsc" } } diff --git a/packages/generate-loader/tsconfig.json b/packages/generate-loader/tsconfig.json new file mode 100644 index 00000000000..4082f16a5d9 --- /dev/null +++ b/packages/generate-loader/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/generate-loader/types/Yeoman.ts b/packages/generate-loader/types/Yeoman.ts new file mode 100644 index 00000000000..4c56a771c00 --- /dev/null +++ b/packages/generate-loader/types/Yeoman.ts @@ -0,0 +1,12 @@ +interface IRunEnv extends Object { + on?: (event: string, callbackFn: Function) => void; +} + +export interface IYeoman extends Object { + registerStub?(generator: IGenerator, namespace: string): void; + run?(target: string, options?: object, done?: Function): IRunEnv; +} + +export interface IGenerator extends Object { + composeWith?: (path: string) => void; +} diff --git a/packages/generate-plugin/.gitignore b/packages/generate-plugin/.gitignore new file mode 100644 index 00000000000..a6c7c2852d0 --- /dev/null +++ b/packages/generate-plugin/.gitignore @@ -0,0 +1 @@ +*.js diff --git a/packages/generate-plugin/.npmignore b/packages/generate-plugin/.npmignore index fc906aff603..afbdc6e4b29 100644 --- a/packages/generate-plugin/.npmignore +++ b/packages/generate-plugin/.npmignore @@ -1,3 +1,6 @@ examples test +types templates/test +*.ts +tsconfig.json diff --git a/packages/generate-plugin/index.js b/packages/generate-plugin/index.js deleted file mode 100644 index f081e60057f..00000000000 --- a/packages/generate-plugin/index.js +++ /dev/null @@ -1,18 +0,0 @@ -const yeoman = require("yeoman-environment"); -const { PluginGenerator } = require("@webpack-cli/generators/plugin-generator"); - -/** - * Runs a yeoman generator to create a new webpack plugin project - * @returns {void} - */ - -function pluginCreator() { - const env = yeoman.createEnv(); - const generatorName = "webpack-plugin-generator"; - - env.registerStub(PluginGenerator, generatorName); - - env.run(generatorName); -} - -module.exports = pluginCreator; diff --git a/packages/generate-plugin/index.ts b/packages/generate-plugin/index.ts new file mode 100644 index 00000000000..6c31d6d43df --- /dev/null +++ b/packages/generate-plugin/index.ts @@ -0,0 +1,18 @@ +import PluginGenerator from "@webpack-cli/generators/plugin-generator"; +import * as yeoman from "yeoman-environment"; + +import { IYeoman } from "./types/Yeoman"; + +/** + * Runs a yeoman generator to create a new webpack plugin project + * @returns {void} + */ + +export default function pluginCreator(): void { + const env = yeoman.createEnv(); + const generatorName: string = "webpack-plugin-generator"; + + env.registerStub(PluginGenerator, generatorName); + + env.run(generatorName); +} diff --git a/packages/generate-plugin/package-lock.json b/packages/generate-plugin/package-lock.json index 7ad8227fa46..85ca5a16cb0 100644 --- a/packages/generate-plugin/package-lock.json +++ b/packages/generate-plugin/package-lock.json @@ -16,6 +16,11 @@ "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.0.tgz", "integrity": "sha512-LAQ1d4OPfSJ/BMbI2DuizmYrrkD9JMaTdi2hQTlI53lQ4kRQPyZQRS4CYQ7O66bnBBnP/oYdRxbk++X0xuFU6A==" }, + "@types/node": { + "version": "10.5.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-10.5.2.tgz", + "integrity": "sha512-m9zXmifkZsMHZBOyxZWilMwmTlpC8x5Ty360JKTiXvlXZfBWYpsg9ZZvP/Ye+iZUh+Q+MxDLjItVTWIsfwz+8Q==" + }, "ansi-escapes": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.1.0.tgz", @@ -1538,6 +1543,11 @@ "repeat-string": "^1.6.1" } }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==" + }, "union-value": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz", diff --git a/packages/generate-plugin/package.json b/packages/generate-plugin/package.json index 446d7364258..e9305e61b4c 100644 --- a/packages/generate-plugin/package.json +++ b/packages/generate-plugin/package.json @@ -16,5 +16,12 @@ "dependencies": { "@webpack-cli/generators": "^0.0.8", "yeoman-environment": "^2.1.1" + }, + "devDependencies": { + "@types/node": "^10.3.6", + "typescript": "^2.9.2" + }, + "scripts": { + "build": "tsc" } } diff --git a/packages/generate-plugin/tsconfig.json b/packages/generate-plugin/tsconfig.json new file mode 100644 index 00000000000..4082f16a5d9 --- /dev/null +++ b/packages/generate-plugin/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/packages/generate-plugin/types/Yeoman.ts b/packages/generate-plugin/types/Yeoman.ts new file mode 100644 index 00000000000..4c56a771c00 --- /dev/null +++ b/packages/generate-plugin/types/Yeoman.ts @@ -0,0 +1,12 @@ +interface IRunEnv extends Object { + on?: (event: string, callbackFn: Function) => void; +} + +export interface IYeoman extends Object { + registerStub?(generator: IGenerator, namespace: string): void; + run?(target: string, options?: object, done?: Function): IRunEnv; +} + +export interface IGenerator extends Object { + composeWith?: (path: string) => void; +} diff --git a/packages/generators/addon-generator.ts b/packages/generators/addon-generator.ts index 02aeff2d6e9..dd297be636e 100644 --- a/packages/generators/addon-generator.ts +++ b/packages/generators/addon-generator.ts @@ -3,7 +3,7 @@ import * as path from "path"; import Generator = require("yeoman-generator"); import * as copyUtils from "@webpack-cli/utils/copy-utils"; -import { IScaffoldBaseObject } from "@webpack-cli/webpack-scaffold"; +import { IInquirerScaffoldObject } from "@webpack-cli/webpack-scaffold"; /** * Creates a Yeoman Generator that generates a project conforming @@ -27,21 +27,22 @@ import { IScaffoldBaseObject } from "@webpack-cli/webpack-scaffold"; * @returns {Generator} A class extending Generator */ export default function addonGenerator( - prompts: IScaffoldBaseObject[], + prompts: IInquirerScaffoldObject[], templateDir: string, copyFiles: string[], copyTemplateFiles: string[], templateFn: Function, ) { return class AddOnGenerator extends Generator { - public props: IScaffoldBaseObject; + public props: IInquirerScaffoldObject; private copy: (value: string, index: number, array: string[]) => void; private copyTpl: (value: string, index: number, array: string[]) => void; - public prompting() { - return this.prompt(prompts).then((props: IScaffoldBaseObject) => { - this.props = props; - }); + public prompting(): Promise<{}> { + return this.prompt(prompts) + .then((props: IInquirerScaffoldObject): void => { + this.props = props; + }); } public default() { diff --git a/packages/generators/loader-generator.ts b/packages/generators/loader-generator.ts index 55894bfe5f0..28f736e0379 100644 --- a/packages/generators/loader-generator.ts +++ b/packages/generators/loader-generator.ts @@ -10,7 +10,7 @@ import addonGenerator from "./addon-generator"; * @param {string} name A loader name to be formatted * @returns {string} The formatted string */ -export function makeLoaderName(name: string): string { +function makeLoaderName(name: string): string { name = _.kebabCase(name); if (!/loader$/.test(name)) { name += "-loader"; @@ -51,7 +51,7 @@ const LoaderGenerator = addonGenerator( "examples/simple/src/static-esm-module.js.tpl", ], ["src/_index.js.tpl"], - (gen: IYeoman): object => ({ name: gen.props.name }), + (gen): object => ({ name: gen.props.name }), ); export default LoaderGenerator; diff --git a/packages/generators/plugin-generator.ts b/packages/generators/plugin-generator.ts index 027ec6f3455..82550f520a2 100644 --- a/packages/generators/plugin-generator.ts +++ b/packages/generators/plugin-generator.ts @@ -32,7 +32,7 @@ const PluginGenerator = addonGenerator( "examples/simple/src/static-esm-module.js.tpl", ], ["src/_index.js.tpl", "examples/simple/_webpack.config.js.tpl"], - (gen: IYeoman): object => ({ name: _.upperFirst(_.camelCase(gen.props.name)) }), + (gen): object => ({ name: _.upperFirst(_.camelCase(gen.props.name)) }), ); export default PluginGenerator; diff --git a/packages/init/init.ts b/packages/init/init.ts index e841441cc03..a564cd239c7 100644 --- a/packages/init/init.ts +++ b/packages/init/init.ts @@ -57,7 +57,7 @@ export default function runTransform(webpackProperties: IWebpackProperties, acti return pEachSeries(transformations, (f: string): boolean | INode => { return astTransform(j, ast, config.webpackOptions[f], transformAction, f); }) - .then((_?: any) => { + .then((value: string[]): void | PromiseLike => { let configurationName: string = "webpack.config.js"; if (config.configName) { configurationName = "webpack." + config.configName + ".js"; diff --git a/packages/utils/copy-utils.ts b/packages/utils/copy-utils.ts index 301718bc92a..d7f98fa6639 100644 --- a/packages/utils/copy-utils.ts +++ b/packages/utils/copy-utils.ts @@ -17,7 +17,7 @@ interface IGenerator { * @returns {Function} A curried function that takes a file path and copies it */ export const generatorCopy = ( - generator: any, + generator, templateDir: string, ): (filePath: string) => void => (filePath: string): void => { const sourceParts: string[] = templateDir.split(path.delimiter); @@ -43,7 +43,7 @@ export const generatorCopy = ( * @returns {Function} A curried function that takes a file path and copies it */ export const generatorCopyTpl = ( - generator: any, + generator, templateDir: string, templateData: object, ): (filePath: string) => void => (filePath: string): void => { diff --git a/packages/utils/modify-config-helper.ts b/packages/utils/modify-config-helper.ts index a8d40aa1a0f..0e1033e2b6f 100644 --- a/packages/utils/modify-config-helper.ts +++ b/packages/utils/modify-config-helper.ts @@ -74,7 +74,7 @@ export default function modifyHelperUtil( } } - const env: IYeoman = yeoman.createEnv("webpack", null); + const env = yeoman.createEnv("webpack", null); const generatorName: string = `webpack-${action}-generator`; if (!generator) { diff --git a/packages/utils/scaffold.ts b/packages/utils/scaffold.ts index 541815478d1..c3ced0fc904 100644 --- a/packages/utils/scaffold.ts +++ b/packages/utils/scaffold.ts @@ -66,7 +66,7 @@ export default function runTransform(transformConfig: ITransformConfig, action: } return astTransform(j, ast, f, config.webpackOptions[f], transformAction); }) - .then((_: any) => { + .then((value: string[]): void | PromiseLike => { let configurationName: string; if (!config.configName) { configurationName = "webpack.config.js"; diff --git a/packages/webpack-scaffold/index.ts b/packages/webpack-scaffold/index.ts index 7f32620bb4a..01cf53a3558 100755 --- a/packages/webpack-scaffold/index.ts +++ b/packages/webpack-scaffold/index.ts @@ -1,6 +1,6 @@ import * as jscodeshift from "jscodeshift"; -export interface IScaffoldBaseObject { +export interface IInquirerScaffoldObject { type?: string; name: string; message: string; @@ -12,11 +12,11 @@ export interface IScaffoldBaseObject { filter?: (name: string) => string; } -export interface IInquirerList extends IScaffoldBaseObject { +export interface IInquirerList extends IInquirerScaffoldObject { choices?: string[]; } -export interface IInquirerInput extends IScaffoldBaseObject { +export interface IInquirerInput extends IInquirerScaffoldObject { validate?: (input: string) => string | boolean; } @@ -110,7 +110,7 @@ export function InputValidate(name: string, message: string, cb?: (input: string }; } -export function Confirm(name: string, message: string): IScaffoldBaseObject { +export function Confirm(name: string, message: string): IInquirerScaffoldObject { return { message, name,