From d868d6d495ef8e969e3de7e7b7d21d40752bdab0 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 29 Nov 2018 14:21:23 +0530 Subject: [PATCH 01/14] feat(ui): managed dependencies installations --- packages/init/index.ts | 27 + packages/init/package-lock.json | 2696 +++++++++++++++++++++++++++++++ packages/init/package.json | 1 + 3 files changed, 2724 insertions(+) diff --git a/packages/init/index.ts b/packages/init/index.ts index bb80bd0fae3..6f543d14042 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -1,6 +1,7 @@ import defaultGenerator from "@webpack-cli/generators/init-generator"; import modifyConfigHelper from "@webpack-cli/utils/modify-config-helper"; import npmPackagesExists from "@webpack-cli/utils/npm-packages-exists"; +import runTransform from "@webpack-cli/utils/scaffold"; /** * @@ -21,3 +22,29 @@ export default function initializeInquirer(...args: string[]): Function | void { } return npmPackagesExists(packages); } + +export function UIManager(dependencies: string[]) { + // tslint:disable-next-line:no-var-requires + const npm = require("npm"); + const returnObject: { + errors: String[], + } = {errors: []}; + // Install Dependencies + npm.load((err) => { + if (err) { + return { error: err}; + } + dependencies.forEach( (d) => { + process.stdout.write(`🛫 Installing ${d} \n`); + npm.commands.install([d], (er , data) => { + if (er) { returnObject.errors.push(er); } + if (data) { + process.stdout.write(`.`); + } + }); + process.stdout.write(`.. done`); + }); + }); + + return returnObject; +} diff --git a/packages/init/package-lock.json b/packages/init/package-lock.json index b48e4c5cdcb..bb00735973d 100644 --- a/packages/init/package-lock.json +++ b/packages/init/package-lock.json @@ -1282,6 +1282,2702 @@ "remove-trailing-separator": "^1.0.1" } }, + "npm": { + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/npm/-/npm-6.4.1.tgz", + "integrity": "sha512-mXJL1NTVU136PtuopXCUQaNWuHlXCTp4McwlSW8S9/Aj8OEPAlSBgo8og7kJ01MjCDrkmqFQTvN5tTEhBMhXQg==", + "requires": { + "JSONStream": "^1.3.4", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "aproba": "~1.2.0", + "archy": "~1.0.0", + "bin-links": "^1.1.2", + "bluebird": "~3.5.1", + "byte-size": "^4.0.3", + "cacache": "^11.2.0", + "call-limit": "~1.1.0", + "chownr": "~1.0.1", + "ci-info": "^1.4.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.5.0", + "cmd-shim": "~2.0.2", + "columnify": "~1.5.4", + "config-chain": "~1.1.11", + "debuglog": "*", + "detect-indent": "~5.0.0", + "detect-newline": "^2.1.0", + "dezalgo": "~1.0.3", + "editor": "~1.0.0", + "figgy-pudding": "^3.4.1", + "find-npm-prefix": "^1.0.2", + "fs-vacuum": "~1.2.10", + "fs-write-stream-atomic": "~1.0.10", + "gentle-fs": "^2.0.1", + "glob": "~7.1.2", + "graceful-fs": "~4.1.11", + "has-unicode": "~2.0.1", + "hosted-git-info": "^2.7.1", + "iferr": "^1.0.2", + "imurmurhash": "*", + "inflight": "~1.0.6", + "inherits": "~2.0.3", + "ini": "^1.3.5", + "init-package-json": "^1.10.3", + "is-cidr": "^2.0.6", + "json-parse-better-errors": "^1.0.2", + "lazy-property": "~1.0.0", + "libcipm": "^2.0.2", + "libnpmhook": "^4.0.1", + "libnpx": "^10.2.0", + "lock-verify": "^2.0.2", + "lockfile": "^1.0.4", + "lodash._baseindexof": "*", + "lodash._baseuniq": "~4.6.0", + "lodash._bindcallback": "*", + "lodash._cacheindexof": "*", + "lodash._createcache": "*", + "lodash._getnative": "*", + "lodash.clonedeep": "~4.5.0", + "lodash.restparam": "*", + "lodash.union": "~4.6.0", + "lodash.uniq": "~4.5.0", + "lodash.without": "~4.4.0", + "lru-cache": "^4.1.3", + "meant": "~1.0.1", + "mississippi": "^3.0.0", + "mkdirp": "~0.5.1", + "move-concurrently": "^1.0.1", + "node-gyp": "^3.8.0", + "nopt": "~4.0.1", + "normalize-package-data": "~2.4.0", + "npm-audit-report": "^1.3.1", + "npm-cache-filename": "~1.0.2", + "npm-install-checks": "~3.0.0", + "npm-lifecycle": "^2.1.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.11", + "npm-pick-manifest": "^2.1.0", + "npm-profile": "^3.0.2", + "npm-registry-client": "^8.6.0", + "npm-registry-fetch": "^1.1.0", + "npm-user-validate": "~1.0.0", + "npmlog": "~4.1.2", + "once": "~1.4.0", + "opener": "^1.5.0", + "osenv": "^0.1.5", + "pacote": "^8.1.6", + "path-is-inside": "~1.0.2", + "promise-inflight": "~1.0.1", + "qrcode-terminal": "^0.12.0", + "query-string": "^6.1.0", + "qw": "~1.0.1", + "read": "~1.0.7", + "read-cmd-shim": "~1.0.1", + "read-installed": "~4.0.3", + "read-package-json": "^2.0.13", + "read-package-tree": "^5.2.1", + "readable-stream": "^2.3.6", + "readdir-scoped-modules": "*", + "request": "^2.88.0", + "retry": "^0.12.0", + "rimraf": "~2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "sha": "~2.0.1", + "slide": "~1.1.6", + "sorted-object": "~2.0.1", + "sorted-union-stream": "~2.1.3", + "ssri": "^6.0.0", + "stringify-package": "^1.0.0", + "tar": "^4.4.6", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "uid-number": "0.0.6", + "umask": "~1.1.0", + "unique-filename": "~1.1.0", + "unpipe": "~1.0.0", + "update-notifier": "^2.5.0", + "uuid": "^3.3.2", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^1.3.1", + "worker-farm": "^1.6.0", + "write-file-atomic": "^2.3.0" + }, + "dependencies": { + "JSONStream": { + "version": "1.3.4", + "bundled": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "abbrev": { + "version": "1.1.1", + "bundled": true + }, + "agent-base": { + "version": "4.2.0", + "bundled": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.4.1", + "bundled": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "5.5.2", + "bundled": true, + "requires": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "ansi-align": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.0.0" + } + }, + "ansi-regex": { + "version": "2.1.1", + "bundled": true + }, + "ansi-styles": { + "version": "3.2.1", + "bundled": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "ansicolors": { + "version": "0.3.2", + "bundled": true + }, + "ansistyles": { + "version": "0.1.3", + "bundled": true + }, + "aproba": { + "version": "1.2.0", + "bundled": true + }, + "archy": { + "version": "1.0.0", + "bundled": true + }, + "are-we-there-yet": { + "version": "1.1.4", + "bundled": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "asap": { + "version": "2.0.6", + "bundled": true + }, + "asn1": { + "version": "0.2.4", + "bundled": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "assert-plus": { + "version": "1.0.0", + "bundled": true + }, + "asynckit": { + "version": "0.4.0", + "bundled": true + }, + "aws-sign2": { + "version": "0.7.0", + "bundled": true + }, + "aws4": { + "version": "1.8.0", + "bundled": true + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "bundled": true, + "optional": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "bin-links": { + "version": "1.1.2", + "bundled": true, + "requires": { + "bluebird": "^3.5.0", + "cmd-shim": "^2.0.2", + "gentle-fs": "^2.0.0", + "graceful-fs": "^4.1.11", + "write-file-atomic": "^2.3.0" + } + }, + "block-stream": { + "version": "0.0.9", + "bundled": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.5.1", + "bundled": true + }, + "boxen": { + "version": "1.3.0", + "bundled": true, + "requires": { + "ansi-align": "^2.0.0", + "camelcase": "^4.0.0", + "chalk": "^2.0.1", + "cli-boxes": "^1.0.0", + "string-width": "^2.0.0", + "term-size": "^1.2.0", + "widest-line": "^2.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "buffer-from": { + "version": "1.0.0", + "bundled": true + }, + "builtin-modules": { + "version": "1.1.1", + "bundled": true + }, + "builtins": { + "version": "1.0.3", + "bundled": true + }, + "byline": { + "version": "5.0.0", + "bundled": true + }, + "byte-size": { + "version": "4.0.3", + "bundled": true + }, + "cacache": { + "version": "11.2.0", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "figgy-pudding": "^3.1.0", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^6.0.0", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "call-limit": { + "version": "1.1.0", + "bundled": true + }, + "camelcase": { + "version": "4.1.0", + "bundled": true + }, + "capture-stack-trace": { + "version": "1.0.0", + "bundled": true + }, + "caseless": { + "version": "0.12.0", + "bundled": true + }, + "chalk": { + "version": "2.4.1", + "bundled": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chownr": { + "version": "1.0.1", + "bundled": true + }, + "ci-info": { + "version": "1.4.0", + "bundled": true + }, + "cidr-regex": { + "version": "2.0.9", + "bundled": true, + "requires": { + "ip-regex": "^2.1.0" + } + }, + "cli-boxes": { + "version": "1.0.0", + "bundled": true + }, + "cli-columns": { + "version": "3.1.2", + "bundled": true, + "requires": { + "string-width": "^2.0.0", + "strip-ansi": "^3.0.1" + } + }, + "cli-table3": { + "version": "0.5.0", + "bundled": true, + "requires": { + "colors": "^1.1.2", + "object-assign": "^4.1.0", + "string-width": "^2.1.1" + } + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "1.0.4", + "bundled": true + }, + "cmd-shim": { + "version": "2.0.2", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "mkdirp": "~0.5.0" + } + }, + "co": { + "version": "4.6.0", + "bundled": true + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true + }, + "color-convert": { + "version": "1.9.1", + "bundled": true, + "requires": { + "color-name": "^1.1.1" + } + }, + "color-name": { + "version": "1.1.3", + "bundled": true + }, + "colors": { + "version": "1.1.2", + "bundled": true, + "optional": true + }, + "columnify": { + "version": "1.5.4", + "bundled": true, + "requires": { + "strip-ansi": "^3.0.0", + "wcwidth": "^1.0.0" + } + }, + "combined-stream": { + "version": "1.0.6", + "bundled": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "bundled": true + }, + "concat-stream": { + "version": "1.6.2", + "bundled": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "config-chain": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "configstore": { + "version": "3.1.2", + "bundled": true, + "requires": { + "dot-prop": "^4.1.0", + "graceful-fs": "^4.1.2", + "make-dir": "^1.0.0", + "unique-string": "^1.0.0", + "write-file-atomic": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "console-control-strings": { + "version": "1.1.0", + "bundled": true + }, + "copy-concurrently": { + "version": "1.0.5", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "bundled": true + }, + "create-error-class": { + "version": "3.0.2", + "bundled": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "cross-spawn": { + "version": "5.1.0", + "bundled": true, + "requires": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "crypto-random-string": { + "version": "1.0.0", + "bundled": true + }, + "cyclist": { + "version": "0.2.2", + "bundled": true + }, + "dashdash": { + "version": "1.14.1", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "debug": { + "version": "3.1.0", + "bundled": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "bundled": true + } + } + }, + "debuglog": { + "version": "1.0.1", + "bundled": true + }, + "decamelize": { + "version": "1.2.0", + "bundled": true + }, + "decode-uri-component": { + "version": "0.2.0", + "bundled": true + }, + "deep-extend": { + "version": "0.5.1", + "bundled": true + }, + "defaults": { + "version": "1.0.3", + "bundled": true, + "requires": { + "clone": "^1.0.2" + } + }, + "delayed-stream": { + "version": "1.0.0", + "bundled": true + }, + "delegates": { + "version": "1.0.0", + "bundled": true + }, + "detect-indent": { + "version": "5.0.0", + "bundled": true + }, + "detect-newline": { + "version": "2.1.0", + "bundled": true + }, + "dezalgo": { + "version": "1.0.3", + "bundled": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "dot-prop": { + "version": "4.2.0", + "bundled": true, + "requires": { + "is-obj": "^1.0.0" + } + }, + "dotenv": { + "version": "5.0.1", + "bundled": true + }, + "duplexer3": { + "version": "0.1.4", + "bundled": true + }, + "duplexify": { + "version": "3.6.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ecc-jsbn": { + "version": "0.1.2", + "bundled": true, + "optional": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "editor": { + "version": "1.0.0", + "bundled": true + }, + "encoding": { + "version": "0.1.12", + "bundled": true, + "requires": { + "iconv-lite": "~0.4.13" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "requires": { + "once": "^1.4.0" + } + }, + "err-code": { + "version": "1.1.2", + "bundled": true + }, + "errno": { + "version": "0.1.7", + "bundled": true, + "requires": { + "prr": "~1.0.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "bundled": true + }, + "es6-promisify": { + "version": "5.0.0", + "bundled": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "escape-string-regexp": { + "version": "1.0.5", + "bundled": true + }, + "execa": { + "version": "0.7.0", + "bundled": true, + "requires": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + } + }, + "extend": { + "version": "3.0.2", + "bundled": true + }, + "extsprintf": { + "version": "1.3.0", + "bundled": true + }, + "fast-deep-equal": { + "version": "1.1.0", + "bundled": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "bundled": true + }, + "figgy-pudding": { + "version": "3.4.1", + "bundled": true + }, + "find-npm-prefix": { + "version": "1.0.2", + "bundled": true + }, + "find-up": { + "version": "2.1.0", + "bundled": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "flush-write-stream": { + "version": "1.0.3", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.4" + } + }, + "forever-agent": { + "version": "0.6.1", + "bundled": true + }, + "form-data": { + "version": "2.3.2", + "bundled": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "1.0.6", + "mime-types": "^2.1.12" + } + }, + "from2": { + "version": "2.3.0", + "bundled": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.5", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "fs-vacuum": { + "version": "1.2.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "path-is-inside": "^1.0.1", + "rimraf": "^2.5.2" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true + }, + "fstream": { + "version": "1.0.11", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "gauge": { + "version": "2.7.4", + "bundled": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "genfun": { + "version": "4.0.1", + "bundled": true + }, + "gentle-fs": { + "version": "2.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.2", + "fs-vacuum": "^1.2.10", + "graceful-fs": "^4.1.11", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "path-is-inside": "^1.0.2", + "read-cmd-shim": "^1.0.1", + "slide": "^1.1.6" + }, + "dependencies": { + "iferr": { + "version": "0.1.5", + "bundled": true + } + } + }, + "get-caller-file": { + "version": "1.0.2", + "bundled": true + }, + "get-stream": { + "version": "3.0.0", + "bundled": true + }, + "getpass": { + "version": "0.1.7", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "bundled": 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" + } + }, + "global-dirs": { + "version": "0.1.1", + "bundled": true, + "requires": { + "ini": "^1.3.4" + } + }, + "got": { + "version": "6.7.1", + "bundled": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.11", + "bundled": true + }, + "har-schema": { + "version": "2.0.0", + "bundled": true + }, + "har-validator": { + "version": "5.1.0", + "bundled": true, + "requires": { + "ajv": "^5.3.0", + "har-schema": "^2.0.0" + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true + }, + "has-unicode": { + "version": "2.0.1", + "bundled": true + }, + "hosted-git-info": { + "version": "2.7.1", + "bundled": true + }, + "http-cache-semantics": { + "version": "3.8.1", + "bundled": true + }, + "http-proxy-agent": { + "version": "2.1.0", + "bundled": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + } + }, + "http-signature": { + "version": "1.2.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-proxy-agent": { + "version": "2.2.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "debug": "^3.1.0" + } + }, + "humanize-ms": { + "version": "1.2.1", + "bundled": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.23", + "bundled": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "1.0.2", + "bundled": true + }, + "ignore-walk": { + "version": "3.0.1", + "bundled": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "bundled": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true + }, + "ini": { + "version": "1.3.5", + "bundled": true + }, + "init-package-json": { + "version": "1.10.3", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "npm-package-arg": "^4.0.0 || ^5.0.0 || ^6.0.0", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "1 || 2", + "semver": "2.x || 3.x || 4 || 5", + "validate-npm-package-license": "^3.0.1", + "validate-npm-package-name": "^3.0.0" + } + }, + "invert-kv": { + "version": "1.0.0", + "bundled": true + }, + "ip": { + "version": "1.1.5", + "bundled": true + }, + "ip-regex": { + "version": "2.1.0", + "bundled": true + }, + "is-builtin-module": { + "version": "1.0.0", + "bundled": true, + "requires": { + "builtin-modules": "^1.0.0" + } + }, + "is-ci": { + "version": "1.1.0", + "bundled": true, + "requires": { + "ci-info": "^1.0.0" + } + }, + "is-cidr": { + "version": "2.0.6", + "bundled": true, + "requires": { + "cidr-regex": "^2.0.8" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-installed-globally": { + "version": "0.1.0", + "bundled": true, + "requires": { + "global-dirs": "^0.1.0", + "is-path-inside": "^1.0.0" + } + }, + "is-npm": { + "version": "1.0.0", + "bundled": true + }, + "is-obj": { + "version": "1.0.1", + "bundled": true + }, + "is-path-inside": { + "version": "1.0.1", + "bundled": true, + "requires": { + "path-is-inside": "^1.0.1" + } + }, + "is-redirect": { + "version": "1.0.0", + "bundled": true + }, + "is-retry-allowed": { + "version": "1.1.0", + "bundled": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true + }, + "is-typedarray": { + "version": "1.0.0", + "bundled": true + }, + "isarray": { + "version": "1.0.0", + "bundled": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true + }, + "isstream": { + "version": "0.1.2", + "bundled": true + }, + "jsbn": { + "version": "0.1.1", + "bundled": true, + "optional": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true + }, + "json-schema": { + "version": "0.2.3", + "bundled": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "bundled": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "bundled": true + }, + "jsonparse": { + "version": "1.3.1", + "bundled": true + }, + "jsprim": { + "version": "1.4.1", + "bundled": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "latest-version": { + "version": "3.1.0", + "bundled": true, + "requires": { + "package-json": "^4.0.0" + } + }, + "lazy-property": { + "version": "1.0.0", + "bundled": true + }, + "lcid": { + "version": "1.0.0", + "bundled": true, + "requires": { + "invert-kv": "^1.0.0" + } + }, + "libcipm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "bin-links": "^1.1.2", + "bluebird": "^3.5.1", + "find-npm-prefix": "^1.0.2", + "graceful-fs": "^4.1.11", + "lock-verify": "^2.0.2", + "mkdirp": "^0.5.1", + "npm-lifecycle": "^2.0.3", + "npm-logical-tree": "^1.2.1", + "npm-package-arg": "^6.1.0", + "pacote": "^8.1.6", + "protoduck": "^5.0.0", + "read-package-json": "^2.0.13", + "rimraf": "^2.6.2", + "worker-farm": "^1.6.0" + } + }, + "libnpmhook": { + "version": "4.0.1", + "bundled": true, + "requires": { + "figgy-pudding": "^3.1.0", + "npm-registry-fetch": "^3.0.0" + }, + "dependencies": { + "npm-registry-fetch": { + "version": "3.1.1", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^3.1.0", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^4.0.0", + "npm-package-arg": "^6.0.0" + } + } + } + }, + "libnpx": { + "version": "10.2.0", + "bundled": true, + "requires": { + "dotenv": "^5.0.1", + "npm-package-arg": "^6.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.0", + "update-notifier": "^2.3.0", + "which": "^1.3.0", + "y18n": "^4.0.0", + "yargs": "^11.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "lock-verify": { + "version": "2.0.2", + "bundled": true, + "requires": { + "npm-package-arg": "^5.1.2 || 6", + "semver": "^5.4.1" + } + }, + "lockfile": { + "version": "1.0.4", + "bundled": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash._baseindexof": { + "version": "3.1.0", + "bundled": true + }, + "lodash._baseuniq": { + "version": "4.6.0", + "bundled": true, + "requires": { + "lodash._createset": "~4.0.0", + "lodash._root": "~3.0.0" + } + }, + "lodash._bindcallback": { + "version": "3.0.1", + "bundled": true + }, + "lodash._cacheindexof": { + "version": "3.0.2", + "bundled": true + }, + "lodash._createcache": { + "version": "3.1.2", + "bundled": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + }, + "lodash._createset": { + "version": "4.0.3", + "bundled": true + }, + "lodash._getnative": { + "version": "3.9.1", + "bundled": true + }, + "lodash._root": { + "version": "3.0.1", + "bundled": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "bundled": true + }, + "lodash.restparam": { + "version": "3.6.1", + "bundled": true + }, + "lodash.union": { + "version": "4.6.0", + "bundled": true + }, + "lodash.uniq": { + "version": "4.5.0", + "bundled": true + }, + "lodash.without": { + "version": "4.4.0", + "bundled": true + }, + "lowercase-keys": { + "version": "1.0.1", + "bundled": true + }, + "lru-cache": { + "version": "4.1.3", + "bundled": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "requires": { + "pify": "^3.0.0" + } + }, + "make-fetch-happen": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^11.0.1", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.1", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^4.0.0", + "ssri": "^6.0.0" + } + }, + "meant": { + "version": "1.0.1", + "bundled": true + }, + "mem": { + "version": "1.1.0", + "bundled": true, + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "mime-db": { + "version": "1.35.0", + "bundled": true + }, + "mime-types": { + "version": "2.1.19", + "bundled": true, + "requires": { + "mime-db": "~1.35.0" + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.8", + "bundled": true + }, + "minipass": { + "version": "2.3.3", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "minizlib": { + "version": "1.1.0", + "bundled": true, + "requires": { + "minipass": "^2.2.1" + } + }, + "mississippi": { + "version": "3.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "requires": { + "minimist": "0.0.8" + } + }, + "move-concurrently": { + "version": "1.0.1", + "bundled": true, + "requires": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "ms": { + "version": "2.1.1", + "bundled": true + }, + "mute-stream": { + "version": "0.0.7", + "bundled": true + }, + "node-fetch-npm": { + "version": "2.0.2", + "bundled": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "node-gyp": { + "version": "3.8.0", + "bundled": true, + "requires": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "dependencies": { + "nopt": { + "version": "3.0.6", + "bundled": true, + "requires": { + "abbrev": "1" + } + }, + "semver": { + "version": "5.3.0", + "bundled": true + }, + "tar": { + "version": "2.2.1", + "bundled": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.2", + "inherits": "2" + } + } + } + }, + "nopt": { + "version": "4.0.1", + "bundled": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.1.4", + "is-builtin-module": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-audit-report": { + "version": "1.3.1", + "bundled": true, + "requires": { + "cli-table3": "^0.5.0", + "console-control-strings": "^1.1.0" + } + }, + "npm-bundled": { + "version": "1.0.5", + "bundled": true + }, + "npm-cache-filename": { + "version": "1.0.2", + "bundled": true + }, + "npm-install-checks": { + "version": "3.0.0", + "bundled": true, + "requires": { + "semver": "^2.3.0 || 3.x || 4 || 5" + } + }, + "npm-lifecycle": { + "version": "2.1.0", + "bundled": true, + "requires": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.11", + "node-gyp": "^3.8.0", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "npm-logical-tree": { + "version": "1.2.1", + "bundled": true + }, + "npm-package-arg": { + "version": "6.1.0", + "bundled": true, + "requires": { + "hosted-git-info": "^2.6.0", + "osenv": "^0.1.5", + "semver": "^5.5.0", + "validate-npm-package-name": "^3.0.0" + } + }, + "npm-packlist": { + "version": "1.1.11", + "bundled": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "2.1.0", + "bundled": true, + "requires": { + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + } + }, + "npm-profile": { + "version": "3.0.2", + "bundled": true, + "requires": { + "aproba": "^1.1.2 || 2", + "make-fetch-happen": "^2.5.0 || 3 || 4" + } + }, + "npm-registry-client": { + "version": "8.6.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.2", + "graceful-fs": "^4.1.6", + "normalize-package-data": "~1.0.1 || ^2.0.0", + "npm-package-arg": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0", + "npmlog": "2 || ^3.1.0 || ^4.0.0", + "once": "^1.3.3", + "request": "^2.74.0", + "retry": "^0.10.0", + "safe-buffer": "^5.1.1", + "semver": "2 >=2.2.1 || 3.x || 4 || 5", + "slide": "^1.1.3", + "ssri": "^5.2.4" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + }, + "ssri": { + "version": "5.3.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-registry-fetch": { + "version": "1.1.0", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "figgy-pudding": "^2.0.1", + "lru-cache": "^4.1.2", + "make-fetch-happen": "^3.0.0", + "npm-package-arg": "^6.0.0", + "safe-buffer": "^5.1.1" + }, + "dependencies": { + "cacache": { + "version": "10.0.4", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + }, + "dependencies": { + "mississippi": { + "version": "2.0.0", + "bundled": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + } + } + }, + "figgy-pudding": { + "version": "2.0.1", + "bundled": true + }, + "make-fetch-happen": { + "version": "3.0.0", + "bundled": true, + "requires": { + "agentkeepalive": "^3.4.1", + "cacache": "^10.0.4", + "http-cache-semantics": "^3.8.1", + "http-proxy-agent": "^2.1.0", + "https-proxy-agent": "^2.2.0", + "lru-cache": "^4.1.2", + "mississippi": "^3.0.0", + "node-fetch-npm": "^2.0.2", + "promise-retry": "^1.1.1", + "socks-proxy-agent": "^3.0.1", + "ssri": "^5.2.4" + } + }, + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "smart-buffer": { + "version": "1.1.15", + "bundled": true + }, + "socks": { + "version": "1.1.10", + "bundled": true, + "requires": { + "ip": "^1.1.4", + "smart-buffer": "^1.0.13" + } + }, + "socks-proxy-agent": { + "version": "3.0.1", + "bundled": true, + "requires": { + "agent-base": "^4.1.0", + "socks": "^1.1.10" + } + }, + "ssri": { + "version": "5.3.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.1.1" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npm-user-validate": { + "version": "1.0.0", + "bundled": true + }, + "npmlog": { + "version": "4.1.2", + "bundled": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true + }, + "oauth-sign": { + "version": "0.9.0", + "bundled": true + }, + "object-assign": { + "version": "4.1.1", + "bundled": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "requires": { + "wrappy": "1" + } + }, + "opener": { + "version": "1.5.0", + "bundled": true + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true + }, + "os-locale": { + "version": "2.1.0", + "bundled": true, + "requires": { + "execa": "^0.7.0", + "lcid": "^1.0.0", + "mem": "^1.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "bundled": true + }, + "osenv": { + "version": "0.1.5", + "bundled": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-finally": { + "version": "1.0.0", + "bundled": true + }, + "p-limit": { + "version": "1.2.0", + "bundled": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "bundled": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "bundled": true + }, + "package-json": { + "version": "4.0.1", + "bundled": true, + "requires": { + "got": "^6.7.1", + "registry-auth-token": "^3.0.1", + "registry-url": "^3.0.3", + "semver": "^5.1.0" + } + }, + "pacote": { + "version": "8.1.6", + "bundled": true, + "requires": { + "bluebird": "^3.5.1", + "cacache": "^11.0.2", + "get-stream": "^3.0.0", + "glob": "^7.1.2", + "lru-cache": "^4.1.3", + "make-fetch-happen": "^4.0.1", + "minimatch": "^3.0.4", + "minipass": "^2.3.3", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "normalize-package-data": "^2.4.0", + "npm-package-arg": "^6.1.0", + "npm-packlist": "^1.1.10", + "npm-pick-manifest": "^2.1.0", + "osenv": "^0.1.5", + "promise-inflight": "^1.0.1", + "promise-retry": "^1.1.1", + "protoduck": "^5.0.0", + "rimraf": "^2.6.2", + "safe-buffer": "^5.1.2", + "semver": "^5.5.0", + "ssri": "^6.0.0", + "tar": "^4.4.3", + "unique-filename": "^1.1.0", + "which": "^1.3.0" + } + }, + "parallel-transform": { + "version": "1.1.0", + "bundled": true, + "requires": { + "cyclist": "~0.2.2", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true + }, + "path-is-inside": { + "version": "1.0.2", + "bundled": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true + }, + "performance-now": { + "version": "2.1.0", + "bundled": true + }, + "pify": { + "version": "3.0.0", + "bundled": true + }, + "prepend-http": { + "version": "1.0.4", + "bundled": true + }, + "process-nextick-args": { + "version": "2.0.0", + "bundled": true + }, + "promise-inflight": { + "version": "1.0.1", + "bundled": true + }, + "promise-retry": { + "version": "1.1.1", + "bundled": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + }, + "dependencies": { + "retry": { + "version": "0.10.1", + "bundled": true + } + } + }, + "promzard": { + "version": "0.3.0", + "bundled": true, + "requires": { + "read": "1" + } + }, + "proto-list": { + "version": "1.2.4", + "bundled": true + }, + "protoduck": { + "version": "5.0.0", + "bundled": true, + "requires": { + "genfun": "^4.0.1" + } + }, + "prr": { + "version": "1.0.1", + "bundled": true + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true + }, + "psl": { + "version": "1.1.29", + "bundled": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "bundled": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "bundled": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "bundled": true + }, + "qs": { + "version": "6.5.2", + "bundled": true + }, + "query-string": { + "version": "6.1.0", + "bundled": true, + "requires": { + "decode-uri-component": "^0.2.0", + "strict-uri-encode": "^2.0.0" + } + }, + "qw": { + "version": "1.0.1", + "bundled": true + }, + "rc": { + "version": "1.2.7", + "bundled": true, + "requires": { + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "bundled": true + } + } + }, + "read": { + "version": "1.0.7", + "bundled": true, + "requires": { + "mute-stream": "~0.0.4" + } + }, + "read-cmd-shim": { + "version": "1.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2" + } + }, + "read-installed": { + "version": "4.0.3", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "graceful-fs": "^4.1.2", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "semver": "2 || 3 || 4 || 5", + "slide": "~1.1.3", + "util-extend": "^1.0.1" + } + }, + "read-package-json": { + "version": "2.0.13", + "bundled": true, + "requires": { + "glob": "^7.1.1", + "graceful-fs": "^4.1.2", + "json-parse-better-errors": "^1.0.1", + "normalize-package-data": "^2.0.0", + "slash": "^1.0.0" + } + }, + "read-package-tree": { + "version": "5.2.1", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "once": "^1.3.0", + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0" + } + }, + "readable-stream": { + "version": "2.3.6", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdir-scoped-modules": { + "version": "1.0.2", + "bundled": true, + "requires": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "registry-auth-token": { + "version": "3.3.2", + "bundled": true, + "requires": { + "rc": "^1.1.6", + "safe-buffer": "^5.0.1" + } + }, + "registry-url": { + "version": "3.1.0", + "bundled": true, + "requires": { + "rc": "^1.0.1" + } + }, + "request": { + "version": "2.88.0", + "bundled": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.0", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.4.3", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true + }, + "retry": { + "version": "0.12.0", + "bundled": true + }, + "rimraf": { + "version": "2.6.2", + "bundled": true, + "requires": { + "glob": "^7.0.5" + } + }, + "run-queue": { + "version": "1.0.3", + "bundled": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true + }, + "safer-buffer": { + "version": "2.1.2", + "bundled": true + }, + "semver": { + "version": "5.5.0", + "bundled": true + }, + "semver-diff": { + "version": "2.1.0", + "bundled": true, + "requires": { + "semver": "^5.0.3" + } + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true + }, + "sha": { + "version": "2.0.1", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.2", + "readable-stream": "^2.0.2" + } + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true + }, + "slash": { + "version": "1.0.0", + "bundled": true + }, + "slide": { + "version": "1.1.6", + "bundled": true + }, + "smart-buffer": { + "version": "4.0.1", + "bundled": true + }, + "socks": { + "version": "2.2.0", + "bundled": true, + "requires": { + "ip": "^1.1.5", + "smart-buffer": "^4.0.1" + } + }, + "socks-proxy-agent": { + "version": "4.0.1", + "bundled": true, + "requires": { + "agent-base": "~4.2.0", + "socks": "~2.2.0" + } + }, + "sorted-object": { + "version": "2.0.1", + "bundled": true + }, + "sorted-union-stream": { + "version": "2.1.3", + "bundled": true, + "requires": { + "from2": "^1.3.0", + "stream-iterate": "^1.1.0" + }, + "dependencies": { + "from2": { + "version": "1.3.0", + "bundled": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~1.1.10" + } + }, + "isarray": { + "version": "0.0.1", + "bundled": true + }, + "readable-stream": { + "version": "1.1.14", + "bundled": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "bundled": true + } + } + }, + "spdx-correct": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.1.0", + "bundled": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.0", + "bundled": true + }, + "sshpk": { + "version": "1.14.2", + "bundled": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "ssri": { + "version": "6.0.0", + "bundled": true + }, + "stream-each": { + "version": "1.2.2", + "bundled": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-iterate": { + "version": "1.2.0", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.0", + "bundled": true + }, + "strict-uri-encode": { + "version": "2.0.0", + "bundled": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string_decoder": { + "version": "1.1.1", + "bundled": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-package": { + "version": "1.0.0", + "bundled": true + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true + }, + "strip-json-comments": { + "version": "2.0.1", + "bundled": true + }, + "supports-color": { + "version": "5.4.0", + "bundled": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "tar": { + "version": "4.4.6", + "bundled": true, + "requires": { + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.3.3", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.2" + }, + "dependencies": { + "yallist": { + "version": "3.0.2", + "bundled": true + } + } + }, + "term-size": { + "version": "1.2.0", + "bundled": true, + "requires": { + "execa": "^0.7.0" + } + }, + "text-table": { + "version": "0.2.0", + "bundled": true + }, + "through": { + "version": "2.3.8", + "bundled": true + }, + "through2": { + "version": "2.0.3", + "bundled": true, + "requires": { + "readable-stream": "^2.1.5", + "xtend": "~4.0.1" + } + }, + "timed-out": { + "version": "4.0.1", + "bundled": true + }, + "tiny-relative-date": { + "version": "1.3.0", + "bundled": true + }, + "tough-cookie": { + "version": "2.4.3", + "bundled": true, + "requires": { + "psl": "^1.1.24", + "punycode": "^1.4.1" + } + }, + "tunnel-agent": { + "version": "0.6.0", + "bundled": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "bundled": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "bundled": true + }, + "uid-number": { + "version": "0.0.6", + "bundled": true + }, + "umask": { + "version": "1.1.0", + "bundled": true + }, + "unique-filename": { + "version": "1.1.0", + "bundled": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.0", + "bundled": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "1.0.0", + "bundled": true, + "requires": { + "crypto-random-string": "^1.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "bundled": true + }, + "unzip-response": { + "version": "2.0.1", + "bundled": true + }, + "update-notifier": { + "version": "2.5.0", + "bundled": true, + "requires": { + "boxen": "^1.2.1", + "chalk": "^2.0.1", + "configstore": "^3.0.0", + "import-lazy": "^2.1.0", + "is-ci": "^1.0.10", + "is-installed-globally": "^0.1.0", + "is-npm": "^1.0.0", + "latest-version": "^3.0.0", + "semver-diff": "^2.0.0", + "xdg-basedir": "^3.0.0" + } + }, + "url-parse-lax": { + "version": "1.0.0", + "bundled": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "util-deprecate": { + "version": "1.0.2", + "bundled": true + }, + "util-extend": { + "version": "1.0.3", + "bundled": true + }, + "uuid": { + "version": "3.3.2", + "bundled": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "bundled": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "verror": { + "version": "1.10.0", + "bundled": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "bundled": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true + }, + "wide-align": { + "version": "1.1.2", + "bundled": true, + "requires": { + "string-width": "^1.0.2" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "widest-line": { + "version": "2.0.0", + "bundled": true, + "requires": { + "string-width": "^2.1.1" + } + }, + "worker-farm": { + "version": "1.6.0", + "bundled": true, + "requires": { + "errno": "~0.1.7" + } + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "string-width": { + "version": "1.0.2", + "bundled": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true + }, + "write-file-atomic": { + "version": "2.3.0", + "bundled": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "xdg-basedir": { + "version": "3.0.0", + "bundled": true + }, + "xtend": { + "version": "4.0.1", + "bundled": true + }, + "y18n": { + "version": "4.0.0", + "bundled": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true + }, + "yargs": { + "version": "11.0.0", + "bundled": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^2.0.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" + }, + "dependencies": { + "y18n": { + "version": "3.2.1", + "bundled": true + } + } + }, + "yargs-parser": { + "version": "9.0.2", + "bundled": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, "number-is-nan": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", diff --git a/packages/init/package.json b/packages/init/package.json index ad55754e4e6..b5aec9aa4ba 100644 --- a/packages/init/package.json +++ b/packages/init/package.json @@ -13,6 +13,7 @@ "@webpack-cli/utils": "^0.1.2", "chalk": "^2.4.1", "jscodeshift": "^0.5.1", + "npm": "^6.4.1", "p-each-series": "^1.0.0" }, "devDependencies": { From e9f941ddf4f767a679f88941059d39143ada80c3 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Mon, 3 Dec 2018 15:36:44 +0530 Subject: [PATCH 02/14] feat(ui-init): interface created! --- packages/init/config.ts | 42 +++++++++++++++++++++++++++++++++++++++++ packages/init/index.ts | 14 ++++++++++++-- 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 packages/init/config.ts diff --git a/packages/init/config.ts b/packages/init/config.ts new file mode 100644 index 00000000000..dc791be1bed --- /dev/null +++ b/packages/init/config.ts @@ -0,0 +1,42 @@ +// Interface from @webpack-cli/generators/types +import {IWebpackOptions} from "@webpack-cli/generators/types" +/** + * Config class responsible for handling config generation + */ +export class Config { + // Data members + private configName: string; + private topScope: string[]; + private webpackOptions: IWebpackOptions; + constructor() { + this.configName = ""; + this.topScope = [""]; + this.webpackOptions = {}; + } + + public pushToTopScope(...args: string[]): void { + args.forEach((el) => { + this.topScope.push(el); + }); + } + + public setConfigName(configName: string): void { + this.configName = configName; + } + + public setWebpackOption(optionName: string, value: any): void { + this.webpackOptions.optionName = value; + } + + public exportConfig(): Object { + const outputConfig = { + config: { + configName: this.configName, + topScope: this.topScope, + webpackOptions: this.webpackOptions, + }, + configPath : process.cwd(), + }; + return outputConfig; + } +} diff --git a/packages/init/index.ts b/packages/init/index.ts index 6f543d14042..a0437c8cd1a 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -1,5 +1,6 @@ import defaultGenerator from "@webpack-cli/generators/init-generator"; import modifyConfigHelper from "@webpack-cli/utils/modify-config-helper"; +import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; import npmPackagesExists from "@webpack-cli/utils/npm-packages-exists"; import runTransform from "@webpack-cli/utils/scaffold"; @@ -23,12 +24,19 @@ export default function initializeInquirer(...args: string[]): Function | void { return npmPackagesExists(packages); } -export function UIManager(dependencies: string[]) { - // tslint:disable-next-line:no-var-requires +/** + * UI Manager function which takes answers and dependendencies as input + * and generates required scaffolds + * @param dependencies - array of packages needed to be installed + * @param config - Config object to be returned from UI + */ + +export function UIManager(dependencies: string[], config: ITransformConfig) { const npm = require("npm"); const returnObject: { errors: String[], } = {errors: []}; + // Install Dependencies npm.load((err) => { if (err) { @@ -46,5 +54,7 @@ export function UIManager(dependencies: string[]) { }); }); + // Generate scaffolds + runTransform(config, "init"); return returnObject; } From 1e3934d1da43f30f06033aac0d12ec46efce12ad Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Tue, 11 Dec 2018 12:07:15 +0530 Subject: [PATCH 03/14] chore: use spawnChild for install deps Use interface for config returned from exportConfig in Config Class --- packages/init/config.ts | 3 ++- packages/init/index.ts | 20 +++++--------------- 2 files changed, 7 insertions(+), 16 deletions(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index dc791be1bed..0357d320aae 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -1,5 +1,6 @@ // Interface from @webpack-cli/generators/types import {IWebpackOptions} from "@webpack-cli/generators/types" +import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; /** * Config class responsible for handling config generation */ @@ -28,7 +29,7 @@ export class Config { this.webpackOptions.optionName = value; } - public exportConfig(): Object { + public exportConfig(): ITransformConfig { const outputConfig = { config: { configName: this.configName, diff --git a/packages/init/index.ts b/packages/init/index.ts index a0437c8cd1a..bb09d6baf82 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -3,7 +3,7 @@ import modifyConfigHelper from "@webpack-cli/utils/modify-config-helper"; import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; import npmPackagesExists from "@webpack-cli/utils/npm-packages-exists"; import runTransform from "@webpack-cli/utils/scaffold"; - +import { spawnChild } from "@webpack-cli/utils/package-manager" /** * * First function to be called after running the init flag. This is a check, @@ -32,25 +32,15 @@ export default function initializeInquirer(...args: string[]): Function | void { */ export function UIManager(dependencies: string[], config: ITransformConfig) { - const npm = require("npm"); const returnObject: { errors: String[], } = {errors: []}; // Install Dependencies - npm.load((err) => { - if (err) { - return { error: err}; - } - dependencies.forEach( (d) => { - process.stdout.write(`🛫 Installing ${d} \n`); - npm.commands.install([d], (er , data) => { - if (er) { returnObject.errors.push(er); } - if (data) { - process.stdout.write(`.`); - } - }); - process.stdout.write(`.. done`); + dependencies.forEach((pkg) => { + const pkgInstallSpawn = spawnChild(pkg); + pkgInstallSpawn.stderr.on("data", (data) => { + returnObject.errors.push(data); }); }); From 59cb1dea45fdc77e31c46a7b623f1486aef6b943 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 12 Dec 2018 20:25:47 +0530 Subject: [PATCH 04/14] feat(ui-init): fix errors --- packages/init/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/init/index.ts b/packages/init/index.ts index bb09d6baf82..ffb53888bec 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -2,8 +2,8 @@ import defaultGenerator from "@webpack-cli/generators/init-generator"; import modifyConfigHelper from "@webpack-cli/utils/modify-config-helper"; import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; import npmPackagesExists from "@webpack-cli/utils/npm-packages-exists"; +import { spawnChild } from "@webpack-cli/utils/package-manager"; import runTransform from "@webpack-cli/utils/scaffold"; -import { spawnChild } from "@webpack-cli/utils/package-manager" /** * * First function to be called after running the init flag. This is a check, @@ -39,9 +39,9 @@ export function UIManager(dependencies: string[], config: ITransformConfig) { // Install Dependencies dependencies.forEach((pkg) => { const pkgInstallSpawn = spawnChild(pkg); - pkgInstallSpawn.stderr.on("data", (data) => { - returnObject.errors.push(data); - }); + if (pkgInstallSpawn.stderr) { + returnObject.errors.push(pkgInstallSpawn.stderr.toString()); + } }); // Generate scaffolds From 67aa6f57d80d6ae50b72c487a28d2cf825c26eb7 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 12 Dec 2018 20:27:22 +0530 Subject: [PATCH 05/14] feat(ui-init): fix errors --- packages/init/config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index 0357d320aae..6292f7f9729 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -1,5 +1,5 @@ // Interface from @webpack-cli/generators/types -import {IWebpackOptions} from "@webpack-cli/generators/types" +import {IWebpackOptions} from "@webpack-cli/generators/types"; import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; /** * Config class responsible for handling config generation @@ -26,7 +26,7 @@ export class Config { } public setWebpackOption(optionName: string, value: any): void { - this.webpackOptions.optionName = value; + this.webpackOptions[optionName] = value; } public exportConfig(): ITransformConfig { From 938eaf897f5cb867daf9eb1bb9354f8a038eee1c Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 12 Dec 2018 20:32:36 +0530 Subject: [PATCH 06/14] feat(ui-init): Support full init options --- packages/init/config.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index 6292f7f9729..9c083c286b6 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -1,6 +1,7 @@ // Interface from @webpack-cli/generators/types import {IWebpackOptions} from "@webpack-cli/generators/types"; import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; +import { PathLike } from "fs"; /** * Config class responsible for handling config generation */ @@ -9,10 +10,14 @@ export class Config { private configName: string; private topScope: string[]; private webpackOptions: IWebpackOptions; + private merge: object; + private configPath: string; constructor() { this.configName = ""; this.topScope = [""]; this.webpackOptions = {}; + this.merge = {}; + this.configPath = process.cwd(); } public pushToTopScope(...args: string[]): void { @@ -33,10 +38,11 @@ export class Config { const outputConfig = { config: { configName: this.configName, + merge: this.merge, topScope: this.topScope, webpackOptions: this.webpackOptions, }, - configPath : process.cwd(), + configPath : this.configPath, }; return outputConfig; } From 990fdf2c5aa57a3338c1f0d848e3b7663a83aa6b Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Wed, 12 Dec 2018 20:43:53 +0530 Subject: [PATCH 07/14] feat(ui-init): documentation of functions --- packages/init/config.ts | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index 9c083c286b6..cfd4ec2e5fd 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -1,7 +1,7 @@ // Interface from @webpack-cli/generators/types import {IWebpackOptions} from "@webpack-cli/generators/types"; import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; -import { PathLike } from "fs"; + /** * Config class responsible for handling config generation */ @@ -12,6 +12,11 @@ export class Config { private webpackOptions: IWebpackOptions; private merge: object; private configPath: string; + + /** + * Contructor for config class + * @summary sets default values of each Data member + */ constructor() { this.configName = ""; this.topScope = [""]; @@ -20,20 +25,39 @@ export class Config { this.configPath = process.cwd(); } + /** + * pushToTopScope + * @summary push lines to topScope of config to be scaffolded + * @param args : string[] ( An array of lines to be pushed to topScope ) + */ public pushToTopScope(...args: string[]): void { args.forEach((el) => { this.topScope.push(el); }); } + /** + * setConfigName + * @summary set name of config to be scaffolded to configName + * @param configName : string (The name of config to be scaffolded) + */ public setConfigName(configName: string): void { this.configName = configName; } + /** + * setWebpackOption + * @param optionName A option Name in accordance to interface IWebpackOptions + * @param value The vaule of the optionName + */ public setWebpackOption(optionName: string, value: any): void { this.webpackOptions[optionName] = value; } + /** + * exportConfig() + * @returns outputConfig The Config to be scaffolded ( passed to runTransform() ) + */ public exportConfig(): ITransformConfig { const outputConfig = { config: { From a127f6b1e123a16810335e0f5ec9c8d3e50dcef7 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 14 Dec 2018 15:54:28 +0530 Subject: [PATCH 08/14] feat(ui-init): Add merge helper function --- packages/init/config.ts | 7 +++++++ tsconfig.packages.json | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index cfd4ec2e5fd..31f3aacc32c 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -53,6 +53,13 @@ export class Config { public setWebpackOption(optionName: string, value: any): void { this.webpackOptions[optionName] = value; } + /** + * mergeWith + * @param config Object to be merged with the given config + */ + public mergeWith(config: object): void { + this.merge = config; + } /** * exportConfig() diff --git a/tsconfig.packages.json b/tsconfig.packages.json index 41bddf784fc..d1aa2aa6206 100644 --- a/tsconfig.packages.json +++ b/tsconfig.packages.json @@ -1,5 +1,5 @@ { - "extends": "tsconfig.base.json", + "extends": "./tsconfig.base.json", "compilerOptions": { "declaration": true } From 7888530cdfef7e8e3db55ba6372387d3d7d58c5f Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Sat, 15 Dec 2018 22:29:58 +0530 Subject: [PATCH 09/14] feat(ui): rename UIManager to scaffoldProject --- packages/init/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/init/index.ts b/packages/init/index.ts index ffb53888bec..84b93af0507 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -25,13 +25,13 @@ export default function initializeInquirer(...args: string[]): Function | void { } /** - * UI Manager function which takes answers and dependendencies as input + * scaffoldProject function which takes answers and dependendencies as input * and generates required scaffolds * @param dependencies - array of packages needed to be installed * @param config - Config object to be returned from UI */ -export function UIManager(dependencies: string[], config: ITransformConfig) { +export function scaffoldProject(dependencies: string[], config: ITransformConfig) { const returnObject: { errors: String[], } = {errors: []}; From 8685575a792a1b14ff09236c08e9e96afeea9580 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Sun, 16 Dec 2018 13:16:32 +0530 Subject: [PATCH 10/14] feat(ui-init): add questioner and user class --- packages/ui-server/routes/api/index.js | 6 +++ packages/ui-server/routes/api/init.js | 25 +++++++++++ packages/ui-server/routes/index.js | 1 + packages/ui-server/utils/questioner.js | 45 ++++++++++++++++++++ packages/ui-server/utils/questioner.ts | 58 ++++++++++++++++++++++++++ packages/ui-server/utils/user.js | 37 ++++++++++++++++ packages/ui-server/utils/user.ts | 41 ++++++++++++++++++ 7 files changed, 213 insertions(+) create mode 100644 packages/ui-server/routes/api/index.js create mode 100644 packages/ui-server/utils/questioner.js create mode 100644 packages/ui-server/utils/questioner.ts create mode 100644 packages/ui-server/utils/user.js create mode 100644 packages/ui-server/utils/user.ts diff --git a/packages/ui-server/routes/api/index.js b/packages/ui-server/routes/api/index.js new file mode 100644 index 00000000000..1388209e346 --- /dev/null +++ b/packages/ui-server/routes/api/index.js @@ -0,0 +1,6 @@ +const express = require("express"); +const router = express.Router(); + +router.use("/init", require("./init")); + +module.exports = router; diff --git a/packages/ui-server/routes/api/init.js b/packages/ui-server/routes/api/init.js index 90a1e543daf..cdab624bfe1 100644 --- a/packages/ui-server/routes/api/init.js +++ b/packages/ui-server/routes/api/init.js @@ -1,3 +1,28 @@ /** * Endpoint for @webpack-cli/init */ +const express = require("express"); +const router = express.Router(); + +router.get("/", function(req, res, next) { + const Q = require("../../utils/questioner").default; + let questioner = new Q(); + + questioner.question({ + action: "question", + question: { + question: "Do you want to start scaffold?", + type: "Binary" + } + }).then((data) => { + console.log(data.answer); + return { action: "exit" }; + }); + + res.json({ + port: questioner.port, + address: questioner.address + }); +}); + +module.exports = router; diff --git a/packages/ui-server/routes/index.js b/packages/ui-server/routes/index.js index a169fc667e3..fbf35273db1 100644 --- a/packages/ui-server/routes/index.js +++ b/packages/ui-server/routes/index.js @@ -1,6 +1,7 @@ const express = require("express"); const router = express.Router(); +router.use("/api", require("./api/index")); /* GET home page. */ router.get("/", function(req, res, next) { res.render("index", { title: "Express" }); diff --git a/packages/ui-server/utils/questioner.js b/packages/ui-server/utils/questioner.js new file mode 100644 index 00000000000..fb8de233a6e --- /dev/null +++ b/packages/ui-server/utils/questioner.js @@ -0,0 +1,45 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const net = require("net"); +class Questioner { + constructor() { + this.port = 1234; + this.address = "localhost"; + this.socket = new net.Socket(); + // Create Server + this.server = net.createServer((socket) => { + socket.pipe(socket); + }).listen(this.port, this.address); + // Connect to server + this.init(); + } + question(ques) { + const q = this; + return new Promise((resolve, reject) => { + q.socket.write(ques); + if (ques.action === "exit") { + q.socket.destroy(); + q.server.close(); + } + q.socket.on("data", (data) => { + if (data.toJSON().data[0].action === "answer") { + resolve(data); + } + if (data.toJSON().data[0].action === "exit") { + q.socket.destroy(); + q.server.close(); + } + }); + q.socket.on("error", (err) => { + reject(err); + q.socket.destroy(); + q.server.close(); + }); + }); + } + init() { + const q = this; + q.socket.connect(q.port, q.address); + } +} +exports.default = Questioner; diff --git a/packages/ui-server/utils/questioner.ts b/packages/ui-server/utils/questioner.ts new file mode 100644 index 00000000000..e15c2f6308d --- /dev/null +++ b/packages/ui-server/utils/questioner.ts @@ -0,0 +1,58 @@ +import * as net from "net"; + +export default class Questioner { + public port: number; + public address: string; + private socket: net.Socket; + private server: net.Server; + + constructor() { + this.port = 1234; + this.address = "localhost"; + this.socket = new net.Socket(); + + // Create Server + this.server = net.createServer((socket) => { + socket.pipe(socket); + }).listen(this.port, this.address); + + // Connect to server + this.init(); + + } + + public question(ques: {action: string, question?: object}) { + const q = this; + return new Promise((resolve, reject) => { + + q.socket.write(ques); + if (ques.action === "exit") { + q.socket.destroy(); + q.server.close(); + } + + q.socket.on("data", (data) => { + if (data.toJSON().data[0].action === "answer") { + resolve(data); + } + if (data.toJSON().data[0].action === "exit") { + q.socket.destroy(); + q.server.close(); + } + }); + + q.socket.on("error", (err) => { + reject(err); + q.socket.destroy(); + q.server.close(); + }); + + }); + } + + private init() { + const q = this; + q.socket.connect(q.port, q.address); + } + +} diff --git a/packages/ui-server/utils/user.js b/packages/ui-server/utils/user.js new file mode 100644 index 00000000000..785edde8483 --- /dev/null +++ b/packages/ui-server/utils/user.js @@ -0,0 +1,37 @@ +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +const net = require("net"); +class User { + constructor(port, address) { + this.socket = new net.Socket(); + this.port = port; + this.address = address; + this.init(); + } + answer(ans) { + const user = this.socket; + return new Promise((resolve, reject) => { + user.write(ans); + if (ans.action === "exit") { + user.destroy(); + } + user.on("data", (data) => { + if (data.toJSON().data[0].action === "question") { + resolve(data); + } + if (data.toJSON().data[0].action === "exit") { + user.destroy(); + } + }); + user.on("error", (err) => { + reject(err); + user.destroy(); + }); + }); + } + init() { + const user = this.socket; + user.connect(this.port, this.address); + } +} +exports.default = User; diff --git a/packages/ui-server/utils/user.ts b/packages/ui-server/utils/user.ts new file mode 100644 index 00000000000..33c65a48e83 --- /dev/null +++ b/packages/ui-server/utils/user.ts @@ -0,0 +1,41 @@ +import * as net from "net"; + +export default class User { + private port: number; + private address: string; + private socket: net.Socket; + constructor(port: number, address: string) { + this.socket = new net.Socket(); + this.port = port; + this.address = address; + this.init(); + } + + public answer(ans: { action: string, answer?: any}) { + const user = this.socket; + return new Promise((resolve, reject) => { + user.write(ans); + if (ans.action === "exit") { + user.destroy(); + } + user.on("data", (data) => { + if (data.toJSON().data[0].action === "question") { + resolve(data); + } + if (data.toJSON().data[0].action === "exit") { + user.destroy(); + } + }); + user.on("error", (err) => { + reject(err); + user.destroy(); + }); + }); + } + + private init() { + const user = this.socket; + user.connect(this.port, this.address); + } + +} From 6839b61b096d932448abd790250588ee59715f09 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Fri, 21 Dec 2018 22:27:29 +0530 Subject: [PATCH 11/14] feat(ui-init): socket setup --- packages/init/package.json | 1 - packages/ui-server/package.json | 4 +- packages/ui-server/routes/api/init.js | 6 +- packages/ui-server/utils/questioner.js | 76 ++++++++++++------------ packages/ui-server/utils/user.js | 82 ++++++++++++++++---------- 5 files changed, 94 insertions(+), 75 deletions(-) diff --git a/packages/init/package.json b/packages/init/package.json index b5aec9aa4ba..ad55754e4e6 100644 --- a/packages/init/package.json +++ b/packages/init/package.json @@ -13,7 +13,6 @@ "@webpack-cli/utils": "^0.1.2", "chalk": "^2.4.1", "jscodeshift": "^0.5.1", - "npm": "^6.4.1", "p-each-series": "^1.0.0" }, "devDependencies": { diff --git a/packages/ui-server/package.json b/packages/ui-server/package.json index 3bc89dbae14..a50e2fc18af 100644 --- a/packages/ui-server/package.json +++ b/packages/ui-server/package.json @@ -6,10 +6,12 @@ "start": "node ./bin/www" }, "dependencies": { + "@types/p-event": "^1.3.0", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.16.0", - "morgan": "~1.9.0" + "morgan": "~1.9.0", + "p-event": "^2.1.0" }, "publishConfig": { "access": "public" diff --git a/packages/ui-server/routes/api/init.js b/packages/ui-server/routes/api/init.js index cdab624bfe1..3b302f975e0 100644 --- a/packages/ui-server/routes/api/init.js +++ b/packages/ui-server/routes/api/init.js @@ -8,15 +8,15 @@ router.get("/", function(req, res, next) { const Q = require("../../utils/questioner").default; let questioner = new Q(); - questioner.question({ + questioner.start({ action: "question", question: { question: "Do you want to start scaffold?", type: "Binary" } }).then((data) => { - console.log(data.answer); - return { action: "exit" }; + console.log(data); + return questioner.question({ action: "exit" }); }); res.json({ diff --git a/packages/ui-server/utils/questioner.js b/packages/ui-server/utils/questioner.js index fb8de233a6e..8c2f1bbaf2a 100644 --- a/packages/ui-server/utils/questioner.js +++ b/packages/ui-server/utils/questioner.js @@ -2,44 +2,42 @@ Object.defineProperty(exports, "__esModule", { value: true }); const net = require("net"); class Questioner { - constructor() { - this.port = 1234; - this.address = "localhost"; - this.socket = new net.Socket(); - // Create Server - this.server = net.createServer((socket) => { - socket.pipe(socket); - }).listen(this.port, this.address); - // Connect to server - this.init(); - } - question(ques) { - const q = this; - return new Promise((resolve, reject) => { - q.socket.write(ques); - if (ques.action === "exit") { - q.socket.destroy(); - q.server.close(); - } - q.socket.on("data", (data) => { - if (data.toJSON().data[0].action === "answer") { - resolve(data); - } - if (data.toJSON().data[0].action === "exit") { - q.socket.destroy(); - q.server.close(); - } - }); - q.socket.on("error", (err) => { - reject(err); - q.socket.destroy(); - q.server.close(); - }); - }); - } - init() { - const q = this; - q.socket.connect(q.port, q.address); - } + constructor() { + this.port = 1234; + this.address = "localhost"; + } + start(ques) { + return new Promise((resolve, reject) => { + // Create Server + this.server = net.createServer((socket) => { + process.stdout.write(`Client Connected on ${socket.remotePort}\n`); + this.client = socket; + this.client.write(JSON.stringify(ques)); + this.client.on("data", (data) => { + resolve(JSON.parse(data).answer); + }); + this.client.on("close", () => { + reject(); + }); + }).listen(this.port, this.address); + this.server.maxConnections = 1; + }); + } + question(ques) { + return new Promise((resolve, reject) => { + if (ques.action === "exit") { + this.client.destroy(); + this.server.close(); + resolve(); + } + this.client.write(JSON.stringify(ques)); + this.client.on("data", (data) => { + resolve(JSON.parse(data).answer); + }); + this.client.on("close", (err) => { + reject(err); + }); + }); + } } exports.default = Questioner; diff --git a/packages/ui-server/utils/user.js b/packages/ui-server/utils/user.js index 785edde8483..52b12e77e78 100644 --- a/packages/ui-server/utils/user.js +++ b/packages/ui-server/utils/user.js @@ -1,37 +1,57 @@ "use strict"; +// Async - Await polyfill +var __awaiter = (this && this.__awaiter) || function(thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function(resolve, reject) { + function fulfilled(value) { + try { + step(generator.next(value)); + } catch (e) { + reject(e); + } + } + function rejected(value) { + try { + step(generator["throw"](value)); + } catch (e) { + reject(e); + } + } + function step(result) { + result.done ? resolve(result.value) : new P(function(resolve) { + resolve(result.value); + }).then(fulfilled, rejected); + } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); +}; Object.defineProperty(exports, "__esModule", { value: true }); const net = require("net"); +const p_event_1 = require("p-event"); class User { - constructor(port, address) { - this.socket = new net.Socket(); - this.port = port; - this.address = address; - this.init(); - } - answer(ans) { - const user = this.socket; - return new Promise((resolve, reject) => { - user.write(ans); - if (ans.action === "exit") { - user.destroy(); - } - user.on("data", (data) => { - if (data.toJSON().data[0].action === "question") { - resolve(data); - } - if (data.toJSON().data[0].action === "exit") { - user.destroy(); - } - }); - user.on("error", (err) => { - reject(err); - user.destroy(); - }); - }); - } - init() { - const user = this.socket; - user.connect(this.port, this.address); - } + constructor(port, address) { + this.socket = new net.Socket(); + this.port = port; + this.address = address; + this.init(); + } + answer(ans) { + const user = this.socket; + user.write(JSON.stringify(ans)); + } + question() { + return __awaiter(this, void 0, void 0, function* () { + const user = this.socket; + try { + const data = yield p_event_1.default(user, "data"); + return JSON.parse(data).question; + } catch (error) { + return null; + } + }); + } + init() { + const user = this.socket; + user.connect(this.port, this.address); + } } exports.default = User; From c0898f4ec77effb906ed17ce7a4cfab91325dd4a Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Sun, 23 Dec 2018 16:29:43 +0530 Subject: [PATCH 12/14] feat(ui-init): finalize user class --- packages/ui-server/utils/questioner.js | 74 ++++++++++---------- packages/ui-server/utils/questioner.ts | 63 ++++++++--------- packages/ui-server/utils/user.js | 96 ++++++++++++-------------- packages/ui-server/utils/user.ts | 28 ++++---- 4 files changed, 125 insertions(+), 136 deletions(-) diff --git a/packages/ui-server/utils/questioner.js b/packages/ui-server/utils/questioner.js index 8c2f1bbaf2a..26c9095f486 100644 --- a/packages/ui-server/utils/questioner.js +++ b/packages/ui-server/utils/questioner.js @@ -2,42 +2,42 @@ Object.defineProperty(exports, "__esModule", { value: true }); const net = require("net"); class Questioner { - constructor() { - this.port = 1234; - this.address = "localhost"; - } - start(ques) { - return new Promise((resolve, reject) => { - // Create Server - this.server = net.createServer((socket) => { - process.stdout.write(`Client Connected on ${socket.remotePort}\n`); - this.client = socket; - this.client.write(JSON.stringify(ques)); - this.client.on("data", (data) => { - resolve(JSON.parse(data).answer); - }); - this.client.on("close", () => { - reject(); - }); - }).listen(this.port, this.address); - this.server.maxConnections = 1; - }); - } - question(ques) { - return new Promise((resolve, reject) => { - if (ques.action === "exit") { - this.client.destroy(); - this.server.close(); - resolve(); - } - this.client.write(JSON.stringify(ques)); - this.client.on("data", (data) => { - resolve(JSON.parse(data).answer); - }); - this.client.on("close", (err) => { - reject(err); - }); - }); - } + constructor() { + this.port = 1234; + this.address = "localhost"; + } + start(ques) { + return new Promise((resolve, reject) => { + // Create Server + this.server = net.createServer((socket) => { + process.stdout.write(`Client Connected on ${socket.remotePort}\n`); + this.client = socket; + this.client.write(JSON.stringify(ques)); + this.client.on("data", (data) => { + resolve(JSON.parse(data).answer); + }); + this.client.on("close", () => { + reject(); + }); + }).listen(this.port, this.address); + this.server.maxConnections = 1; + }); + } + question(ques) { + return new Promise((resolve, reject) => { + if (ques.action === "exit") { + this.client.destroy(); + this.server.close(); + resolve(); + } + this.client.write(JSON.stringify(ques)); + this.client.on("data", (data) => { + resolve(JSON.parse(data).answer); + }); + this.client.on("close", (err) => { + reject(err); + }); + }); + } } exports.default = Questioner; diff --git a/packages/ui-server/utils/questioner.ts b/packages/ui-server/utils/questioner.ts index e15c2f6308d..c2af5321b68 100644 --- a/packages/ui-server/utils/questioner.ts +++ b/packages/ui-server/utils/questioner.ts @@ -3,56 +3,47 @@ import * as net from "net"; export default class Questioner { public port: number; public address: string; - private socket: net.Socket; + private client: net.Socket; private server: net.Server; constructor() { this.port = 1234; this.address = "localhost"; - this.socket = new net.Socket(); - - // Create Server - this.server = net.createServer((socket) => { - socket.pipe(socket); - }).listen(this.port, this.address); - - // Connect to server - this.init(); - } + public start(ques: {action: string, question?: object}) { + return new Promise((resolve, reject) => { + // Create Server + this.server = net.createServer((socket) => { + process.stdout.write(`Client Connected on ${socket.remotePort}\n`); + this.client = socket; + this.client.write(JSON.stringify(ques)); + + this.client.on("data", (data: string) => { + resolve(JSON.parse(data).answer); + }); + + this.client.on("close", () => { + reject(); + }); + }).listen(this.port, this.address); + this.server.maxConnections = 1; + }); + } public question(ques: {action: string, question?: object}) { - const q = this; return new Promise((resolve, reject) => { - - q.socket.write(ques); if (ques.action === "exit") { - q.socket.destroy(); - q.server.close(); + this.client.destroy(); + this.server.close(); + resolve(); } - - q.socket.on("data", (data) => { - if (data.toJSON().data[0].action === "answer") { - resolve(data); - } - if (data.toJSON().data[0].action === "exit") { - q.socket.destroy(); - q.server.close(); - } + this.client.write(JSON.stringify(ques)); + this.client.on("data", (data: string) => { + resolve(JSON.parse(data).answer); }); - - q.socket.on("error", (err) => { + this.client.on("close", (err) => { reject(err); - q.socket.destroy(); - q.server.close(); }); - }); } - - private init() { - const q = this; - q.socket.connect(q.port, q.address); - } - } diff --git a/packages/ui-server/utils/user.js b/packages/ui-server/utils/user.js index 52b12e77e78..5d2227ec4d6 100644 --- a/packages/ui-server/utils/user.js +++ b/packages/ui-server/utils/user.js @@ -1,57 +1,53 @@ "use strict"; -// Async - Await polyfill -var __awaiter = (this && this.__awaiter) || function(thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function(resolve, reject) { - function fulfilled(value) { - try { - step(generator.next(value)); - } catch (e) { - reject(e); - } - } - function rejected(value) { - try { - step(generator["throw"](value)); - } catch (e) { - reject(e); - } - } - function step(result) { - result.done ? resolve(result.value) : new P(function(resolve) { - resolve(result.value); - }).then(fulfilled, rejected); - } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); +var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { + return new (P || (P = Promise))(function (resolve, reject) { + function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } + function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } + function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } + step((generator = generator.apply(thisArg, _arguments || [])).next()); + }); }; Object.defineProperty(exports, "__esModule", { value: true }); const net = require("net"); -const p_event_1 = require("p-event"); class User { - constructor(port, address) { - this.socket = new net.Socket(); - this.port = port; - this.address = address; - this.init(); - } - answer(ans) { - const user = this.socket; - user.write(JSON.stringify(ans)); - } - question() { - return __awaiter(this, void 0, void 0, function* () { - const user = this.socket; - try { - const data = yield p_event_1.default(user, "data"); - return JSON.parse(data).question; - } catch (error) { - return null; - } - }); - } - init() { - const user = this.socket; - user.connect(this.port, this.address); - } + constructor(port, address) { + this.socket = new net.Socket(); + this.port = port; + this.address = address; + this.init(); + } + answer(ans) { + const user = this.socket; + user.write(JSON.stringify(ans)); + } + question() { + return __awaiter(this, void 0, void 0, function* () { + const ques = yield this.getQuestion().catch((err) => { + process.stdout.write(err); + }); + process.stdout.write(JSON.stringify(ques)); + return ques; + }); + } + getQuestion() { + return __awaiter(this, void 0, void 0, function* () { + return yield new Promise((resolve, reject) => { + const user = this.socket; + if (user.destroyed) { + resolve(); + } + user.on("data", (data) => { + resolve(JSON.parse(data).question); + }); + user.on("error", (err) => { + reject(err); + }); + }); + }); + } + init() { + const user = this.socket; + user.connect(this.port, this.address); + } } exports.default = User; diff --git a/packages/ui-server/utils/user.ts b/packages/ui-server/utils/user.ts index 33c65a48e83..08bd582645c 100644 --- a/packages/ui-server/utils/user.ts +++ b/packages/ui-server/utils/user.ts @@ -1,5 +1,4 @@ import * as net from "net"; - export default class User { private port: number; private address: string; @@ -13,22 +12,25 @@ export default class User { public answer(ans: { action: string, answer?: any}) { const user = this.socket; - return new Promise((resolve, reject) => { - user.write(ans); - if (ans.action === "exit") { - user.destroy(); + user.write(JSON.stringify(ans)); + } + public async question() { + const ques = await this.getQuestion().catch((err) => { + process.stdout.write(err); + }); + return ques; + } + private async getQuestion() { + return await new Promise((resolve, reject) => { + const user = this.socket; + if (user.destroyed) { + resolve(); } - user.on("data", (data) => { - if (data.toJSON().data[0].action === "question") { - resolve(data); - } - if (data.toJSON().data[0].action === "exit") { - user.destroy(); - } + user.on("data", (data: string) => { + resolve(JSON.parse(data).question); }); user.on("error", (err) => { reject(err); - user.destroy(); }); }); } From e0f9513ee4c9b90bd474fca2236275510887b357 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 27 Dec 2018 14:04:16 +0530 Subject: [PATCH 13/14] feat(ui-init): add color type --- packages/ui-server/utils/questioner.js | 43 --------------------- packages/ui-server/utils/questioner.ts | 2 +- packages/ui-server/utils/user.js | 53 -------------------------- packages/ui-server/utils/user.ts | 2 +- packages/webpack-scaffold/index.ts | 8 ++++ 5 files changed, 10 insertions(+), 98 deletions(-) delete mode 100644 packages/ui-server/utils/questioner.js delete mode 100644 packages/ui-server/utils/user.js diff --git a/packages/ui-server/utils/questioner.js b/packages/ui-server/utils/questioner.js deleted file mode 100644 index 26c9095f486..00000000000 --- a/packages/ui-server/utils/questioner.js +++ /dev/null @@ -1,43 +0,0 @@ -"use strict"; -Object.defineProperty(exports, "__esModule", { value: true }); -const net = require("net"); -class Questioner { - constructor() { - this.port = 1234; - this.address = "localhost"; - } - start(ques) { - return new Promise((resolve, reject) => { - // Create Server - this.server = net.createServer((socket) => { - process.stdout.write(`Client Connected on ${socket.remotePort}\n`); - this.client = socket; - this.client.write(JSON.stringify(ques)); - this.client.on("data", (data) => { - resolve(JSON.parse(data).answer); - }); - this.client.on("close", () => { - reject(); - }); - }).listen(this.port, this.address); - this.server.maxConnections = 1; - }); - } - question(ques) { - return new Promise((resolve, reject) => { - if (ques.action === "exit") { - this.client.destroy(); - this.server.close(); - resolve(); - } - this.client.write(JSON.stringify(ques)); - this.client.on("data", (data) => { - resolve(JSON.parse(data).answer); - }); - this.client.on("close", (err) => { - reject(err); - }); - }); - } -} -exports.default = Questioner; diff --git a/packages/ui-server/utils/questioner.ts b/packages/ui-server/utils/questioner.ts index c2af5321b68..225fc23d39f 100644 --- a/packages/ui-server/utils/questioner.ts +++ b/packages/ui-server/utils/questioner.ts @@ -30,7 +30,7 @@ export default class Questioner { this.server.maxConnections = 1; }); } - public question(ques: {action: string, question?: object}) { + public question(ques: {action: string, question?: object|object[]}) { return new Promise((resolve, reject) => { if (ques.action === "exit") { this.client.destroy(); diff --git a/packages/ui-server/utils/user.js b/packages/ui-server/utils/user.js deleted file mode 100644 index 5d2227ec4d6..00000000000 --- a/packages/ui-server/utils/user.js +++ /dev/null @@ -1,53 +0,0 @@ -"use strict"; -var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { - return new (P || (P = Promise))(function (resolve, reject) { - function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } - function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } - function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } - step((generator = generator.apply(thisArg, _arguments || [])).next()); - }); -}; -Object.defineProperty(exports, "__esModule", { value: true }); -const net = require("net"); -class User { - constructor(port, address) { - this.socket = new net.Socket(); - this.port = port; - this.address = address; - this.init(); - } - answer(ans) { - const user = this.socket; - user.write(JSON.stringify(ans)); - } - question() { - return __awaiter(this, void 0, void 0, function* () { - const ques = yield this.getQuestion().catch((err) => { - process.stdout.write(err); - }); - process.stdout.write(JSON.stringify(ques)); - return ques; - }); - } - getQuestion() { - return __awaiter(this, void 0, void 0, function* () { - return yield new Promise((resolve, reject) => { - const user = this.socket; - if (user.destroyed) { - resolve(); - } - user.on("data", (data) => { - resolve(JSON.parse(data).question); - }); - user.on("error", (err) => { - reject(err); - }); - }); - }); - } - init() { - const user = this.socket; - user.connect(this.port, this.address); - } -} -exports.default = User; diff --git a/packages/ui-server/utils/user.ts b/packages/ui-server/utils/user.ts index 08bd582645c..18b8f282c86 100644 --- a/packages/ui-server/utils/user.ts +++ b/packages/ui-server/utils/user.ts @@ -10,7 +10,7 @@ export default class User { this.init(); } - public answer(ans: { action: string, answer?: any}) { + public answer(ans: { action: string, answer?: object}) { const user = this.socket; user.write(JSON.stringify(ans)); } diff --git a/packages/webpack-scaffold/index.ts b/packages/webpack-scaffold/index.ts index 01cf53a3558..e66b9845a97 100755 --- a/packages/webpack-scaffold/index.ts +++ b/packages/webpack-scaffold/index.ts @@ -125,3 +125,11 @@ export function AutoComplete(name: string, message: string, options: object = {} type: "autocomplete", }, options); } + +export function Color(name: string, message: string) { + return { + message, + name, + type: "color", + }; +} From 1d9fbc70a4f5aed2970c4ade09c802727f80e449 Mon Sep 17 00:00:00 2001 From: Rishabh Chawla Date: Thu, 3 Jan 2019 21:04:02 +0530 Subject: [PATCH 14/14] feat(ui-init): made a functional demo code Also some other minor changes --- packages/init/config.ts | 30 ++++++++++------------- packages/init/index.ts | 5 ++-- packages/ui-server/README.md | 1 + packages/ui-server/package.json | 1 + packages/ui-server/routes/api/init.js | 34 ++++++++++++++++++++------ packages/ui-server/utils/questioner.ts | 7 ++++-- packages/ui-server/utils/user.ts | 17 ++++++++----- 7 files changed, 61 insertions(+), 34 deletions(-) diff --git a/packages/init/config.ts b/packages/init/config.ts index 31f3aacc32c..7c7cf7bb56b 100644 --- a/packages/init/config.ts +++ b/packages/init/config.ts @@ -7,23 +7,11 @@ import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; */ export class Config { // Data members - private configName: string; - private topScope: string[]; - private webpackOptions: IWebpackOptions; - private merge: object; - private configPath: string; - - /** - * Contructor for config class - * @summary sets default values of each Data member - */ - constructor() { - this.configName = ""; - this.topScope = [""]; - this.webpackOptions = {}; - this.merge = {}; - this.configPath = process.cwd(); - } + private configName: string = ""; + private topScope: string[] = [""]; + private webpackOptions: IWebpackOptions = {}; + private merge: object = {}; + private configPath: string = process.cwd(); /** * pushToTopScope @@ -45,6 +33,13 @@ export class Config { this.configName = configName; } + /** + * setConfigPath + * @param configPath : string (path to config that should be generated) + */ + public setConfigPath(configPath: string): void { + this.configPath = configPath; + } /** * setWebpackOption * @param optionName A option Name in accordance to interface IWebpackOptions @@ -53,6 +48,7 @@ export class Config { public setWebpackOption(optionName: string, value: any): void { this.webpackOptions[optionName] = value; } + /** * mergeWith * @param config Object to be merged with the given config diff --git a/packages/init/index.ts b/packages/init/index.ts index 84b93af0507..97e1c3073de 100644 --- a/packages/init/index.ts +++ b/packages/init/index.ts @@ -4,6 +4,7 @@ import {ITransformConfig} from "@webpack-cli/utils/modify-config-helper"; import npmPackagesExists from "@webpack-cli/utils/npm-packages-exists"; import { spawnChild } from "@webpack-cli/utils/package-manager"; import runTransform from "@webpack-cli/utils/scaffold"; + /** * * First function to be called after running the init flag. This is a check, @@ -31,9 +32,9 @@ export default function initializeInquirer(...args: string[]): Function | void { * @param config - Config object to be returned from UI */ -export function scaffoldProject(dependencies: string[], config: ITransformConfig) { +export function scaffoldProject(dependencies: string[], config: ITransformConfig): {errors: string[]} { const returnObject: { - errors: String[], + errors: string[], } = {errors: []}; // Install Dependencies diff --git a/packages/ui-server/README.md b/packages/ui-server/README.md index 67058fa2b98..9a54ea64276 100644 --- a/packages/ui-server/README.md +++ b/packages/ui-server/README.md @@ -9,6 +9,7 @@ Express server for `webpack-cli` packages - `remove` - `migrate` 3. `./routes/index.js` : will contain logic for serving html files +4. `./utils` : contains utility classes and functions ## Usage ```javascript diff --git a/packages/ui-server/package.json b/packages/ui-server/package.json index a50e2fc18af..cf4656d100d 100644 --- a/packages/ui-server/package.json +++ b/packages/ui-server/package.json @@ -7,6 +7,7 @@ }, "dependencies": { "@types/p-event": "^1.3.0", + "@webpack-cli/init": "^0.1.2", "cookie-parser": "~1.4.3", "debug": "~2.6.9", "express": "~4.16.0", diff --git a/packages/ui-server/routes/api/init.js b/packages/ui-server/routes/api/init.js index 3b302f975e0..7f89a4d0585 100644 --- a/packages/ui-server/routes/api/init.js +++ b/packages/ui-server/routes/api/init.js @@ -1,3 +1,4 @@ +/* eslint-disable node/no-unpublished-require */ /** * Endpoint for @webpack-cli/init */ @@ -5,17 +6,36 @@ const express = require("express"); const router = express.Router(); router.get("/", function(req, res, next) { - const Q = require("../../utils/questioner").default; - let questioner = new Q(); + + const Config = require("../../../init/config").Config; + const scaffoldProject = require("../../../init").scaffoldProject; + const Questioner = require("../../utils/questioner").default; + + let config = new Config(); + let questioner = new Questioner(); + + const dependencies = [ + "webpack", + "webpack-cli", + "uglifyjs-webpack-plugin", + "babel-plugin-syntax-dynamic-import", + ]; + + config.pushToTopScope( + "const webpack = require('webpack')", + "const path = require('path')", + "\n" + ); + + config.setWebpackOption("module",{ + rules: [] + }); questioner.start({ action: "question", - question: { - question: "Do you want to start scaffold?", - type: "Binary" - } + question: "A dummy question for reference" }).then((data) => { - console.log(data); + scaffoldProject(dependencies,config.exportConfig()); return questioner.question({ action: "exit" }); }); diff --git a/packages/ui-server/utils/questioner.ts b/packages/ui-server/utils/questioner.ts index 225fc23d39f..2497269fbe5 100644 --- a/packages/ui-server/utils/questioner.ts +++ b/packages/ui-server/utils/questioner.ts @@ -1,6 +1,7 @@ import * as net from "net"; export default class Questioner { + public port: number; public address: string; private client: net.Socket; @@ -10,7 +11,8 @@ export default class Questioner { this.port = 1234; this.address = "localhost"; } - public start(ques: {action: string, question?: object}) { + + public start(ques: {action: string, question?: object}): Promise { return new Promise((resolve, reject) => { // Create Server @@ -30,7 +32,8 @@ export default class Questioner { this.server.maxConnections = 1; }); } - public question(ques: {action: string, question?: object|object[]}) { + public question(ques: {action: string, question?: object|object[]}): Promise { + return new Promise((resolve, reject) => { if (ques.action === "exit") { this.client.destroy(); diff --git a/packages/ui-server/utils/user.ts b/packages/ui-server/utils/user.ts index 18b8f282c86..3b7d706b7ae 100644 --- a/packages/ui-server/utils/user.ts +++ b/packages/ui-server/utils/user.ts @@ -1,10 +1,13 @@ -import * as net from "net"; +import {Socket} from "net"; + export default class User { + private port: number; private address: string; - private socket: net.Socket; + private socket: Socket; + constructor(port: number, address: string) { - this.socket = new net.Socket(); + this.socket = new Socket(); this.port = port; this.address = address; this.init(); @@ -14,13 +17,15 @@ export default class User { const user = this.socket; user.write(JSON.stringify(ans)); } - public async question() { + + public async question(): Promise { const ques = await this.getQuestion().catch((err) => { - process.stdout.write(err); + process.stderr.write(err); }); return ques; } - private async getQuestion() { + + private async getQuestion(): Promise { return await new Promise((resolve, reject) => { const user = this.socket; if (user.destroyed) {