diff --git a/package.json b/package.json index b246401b3..6354a418e 100644 --- a/package.json +++ b/package.json @@ -22,8 +22,7 @@ }, "scripts": { "build": "tsc -p tsconfig.json", - "test": "jest --config ./test/jest.config.json", - "prepare": "npm run build" + "test": "jest --config ./test/jest.config.json" }, "files": [ "dist", @@ -67,9 +66,16 @@ "typescript": "^3.4.5" }, "devDependencies": { + "@types/ansi-escapes": "^4.0.0", "@types/camelcase": "^5.2.0", + "@types/execa": "^0.9.0", "@types/fs-extra": "^5.0.5", + "@types/mkdirp": "^0.5.2", + "@types/ms": "^0.7.30", "@types/node": "^11.13.8", + "@types/ora": "^3.2.0", + "@types/rollup-plugin-json": "^3.0.2", + "@types/rollup-plugin-sourcemaps": "^0.4.2", "husky": "^2.1.0", "prettier": "^1.17.0", "pretty-quick": "^1.10.0", diff --git a/src/constants.js b/src/constants.js deleted file mode 100644 index b9afb0fb5..000000000 --- a/src/constants.js +++ /dev/null @@ -1,17 +0,0 @@ -import fs from 'fs-extra'; -import path from 'path'; -import { resolveApp } from './utils'; - -let paths = {}; - -try { - paths = { - appPackageJson: resolveApp('package.json'), - testsSetup: resolveApp('test/setupTests.ts'), - appRoot: resolveApp('.'), - appSrc: resolveApp('src'), - appDist: resolveApp('dist'), - }; -} catch (e) {} - -export { paths }; diff --git a/src/constants.ts b/src/constants.ts new file mode 100644 index 000000000..5dc28ca26 --- /dev/null +++ b/src/constants.ts @@ -0,0 +1,9 @@ +import { resolveApp } from './utils'; + +export const paths = { + appPackageJson: resolveApp('package.json'), + testsSetup: resolveApp('test/setupTests.ts'), + appRoot: resolveApp('.'), + appSrc: resolveApp('src'), + appDist: resolveApp('dist'), +}; diff --git a/src/createJestConfig.js b/src/createJestConfig.ts similarity index 92% rename from src/createJestConfig.js rename to src/createJestConfig.ts index 4948cdff2..5b518a77c 100644 --- a/src/createJestConfig.js +++ b/src/createJestConfig.ts @@ -1,5 +1,3 @@ -import { appPackageJson } from './constants'; - export function createJestConfig(resolve, rootDir) { return { transform: { diff --git a/src/createRollupConfig.js b/src/createRollupConfig.ts similarity index 97% rename from src/createRollupConfig.js rename to src/createRollupConfig.ts index 1768ee8da..80e83eb7d 100644 --- a/src/createRollupConfig.js +++ b/src/createRollupConfig.ts @@ -5,7 +5,7 @@ import { removeScope, external, } from './utils'; -import { paths, appPackageJson } from './constants'; +import { paths } from './constants'; import { sizeSnapshot } from 'rollup-plugin-size-snapshot'; import { terser } from 'rollup-plugin-terser'; import babel from 'rollup-plugin-babel'; @@ -79,7 +79,7 @@ export function createRollupConfig(format, env, opts) { 'module', 'main', opts.target !== 'node' ? 'browser' : undefined, - ].filter(Boolean), + ].filter(Boolean) as string[], }), format === 'umd' && commonjs({ diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 000000000..1a1adff22 --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1,12 @@ +declare module 'asyncro'; +declare module 'enquirer'; +declare module 'jpjs'; +declare module 'ora'; +declare module 'sade'; +declare module 'tiny-glob/sync'; + +// Rollup plugins +declare module '@jaredpalmer/rollup-plugin-preserve-shebang'; +declare module 'rollup-plugin-babel'; +declare module 'rollup-plugin-size-snapshot'; +declare module 'rollup-plugin-terser'; diff --git a/src/getInstallArgs.js b/src/getInstallArgs.js deleted file mode 100644 index 110c1de04..000000000 --- a/src/getInstallArgs.js +++ /dev/null @@ -1,7 +0,0 @@ -export default function getInstallArgs(cmd, packages) { - if (cmd === 'npm') { - return ['install', ...packages, '--save-dev']; - } else if (cmd === 'yarn') { - return ['add', ...packages, '--dev']; - } -} diff --git a/src/getInstallArgs.ts b/src/getInstallArgs.ts new file mode 100644 index 000000000..951347457 --- /dev/null +++ b/src/getInstallArgs.ts @@ -0,0 +1,10 @@ +import { InstallCmd } from './getInstallCmd'; + +export default function getInstallArgs(cmd: InstallCmd, packages: string[]) { + switch (cmd) { + case 'npm': + return ['install', ...packages, '--save-dev']; + case 'yarn': + return ['add', ...packages, '--dev']; + } +} diff --git a/src/getInstallCmd.js b/src/getInstallCmd.ts similarity index 61% rename from src/getInstallCmd.js rename to src/getInstallCmd.ts index 70e255176..e215c590e 100644 --- a/src/getInstallCmd.js +++ b/src/getInstallCmd.ts @@ -1,8 +1,10 @@ import execa from 'execa'; -let cmd; +let cmd: InstallCmd; -export default function getInstallCmd() { +export type InstallCmd = 'yarn' | 'npm'; + +export default function getInstallCmd(): InstallCmd { if (cmd) { return cmd; } diff --git a/src/index.js b/src/index.ts similarity index 96% rename from src/index.js rename to src/index.ts index caf2298ae..56849c41e 100755 --- a/src/index.js +++ b/src/index.ts @@ -6,7 +6,7 @@ import { rollup, watch } from 'rollup'; import asyncro from 'asyncro'; import chalk from 'chalk'; import util from 'util'; -import fs from 'fs-extra'; +import * as fs from 'fs-extra'; import jest from 'jest'; import logError from './logError'; import path from 'path'; @@ -43,15 +43,15 @@ try { appPackageJson = fs.readJSONSync(resolveApp('package.json')); } catch (e) {} -const stat = util.promisify(fs.stat); - export const isDir = name => - stat(name) + fs + .stat(name) .then(stats => stats.isDirectory()) .catch(() => false); export const isFile = name => - stat(name) + fs + .stat(name) .then(stats => stats.isFile()) .catch(() => false); @@ -66,8 +66,8 @@ async function jsOrTs(filename) { } async function getInputs(entries, source) { - let inputs = []; - let stub = []; + let inputs: any[] = []; + let stub: any[] = []; stub .concat( entries && entries.length @@ -197,7 +197,7 @@ prog const installSpinner = ora(Messages.installing(deps)).start(); try { const cmd = getInstallCmd(); - await execa(cmd, getInstallArgs(getInstallCmd(), deps)); + await execa(cmd, getInstallArgs(cmd, deps)); installSpinner.succeed('Installed dependecines'); console.log(Messages.start(pkg)); } catch (error) { @@ -237,10 +237,7 @@ prog module.exports = require('./${safeVariableName( opts.name )}.cjs.development.js') - }`, - { - overwrite: true, - } + }` ); } catch (e) {} } @@ -296,7 +293,7 @@ prog const [cjsDev, cjsProd, ...otherConfigs] = createBuildConfigs(opts); if (opts.format.includes('cjs')) { try { - await mkdirp(resolveApp('./dist')); + await util.promisify(mkdirp)(resolveApp('./dist')); const promise = fs .writeFile( resolveApp('./dist/index.js'), @@ -311,10 +308,7 @@ prog module.exports = require('./${safePackageName( opts.name )}.cjs.development.js') - }`, - { - overwrite: true, - } + }` ) .catch(e => logError(e)); logger(promise, 'Creating entry file'); @@ -362,7 +356,9 @@ prog argv.push('--watchAll'); } - const maybeTestSetupFiledExists = await fs.exists(paths.testsSetup); + const maybeTestSetupFiledExists = await (fs.exists as any)( + paths.testsSetup + ); const setupTestsFile = maybeTestSetupFiledExists ? '/src/setupTests.ts' : undefined; diff --git a/src/logError.js b/src/logError.ts similarity index 100% rename from src/logError.js rename to src/logError.ts diff --git a/src/messages.js b/src/messages.ts similarity index 100% rename from src/messages.js rename to src/messages.ts diff --git a/src/output.js b/src/output.ts similarity index 89% rename from src/output.js rename to src/output.ts index e3dcb1a08..5a0327682 100644 --- a/src/output.js +++ b/src/output.ts @@ -20,11 +20,6 @@ export const success = msg => { console.log(`${chalk.green('> Success!')} ${msg}`); }; -export const time = () => { - const start = new Date(); - return chalk.gray(`[${ms(new Date() - start)}]`); -}; - export const wait = msg => { const spinner = ora(chalk.green(msg)); spinner.color = 'blue'; @@ -47,7 +42,7 @@ export const prompt = opts => { const s = v.toString(); function cleanup() { - process.stdin.setRawMode(false); + process.stdin.setRawMode!(false); process.stdin.removeListener('data', ondata); } @@ -64,7 +59,7 @@ export const prompt = opts => { } }; - process.stdin.setRawMode(true); + process.stdin.setRawMode!(true); process.stdin.resume(); process.stdin.on('data', ondata); }); diff --git a/src/utils.js b/src/utils.ts similarity index 100% rename from src/utils.js rename to src/utils.ts diff --git a/tsconfig.json b/tsconfig.json index 10be04587..8cedd1ce0 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,6 @@ { + "include": ["src/**/*"], + "exclude": ["src/template/**/*"], "compilerOptions": { "allowJs": true, "importHelpers": true, @@ -8,13 +10,8 @@ "module": "commonjs", "rootDir": "src", "strict": true, + "noImplicitAny": false, "skipLibCheck": true, - "target": "es2017", - }, - "include": [ - "src/**/*" - ], - "exclude": [ - "src/template/**/*" - ] -} \ No newline at end of file + "target": "es2017" + } +} diff --git a/yarn.lock b/yarn.lock index e1235f49a..69c068e29 100644 --- a/yarn.lock +++ b/yarn.lock @@ -382,6 +382,13 @@ "@types/istanbul-lib-coverage" "^2.0.0" "@types/yargs" "^12.0.9" +"@types/ansi-escapes@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@types/ansi-escapes/-/ansi-escapes-4.0.0.tgz#cf52d455628bc3fab95db971ab0f23c84778cc05" + integrity sha512-50x8OpY2c2UMDuiN7Uq1ITWngAiL3B8L9v6GU0J+IrndEypNfGJaZSgpuOBwhIu+7xwkhDj9OniK6z6MaeN7zQ== + dependencies: + ansi-escapes "*" + "@types/babel__core@^7.1.0": version "7.1.1" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.1.1.tgz#ce9a9e5d92b7031421e1d0d74ae59f572ba48be6" @@ -427,6 +434,13 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== +"@types/execa@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@types/execa/-/execa-0.9.0.tgz#9b025d2755f17e80beaf9368c3f4f319d8b0fb93" + integrity sha512-mgfd93RhzjYBUHHV532turHC2j4l/qxsF/PbfDmprHDEUHmNZGlDn1CEsulGK3AfsPdhkWzZQT/S/k0UGhLGsA== + dependencies: + "@types/node" "*" + "@types/fs-extra@^5.0.5": version "5.0.5" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-5.0.5.tgz#080d90a792f3fa2c5559eb44bd8ef840aae9104b" @@ -439,6 +453,18 @@ resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff" integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg== +"@types/mkdirp@^0.5.2": + version "0.5.2" + resolved "https://registry.yarnpkg.com/@types/mkdirp/-/mkdirp-0.5.2.tgz#503aacfe5cc2703d5484326b1b27efa67a339c1f" + integrity sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg== + dependencies: + "@types/node" "*" + +"@types/ms@^0.7.30": + version "0.7.30" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-0.7.30.tgz#f6c38b7ecbbf698b0bbd138315a0f0f18954f85f" + integrity sha512-OftRLCgAzJP7vmKn9by/GVjnf4hloz/pXNOwPo0vKGAfXI7GqWXJi9N2kRar4cP5s1dGwuwcagWqO6iHBTq1Mg== + "@types/node@*": version "10.12.18" resolved "https://registry.yarnpkg.com/@types/node/-/node-10.12.18.tgz#1d3ca764718915584fcd9f6344621b7672665c67" @@ -454,6 +480,13 @@ resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" integrity sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA== +"@types/ora@^3.2.0": + version "3.2.0" + resolved "https://registry.yarnpkg.com/@types/ora/-/ora-3.2.0.tgz#b2f65d1283a8f36d8b0f9ee767e0732a2f429362" + integrity sha512-jll99xUKpiFbIFZSQcxm4numfsLaOWBzWNaRk3PvTSE7BPqTzzOCFmS0mQ7m8qkTfmYhuYbehTGsxkvRLPC++w== + dependencies: + ora "*" + "@types/resolve@0.0.8": version "0.0.8" resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" @@ -461,6 +494,22 @@ dependencies: "@types/node" "*" +"@types/rollup-plugin-json@^3.0.2": + version "3.0.2" + resolved "https://registry.yarnpkg.com/@types/rollup-plugin-json/-/rollup-plugin-json-3.0.2.tgz#1153136a515ed4fbb7ef214ace496f5fc3ed7796" + integrity sha512-eTRym5nG4HEKDR/KrTnCMYwF7V0hgVjEesvtJCK3V8ho/aT0ZFRFgsDtx38VarM30HCsN372+i4FKYwnhcwiVA== + dependencies: + "@types/node" "*" + rollup "^0.63.4" + +"@types/rollup-plugin-sourcemaps@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@types/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#ce3752116834aeb8b798da77a180612fb6ff617a" + integrity sha512-dqF1rMFy4O8yNlQYwYPos5Cfav0f6M7PLH8B33gsslQ0zA9MX1jMGokwNuJ3Z3EXAzsKF/xAWNHpFmELcgYJww== + dependencies: + "@types/node" "*" + rollup "^0.63.4" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -695,6 +744,13 @@ ansi-colors@^3.2.1: resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== +ansi-escapes@*: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.1.0.tgz#62a9e5fa78e99c5bb588b1796855f5d729231b53" + integrity sha512-2VY/iCUZTDLD/qxptS3Zn3c6k2MeIbYqjRXqM8T5oC7N2mMjh3xIU3oYru6cHGbldFa9h5i8N0fP65UaUqrMWA== + dependencies: + type-fest "^0.3.0" + ansi-escapes@^3.0.0, ansi-escapes@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.1.0.tgz#f73207bb81207d75fd6c83f125af26eea378ca30" @@ -1331,6 +1387,11 @@ cli-spinners@^1.1.0, cli-spinners@^1.3.1: resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a" integrity sha512-1QL4544moEsDVH9T/l6Cemov/37iv1RtoKf7NJ04A60+4MREXNfx/QvavbH6QoGdsD4N4Mwy49cmaINR/o2mdg== +cli-spinners@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.1.0.tgz#22c34b4d51f573240885b201efda4e4ec9fff3c7" + integrity sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA== + cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -4158,6 +4219,18 @@ optionator@^0.8.1: type-check "~0.3.2" wordwrap "~1.0.0" +ora@*: + version "3.4.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-3.4.0.tgz#bf0752491059a3ef3ed4c85097531de9fdbcd318" + integrity sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg== + dependencies: + chalk "^2.4.2" + cli-cursor "^2.1.0" + cli-spinners "^2.0.0" + log-symbols "^2.2.0" + strip-ansi "^5.2.0" + wcwidth "^1.0.1" + ora@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ora/-/ora-3.0.0.tgz#8179e3525b9aafd99242d63cc206fd64732741d0" @@ -4975,6 +5048,14 @@ rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.6.0: estree-walker "^0.6.0" micromatch "^3.1.10" +rollup@^0.63.4: + version "0.63.5" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-0.63.5.tgz#5543eecac9a1b83b7e1be598b5be84c9c0a089db" + integrity sha512-dFf8LpUNzIj3oE0vCvobX6rqOzHzLBoblyFp+3znPbjiSmSvOoK2kMKx+Fv9jYduG1rvcCfCveSgEaQHjWRF6g== + dependencies: + "@types/estree" "0.0.39" + "@types/node" "*" + rollup@^1.10.1: version "1.10.1" resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.10.1.tgz#aeb763bbe98f707dc6496708db88372fa66687e7" @@ -5422,7 +5503,7 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" -strip-ansi@^5.0.0: +strip-ansi@^5.0.0, strip-ansi@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== @@ -5718,6 +5799,11 @@ type-check@~0.3.2: dependencies: prelude-ls "~1.1.2" +type-fest@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.3.1.tgz#63d00d204e059474fe5e1b7c011112bbd1dc29e1" + integrity sha512-cUGJnCdr4STbePCgqNFbpVNCepa+kAVohJs1sLhxzdH+gnEoOd8VhbYa7pD3zZYGiURWM2xzEII3fQcRizDkYQ== + type-fest@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.4.1.tgz#8bdf77743385d8a4f13ba95f610f5ccd68c728f8"