From d54564a0b6bcfe2db93fbf3c6755bb6671ff253d Mon Sep 17 00:00:00 2001 From: Lloyd Brookes Date: Thu, 19 Jan 2017 20:59:45 +0000 Subject: [PATCH] remove support for node versions less than v4.0.0 --- .travis.yml | 2 - LICENSE | 2 +- README.md | 2 +- bin.js | 9 -- {src/bin => bin}/cli.js | 2 +- es5/bin/cli.js | 22 --- es5/lib/argv.js | 94 ----------- es5/lib/command-line-args.js | 90 ----------- es5/lib/definition.js | 57 ------- es5/lib/definitions.js | 165 -------------------- es5/lib/option.js | 40 ----- es5/test/alias.js | 31 ---- es5/test/ambiguous-input.js | 43 ----- es5/test/bad-input.js | 26 --- es5/test/class-argv.js | 57 ------- es5/test/class-definitions.js | 24 --- es5/test/default-option.js | 53 ------- es5/test/default-value.js | 43 ----- es5/test/detect-process-argv.js | 22 --- es5/test/exceptions.js | 152 ------------------ es5/test/grouping.js | 51 ------ es5/test/name-alias-mix.js | 18 --- es5/test/name-unicode.js | 17 -- es5/test/notations.js | 43 ----- es5/test/option.js | 12 -- es5/test/type-boolean-multiple.js | 17 -- es5/test/type-boolean.js | 31 ---- es5/test/type-none.js | 51 ------ es5/test/type-number-multiple.js | 31 ---- es5/test/type-number.js | 17 -- es5/test/type-other-multiple.js | 17 -- es5/test/type-other.js | 25 --- es5/test/type-string.js | 19 --- index.js | 34 ---- jsdoc2md/README.hbs | 2 +- {src/lib => lib}/argv.js | 0 {src/lib => lib}/command-line-args.js | 0 {src/lib => lib}/definition.js | 0 {src/lib => lib}/definitions.js | 0 {src/lib => lib}/option.js | 0 package.json | 19 +-- test.js | 9 -- {src/test => test}/alias.js | 4 +- {src/test => test}/ambiguous-input.js | 4 +- {src/test => test}/bad-input.js | 4 +- {src/test => test}/class-argv.js | 2 +- {src/test => test}/class-definitions.js | 2 +- {src/test => test}/default-option.js | 4 +- {src/test => test}/default-value.js | 4 +- {src/test => test}/detect-process-argv.js | 4 +- {src/test => test}/exceptions.js | 4 +- {src/test => test}/grouping.js | 4 +- {src/test => test}/name-alias-mix.js | 4 +- {src/test => test}/name-unicode.js | 4 +- {src/test => test}/notations.js | 4 +- {src/test => test}/option.js | 2 +- {src/test => test}/type-boolean-multiple.js | 4 +- {src/test => test}/type-boolean.js | 4 +- {src/test => test}/type-none.js | 4 +- {src/test => test}/type-number-multiple.js | 4 +- {src/test => test}/type-number.js | 4 +- {src/test => test}/type-other-multiple.js | 4 +- {src/test => test}/type-other.js | 4 +- {src/test => test}/type-string.js | 4 +- 64 files changed, 50 insertions(+), 1381 deletions(-) delete mode 100755 bin.js rename {src/bin => bin}/cli.js (91%) delete mode 100644 es5/bin/cli.js delete mode 100644 es5/lib/argv.js delete mode 100644 es5/lib/command-line-args.js delete mode 100644 es5/lib/definition.js delete mode 100644 es5/lib/definitions.js delete mode 100644 es5/lib/option.js delete mode 100644 es5/test/alias.js delete mode 100644 es5/test/ambiguous-input.js delete mode 100644 es5/test/bad-input.js delete mode 100644 es5/test/class-argv.js delete mode 100644 es5/test/class-definitions.js delete mode 100644 es5/test/default-option.js delete mode 100644 es5/test/default-value.js delete mode 100644 es5/test/detect-process-argv.js delete mode 100644 es5/test/exceptions.js delete mode 100644 es5/test/grouping.js delete mode 100644 es5/test/name-alias-mix.js delete mode 100644 es5/test/name-unicode.js delete mode 100644 es5/test/notations.js delete mode 100644 es5/test/option.js delete mode 100644 es5/test/type-boolean-multiple.js delete mode 100644 es5/test/type-boolean.js delete mode 100644 es5/test/type-none.js delete mode 100644 es5/test/type-number-multiple.js delete mode 100644 es5/test/type-number.js delete mode 100644 es5/test/type-other-multiple.js delete mode 100644 es5/test/type-other.js delete mode 100644 es5/test/type-string.js delete mode 100644 index.js rename {src/lib => lib}/argv.js (100%) rename {src/lib => lib}/command-line-args.js (100%) rename {src/lib => lib}/definition.js (100%) rename {src/lib => lib}/definitions.js (100%) rename {src/lib => lib}/option.js (100%) delete mode 100644 test.js rename {src/test => test}/alias.js (92%) rename {src/test => test}/ambiguous-input.js (94%) rename {src/test => test}/bad-input.js (92%) rename {src/test => test}/class-argv.js (98%) rename {src/test => test}/class-definitions.js (95%) rename {src/test => test}/default-option.js (96%) rename {src/test => test}/default-value.js (95%) rename {src/test => test}/detect-process-argv.js (89%) rename {src/test => test}/exceptions.js (98%) rename {src/test => test}/grouping.js (93%) rename {src/test => test}/name-alias-mix.js (89%) rename {src/test => test}/name-unicode.js (88%) rename {src/test => test}/notations.js (95%) rename {src/test => test}/option.js (89%) rename {src/test => test}/type-boolean-multiple.js (85%) rename {src/test => test}/type-boolean.js (95%) rename {src/test => test}/type-none.js (94%) rename {src/test => test}/type-number-multiple.js (91%) rename {src/test => test}/type-number.js (89%) rename {src/test => test}/type-other-multiple.js (89%) rename {src/test => test}/type-other.js (91%) rename {src/test => test}/type-string.js (91%) diff --git a/.travis.yml b/.travis.yml index 7d36506..be69c45 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,5 +4,3 @@ node_js: - 6 - 5 - 4 - - iojs - - 0.12 diff --git a/LICENSE b/LICENSE index 1998a7f..94d0234 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ The MIT License (MIT) -Copyright (c) 2014-2016 Lloyd Brookes <75pound@gmail.com> +Copyright (c) 2014-17 Lloyd Brookes <75pound@gmail.com> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal diff --git a/README.md b/README.md index 4975869..c6152e3 100644 --- a/README.md +++ b/README.md @@ -366,4 +366,4 @@ There are two automatic groups: `_all` (contains all options) and `_none` (conta * * * -© 2014-16 Lloyd Brookes \<75pound@gmail.com\>. Documented by [jsdoc-to-markdown](https://github.com/75lb/jsdoc-to-markdown). +© 2014-17 Lloyd Brookes \<75pound@gmail.com\>. Documented by [jsdoc-to-markdown](https://github.com/75lb/jsdoc-to-markdown). diff --git a/bin.js b/bin.js deleted file mode 100755 index 29262d5..0000000 --- a/bin.js +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env node -'use strict' -var detect = require('feature-detect-es6') - -if (detect.all('class', 'arrowFunction', 'let', 'const')) { - module.exports = require('./src/bin/cli') -} else { - module.exports = require('./es5/bin/cli') -} diff --git a/src/bin/cli.js b/bin/cli.js similarity index 91% rename from src/bin/cli.js rename to bin/cli.js index 03da13f..32cd5fd 100644 --- a/src/bin/cli.js +++ b/bin/cli.js @@ -1,5 +1,5 @@ 'use strict' -const commandLineArgs = require('../../') +const commandLineArgs = require('../') const os = require('os') const fs = require('fs') const path = require('path') diff --git a/es5/bin/cli.js b/es5/bin/cli.js deleted file mode 100644 index 455f20c..0000000 --- a/es5/bin/cli.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var commandLineArgs = require('../../'); -var os = require('os'); -var fs = require('fs'); -var path = require('path'); - -var tmpPath = path.join(os.tmpdir(), Date.now() + '-cla.js'); - -process.stdin.pipe(fs.createWriteStream(tmpPath)).on('close', parseCla); - -function parseCla() { - var cliOptions = require(tmpPath); - fs.unlinkSync(tmpPath); - - try { - console.log(commandLineArgs(cliOptions)); - } catch (err) { - console.error(err.message); - process.exitCode = 1; - } -} \ No newline at end of file diff --git a/es5/lib/argv.js b/es5/lib/argv.js deleted file mode 100644 index c95dd3d..0000000 --- a/es5/lib/argv.js +++ /dev/null @@ -1,94 +0,0 @@ -'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var arrayify = require('array-back'); -var option = require('./option'); -var findReplace = require('find-replace'); - -var Argv = function () { - function Argv(argv) { - _classCallCheck(this, Argv); - - if (argv) { - argv = arrayify(argv); - } else { - argv = process.argv.slice(0); - argv.splice(0, 2); - } - - this.list = argv; - } - - _createClass(Argv, [{ - key: 'clear', - value: function clear() { - this.list.length = 0; - } - }, { - key: 'expandOptionEqualsNotation', - value: function expandOptionEqualsNotation() { - var _this = this; - - var optEquals = option.optEquals; - if (this.list.some(optEquals.test.bind(optEquals))) { - (function () { - var expandedArgs = []; - _this.list.forEach(function (arg) { - var matches = arg.match(optEquals.re); - if (matches) { - expandedArgs.push(matches[1], option.VALUE_MARKER + matches[2]); - } else { - expandedArgs.push(arg); - } - }); - _this.clear(); - _this.list = expandedArgs; - })(); - } - } - }, { - key: 'expandGetoptNotation', - value: function expandGetoptNotation() { - var combinedArg = option.combined; - var hasGetopt = this.list.some(combinedArg.test.bind(combinedArg)); - if (hasGetopt) { - findReplace(this.list, combinedArg.re, function (arg) { - arg = arg.slice(1); - return arg.split('').map(function (letter) { - return '-' + letter; - }); - }); - } - } - }, { - key: 'validate', - value: function validate(definitions) { - var invalidOption = void 0; - - var optionWithoutDefinition = this.list.filter(function (arg) { - return option.isOption(arg); - }).some(function (arg) { - if (definitions.get(arg) === undefined) { - invalidOption = arg; - return true; - } - }); - if (optionWithoutDefinition) { - halt('UNKNOWN_OPTION', 'Unknown option: ' + invalidOption); - } - } - }]); - - return Argv; -}(); - -function halt(name, message) { - var err = new Error(message); - err.name = name; - throw err; -} - -module.exports = Argv; \ No newline at end of file diff --git a/es5/lib/command-line-args.js b/es5/lib/command-line-args.js deleted file mode 100644 index e47b196..0000000 --- a/es5/lib/command-line-args.js +++ /dev/null @@ -1,90 +0,0 @@ -'use strict'; - -var arrayify = require('array-back'); -var Definitions = require('./definitions'); -var option = require('./option'); -var t = require('typical'); -var Argv = require('./argv'); - -module.exports = commandLineArgs; - -function commandLineArgs(definitions, argv) { - definitions = new Definitions(definitions); - argv = new Argv(argv); - argv.expandOptionEqualsNotation(); - argv.expandGetoptNotation(); - argv.validate(definitions); - - var output = definitions.createOutput(); - var def = void 0; - - argv.list.forEach(function (item) { - if (option.isOption(item)) { - def = definitions.get(item); - if (!t.isDefined(output[def.name])) outputSet(output, def.name, def.getInitialValue()); - if (def.isBoolean()) { - outputSet(output, def.name, true); - def = null; - } - } else { - var reBeginsWithValueMarker = new RegExp('^' + option.VALUE_MARKER); - var value = reBeginsWithValueMarker.test(item) ? item.replace(reBeginsWithValueMarker, '') : item; - if (!def) { - def = definitions.getDefault(); - if (!def) return; - if (!t.isDefined(output[def.name])) outputSet(output, def.name, def.getInitialValue()); - } - - var outputValue = def.type ? def.type(value) : value; - outputSet(output, def.name, outputValue); - - if (!def.multiple) def = null; - } - }); - - for (var key in output) { - var value = output[key]; - if (Array.isArray(value) && value._initial) delete value._initial; - } - - if (definitions.isGrouped()) { - return groupOutput(definitions, output); - } else { - return output; - } -} - -function outputSet(output, property, value) { - if (output[property] && output[property]._initial) { - output[property] = []; - delete output[property]._initial; - } - if (Array.isArray(output[property])) { - output[property].push(value); - } else { - output[property] = value; - } -} - -function groupOutput(definitions, output) { - var grouped = { - _all: output - }; - - definitions.whereGrouped().forEach(function (def) { - arrayify(def.group).forEach(function (groupName) { - grouped[groupName] = grouped[groupName] || {}; - if (t.isDefined(output[def.name])) { - grouped[groupName][def.name] = output[def.name]; - } - }); - }); - - definitions.whereNotGrouped().forEach(function (def) { - if (t.isDefined(output[def.name])) { - if (!grouped._none) grouped._none = {}; - grouped._none[def.name] = output[def.name]; - } - }); - return grouped; -} \ No newline at end of file diff --git a/es5/lib/definition.js b/es5/lib/definition.js deleted file mode 100644 index a083233..0000000 --- a/es5/lib/definition.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var t = require('typical'); - -var OptionDefinition = function () { - function OptionDefinition(definition) { - _classCallCheck(this, OptionDefinition); - - this.name = definition.name; - - this.type = definition.type; - - this.alias = definition.alias; - - this.multiple = definition.multiple; - - this.defaultOption = definition.defaultOption; - - this.defaultValue = definition.defaultValue; - - this.group = definition.group; - - for (var prop in definition) { - if (!this[prop]) this[prop] = definition[prop]; - } - } - - _createClass(OptionDefinition, [{ - key: 'getInitialValue', - value: function getInitialValue() { - if (this.multiple) { - return []; - } else if (this.isBoolean() || !this.type) { - return true; - } else { - return null; - } - } - }, { - key: 'isBoolean', - value: function isBoolean() { - if (this.type) { - return this.type === Boolean || t.isFunction(this.type) && this.type.name === 'Boolean'; - } else { - return false; - } - } - }]); - - return OptionDefinition; -}(); - -module.exports = OptionDefinition; \ No newline at end of file diff --git a/es5/lib/definitions.js b/es5/lib/definitions.js deleted file mode 100644 index a5bafa1..0000000 --- a/es5/lib/definitions.js +++ /dev/null @@ -1,165 +0,0 @@ -'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var arrayify = require('array-back'); -var option = require('./option'); -var Definition = require('./definition'); -var t = require('typical'); - -var Definitions = function () { - function Definitions(definitions) { - var _this = this; - - _classCallCheck(this, Definitions); - - this.list = []; - arrayify(definitions).forEach(function (def) { - return _this.list.push(new Definition(def)); - }); - this.validate(); - } - - _createClass(Definitions, [{ - key: 'validate', - value: function validate(argv) { - var someHaveNoName = this.list.some(function (def) { - return !def.name; - }); - if (someHaveNoName) { - halt('NAME_MISSING', 'Invalid option definitions: the `name` property is required on each definition'); - } - - var someDontHaveFunctionType = this.list.some(function (def) { - return def.type && typeof def.type !== 'function'; - }); - if (someDontHaveFunctionType) { - halt('INVALID_TYPE', 'Invalid option definitions: the `type` property must be a setter fuction (default: `Boolean`)'); - } - - var invalidOption = void 0; - - var numericAlias = this.list.some(function (def) { - invalidOption = def; - return t.isDefined(def.alias) && t.isNumber(def.alias); - }); - if (numericAlias) { - halt('INVALID_ALIAS', 'Invalid option definition: to avoid ambiguity an alias cannot be numeric [--' + invalidOption.name + ' alias is -' + invalidOption.alias + ']'); - } - - var multiCharacterAlias = this.list.some(function (def) { - invalidOption = def; - return t.isDefined(def.alias) && def.alias.length !== 1; - }); - if (multiCharacterAlias) { - halt('INVALID_ALIAS', 'Invalid option definition: an alias must be a single character'); - } - - var hypenAlias = this.list.some(function (def) { - invalidOption = def; - return def.alias === '-'; - }); - if (hypenAlias) { - halt('INVALID_ALIAS', 'Invalid option definition: an alias cannot be "-"'); - } - - var duplicateName = hasDuplicates(this.list.map(function (def) { - return def.name; - })); - if (duplicateName) { - halt('DUPLICATE_NAME', 'Two or more option definitions have the same name'); - } - - var duplicateAlias = hasDuplicates(this.list.map(function (def) { - return def.alias; - })); - if (duplicateAlias) { - halt('DUPLICATE_ALIAS', 'Two or more option definitions have the same alias'); - } - - var duplicateDefaultOption = hasDuplicates(this.list.map(function (def) { - return def.defaultOption; - })); - if (duplicateDefaultOption) { - halt('DUPLICATE_DEFAULT_OPTION', 'Only one option definition can be the defaultOption'); - } - } - }, { - key: 'createOutput', - value: function createOutput() { - var output = {}; - this.list.forEach(function (def) { - if (t.isDefined(def.defaultValue)) output[def.name] = def.defaultValue; - if (Array.isArray(output[def.name])) { - output[def.name]._initial = true; - } - }); - return output; - } - }, { - key: 'get', - value: function get(arg) { - return option.short.test(arg) ? this.list.find(function (def) { - return def.alias === option.short.name(arg); - }) : this.list.find(function (def) { - return def.name === option.long.name(arg); - }); - } - }, { - key: 'getDefault', - value: function getDefault() { - return this.list.find(function (def) { - return def.defaultOption === true; - }); - } - }, { - key: 'isGrouped', - value: function isGrouped() { - return this.list.some(function (def) { - return def.group; - }); - } - }, { - key: 'whereGrouped', - value: function whereGrouped() { - return this.list.filter(containsValidGroup); - } - }, { - key: 'whereNotGrouped', - value: function whereNotGrouped() { - return this.list.filter(function (def) { - return !containsValidGroup(def); - }); - } - }]); - - return Definitions; -}(); - -function halt(name, message) { - var err = new Error(message); - err.name = name; - throw err; -} - -function containsValidGroup(def) { - return arrayify(def.group).some(function (group) { - return group; - }); -} - -function hasDuplicates(array) { - var items = {}; - for (var i = 0; i < array.length; i++) { - var value = array[i]; - if (items[value]) { - return true; - } else { - if (t.isDefined(value)) items[value] = true; - } - } -} - -module.exports = Definitions; \ No newline at end of file diff --git a/es5/lib/option.js b/es5/lib/option.js deleted file mode 100644 index d914b58..0000000 --- a/es5/lib/option.js +++ /dev/null @@ -1,40 +0,0 @@ -'use strict'; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var Arg = function () { - function Arg(re) { - _classCallCheck(this, Arg); - - this.re = re; - } - - _createClass(Arg, [{ - key: 'name', - value: function name(arg) { - return arg.match(this.re)[1]; - } - }, { - key: 'test', - value: function test(arg) { - return this.re.test(arg); - } - }]); - - return Arg; -}(); - -var option = { - short: new Arg(/^-([^\d-])$/), - long: new Arg(/^--(\S+)/), - combined: new Arg(/^-([^\d-]{2,})$/), - isOption: function isOption(arg) { - return this.short.test(arg) || this.long.test(arg); - }, - - optEquals: new Arg(/^(--\S+?)=(.*)/), - VALUE_MARKER: '552f3a31-14cd-4ced-bd67-656a659e9efb' }; - -module.exports = option; \ No newline at end of file diff --git a/es5/test/alias.js b/es5/test/alias.js deleted file mode 100644 index 044bb90..0000000 --- a/es5/test/alias.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -var optionDefinitions = [{ name: 'verbose', alias: 'v' }, { name: 'colour', alias: 'c' }, { name: 'number', alias: 'n' }, { name: 'dry-run', alias: 'd' }]; - -runner.test('alias: one boolean', function () { - var argv = ['-v']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - verbose: true - }); -}); - -runner.test('alias: one --this-type boolean', function () { - var argv = ['-d']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - 'dry-run': true - }); -}); - -runner.test('alias: one boolean, one string', function () { - var argv = ['-v', '-c']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - verbose: true, - colour: true - }); -}); \ No newline at end of file diff --git a/es5/test/ambiguous-input.js b/es5/test/ambiguous-input.js deleted file mode 100644 index a51785b..0000000 --- a/es5/test/ambiguous-input.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('ambiguous input: value looks like option', function () { - var optionDefinitions = [{ name: 'colour', type: String, alias: 'c' }]; - a.deepStrictEqual(cliArgs(optionDefinitions, ['-c', 'red']), { - colour: 'red' - }); - a.throws(function () { - cliArgs(optionDefinitions, ['--colour', '--red']), { - colour: '--red' - }; - }); - a.doesNotThrow(function () { - cliArgs(optionDefinitions, ['--colour=--red']), { - colour: '--red' - }; - }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour=--red']), { - colour: '--red' - }); -}); - -runner.test('ambiguous input: value uses marker character', function () { - var optionDefinitions = [{ name: 'colour', type: String, alias: 'c' }]; - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour=--вы']), { - colour: '--вы' - }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour=вы']), { - colour: 'вы' - }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour', 'вы']), { - colour: 'вы' - }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['-c', 'вы']), { - colour: 'вы' - }); -}); \ No newline at end of file diff --git a/es5/test/bad-input.js b/es5/test/bad-input.js deleted file mode 100644 index b3e5311..0000000 --- a/es5/test/bad-input.js +++ /dev/null @@ -1,26 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('bad-input: handles missing option value', function () { - var optionDefinitions = [{ name: 'colour', type: String }, { name: 'files' }]; - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour']), { - colour: null - }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--colour', '--files', 'yeah']), { - colour: null, - files: 'yeah' - }); -}); - -runner.test('bad-input: handles arrays with relative paths', function () { - var optionDefinitions = [{ name: 'colours', type: String, multiple: true }]; - var argv = ['--colours', '../what', '../ever']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - colours: ['../what', '../ever'] - }); -}); \ No newline at end of file diff --git a/es5/test/class-argv.js b/es5/test/class-argv.js deleted file mode 100644 index 39a25e3..0000000 --- a/es5/test/class-argv.js +++ /dev/null @@ -1,57 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var detect = require('feature-detect-es6'); -var a = require('core-assert'); -var Argv = require('../lib/argv'); -var Definitions = require('../lib/definitions'); - -var runner = new TestRunner(); - -runner.test('.expandOptionEqualsNotation()', function () { - var argv = new Argv(['--one=1', '--two', '2', '--three=3', '4']); - argv.expandOptionEqualsNotation(); - a.deepStrictEqual(argv.list, ['--one', '552f3a31-14cd-4ced-bd67-656a659e9efb1', '--two', '2', '--three', '552f3a31-14cd-4ced-bd67-656a659e9efb3', '4']); -}); - -runner.test('.expandGetoptNotation()', function () { - var argv = new Argv(['-abc']); - argv.expandGetoptNotation(); - a.deepStrictEqual(argv.list, ['-a', '-b', '-c']); -}); - -runner.test('.expandGetoptNotation() with values', function () { - var argv = new Argv(['-abc', '1', '-a', '2', '-bc']); - argv.expandGetoptNotation(); - a.deepStrictEqual(argv.list, ['-a', '-b', '-c', '1', '-a', '2', '-b', '-c']); -}); - -runner.test('.validate()', function () { - var definitions = new Definitions([{ name: 'one', type: Number }]); - - a.doesNotThrow(function () { - var argv = new Argv(['--one', '1']); - argv.validate(definitions); - }); - - a.throws(function () { - var argv = new Argv(['--one', '--two']); - argv.validate(definitions); - }); - - a.throws(function () { - var argv = new Argv(['--one', '2', '--two', 'two']); - argv.validate(definitions); - }); - - a.throws(function () { - var argv = new Argv(['-a', '2']); - argv.validate(definitions); - }); -}); - -runner.test('expandOptionEqualsNotation', function () { - var argv = new Argv(['--one=tree']); - argv.expandOptionEqualsNotation(); - a.deepStrictEqual(argv.list, ['--one', '552f3a31-14cd-4ced-bd67-656a659e9efbtree']); -}); \ No newline at end of file diff --git a/es5/test/class-definitions.js b/es5/test/class-definitions.js deleted file mode 100644 index 00be260..0000000 --- a/es5/test/class-definitions.js +++ /dev/null @@ -1,24 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var detect = require('feature-detect-es6'); -var a = require('core-assert'); -var Definitions = require('../lib/definitions'); - -var runner = new TestRunner(); - -runner.test('.createOutput()', function () { - var definitions = new Definitions([{ name: 'one', defaultValue: 'eins' }]); - a.deepStrictEqual(definitions.createOutput(), { one: 'eins' }); -}); - -runner.test('.get()', function () { - var definitions = new Definitions([{ name: 'one', defaultValue: 'eins' }]); - a.strictEqual(definitions.get('--one').name, 'one'); -}); - -runner.test('.validate()', function () { - a.throws(function () { - var definitions = new Definitions([{ name: 'one' }, { name: 'one' }]); - }); -}); \ No newline at end of file diff --git a/es5/test/default-option.js b/es5/test/default-option.js deleted file mode 100644 index b215910..0000000 --- a/es5/test/default-option.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('defaultOption: string', function () { - var optionDefinitions = [{ name: 'files', defaultOption: true }]; - var argv = ['file1', 'file2']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - files: 'file2' - }); -}); - -runner.test('defaultOption: multiple string', function () { - var optionDefinitions = [{ name: 'files', defaultOption: true, multiple: true }]; - var argv = ['file1', 'file2']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - files: ['file1', 'file2'] - }); -}); - -runner.test('defaultOption: after a boolean', function () { - var definitions = [{ name: 'one', type: Boolean }, { name: 'two', defaultOption: true }]; - a.deepStrictEqual(cliArgs(definitions, ['--one', 'sfsgf']), { one: true, two: 'sfsgf' }); -}); - -runner.test('defaultOption: multiple defaultOption values between other arg/value pairs', function () { - var optionDefinitions = [{ name: 'one' }, { name: 'two' }, { name: 'files', defaultOption: true, multiple: true }]; - var argv = ['--one', '1', 'file1', 'file2', '--two', '2']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - one: '1', - two: '2', - files: ['file1', 'file2'] - }); -}); - -runner.test('defaultOption: multiple defaultOption values between other arg/value pairs 2', function () { - var optionDefinitions = [{ name: 'one', type: Boolean }, { name: 'two' }, { name: 'files', defaultOption: true, multiple: true }]; - var argv = ['file0', '--one', 'file1', '--files', 'file2', '--two', '2', 'file3']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - one: true, - two: '2', - files: ['file0', 'file1', 'file2', 'file3'] - }); -}); - -runner.test('defaultOption: floating args present but no defaultOption', function () { - var definitions = [{ name: 'one', type: Boolean }]; - a.deepStrictEqual(cliArgs(definitions, ['aaa', '--one', 'aaa', 'aaa']), { one: true }); -}); \ No newline at end of file diff --git a/es5/test/default-value.js b/es5/test/default-value.js deleted file mode 100644 index 6c35428..0000000 --- a/es5/test/default-value.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('default value', function () { - a.deepStrictEqual(cliArgs([{ name: 'one' }, { name: 'two', defaultValue: 'two' }], ['--one', '1']), { - one: '1', - two: 'two' - }); - a.deepStrictEqual(cliArgs([{ name: 'two', defaultValue: 'two' }], []), { - two: 'two' - }); - a.deepStrictEqual(cliArgs([{ name: 'two', defaultValue: 'two' }], ['--two', 'zwei']), { - two: 'zwei' - }); - a.deepStrictEqual(cliArgs([{ name: 'two', multiple: true, defaultValue: ['two', 'zwei'] }], ['--two', 'duo']), { two: ['duo'] }); -}); - -runner.test('default value 2', function () { - var defs = [{ name: 'two', multiple: true, defaultValue: ['two', 'zwei'] }]; - var result = cliArgs(defs, []); - a.deepStrictEqual(result, { two: ['two', 'zwei'] }); -}); - -runner.test('default value: array as defaultOption', function () { - var defs = [{ name: 'two', multiple: true, defaultValue: ['two', 'zwei'], defaultOption: true }]; - var argv = ['duo']; - a.deepStrictEqual(cliArgs(defs, argv), { two: ['duo'] }); -}); - -runner.test('default value: falsy default values', function () { - var defs = [{ name: 'one', defaultValue: 0 }, { name: 'two', defaultValue: false }]; - - var argv = []; - a.deepStrictEqual(cliArgs(defs, argv), { - one: 0, - two: false - }); -}); \ No newline at end of file diff --git a/es5/test/detect-process-argv.js b/es5/test/detect-process-argv.js deleted file mode 100644 index 34dfac7..0000000 --- a/es5/test/detect-process-argv.js +++ /dev/null @@ -1,22 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('detect process.argv: should automatically remove first two argv items', function () { - process.argv = ['node', 'filename', '--one', 'eins']; - a.deepStrictEqual(cliArgs({ name: 'one' }, process.argv), { - one: 'eins' - }); -}); - -runner.test('process.argv is left untouched', function () { - process.argv = ['node', 'filename', '--one', 'eins']; - a.deepStrictEqual(cliArgs({ name: 'one' }), { - one: 'eins' - }); - a.deepStrictEqual(process.argv, ['node', 'filename', '--one', 'eins']); -}); \ No newline at end of file diff --git a/es5/test/exceptions.js b/es5/test/exceptions.js deleted file mode 100644 index 22b37a2..0000000 --- a/es5/test/exceptions.js +++ /dev/null @@ -1,152 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('err-invalid-definition: throws when no definition.name specified', function () { - var optionDefinitions = [{ something: 'one' }, { something: 'two' }]; - var argv = ['--one', '--two']; - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'NAME_MISSING'); - } -}); - -runner.test('err-invalid-definition: throws if dev set a numeric alias', function () { - var optionDefinitions = [{ name: 'colours', alias: '1' }]; - var argv = ['--colours', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_ALIAS'); - } -}); - -runner.test('err-invalid-definition: throws if dev set an alias of "-"', function () { - var optionDefinitions = [{ name: 'colours', alias: '-' }]; - var argv = ['--colours', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_ALIAS'); - } -}); - -runner.test('err-invalid-definition: multi-character alias', function () { - var optionDefinitions = [{ name: 'one', alias: 'aa' }]; - var argv = ['--one', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_ALIAS'); - } -}); - -runner.test('err-invalid-definition: invalid type values', function () { - var argv = ['--one', 'something']; - try { - cliArgs([{ name: 'one', type: 'string' }], argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_TYPE'); - } - - try { - cliArgs([{ name: 'one', type: 234 }], argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_TYPE'); - } - - try { - cliArgs([{ name: 'one', type: {} }], argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'INVALID_TYPE'); - } - - a.doesNotThrow(function () { - cliArgs([{ name: 'one', type: function type() {} }], argv); - }, /invalid/i); -}); - -runner.test('err-invalid-definition: value without option definition', function () { - var optionDefinitions = [{ name: 'one', type: Number }]; - - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '1']), { one: 1 }); - - try { - cliArgs(optionDefinitions, ['--one', '--two']); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'UNKNOWN_OPTION'); - } - - try { - cliArgs(optionDefinitions, ['--one', '2', '--two', 'two']); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'UNKNOWN_OPTION'); - } - - try { - cliArgs(optionDefinitions, ['-a', '2']); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'UNKNOWN_OPTION'); - } - - try { - cliArgs(optionDefinitions, ['-sdf']); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'UNKNOWN_OPTION', 'getOpts'); - } -}); - -runner.test('err-invalid-definition: duplicate name', function () { - var optionDefinitions = [{ name: 'colours' }, { name: 'colours' }]; - var argv = ['--colours', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'DUPLICATE_NAME'); - } -}); - -runner.test('err-invalid-definition: duplicate alias', function () { - var optionDefinitions = [{ name: 'one', alias: 'a' }, { name: 'two', alias: 'a' }]; - var argv = ['--one', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'DUPLICATE_ALIAS'); - } -}); - -runner.test('err-invalid-definition: multiple defaultOption', function () { - var optionDefinitions = [{ name: 'one', defaultOption: true }, { name: 'two', defaultOption: true }]; - var argv = ['--one', 'red']; - - try { - cliArgs(optionDefinitions, argv); - a.fail(); - } catch (err) { - a.strictEqual(err.name, 'DUPLICATE_DEFAULT_OPTION'); - } -}); \ No newline at end of file diff --git a/es5/test/grouping.js b/es5/test/grouping.js deleted file mode 100644 index 36dad2d..0000000 --- a/es5/test/grouping.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var optionDefinitions = [{ name: 'one', group: 'a' }, { name: 'two', group: 'a' }, { name: 'three', group: 'b' }]; - -var runner = new TestRunner(); - -runner.test('groups', function () { - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '1', '--two', '2', '--three', '3']), { - a: { - one: '1', - two: '2' - }, - b: { - three: '3' - }, - _all: { - one: '1', - two: '2', - three: '3' - } - }); -}); - -runner.test('groups: multiple and _none', function () { - var optionDefinitions = [{ name: 'one', group: ['a', 'f'] }, { name: 'two', group: ['a', 'g'] }, { name: 'three' }]; - - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '1', '--two', '2', '--three', '3']), { - a: { - one: '1', - two: '2' - }, - f: { - one: '1' - }, - g: { - two: '2' - }, - _none: { - three: '3' - }, - _all: { - one: '1', - two: '2', - three: '3' - } - }); -}); \ No newline at end of file diff --git a/es5/test/name-alias-mix.js b/es5/test/name-alias-mix.js deleted file mode 100644 index 5071299..0000000 --- a/es5/test/name-alias-mix.js +++ /dev/null @@ -1,18 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -var optionDefinitions = [{ name: 'one', alias: 'o' }, { name: 'two', alias: 't' }, { name: 'three', alias: 'h' }, { name: 'four', alias: 'f' }]; - -runner.test('name-alias-mix: one of each', function () { - var argv = ['--one', '-t', '--three']; - var result = cliArgs(optionDefinitions, argv); - a.strictEqual(result.one, true); - a.strictEqual(result.two, true); - a.strictEqual(result.three, true); - a.strictEqual(result.four, undefined); -}); \ No newline at end of file diff --git a/es5/test/name-unicode.js b/es5/test/name-unicode.js deleted file mode 100644 index 2f96dd7..0000000 --- a/es5/test/name-unicode.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -var optionDefinitions = [{ name: 'один' }, { name: '两' }, { name: 'три', alias: 'т' }]; - -runner.test('name-unicode: unicode names and aliases are permitted', function () { - var argv = ['--один', '1', '--两', '2', '-т', '3']; - var result = cliArgs(optionDefinitions, argv); - a.strictEqual(result.один, '1'); - a.strictEqual(result.两, '2'); - a.strictEqual(result.три, '3'); -}); \ No newline at end of file diff --git a/es5/test/notations.js b/es5/test/notations.js deleted file mode 100644 index f939abe..0000000 --- a/es5/test/notations.js +++ /dev/null @@ -1,43 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('getOpt short notation: two flags, one option', function () { - var optionDefinitions = [{ name: 'flagA', alias: 'a' }, { name: 'flagB', alias: 'b' }, { name: 'three', alias: 'c' }]; - - var argv = ['-abc', 'yeah']; - a.deepStrictEqual(cliArgs(optionDefinitions, argv), { - flagA: true, - flagB: true, - three: 'yeah' - }); -}); - -runner.test('option=value notation: two plus a regular notation', function () { - var optionDefinitions = [{ name: 'one' }, { name: 'two' }, { name: 'three' }]; - - var argv = ['--one=1', '--two', '2', '--three=3']; - var result = cliArgs(optionDefinitions, argv); - a.strictEqual(result.one, '1'); - a.strictEqual(result.two, '2'); - a.strictEqual(result.three, '3'); -}); - -runner.test('option=value notation: value contains "="', function () { - var optionDefinitions = [{ name: 'url' }, { name: 'two' }, { name: 'three' }]; - - var result = cliArgs(optionDefinitions, ['--url=my-url?q=123', '--two', '2', '--three=3']); - a.strictEqual(result.url, 'my-url?q=123'); - a.strictEqual(result.two, '2'); - a.strictEqual(result.three, '3'); - - result = cliArgs(optionDefinitions, ['--url=my-url?q=123=1']); - a.strictEqual(result.url, 'my-url?q=123=1'); - - result = cliArgs({ name: 'my-url' }, ['--my-url=my-url?q=123=1']); - a.strictEqual(result['my-url'], 'my-url?q=123=1'); -}); \ No newline at end of file diff --git a/es5/test/option.js b/es5/test/option.js deleted file mode 100644 index 84d117f..0000000 --- a/es5/test/option.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var a = require('core-assert'); -var option = require('../lib/option'); - -var runner = new TestRunner(); - -runner.test('option', function () { - a.strictEqual(option.isOption('--yeah'), true); - a.strictEqual(option.isOption('в--yeah'), false); -}); \ No newline at end of file diff --git a/es5/test/type-boolean-multiple.js b/es5/test/type-boolean-multiple.js deleted file mode 100644 index a5b88da..0000000 --- a/es5/test/type-boolean-multiple.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -var optionDefinitions = [{ name: 'array', type: Boolean, multiple: true }]; - -runner.test('type-boolean-multiple: 1', function () { - var argv = ['--array', '--array', '--array']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - array: [true, true, true] - }); -}); \ No newline at end of file diff --git a/es5/test/type-boolean.js b/es5/test/type-boolean.js deleted file mode 100644 index e2b068f..0000000 --- a/es5/test/type-boolean.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('type-boolean: different values', function () { - var optionDefinitions = [{ name: 'one', type: Boolean }]; - - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'true']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'false']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'sfsgf']), { one: true }); -}); - -var origBoolean = Boolean; - -runner.test('type-boolean: global Boolean overridden', function () { - function Boolean() { - return origBoolean.apply(origBoolean, arguments); - } - - var optionDefinitions = [{ name: 'one', type: Boolean }]; - - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'true']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'false']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'sfsgf']), { one: true }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one']), { one: true }); -}); \ No newline at end of file diff --git a/es5/test/type-none.js b/es5/test/type-none.js deleted file mode 100644 index fd67b04..0000000 --- a/es5/test/type-none.js +++ /dev/null @@ -1,51 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -var optionDefinitions = [{ name: 'one' }, { name: 'two' }]; - -runner.test('name: no argv values', function () { - var argv = []; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, {}); -}); - -runner.test('name: just names, no values', function () { - var argv = ['--one', '--two']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - one: true, - two: true - }); -}); - -runner.test('name: just names, no values, unpassed value', function () { - var argv = ['--one', '--two']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - one: true, - two: true - }); -}); - -runner.test('name: just names, one value, one unpassed value', function () { - var argv = ['--one', 'one', '--two']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - one: 'one', - two: true - }); -}); - -runner.test('name: just names, two values', function () { - var argv = ['--one', 'one', '--two', 'two']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - one: 'one', - two: 'two' - }); -}); \ No newline at end of file diff --git a/es5/test/type-number-multiple.js b/es5/test/type-number-multiple.js deleted file mode 100644 index 8785188..0000000 --- a/es5/test/type-number-multiple.js +++ /dev/null @@ -1,31 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var optionDefinitions = [{ name: 'array', type: Number, multiple: true }]; - -var runner = new TestRunner(); - -runner.test('number multiple: 1', function () { - var argv = ['--array', '1', '2', '3']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - array: [1, 2, 3] - }); - a.notDeepStrictEqual(result, { - array: ['1', '2', '3'] - }); -}); - -runner.test('number multiple: 2', function () { - var argv = ['--array', '1', '--array', '2', '--array', '3']; - var result = cliArgs(optionDefinitions, argv); - a.deepStrictEqual(result, { - array: [1, 2, 3] - }); - a.notDeepStrictEqual(result, { - array: ['1', '2', '3'] - }); -}); \ No newline at end of file diff --git a/es5/test/type-number.js b/es5/test/type-number.js deleted file mode 100644 index fa85010..0000000 --- a/es5/test/type-number.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var optionDefinitions = [{ name: 'one', type: Number }]; - -var runner = new TestRunner(); - -runner.test('type-number: different values', function () { - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '1']), { one: 1 }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one']), { one: null }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '-1']), { one: -1 }); - var result = cliArgs(optionDefinitions, ['--one', 'asdf']); - a.ok(isNaN(result.one)); -}); \ No newline at end of file diff --git a/es5/test/type-other-multiple.js b/es5/test/type-other-multiple.js deleted file mode 100644 index f59a8cb..0000000 --- a/es5/test/type-other-multiple.js +++ /dev/null @@ -1,17 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var optionDefinitions = [{ name: 'file', multiple: true, type: function type(file) { - return file; - } }]; - -var runner = new TestRunner(); - -runner.test('type-other-multiple: different values', function () { - a.deepStrictEqual(cliArgs(optionDefinitions, ['--file', 'one.js']), { file: ['one.js'] }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--file', 'one.js', 'two.js']), { file: ['one.js', 'two.js'] }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--file']), { file: [] }); -}); \ No newline at end of file diff --git a/es5/test/type-other.js b/es5/test/type-other.js deleted file mode 100644 index b46173f..0000000 --- a/es5/test/type-other.js +++ /dev/null @@ -1,25 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var runner = new TestRunner(); - -runner.test('type-other: different values', function () { - var optionDefinitions = [{ name: 'file', type: function type(file) { - return file; - } }]; - - a.deepStrictEqual(cliArgs(optionDefinitions, ['--file', 'one.js']), { file: 'one.js' }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--file']), { file: null }); -}); - -runner.test('type-other: broken custom type function', function () { - var optionDefinitions = [{ name: 'file', type: function type(file) { - lasdfjsfakn; - } }]; - a.throws(function () { - cliArgs(optionDefinitions, ['--file', 'one.js']); - }); -}); \ No newline at end of file diff --git a/es5/test/type-string.js b/es5/test/type-string.js deleted file mode 100644 index f6da6bc..0000000 --- a/es5/test/type-string.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -var TestRunner = require('test-runner'); -var cliArgs = require('../../'); -var a = require('core-assert'); - -var optionDefinitions = [{ name: 'one', type: String }]; - -var runner = new TestRunner(); - -runner.test('type-string: different values', function () { - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', 'yeah']), { one: 'yeah' }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one']), { one: null }); - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '3']), { one: '3' }); -}); - -runner.skip('type-string: pass a value resembling an option', function () { - a.deepStrictEqual(cliArgs(optionDefinitions, ['--one', '--yeah']), { one: '--yeah' }); -}); \ No newline at end of file diff --git a/index.js b/index.js deleted file mode 100644 index 7f8109a..0000000 --- a/index.js +++ /dev/null @@ -1,34 +0,0 @@ -var detect = require('feature-detect-es6') - -if (detect.all('class', 'arrowFunction')) { - module.exports = require('./src/lib/command-line-args') -} else { - module.exports = require('./es5/lib/command-line-args') -} - -/* for node 0.12 */ -if (!Array.prototype.find) { - Object.defineProperty(Array.prototype, 'find', { - value: function(predicate) { - 'use strict'; - if (this == null) { - throw new TypeError('Array.prototype.find called on null or undefined'); - } - if (typeof predicate !== 'function') { - throw new TypeError('predicate must be a function'); - } - var list = Object(this); - var length = list.length >>> 0; - var thisArg = arguments[1]; - var value; - - for (var i = 0; i < length; i++) { - value = list[i]; - if (predicate.call(thisArg, value, i, list)) { - return value; - } - } - return undefined; - } - }); -} diff --git a/jsdoc2md/README.hbs b/jsdoc2md/README.hbs index 9d1158f..762fba9 100644 --- a/jsdoc2md/README.hbs +++ b/jsdoc2md/README.hbs @@ -123,4 +123,4 @@ $ cat example/typical.js | command-line-args lib/* --timeout=1000 * * * -© 2014-16 Lloyd Brookes \<75pound@gmail.com\>. Documented by [jsdoc-to-markdown](https://github.com/75lb/jsdoc-to-markdown). +© 2014-17 Lloyd Brookes \<75pound@gmail.com\>. Documented by [jsdoc-to-markdown](https://github.com/75lb/jsdoc-to-markdown). diff --git a/src/lib/argv.js b/lib/argv.js similarity index 100% rename from src/lib/argv.js rename to lib/argv.js diff --git a/src/lib/command-line-args.js b/lib/command-line-args.js similarity index 100% rename from src/lib/command-line-args.js rename to lib/command-line-args.js diff --git a/src/lib/definition.js b/lib/definition.js similarity index 100% rename from src/lib/definition.js rename to lib/definition.js diff --git a/src/lib/definitions.js b/lib/definitions.js similarity index 100% rename from src/lib/definitions.js rename to lib/definitions.js diff --git a/src/lib/option.js b/lib/option.js similarity index 100% rename from src/lib/option.js rename to lib/option.js diff --git a/package.json b/package.json index 6ba0c89..4afaac2 100644 --- a/package.json +++ b/package.json @@ -3,13 +3,12 @@ "version": "3.0.5", "description": "A library to parse command-line options.", "repository": "https://github.com/75lb/command-line-args.git", - "main": "index", - "bin": "bin.js", + "main": "lib/command-line-args.js", + "bin": "bin/cli.js", "scripts": { - "test": "node test.js", - "docs": "jsdoc2md -l off -t jsdoc2md/README.hbs src/lib/*.js > README.md; echo", - "cover": "istanbul cover ./node_modules/.bin/test-runner src/test/*.js && cat coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf coverage; echo", - "es5": "rm -rf es5 && babel --presets babel-preset-es2015 --no-comments src --out-dir es5" + "test": "test-runner test/*.js", + "docs": "jsdoc2md -l off -t jsdoc2md/README.hbs lib/*.js > README.md; echo", + "cover": "istanbul cover ./node_modules/.bin/test-runner test/*.js && cat coverage/lcov.info | ./node_modules/.bin/coveralls && rm -rf coverage; echo" }, "keywords": [ "argv", @@ -27,8 +26,6 @@ "author": "Lloyd Brookes <75pound@gmail.com>", "license": "MIT", "devDependencies": { - "babel-preset-es2015": "^6.18.0", - "core-assert": "^0.2.1", "coveralls": "^2.11.15", "jsdoc-to-markdown": "^2.0.1", "test-runner": "^0.3.0", @@ -36,13 +33,7 @@ }, "dependencies": { "array-back": "^1.0.4", - "feature-detect-es6": "^1.3.1", "find-replace": "^1.0.2", "typical": "^2.6.0" - }, - "standard": { - "ignore": [ - "es5" - ] } } diff --git a/test.js b/test.js deleted file mode 100644 index 330b101..0000000 --- a/test.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict' -var detect = require('feature-detect-es6') -var TestRunner = require('test-runner') - -if (detect.all('class', 'arrowFunction', 'let', 'const')) { - TestRunner.run('src/test/*.js') -} else { - TestRunner.run('es5/test/*.js') -} diff --git a/src/test/alias.js b/test/alias.js similarity index 92% rename from src/test/alias.js rename to test/alias.js index 55d0427..487957b 100644 --- a/src/test/alias.js +++ b/test/alias.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/ambiguous-input.js b/test/ambiguous-input.js similarity index 94% rename from src/test/ambiguous-input.js rename to test/ambiguous-input.js index 5f2921c..81a7708 100644 --- a/src/test/ambiguous-input.js +++ b/test/ambiguous-input.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/bad-input.js b/test/bad-input.js similarity index 92% rename from src/test/bad-input.js rename to test/bad-input.js index 27b1a22..5668346 100644 --- a/src/test/bad-input.js +++ b/test/bad-input.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/class-argv.js b/test/class-argv.js similarity index 98% rename from src/test/class-argv.js rename to test/class-argv.js index e766ba0..165c8e8 100644 --- a/src/test/class-argv.js +++ b/test/class-argv.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') const detect = require('feature-detect-es6') -const a = require('core-assert') +const a = require('assert') const Argv = require('../lib/argv') const Definitions = require('../lib/definitions') diff --git a/src/test/class-definitions.js b/test/class-definitions.js similarity index 95% rename from src/test/class-definitions.js rename to test/class-definitions.js index a80db20..83ac0e4 100644 --- a/src/test/class-definitions.js +++ b/test/class-definitions.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') const detect = require('feature-detect-es6') -const a = require('core-assert') +const a = require('assert') const Definitions = require('../lib/definitions') const runner = new TestRunner() diff --git a/src/test/default-option.js b/test/default-option.js similarity index 96% rename from src/test/default-option.js rename to test/default-option.js index af558e2..0324f49 100644 --- a/src/test/default-option.js +++ b/test/default-option.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/default-value.js b/test/default-value.js similarity index 95% rename from src/test/default-value.js rename to test/default-value.js index 4d880d2..3c1a1ef 100644 --- a/src/test/default-value.js +++ b/test/default-value.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/detect-process-argv.js b/test/detect-process-argv.js similarity index 89% rename from src/test/detect-process-argv.js rename to test/detect-process-argv.js index f34eb4f..1faf229 100644 --- a/src/test/detect-process-argv.js +++ b/test/detect-process-argv.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/exceptions.js b/test/exceptions.js similarity index 98% rename from src/test/exceptions.js rename to test/exceptions.js index be075ee..5433ff8 100644 --- a/src/test/exceptions.js +++ b/test/exceptions.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/grouping.js b/test/grouping.js similarity index 93% rename from src/test/grouping.js rename to test/grouping.js index 2d68661..5fa37f1 100644 --- a/src/test/grouping.js +++ b/test/grouping.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const optionDefinitions = [ { name: 'one', group: 'a' }, diff --git a/src/test/name-alias-mix.js b/test/name-alias-mix.js similarity index 89% rename from src/test/name-alias-mix.js rename to test/name-alias-mix.js index 2490415..4075c88 100644 --- a/src/test/name-alias-mix.js +++ b/test/name-alias-mix.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/name-unicode.js b/test/name-unicode.js similarity index 88% rename from src/test/name-unicode.js rename to test/name-unicode.js index fe5ce92..dc6eecc 100644 --- a/src/test/name-unicode.js +++ b/test/name-unicode.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/notations.js b/test/notations.js similarity index 95% rename from src/test/notations.js rename to test/notations.js index 78de893..5f7e42a 100644 --- a/src/test/notations.js +++ b/test/notations.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/option.js b/test/option.js similarity index 89% rename from src/test/option.js rename to test/option.js index 84db4cd..8a8c3e7 100644 --- a/src/test/option.js +++ b/test/option.js @@ -1,6 +1,6 @@ 'use strict' const TestRunner = require('test-runner') -const a = require('core-assert') +const a = require('assert') const option = require('../lib/option') const runner = new TestRunner() diff --git a/src/test/type-boolean-multiple.js b/test/type-boolean-multiple.js similarity index 85% rename from src/test/type-boolean-multiple.js rename to test/type-boolean-multiple.js index 7181d1b..15a9885 100644 --- a/src/test/type-boolean-multiple.js +++ b/test/type-boolean-multiple.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/type-boolean.js b/test/type-boolean.js similarity index 95% rename from src/test/type-boolean.js rename to test/type-boolean.js index 9dcada4..6b1c11e 100644 --- a/src/test/type-boolean.js +++ b/test/type-boolean.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/type-none.js b/test/type-none.js similarity index 94% rename from src/test/type-none.js rename to test/type-none.js index fa0a3ec..79e8427 100644 --- a/src/test/type-none.js +++ b/test/type-none.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/type-number-multiple.js b/test/type-number-multiple.js similarity index 91% rename from src/test/type-number-multiple.js rename to test/type-number-multiple.js index 0494267..77df4a4 100644 --- a/src/test/type-number-multiple.js +++ b/test/type-number-multiple.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const optionDefinitions = [ { name: 'array', type: Number, multiple: true } diff --git a/src/test/type-number.js b/test/type-number.js similarity index 89% rename from src/test/type-number.js rename to test/type-number.js index e73d78c..7ec5039 100644 --- a/src/test/type-number.js +++ b/test/type-number.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const optionDefinitions = [ { name: 'one', type: Number } diff --git a/src/test/type-other-multiple.js b/test/type-other-multiple.js similarity index 89% rename from src/test/type-other-multiple.js rename to test/type-other-multiple.js index c84c282..d3b429f 100644 --- a/src/test/type-other-multiple.js +++ b/test/type-other-multiple.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const optionDefinitions = [ { name: 'file', multiple: true, type: function (file) { diff --git a/src/test/type-other.js b/test/type-other.js similarity index 91% rename from src/test/type-other.js rename to test/type-other.js index 72eb5d8..0aaec50 100644 --- a/src/test/type-other.js +++ b/test/type-other.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const runner = new TestRunner() diff --git a/src/test/type-string.js b/test/type-string.js similarity index 91% rename from src/test/type-string.js rename to test/type-string.js index 819b0b5..6837e00 100644 --- a/src/test/type-string.js +++ b/test/type-string.js @@ -1,7 +1,7 @@ 'use strict' const TestRunner = require('test-runner') -const cliArgs = require('../../') -const a = require('core-assert') +const cliArgs = require('../') +const a = require('assert') const optionDefinitions = [ { name: 'one', type: String }