diff --git a/bin/phantomas.js b/bin/phantomas.js index ce39d9fe8..807de17c1 100755 --- a/bin/phantomas.js +++ b/bin/phantomas.js @@ -10,6 +10,7 @@ "use strict"; const { program } = require("commander"), + { decamelizeOptions } = require("./utils"), phantomas = require(".."), debug = require("debug")("phantomas:cli"); @@ -157,7 +158,9 @@ program // parse it program.parse(process.argv); -var options = program.opts(); + +// make sure options are not "camelCased" but "have-dashes" instead (issue #863) +var options = decamelizeOptions(program.opts()); debug("argv: %j", process.argv); debug("opts: %j", options); diff --git a/bin/utils.js b/bin/utils.js new file mode 100644 index 000000000..fd7d82efa --- /dev/null +++ b/bin/utils.js @@ -0,0 +1,16 @@ +const decamelize = require("decamelize"); + +function decamelizeOptions(options) { + // decamelize option names as returned by commander (see issue #863) + let decamelized = {}; + + for (const [key, value] of Object.entries(options)) { + decamelized[decamelize(key, { separator: "-" })] = value; + } + + return decamelized; +} + +module.exports = { + decamelizeOptions, +}; diff --git a/package-lock.json b/package-lock.json index 962d91624..d4155491d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -616,10 +616,9 @@ } }, "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "optional": true + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.0.tgz", + "integrity": "sha512-U75DcT5hrio3KNtvdULAWnLiAPbFUC4191ldxMmj4FA/mRuBnmDwU0boNfPyFRhnan+Jm+haLeSn3P0afcBn4w==" }, "decode-uri-component": { "version": "0.2.0", @@ -1560,6 +1559,14 @@ "read-pkg-up": "^1.0.1", "redent": "^1.0.0", "trim-newlines": "^1.0.0" + }, + "dependencies": { + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true + } } }, "mime-db": { @@ -2907,6 +2914,12 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "optional": true + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "optional": true } } }, diff --git a/package.json b/package.json index de6a9e320..06d9969d1 100644 --- a/package.json +++ b/package.json @@ -35,6 +35,7 @@ "commander": "^7.0.0", "csv-string": "^4.0.1", "debug": "^4.1.1", + "decamelize": "^5.0.0", "js-yaml": "^4.0.0", "node-statsd": "0.1.1", "puppeteer": "^8.0.0" diff --git a/test/bin-utils-test.js b/test/bin-utils-test.js new file mode 100644 index 000000000..b38f7e01c --- /dev/null +++ b/test/bin-utils-test.js @@ -0,0 +1,26 @@ +/** + * Integration tests using server-start.sh script + */ +const vows = require("vows"), + assert = require("assert"), + { decamelizeOptions } = require("../bin/utils"); + +vows + .describe("bin utils") + .addBatch({ + decamelizeOptions: { + topic: function () { + return decamelizeOptions({ + url: "http://foo.com", + userAgent: "foo/bar", + }); + }, + "should decamelize options": function (opts) { + assert.deepStrictEqual(opts, { + url: "http://foo.com", + "user-agent": "foo/bar", + }); + }, + }, + }) + .export(module);