Skip to content

Commit

Permalink
Merge pull request #2 from TheElter/feature/glob_option
Browse files Browse the repository at this point in the history
Feature/glob option (second part)
  • Loading branch information
allevo committed Sep 20, 2017
2 parents 8807bf3 + 63edd25 commit 287beb3
Show file tree
Hide file tree
Showing 11 changed files with 148 additions and 23 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ jspm_packages
.node_repl_history


test/data/*
!test/data/example4
!test/data/example3
!test/data/example2
!test/data/example1
test/data/*
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ To change the default configuration, some CLI parameters are allowed:
- `--no-dependency`
- `--peer-dependency`
- `--no-optional-dependency`
- `--glob-pattern <string>`
Overwrite glob pattern (specify multiple times to include/exclude a list). Default is `['**/*.js', '!node_modules/**/*', '!test/**/*', '!tests/**/*']`

## Todo

Expand Down
6 changes: 3 additions & 3 deletions condom.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ function start (options) {
packageJson.peerDependencies = packageJson.peerDependencies || {}
packageJson.optionalDependencies = packageJson.optionalDependencies || {}

var allowDependencies = options.dependencies || true
var allowPeerDependencies = options.peerDependencies || false
var allowOptionalDependency = options.optionalDependencies || true
var allowDependencies = options.dependencies === undefined ? true : options.dependencies
var allowPeerDependencies = options.peerDependencies === undefined ? false : options.peerDependencies
var allowOptionalDependency = options.optionalDependencies === undefined ? true : options.optionalDependencies

globOptions.absolute = true
var globStream = getGlobStream(globPattern, globOptions)
Expand Down
24 changes: 12 additions & 12 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,13 @@
var fs = require('fs')
var path = require('path')
var argv = require('minimist')(process.argv.slice(2), {
boolean: ['only-dependency', 'no-dependency', 'peer-dependency', 'no-optional-dependency']
default: {
'dependency': true,
'peer-dependency': false,
'optional-dependency': true
},
boolean: ['dependency', 'peer-dependency', 'optional-dependency'],
string: 'glob-pattern'
})

var basePath = argv._.pop() + ''
Expand All @@ -20,19 +26,13 @@ var globOptions = {
var options = {
globOptions: globOptions,
packageJson: require(path.resolve(path.join(basePath, 'package.json'))),
dependencies: true,
peerDependencies: false,
optionalDependencies: true
}
if (argv['no-dependency']) {
options.dependencies = false
dependencies: argv['dependency'],
peerDependencies: argv['peer-dependency'],
optionalDependencies: argv['optional-dependency']
}

if (argv['peer-dependency']) {
options.peerDependencies = false
}
if (argv['no-optional-dependency']) {
options.optionalDependencies = false
if (argv['glob-pattern']) {
options.globPattern = argv['glob-pattern']
}

var stream = condom(options)
Expand Down
3 changes: 1 addition & 2 deletions output.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@ module.exports = function (stream, outputStream) {
var exitStatus = 0
const options = {readableObjectMode: false, writableObjectMode: true}
const transform = through2(options, function (data, enc, callback) {
exitStatus = 1

const type = data.type
if (type === 'miss') {
exitStatus = 1
const lineNumber = data.line
const filePath = data.filePath
const requiredModule = data.requiredModule
Expand Down
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,9 @@
"coverage": "tap --cov --coverage-report=html -J -t 60 test/*.js",
"coveralls": "tap test/*.js --cov --coverage-report=text-lcov -J -t 60 | coveralls"
},
"standard": {
"ignore": ["/test/data/"]
},
"repository": {
"type": "git",
"url": "git+https://github.com/allevo/packages-condom.git"
Expand Down
69 changes: 69 additions & 0 deletions test/command-args.test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
'use strict'

var path = require('path')
var tap = require('tap')
var childProcess = require('child_process')

const cliPath = path.resolve(__dirname, '..', 'index.js')
const example4Path = path.resolve(__dirname, 'data', 'example4')

tap.test('default flags', t => {
t.plan(3)

childProcess.execFile('node', [cliPath, example4Path], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stdout, 'bar is required')
t.match(stdout, 'wow is required')
})
})

tap.test('no-dependency', t => {
t.plan(5)

childProcess.execFile('node', [cliPath, example4Path, '--no-dependency'], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stdout, 'gearup is required')
t.match(stdout, 'foo is required')
t.match(stdout, 'bar is required')
t.match(stdout, 'wow is required')
})
})

tap.test('peer-dependency', t => {
t.plan(1)

childProcess.execFile('node', [cliPath, example4Path, '--peer-dependency'], (error, stdout, stderr) => {
t.equal(error, null)
})
})

tap.test('no-optional-dependency', t => {
t.plan(4)

childProcess.execFile('node', [cliPath, example4Path, '--no-optional-dependency'], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stdout, 'bar is required')
t.match(stdout, 'wow is required')
t.match(stdout, 'is is required')
})
})

tap.test('glob-pattern', t => {
t.plan(4)

childProcess.execFile('node', [cliPath, example4Path, '--glob-pattern', '**/*.strange'], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stdout, 'gnats is required')
t.match(stdout, 'Unused package gearup')
t.match(stdout, 'Unused package is')
})
})

tap.test('no directory', t => {
t.plan(2)

childProcess.execFile('node', [cliPath, 'package.json'], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stderr, 'First params should be a directory path')
})
})
12 changes: 12 additions & 0 deletions test/data/example4/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use strict'

// dependencies
require('foo')
require('gearup/utils')

// peerDependencies
require('bar')
require('wow')

// optionalDependencies
require('is')
22 changes: 22 additions & 0 deletions test/data/example4/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
{
"name": "example4",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC",
"dependencies": {
"gearup": "^1.3.2",
"foo": "^1.3.2"
},
"peerDependencies": {
"bar": "^1.3.2",
"wow": "^1.3.2"
},
"optionalDependencies": {
"is": "^1.3.2"
}
}
4 changes: 4 additions & 0 deletions test/data/example4/strange_extension.js.strange
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
'use strict'

require('foo')
require('gnats')
23 changes: 18 additions & 5 deletions test/exit-code.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,28 @@ var childProcess = require('child_process')

const indexPath = path.resolve(__dirname, '..', 'index.js')
const example1Path = path.resolve(__dirname, 'data', 'example1')
const example3Path = path.resolve(__dirname, 'data', 'example3')

tap.test('exit code', t => {
tap.test('exit code for missing deps', t => {
t.plan(5)

childProcess.execFile('node', [indexPath, example1Path], (error, stdout, stderr) => {
t.equal(error.code, 1)
t.match(stdout, 'split')
t.match(stdout, 'pump')
t.match(stdout, 'express')
t.match(stdout, 'quiqui')
t.match(stdout, 'split is required')
t.match(stdout, 'pump is required')
t.match(stdout, 'express is required')
t.match(stdout, 'Unused package quiqui')
})
})

tap.test('exit code for unused deps', t => {
t.plan(5)

childProcess.execFile('node', [indexPath, example3Path], (error, stdout, stderr) => {
t.equal(error, null)
t.match(stdout, 'Unused package foo')
t.match(stdout, 'Unused package bar')
t.match(stdout, 'Unused package is')
t.notMatch(stdout, 'is required')
})
})

0 comments on commit 287beb3

Please sign in to comment.