From eaf6fdf487e666b2ad5eddbf0021ffa0f96513a2 Mon Sep 17 00:00:00 2001 From: dhruvdutt Date: Wed, 20 Jun 2018 00:59:52 +0530 Subject: [PATCH] feat(scaffold): add typescript support --- packages/webpack-scaffold/.gitignore | 1 + packages/webpack-scaffold/.npmignore | 2 + packages/webpack-scaffold/index.js | 124 ------------ packages/webpack-scaffold/index.ts | 121 +++++++++++ packages/webpack-scaffold/package-lock.json | 212 +++++++++++++++++++- packages/webpack-scaffold/package.json | 3 + packages/webpack-scaffold/tsconfig.json | 3 + tslint.json | 3 + 8 files changed, 344 insertions(+), 125 deletions(-) create mode 100644 packages/webpack-scaffold/.gitignore delete mode 100755 packages/webpack-scaffold/index.js create mode 100755 packages/webpack-scaffold/index.ts create mode 100644 packages/webpack-scaffold/tsconfig.json diff --git a/packages/webpack-scaffold/.gitignore b/packages/webpack-scaffold/.gitignore new file mode 100644 index 00000000000..a6c7c2852d0 --- /dev/null +++ b/packages/webpack-scaffold/.gitignore @@ -0,0 +1 @@ +*.js diff --git a/packages/webpack-scaffold/.npmignore b/packages/webpack-scaffold/.npmignore index c912533dd7d..10df60e948d 100644 --- a/packages/webpack-scaffold/.npmignore +++ b/packages/webpack-scaffold/.npmignore @@ -1 +1,3 @@ __tests__ +tsconfig.json +*.ts diff --git a/packages/webpack-scaffold/index.js b/packages/webpack-scaffold/index.js deleted file mode 100755 index 7431588e5cf..00000000000 --- a/packages/webpack-scaffold/index.js +++ /dev/null @@ -1,124 +0,0 @@ -const jscodeshift = require("jscodeshift"); - -function createArrowFunction(value) { - return `() => '${value}'`; -} - -function createRegularFunction(value) { - return `function () {\n return '${value}'\n}`; -} - -function createDynamicPromise(arr) { - if (Array.isArray(arr)) { - return ( - "() => new Promise((resolve) => resolve([" + - arr.map(n => { - return "'" + n + "'"; - }) + - "]))" - ); - } else { - return "() => new Promise((resolve) => resolve(" + "'" + arr + "'" + "))"; - } -} - -function createAssetFilterFunction(value) { - return `function (assetFilename) {\n return assetFilename.endsWith('.${value}');\n}`; -} - -function createExternalFunction(regexp) { - return ( - "\n function (context, request, callback) {\n if (" + - "/" + - regexp + - "/.test(request)){" + - "\n" + - " return callback(null, 'commonjs' + request);\n}\n" + - "callback();\n}" - ); -} - -function parseValue(regexp) { - return jscodeshift(regexp); -} - -function createRequire(val) { - return `const ${val} = require('${val}');`; -} - -function List(name, message, choices) { - return { - type: "list", - name, - message, - choices - }; -} - -function RawList(name, message, choices) { - return { - type: "rawlist", - name, - message, - choices - }; -} - -function CheckList(name, message, choices) { - return { - type: "checkbox", - name, - message, - choices - }; -} - -function Input(name, message) { - return { - type: "input", - name, - message - }; -} - -function InputValidate(name, message, cb) { - return { - type: "input", - name, - message, - validate: cb - }; -} - -function Confirm(name, message) { - return { - type: "confirm", - name, - message - }; -} - -function AutoComplete(name, message, options = {}) { - return Object.assign({ - type: "autocomplete", - name, - message, - }, options); -} - -module.exports = { - createArrowFunction, - createDynamicPromise, - createRegularFunction, - createAssetFilterFunction, - createExternalFunction, - parseValue, - createRequire, - List, - RawList, - CheckList, - Input, - InputValidate, - Confirm, - AutoComplete -}; diff --git a/packages/webpack-scaffold/index.ts b/packages/webpack-scaffold/index.ts new file mode 100755 index 00000000000..d890e839edc --- /dev/null +++ b/packages/webpack-scaffold/index.ts @@ -0,0 +1,121 @@ +import * as jscodeshift from "jscodeshift"; + +interface IScaffoldBaseObject { + type: string; + name: string; + message: string; +} + +interface IInquirerList extends IScaffoldBaseObject { + choices?: string[]; +} + +interface IInquirerInput extends IScaffoldBaseObject { + validate?: Function; +} + +export function createArrowFunction(value: Function): string { + return `() => '${value}'`; +} + +export function createRegularFunction(value: Function): string { + return `function () {\n return '${value}'\n}`; +} + +export function createDynamicPromise(arrOrString: Function[] | string): string { + if (Array.isArray(arrOrString)) { + return ( + "() => new Promise((resolve) => resolve([" + + arrOrString.map((func: Function) => { + return "'" + func + "'"; + }) + + "]))" + ); + } else { + return "() => new Promise((resolve) => resolve(" + "'" + arrOrString + "'" + "))"; + } +} + +export function createAssetFilterFunction(value: string): string { + return `function (assetFilename) {\n return assetFilename.endsWith('.${value}');\n}`; +} + +export function createExternalFunction(regexp: string): string { + return ( + "\n function (context, request, callback) {\n if (" + + "/" + + regexp + + "/.test(request)){" + + "\n" + + " return callback(null, 'commonjs' + request);\n}\n" + + "callback();\n}" + ); +} + +export function parseValue(regexp: string): string { + return jscodeshift(regexp); +} + +export function createRequire(val: string): string { + return `const ${val} = require('${val}');`; +} + +export function List(name: string, message: string, choices: string[]): IInquirerList { + return { + choices, + message, + name, + type: "list", + }; +} + +export function RawList(name: string, message: string, choices: string[]): IInquirerList { + return { + choices, + message, + name, + type: "rawlist", + }; +} + +export function CheckList(name: string, message: string, choices: string[]): IInquirerList { + return { + choices, + message, + name, + type: "checkbox", + }; +} + +export function Input(name: string, message: string): IInquirerInput { + return { + message, + name, + type: "input", + }; +} + +export function InputValidate(name: string, message: string, cb: Function): IInquirerInput { + return { + message, + name, + type: "input", + validate: cb, + }; +} + +export function Confirm(name: string, message: string): IScaffoldBaseObject { + return { + message, + name, + type: "confirm", + }; +} + +export function AutoComplete(name: string, message: string, options: object = {}) { + return Object.assign({ + message, + name, + type: "autocomplete", + }, options); +} diff --git a/packages/webpack-scaffold/package-lock.json b/packages/webpack-scaffold/package-lock.json index ebd237e3834..5a048f22607 100644 --- a/packages/webpack-scaffold/package-lock.json +++ b/packages/webpack-scaffold/package-lock.json @@ -1,6 +1,8 @@ { - "requires": true, + "name": "@webpack-cli/webpack-scaffold", + "version": "0.0.8", "lockfileVersion": 1, + "requires": true, "dependencies": { "ansi-regex": { "version": "2.1.1", @@ -12,6 +14,15 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=" }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", @@ -805,6 +816,12 @@ "repeat-element": "^1.1.2" } }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", @@ -817,11 +834,32 @@ "supports-color": "^2.0.0" } }, + "color-convert": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.2.tgz", + "integrity": "sha512-3NUJZdhMhcdPn8vJ9v2UQJoH0qqoGUkYTgFEPZaPjEtwmmKUfNV46zZmgB2M5M4DCEQHMaCfWHCxiBflLm04Tg==", + "dev": true, + "requires": { + "color-name": "1.1.1" + } + }, + "color-name": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.1.tgz", + "integrity": "sha1-SxQVMEz1ACjqgWQ2Q72C6gWANok=", + "dev": true + }, "colors": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/colors/-/colors-1.3.0.tgz", "integrity": "sha512-EDpX3a7wHMWFA7PUHWPHNWqOxIIRSJetuwl0AS5Oi/5FMV8kWm69RTlgm00GKjBO1xFHMtBbL49yRtMMdticBw==" }, + "commander": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", + "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==", + "dev": true + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -853,6 +891,12 @@ "repeating": "^2.0.0" } }, + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -927,6 +971,26 @@ "for-in": "^1.0.1" } }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", @@ -967,6 +1031,12 @@ "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=" }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -981,6 +1051,22 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, "invariant": { "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", @@ -1069,6 +1155,16 @@ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz", "integrity": "sha1-mGbfOVECEw449/mWvOtlRDIJwls=" }, + "js-yaml": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.0.tgz", + "integrity": "sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, "jscodeshift": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.1.tgz", @@ -1236,6 +1332,15 @@ "is-extendable": "^0.1.1" } }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, "os-homedir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", @@ -1262,6 +1367,12 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, + "path-parse": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", + "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=", + "dev": true + }, "preserve": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", @@ -1386,11 +1497,26 @@ "is-finite": "^1.0.0" } }, + "resolve": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.8.1.tgz", + "integrity": "sha512-AicPrAC7Qu1JxPCZ9ZgCZlY35QgFnNqc+0LtbRNxnVw4TXvjQ72wnuL9JQcEBgXkI9JM8MsT9kaQoHcpCRJOYA==", + "dev": true, + "requires": { + "path-parse": "^1.0.5" + } + }, "rimraf": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=" }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", @@ -1414,6 +1540,12 @@ "source-map": "^0.5.6" } }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -1446,11 +1578,89 @@ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=" }, + "tslib": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.2.tgz", + "integrity": "sha512-AVP5Xol3WivEr7hnssHDsaM+lVrVXWUvd1cfXTRkTj80b//6g2wIFEH6hZG0muGZRnHGrfttpdzRk3YlBkWjKw==", + "dev": true + }, + "tslint": { + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/tslint/-/tslint-5.10.0.tgz", + "integrity": "sha1-EeJrzLiK+gLdDZlWyuPUVAtfVMM=", + "dev": true, + "requires": { + "babel-code-frame": "^6.22.0", + "builtin-modules": "^1.1.1", + "chalk": "^2.3.0", + "commander": "^2.12.1", + "diff": "^3.2.0", + "glob": "^7.1.1", + "js-yaml": "^3.7.0", + "minimatch": "^3.0.4", + "resolve": "^1.3.2", + "semver": "^5.3.0", + "tslib": "^1.8.0", + "tsutils": "^2.12.1" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", + "integrity": "sha512-ObN6h1v2fTJSmUXoS3nMQ92LbDK9be4TV+6G+omQlGJFdcUX5heKi1LZ1YnRMIgwTLEj3E24bT6tYni50rlCfQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "supports-color": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.4.0.tgz", + "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "tsutils": { + "version": "2.27.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.27.1.tgz", + "integrity": "sha512-AE/7uzp32MmaHvNNFES85hhUDHFdFZp6OAiZcd6y4ZKKIg6orJTm8keYWBhIhrJQH3a4LzNKat7ZPXZt5aTf6w==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "typescript": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-2.9.2.tgz", + "integrity": "sha512-Gr4p6nFNaoufRIY4NMdpQRNmgxVIGMs4Fcu/ujdYk3nAZqk7supzBE9idmvfZIlH/Cuj//dvi+019qEue9lV0w==", + "dev": true + }, "underscore": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=" }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, "write-file-atomic": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", diff --git a/packages/webpack-scaffold/package.json b/packages/webpack-scaffold/package.json index 816a2822074..3a7f061a553 100644 --- a/packages/webpack-scaffold/package.json +++ b/packages/webpack-scaffold/package.json @@ -13,5 +13,8 @@ "license": "MIT", "dependencies": { "jscodeshift": "^0.5.0" + }, + "devDependencies": { + "typescript": "^2.9.2" } } diff --git a/packages/webpack-scaffold/tsconfig.json b/packages/webpack-scaffold/tsconfig.json new file mode 100644 index 00000000000..4082f16a5d9 --- /dev/null +++ b/packages/webpack-scaffold/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.json" +} diff --git a/tslint.json b/tslint.json index ce9ccffeb53..f78ccb8eede 100644 --- a/tslint.json +++ b/tslint.json @@ -9,6 +9,9 @@ true, "tabs", 4 + ], + "ban-types": [ + false ] }, "rulesDirectory": [],