check-type
Version:
Library to check variable type and properties in object.
225 lines (205 loc) • 6.09 kB
JavaScript
/*
* Grunt file
*
* - Run JSHint
* - Run Mocha tests
*
* @author Alistair Brown <github@alistairjcbrown.com>
*/
module.exports = function(grunt) {
"use strict";
var generate_path_matches = function(extension) {
var base = [
"./*{extension}",
"./**/*{extension}",
"!./*.min{extension}",
"!./node_modules/**/*{extension}",
"!./**/node_modules/**/*{extension}",
"!./bower_components/**/*{extension}",
"!./**/bower_components/**/*{extension}",
"!./components/**/*{extension}",
"!./**/components/**/*{extension}",
"!./.git/"
];
base.forEach(function(element, index, array) {
array[index] = element.replace("{extension}", extension);
});
return base;
},
jshint, mocha_nodejs, mocha_browser, test_tasks,
check_meta, sync_meta, generate_toc, uglify, keybase_dir;
// ------
// Strict JSHint rules
jshint = {
"all": generate_path_matches(".js"),
"options": {
"curly": true,
"devel": false,
"eqeqeq": true,
"eqnull": true,
"expr": true,
"immed": true,
"indent": 4,
"latedef": true,
"maxdepth": 3,
"maxlen": 140,
"maxparams": 10,
"newcap": true,
"noarg": true,
"noempty": true,
"quotmark": "double",
"strict": true,
"trailing": true,
"undef": true,
"unused": true,
"globals": {
"_": true,
"define": true,
"module": true,
"require": true,
"suite": true,
"test": true,
"setup": true,
"teardown": true,
"window": true,
"process": true,
"__dirname": true
}
}
},
// Run mocha tests in node
mocha_nodejs = {
"test": {
"src": generate_path_matches(".test.js"),
"options": {
"reporter": "spec",
"ui": "tdd"
}
}
},
// Run mocha tests in browser
mocha_browser = {
"test": {
"src": generate_path_matches(".test.html"),
"options": {
"reporter": "Spec",
"ui": "tdd",
"log": true,
"run": true
}
}
};
// Check all properties are correct in the package.json file
check_meta = {
"all": {
"options": {
// make sure package.json ends with \n\n, default false
"blankLine": true,
"version": function (value) {
// strict version number validation
return (/\d{1,2}\.\d{1,2}\.\d{1,2}/).test(value);
}
}
}
};
// Sync all shared properties between meta files
sync_meta = {
bower: {
src: "package.json",
dest: "bower.json",
fields: [
"name",
"description",
"version",
"author",
"bugs",
"contributors",
"dependencies",
"homepage",
"keywords",
"license",
"main",
"repository"
]
},
component: {
src: "package.json",
dest: "component.json",
fields: [
"name",
"description",
"version",
"author",
"bugs",
"contributors",
"homepage",
"keywords",
"license",
"main"
]
}
};
// Generate markdown table of contents
generate_toc = {
"options": {
"heading": "## Table of Contents\n\n"
},
"readme": {
"files": {
"toc.md": ["README.md"]
}
}
};
// Minify and uglify the code
uglify = {
options: {
mangle: {
except: [ "_" ]
},
compress: {
drop_console: true
},
banner: "/*! <%= pkg.name %>@v<%= pkg.version %> - " +
"<%= grunt.template.today(\"yyyy-mm-dd\") %> */\n"
},
my_target: {
files: {
"check-type.min.js": [ "lib/check-type.js" ]
}
}
};
keybase_dir = {
verify: {},
sign: {}
};
grunt.initConfig({
"pkg": grunt.file.readJSON("package.json"),
"jshint": jshint,
"mochaTest": mocha_nodejs,
"mocha": mocha_browser,
"nice-package": check_meta,
"update_json": sync_meta,
"toc": generate_toc,
"uglify": uglify,
"keybase_dir": keybase_dir
});
// Load Tasks
require("load-grunt-tasks")(grunt);
// Allow flag after test
test_tasks = [ "mochaTest", "mocha" ];
if (process.argv[2] === "test") {
if (grunt.option("nodejs")) {
test_tasks = [ test_tasks[0] ];
} else if (grunt.option("browser")) {
test_tasks = [ test_tasks[1] ];
}
}
// Define tasks
grunt.registerTask("lint", [ "jshint" ]);
grunt.registerTask("verify", [ "keybase_dir:verify" ]);
grunt.registerTask("test", test_tasks);
grunt.registerTask("go", [ "lint", "verify", "test" ]);
grunt.registerTask("build", [ "lint", "nice-package", "update_json", "uglify", "test", "toc", "keybase_dir:sign" ]);
grunt.registerTask("default", [ "go" ]);
};
// End of file