From 3317168d12486dc83d3d2771bcdca6cff459ae5c Mon Sep 17 00:00:00 2001 From: PhilKunz Date: Thu, 28 Jul 2016 03:10:51 +0200 Subject: [PATCH] now supporting dependency checks --- dist/npmts.check.d.ts | 3 ++ dist/npmts.check.js | 87 ++++++++++++++++++++++++++++++++++++++ dist/npmts.options.d.ts | 1 - dist/npmts.options.js | 3 -- dist/npmts.plugins.d.ts | 5 +-- dist/npmts.plugins.js | 3 +- dist/npmts.promisechain.js | 2 + package.json | 10 ++--- ts/npmts.check.ts | 81 +++++++++++++++++++++++++++++++++++ ts/npmts.options.ts | 4 -- ts/npmts.plugins.ts | 5 +-- ts/npmts.promisechain.ts | 2 + 12 files changed, 184 insertions(+), 22 deletions(-) create mode 100644 dist/npmts.check.d.ts create mode 100644 dist/npmts.check.js create mode 100644 ts/npmts.check.ts diff --git a/dist/npmts.check.d.ts b/dist/npmts.check.d.ts new file mode 100644 index 0000000..fc80a6d --- /dev/null +++ b/dist/npmts.check.d.ts @@ -0,0 +1,3 @@ +/// +import * as plugins from "./npmts.plugins"; +export declare let run: (configArg: any) => plugins.Q.Promise<{}>; diff --git a/dist/npmts.check.js b/dist/npmts.check.js new file mode 100644 index 0000000..19643c2 --- /dev/null +++ b/dist/npmts.check.js @@ -0,0 +1,87 @@ +"use strict"; +var plugins = require("./npmts.plugins"); +var paths = require("./npmts.paths"); +var npmts_promisechain_1 = require("./npmts.promisechain"); +var checkProjectTypings = function (configArg) { + var done = plugins.Q.defer(); + done.resolve(configArg); + return done.promise; +}; +var checkDependencies = function (configArg) { + var done = plugins.Q.defer(); + var options = { + ignoreBinPackage: false, + ignoreDirs: [ + 'test', + 'dist', + 'bower_components' + ], + ignoreMatches: [ + "@types/*", + "babel-preset-*" + ], + parsers: { + '*.ts': plugins.depcheck.parser.typescript, + }, + detectors: [ + plugins.depcheck.detector.requireCallExpression, + plugins.depcheck.detector.importDeclaration + ], + specials: [ + plugins.depcheck.special.eslint, + plugins.depcheck.special.webpack + ], + }; + plugins.depcheck(paths.cwd, options, function (unused) { + for (var _i = 0, _a = unused.dependencies; _i < _a.length; _i++) { + var item = _a[_i]; + plugins.beautylog.warn("Watch out: unused dependency " + item.red); + } + ; + for (var _b = 0, _c = unused.devDependencies; _b < _c.length; _b++) { + var item = _c[_b]; + plugins.beautylog.log("unused devDependency " + item.red); + } + ; + for (var _d = 0, _e = unused.missing; _d < _e.length; _d++) { + var item = _e[_d]; + plugins.beautylog.error("unused devDependency " + item.red); + } + ; + if (unused.missing.length > 0) { + plugins.beautylog.info("exiting due to missing dependencies in package.json"); + process.exit(1); + } + for (var _f = 0, _g = unused.using; _f < _g.length; _f++) { + var item = _g[_f]; + console.log(item); + } + ; + for (var _h = 0, _j = unused.invalidFiles; _h < _j.length; _h++) { + var item = _j[_h]; + plugins.beautylog.warn("Watch out: could not parse file " + item.red); + } + ; + for (var _k = 0, _l = unused.invalidDirs; _k < _l.length; _k++) { + var item = _l[_k]; + plugins.beautylog.warn("Watch out: could not parse directory " + item.red); + } + ; + done.resolve(configArg); + }); + return done.promise; +}; +var checkNodeVersion = function (configArg) { + var done = plugins.Q.defer(); + done.resolve(configArg); + return done.promise; +}; +exports.run = function (configArg) { + var done = plugins.Q.defer(); + npmts_promisechain_1.npmtsOra.text("running project checks..."), + checkProjectTypings(configArg) + .then(checkDependencies) + .then(checkNodeVersion) + .then(done.resolve); + return done.promise; +}; diff --git a/dist/npmts.options.d.ts b/dist/npmts.options.d.ts index c5fdcc7..f32981b 100644 --- a/dist/npmts.options.d.ts +++ b/dist/npmts.options.d.ts @@ -1,5 +1,4 @@ /// import "typings-global"; import plugins = require("./npmts.plugins"); -export declare let isCi: () => any; export declare var run: (configArg: any) => plugins.Q.Promise<{}>; diff --git a/dist/npmts.options.js b/dist/npmts.options.js index 57e0825..cd76c82 100644 --- a/dist/npmts.options.js +++ b/dist/npmts.options.js @@ -2,9 +2,6 @@ require("typings-global"); var plugins = require("./npmts.plugins"); var npmts_promisechain_1 = require("./npmts.promisechain"); -exports.isCi = function () { - return plugins.smartci.check.isCi(); -}; exports.run = function (configArg) { var done = plugins.Q.defer(); var config = configArg; diff --git a/dist/npmts.plugins.d.ts b/dist/npmts.plugins.d.ts index 1405048..111f125 100644 --- a/dist/npmts.plugins.d.ts +++ b/dist/npmts.plugins.d.ts @@ -1,13 +1,13 @@ import "typings-global"; export import beautylog = require("beautylog"); -export declare let gulp: any; +export declare let depcheck: any; +export import gulp = require("gulp"); export declare let g: { babel: any; istanbul: any; gFunction: any; injectModules: any; mocha: any; - replace: any; sourcemaps: any; typedoc: any; }; @@ -17,7 +17,6 @@ export import projectinfo = require("projectinfo"); export import path = require("path"); export import Q = require("q"); export import shelljs = require("shelljs"); -export declare let smartci: any; export import smartcli = require("smartcli"); export import smartcov = require("smartcov"); export import smartenv = require("smartenv"); diff --git a/dist/npmts.plugins.js b/dist/npmts.plugins.js index 76da322..8a5a09b 100644 --- a/dist/npmts.plugins.js +++ b/dist/npmts.plugins.js @@ -1,6 +1,7 @@ "use strict"; require("typings-global"); exports.beautylog = require("beautylog"); +exports.depcheck = require("depcheck"); exports.gulp = require("gulp"); exports.g = { babel: require("gulp-babel"), @@ -8,7 +9,6 @@ exports.g = { gFunction: require("gulp-function"), injectModules: require("gulp-inject-modules"), mocha: require("gulp-mocha"), - replace: require("gulp-replace"), sourcemaps: require("gulp-sourcemaps"), typedoc: require("gulp-typedoc") }; @@ -18,7 +18,6 @@ exports.projectinfo = require("projectinfo"); exports.path = require("path"); exports.Q = require("q"); exports.shelljs = require("shelljs"); -exports.smartci = require("smartci"); exports.smartcli = require("smartcli"); exports.smartcov = require("smartcov"); exports.smartenv = require("smartenv"); diff --git a/dist/npmts.promisechain.js b/dist/npmts.promisechain.js index 0b713a2..f282452 100644 --- a/dist/npmts.promisechain.js +++ b/dist/npmts.promisechain.js @@ -3,6 +3,7 @@ require("typings-global"); var plugins = require("./npmts.plugins"); exports.npmtsOra = new plugins.beautylog.Ora("setting up TaskChain", "cyan"); var NpmtsAssets = require("./npmts.assets"); +var NpmtsCheck = require("./npmts.check"); var NpmtsClean = require("./npmts.clean"); var NpmtsCompile = require("./npmts.compile"); var NpmtsConfigFile = require("./npmts.configfile"); @@ -15,6 +16,7 @@ exports.promisechain = function (argvArg) { NpmtsConfigFile.run(argvArg) .then(NpmtsOptions.run) .then(NpmtsClean.run) + .then(NpmtsCheck.run) .then(NpmtsCompile.run) .then(NpmtsAssets.run) .then(NpmtsTypeDoc.run) diff --git a/package.json b/package.json index 1affb49..94f4060 100644 --- a/package.json +++ b/package.json @@ -29,29 +29,27 @@ }, "homepage": "https://gitlab.com/pushrocks/npmts#readme", "dependencies": { + "@types/gulp": "^3.8.28", "@types/minimatch": "^2.0.28", "@types/q": "^0.0.27", "@types/shelljs": "^0.3.27", "babel-preset-es2015": "^6.9.0", "beautylog": "5.0.18", + "depcheck": "^0.6.4", "early": "^2.0.13", "gulp": "3.9.1", "gulp-babel": "^6.1.2", - "gulp-concat": "^2.6.0", "gulp-function": "^1.3.6", - "gulp-if": "^2.0.1", "gulp-inject-modules": "^1.0.0", "gulp-istanbul": "^1.0.0", "gulp-mocha": "^2.2.0", - "gulp-replace": "^0.5.4", "gulp-sourcemaps": "^1.6.0", "gulp-typedoc": "^2.0.0", "lodash": "^4.14.0", "npmextra": "^1.0.8", "projectinfo": "1.0.3", "q": "^1.4.1", - "shelljs": "^0.7.2", - "smartci": "0.0.1", + "shelljs": "^0.7.3", "smartcli": "1.0.4", "smartcov": "0.0.9", "smartenv": "1.2.5", @@ -59,7 +57,7 @@ "smartpath": "3.2.2", "smartstring": "^2.0.15", "source-map-support": "^0.4.2", - "tsn": "^1.0.9", + "tsn": "^1.0.10", "typedoc": "^0.4.4", "typescript": "^2.0.0-dev.20160630", "typings-global": "*" diff --git a/ts/npmts.check.ts b/ts/npmts.check.ts new file mode 100644 index 0000000..140e069 --- /dev/null +++ b/ts/npmts.check.ts @@ -0,0 +1,81 @@ +import * as plugins from "./npmts.plugins"; +import * as paths from "./npmts.paths"; +import {npmtsOra} from "./npmts.promisechain"; + +let checkProjectTypings = (configArg) => { + let done = plugins.Q.defer(); + + done.resolve(configArg); + return done.promise; +}; + +let checkDependencies = (configArg) => { + let done = plugins.Q.defer(); + const options = { + ignoreBinPackage: false, // ignore the packages with bin entry + ignoreDirs: [ // folder with these names will be ignored + 'test', + 'dist', + 'bower_components' + ], + ignoreMatches: [ // ignore dependencies that matches these globs + "@types/*", + "babel-preset-*" + ], + parsers: { // the target parsers + '*.ts': plugins.depcheck.parser.typescript, + }, + detectors: [ // the target detectors + plugins.depcheck.detector.requireCallExpression, + plugins.depcheck.detector.importDeclaration + ], + specials: [ // the target special parsers + plugins.depcheck.special.eslint, + plugins.depcheck.special.webpack + ], + }; + + plugins.depcheck(paths.cwd, options, (unused) => { + for (let item of unused.dependencies){ + plugins.beautylog.warn(`Watch out: unused dependency ${item.red}`); + }; + for (let item of unused.devDependencies){ + plugins.beautylog.log(`unused devDependency ${item.red}`); + }; + for (let item of unused.missing){ + plugins.beautylog.error(`unused devDependency ${item.red}`); + }; + if(unused.missing.length > 0){ + plugins.beautylog.info("exiting due to missing dependencies in package.json"); + process.exit(1); + } + for (let item of unused.using){ + console.log(item); + }; + for(let item of unused.invalidFiles){ + plugins.beautylog.warn(`Watch out: could not parse file ${item.red}`); + }; + for(let item of unused.invalidDirs){ + plugins.beautylog.warn(`Watch out: could not parse directory ${item.red}`); + }; + done.resolve(configArg); + }); + return done.promise; +}; + +let checkNodeVersion = (configArg) => { + let done = plugins.Q.defer(); + + done.resolve(configArg); + return done.promise; +} + +export let run = (configArg) => { + let done = plugins.Q.defer(); + npmtsOra.text("running project checks..."), + checkProjectTypings(configArg) + .then(checkDependencies) + .then(checkNodeVersion) + .then(done.resolve); + return done.promise; +} diff --git a/ts/npmts.options.ts b/ts/npmts.options.ts index dfa87d2..d7e65a2 100644 --- a/ts/npmts.options.ts +++ b/ts/npmts.options.ts @@ -2,10 +2,6 @@ import "typings-global"; import plugins = require("./npmts.plugins"); import {npmtsOra} from "./npmts.promisechain"; -export let isCi = function(){ - return plugins.smartci.check.isCi(); -}; - export var run = function(configArg){ var done = plugins.Q.defer(); var config = configArg; diff --git a/ts/npmts.plugins.ts b/ts/npmts.plugins.ts index 2e58e42..3156d78 100644 --- a/ts/npmts.plugins.ts +++ b/ts/npmts.plugins.ts @@ -1,13 +1,13 @@ import "typings-global"; export import beautylog = require("beautylog"); -export let gulp = require("gulp"); +export let depcheck = require("depcheck"); +export import gulp = require("gulp"); export let g = { babel: require("gulp-babel"), istanbul: require("gulp-istanbul"), gFunction: require("gulp-function"), injectModules: require("gulp-inject-modules"), mocha: require("gulp-mocha"), - replace: require("gulp-replace"), sourcemaps: require("gulp-sourcemaps"), typedoc: require("gulp-typedoc") }; @@ -17,7 +17,6 @@ export import projectinfo = require("projectinfo"); export import path = require("path"); export import Q = require("q"); export import shelljs = require("shelljs"); -export let smartci = require("smartci"); export import smartcli = require("smartcli"); export import smartcov = require("smartcov"); export import smartenv = require("smartenv"); diff --git a/ts/npmts.promisechain.ts b/ts/npmts.promisechain.ts index 7023e0c..f73c4ee 100644 --- a/ts/npmts.promisechain.ts +++ b/ts/npmts.promisechain.ts @@ -5,6 +5,7 @@ import {Ora} from "beautylog" export let npmtsOra = new plugins.beautylog.Ora("setting up TaskChain","cyan"); import NpmtsAssets = require("./npmts.assets"); +import NpmtsCheck = require("./npmts.check"); import NpmtsClean = require("./npmts.clean"); import NpmtsCompile = require("./npmts.compile"); import NpmtsConfigFile = require("./npmts.configfile"); @@ -18,6 +19,7 @@ export let promisechain = function(argvArg){ NpmtsConfigFile.run(argvArg) .then(NpmtsOptions.run) .then(NpmtsClean.run) + .then(NpmtsCheck.run) .then(NpmtsCompile.run) .then(NpmtsAssets.run) .then(NpmtsTypeDoc.run)