From f89f704a69bc414cb8231fa7a0a1f8b42b4b34f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodrigo=20Ram=C3=ADrez=20Norambuena?= Date: Sat, 18 Mar 2017 09:33:03 -0300 Subject: [PATCH] Add task to check configuration file syntax. --- CHANGELOG.md | 1 + README.md | 5 +++ js/utils.js | 3 +- package.json | 8 +++-- tests/configs/check_config.js | 66 +++++++++++++++++++++++++++++++++++ 5 files changed, 79 insertions(+), 4 deletions(-) create mode 100644 tests/configs/check_config.js diff --git a/CHANGELOG.md b/CHANGELOG.md index 564564cb..3c6850d6 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -49,6 +49,7 @@ This project adheres to [Semantic Versioning](http://semver.org/). - Korean Translation. - Added console warning on startup when deprecated config options are used - Added `DAYAFTERTOMORROW`, `UPDATE_NOTIFICATION`, `UPDATE_NOTIFICATION_MODULE`, `UPDATE_INFO` to Norwegian translations (`nn` and `nb`). +- Add task to check configuration file ### Fixed - Update .gitignore to not ignore default modules folder. diff --git a/README.md b/README.md index 9cadb364..2be4b1f3 100644 --- a/README.md +++ b/README.md @@ -104,6 +104,11 @@ Type `git status` to see your changes, if there are any, you can reset them with 1. Duplicate `config/config.js.sample` to `config/config.js`. **Note:** If you used the installer script. This step is already done for you. 2. Modify your required settings. +Note: You'll can check your configuration running the follow command: +```bash +npm run config:check +``` + The following properties can be configured: | **Option** | **Description** | diff --git a/js/utils.js b/js/utils.js index 76eb2703..3f623499 100644 --- a/js/utils.js +++ b/js/utils.js @@ -11,7 +11,8 @@ var colors = require("colors/safe"); var Utils = { colors: { warn: colors.yellow, - error: colors.red + error: colors.red, + info: colors.blue } }; diff --git a/package.json b/package.json index 704f8394..d2cf4f36 100644 --- a/package.json +++ b/package.json @@ -6,9 +6,10 @@ "scripts": { "start": "sh run-start.sh", "postinstall": "sh installers/postinstall/postinstall.sh", - "test": "./node_modules/mocha/bin/mocha tests --recursive", - "test:unit": "./node_modules/mocha/bin/mocha tests/unit --recursive", - "test:e2e": "./node_modules/mocha/bin/mocha tests/e2e --recursive" + "test": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests --recursive", + "test:unit": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/unit --recursive", + "test:e2e": "NODE_ENV=test ./node_modules/mocha/bin/mocha tests/e2e --recursive", + "config:check": "node tests/configs/check_config.js" }, "repository": { "type": "git", @@ -38,6 +39,7 @@ "grunt-markdownlint": "^1.0.13", "grunt-stylelint": "latest", "grunt-yamllint": "latest", + "jshint": "^2.9.4", "mocha": "^3.2.0", "spectron": "^3.4.1", "stylelint-config-standard": "latest", diff --git a/tests/configs/check_config.js b/tests/configs/check_config.js new file mode 100644 index 00000000..fa294761 --- /dev/null +++ b/tests/configs/check_config.js @@ -0,0 +1,66 @@ +/* Magic Mirror + * + * Checker configuration file + * + * By Rodrigo Ramírez Norambuena + * https://rodrigoramirez.com + * + * MIT Licensed. + * + */ + +var v = require("jshint"); +var path = require("path"); +var fs = require("fs"); +var Utils = require(__dirname + "/../../js/utils.js"); + +if (process.env.NODE_ENV == "test") {return 0}; + +/* getConfigFile() + * Return string with path of configuration file + * Check if set by enviroment variable MM_CONFIG_FILE + */ +function getConfigFile() { + // FIXME: This function should be in core. Do you want refactor me ;) ?, be good! + rootPath = path.resolve(__dirname + "/../../"); + var configFileName = path.resolve(rootPath + "/config/config.js"); + if (process.env.MM_CONFIG_FILE) { + configFileName = path.resolve(process.env.MM_CONFIG_FILE); + } + return configFileName; +} + +var configFileName = getConfigFile(); +// Check if file is present +if (fs.existsSync(configFileName) === false) { + console.error(Utils.colors.error("File not found: "), configFileName); + return; +} +// check permision +try { + fs.accessSync(configFileName, fs.F_OK); +} catch (e) { + console.log(Utils.colors.error(e)); + return; +} + +// Validate syntax of the configuration file. +// In case the there errors show messages and +// return +console.info(Utils.colors.info("Checking file... ", configFileName)); + // I'm not sure if all ever is utf-8 +fs.readFile(configFileName, "utf-8", function(err, data) { + if (err) {throw err;} + v.JSHINT(data); // Parser by jshint + + if (v.JSHINT.errors.length == 0) { + console.log("Your configuration file don't containt syntax error :)"); + return true; + } else { + errors = v.JSHINT.data().errors; + for (idx in errors) { + error = errors[idx]; + console.log("Line", error.line, "col", error.character, error.reason); + } + } +});