grunto
Version:
Organize your grunt config!
304 lines (283 loc) • 17.9 kB
JavaScript
// instrument by jscoverage, do not modifly this file
(function (file, lines, conds, source) {
var BASE;
if (typeof global === 'object') {
BASE = global;
} else if (typeof window === 'object') {
BASE = window;
} else {
throw new Error('[jscoverage] unknow ENV!');
}
if (BASE._$jscoverage) {
BASE._$jscmd(file, 'init', lines, conds, source);
return;
}
var cov = {};
/**
* jsc(file, 'init', lines, condtions)
* jsc(file, 'line', lineNum)
* jsc(file, 'cond', lineNum, expr, start, offset)
*/
function jscmd(file, type, line, express, start, offset) {
var storage;
switch (type) {
case 'init':
if(cov[file]){
storage = cov[file];
} else {
storage = [];
for (var i = 0; i < line.length; i ++) {
storage[line[i]] = 0;
}
var condition = express;
var source = start;
storage.condition = condition;
storage.source = source;
}
cov[file] = storage;
break;
case 'line':
storage = cov[file];
storage[line] ++;
break;
case 'cond':
storage = cov[file];
storage.condition[line] ++;
return express;
}
}
BASE._$jscoverage = cov;
BASE._$jscmd = jscmd;
jscmd(file, 'init', lines, conds, source);
})('lib/GruntO.js', [1,3,4,5,6,7,17,27,169,183,18,20,21,22,23,24,42,44,52,39,45,47,49,60,62,64,66,68,70,57,75,84,86,88,81,102,104,99,122,124,128,115,119,125,136,140,133,137,144,145,147,163,165,148,160,153,155,157,150,170,172,180,173,175,177,184,185,186,188,194,198,201,202,204,205,189,191,195], {"38_6_33":0,"56_6_52":0,"56_6_19":0,"56_29_29":0,"62_66_66":0,"62_135_28":0,"74_6_29":0,"80_6_32":0,"84_44_26":0,"84_73_64":0,"98_6_24":0,"114_6_14":0,"118_6_24":0,"125_54_28":0,"125_85_1":0,"132_6_23":0,"149_8_45":0}, ["'use strict';","","var path = require('path');","var _ = require('lodash');","var utils = require('./utils');","var GruntOModuleContext = require('./GruntOModuleContext');","var gruntOTaskInitialize = require('../tasks/gruntoTask');","","/**"," * @class GruntO"," * @property {grunt} grunt"," * @property {Object} config"," * @property {Object} _contextOptions"," * @property {Array} _moduleScanParamsArray"," * @param {Object} grunt - task runner"," */","var GruntO = module.exports = function GruntO (grunt) {","\tthis.grunt = grunt;","","\tthis._config = {};","\tthis._taskAliases = {};","\tthis._moduleTaskRefs = {};","\tthis._contextOptions = {};","\tthis._moduleScanParamsArray = [];","};","","GruntO.prototype = {","","\tconstructor: GruntO,","","\t/**","\t * @this GruntO","\t * @public","\t * @param {!Object|Array|String} filesScanObject - array of file glob-patterns for scanning","\t * @returns {GruntO} this","\t */","\tscan: function scan (filesScanObject) {","\t\tif (!_.isPlainObject(filesScanObject)) {","\t\t\tthrow new Error('Invalid scan type, must be object');","\t\t}","","\t\tvar that = this;","","\t\tthis.grunt.file.expand(filesScanObject, filesScanObject.src).forEach(function (fRelPath) {","\t\t\tvar fAbsPath = path.resolve(filesScanObject.cwd, fRelPath);","","\t\t\tvar targetPrefixString = that._compilePrefix(fRelPath, filesScanObject.targetPrefix);","","\t\t\tthat.module(targetPrefixString, fAbsPath);","\t\t});","","\t\treturn this;","\t},","","\tmodule: function (targetPrefixString, moduleFunctionOrPathToModule) {","\t\tif (!targetPrefixString || !moduleFunctionOrPathToModule) {","\t\t\tthrow new Error('grunto: target prefix and module function must be specified!');","\t\t}","","\t\tthis._checkPrefix(targetPrefixString);","","\t\tvar moduleFunction = _.isString(moduleFunctionOrPathToModule) ? require(path.resolve(process.cwd(), moduleFunctionOrPathToModule)) : moduleFunctionOrPathToModule; // eslint-disable-line","","\t\tvar context = new GruntOModuleContext(this.grunt, this._taskAliases, this._moduleTaskRefs, this._config, targetPrefixString, this._contextOptions);","","\t\tvar config = moduleFunction.call(context, this.grunt, this._contextOptions);","","\t\tthis.addConfig(config);","","\t\treturn this;","\t},","","\t_checkPrefix: function (targetPrefixString) {","\t\tif (/\\\\/.test(targetPrefixString)) {","\t\t\tthrow new Error('invalid target prefix. it must not contains \\\\ symbol');","\t\t}","\t},","","\t_compilePrefix: function (filePathRel, targetPrefixString) {","\t\tif (_.isFunction(targetPrefixString)) {","\t\t\ttargetPrefixString = targetPrefixString(filePathRel);","\t\t}","","\t\ttargetPrefixString = targetPrefixString ? String(targetPrefixString) : filePathRel.replace(/^[\\/]?(.+?)(?:\\/default)?(?:\\.js)?$/, '$1');","","\t\ttargetPrefixString = targetPrefixString.replace(/\\\\/g, '/').replace(/\\/+$/, '').replace(/^\\/+/, '');","","\t\treturn targetPrefixString;","\t},","","\t/**","\t * @this GruntO","\t * @public","\t * @param {!Object} params - params for extend the standard GruntO context","\t * @returns {GruntO} this","\t */","\tcontext: function initContextOptions (params) {","\t\tif (!_.isPlainObject(params)) {","\t\t\tthrow new Error('Invalid options type, must be object');","\t\t}","","\t\t_.extend(this._contextOptions, params);","","\t\treturn this;","\t},","","\t/**","\t * @this GruntO","\t * @public","\t * @param {!Object} config - config object for adding to main config","\t * @returns {GruntO} this","\t */","\taddConfig: function addConfig (config) {","\t\tif (config == null) {","\t\t\treturn this;","\t\t}","","\t\tif (!_.isPlainObject(config)) {","\t\t\tthrow new Error('invalid config value, must be object');","\t\t}","","\t\tvar that = this;","","\t\t_.each(config, function (v, k) {","\t\t\tthat._config[k] = that._config.hasOwnProperty(k) ? _.extend(that._config[k], v) : v;","\t\t});","","\t\treturn this;","\t},","","\taddTaskNames: function addTaskNames (taskOrArray) {","\t\tif (!_.isArray(taskOrArray)) {","\t\t\ttaskOrArray = [ taskOrArray ];","\t\t}","","\t\t_.each(taskOrArray, function (taskName) {","\t\t\tGruntOModuleContext.addTask(taskName);","\t\t});","","\t\treturn this;","\t},","","\t_commit: function commitConfigsAndAliasTasks () {","\t\tvar that = this;","\t\tvar grunt = this.grunt;","","\t\t_.each(this._taskAliases, function (tasksArray, name) {","\t\t\ttasksArray = _.map(tasksArray, function (taskName) {","\t\t\t\tif (that._moduleTaskRefs.hasOwnProperty(taskName)) {","\t\t\t\t\treturn taskName;","\t\t\t\t}","","\t\t\t\tvar tmpTaskName = utils.genUniqueTaskName();","","\t\t\t\tgrunt.task.registerTask(tmpTaskName, [ taskName ]);","","\t\t\t\treturn tmpTaskName;","\t\t\t});","","\t\t\tgrunt.task.registerTask(name, tasksArray);","\t\t});","","\t\tgrunt.task.registerTask('_grunto', []);","","\t\tgrunt.initConfig(this._config);","\t}","};","","GruntO.run = function gruntORun (grunt, initializeFunction) {","\tvar gruntO = new GruntO(grunt);","","\tGruntO.shimGruntMethods(gruntO, function (grunt) {","\t\tgruntOTaskInitialize(grunt);","","\t\tvar configMayBe = initializeFunction.call(gruntO, grunt);","","\t\tgruntO.addConfig(configMayBe);","\t});","","\tgruntO._commit();","};","","GruntO.shimGruntMethods = function shimGruntMethods (gruntO, method) {","\tvar grunt = gruntO.grunt;","\tvar oldGruntRegisterTask = grunt.task.registerTask;","\tvar oldGruntInitConfig = grunt.initConfig;","","\tgrunt.task.registerTask = function (taskName) {","\t\tgruntO.addTaskNames(taskName);","","\t\treturn oldGruntRegisterTask.apply(this, arguments);","\t};","","\tgrunt.initConfig = function (config) {","\t\tgruntO.addConfig(config);","\t};","","\tmethod(grunt);","","\t// rollback","\tgrunt.task.registerTask = oldGruntRegisterTask;","\tgrunt.initConfig = oldGruntInitConfig;","","\toldGruntInitConfig = null;","\toldGruntRegisterTask = null;","};",""]);
_$jscmd("lib/GruntO.js", "line", 1);
"use strict";
_$jscmd("lib/GruntO.js", "line", 3);
var path = require("path");
_$jscmd("lib/GruntO.js", "line", 4);
var _ = require("lodash");
_$jscmd("lib/GruntO.js", "line", 5);
var utils = require("./utils");
_$jscmd("lib/GruntO.js", "line", 6);
var GruntOModuleContext = require("./GruntOModuleContext");
_$jscmd("lib/GruntO.js", "line", 7);
var gruntOTaskInitialize = require("../tasks/gruntoTask");
_$jscmd("lib/GruntO.js", "line", 17);
/**
* @class GruntO
* @property {grunt} grunt
* @property {Object} config
* @property {Object} _contextOptions
* @property {Array} _moduleScanParamsArray
* @param {Object} grunt - task runner
*/
var GruntO = module.exports = function GruntO(grunt) {
_$jscmd("lib/GruntO.js", "line", 18);
this.grunt = grunt;
_$jscmd("lib/GruntO.js", "line", 20);
this._config = {};
_$jscmd("lib/GruntO.js", "line", 21);
this._taskAliases = {};
_$jscmd("lib/GruntO.js", "line", 22);
this._moduleTaskRefs = {};
_$jscmd("lib/GruntO.js", "line", 23);
this._contextOptions = {};
_$jscmd("lib/GruntO.js", "line", 24);
this._moduleScanParamsArray = [];
};
_$jscmd("lib/GruntO.js", "line", 27);
GruntO.prototype = {
constructor: GruntO,
/**
* @this GruntO
* @public
* @param {!Object|Array|String} filesScanObject - array of file glob-patterns for scanning
* @returns {GruntO} this
*/
scan: function scan(filesScanObject) {
if (_$jscmd("lib/GruntO.js", "cond", "38_6_33", !_.isPlainObject(filesScanObject))) {
_$jscmd("lib/GruntO.js", "line", 39);
throw new Error("Invalid scan type, must be object");
}
_$jscmd("lib/GruntO.js", "line", 42);
var that = this;
_$jscmd("lib/GruntO.js", "line", 44);
this.grunt.file.expand(filesScanObject, filesScanObject.src).forEach(function(fRelPath) {
_$jscmd("lib/GruntO.js", "line", 45);
var fAbsPath = path.resolve(filesScanObject.cwd, fRelPath);
_$jscmd("lib/GruntO.js", "line", 47);
var targetPrefixString = that._compilePrefix(fRelPath, filesScanObject.targetPrefix);
_$jscmd("lib/GruntO.js", "line", 49);
that.module(targetPrefixString, fAbsPath);
});
_$jscmd("lib/GruntO.js", "line", 52);
return this;
},
module: function(targetPrefixString, moduleFunctionOrPathToModule) {
if (_$jscmd("lib/GruntO.js", "cond", "56_6_52", _$jscmd("lib/GruntO.js", "cond", "56_6_19", !targetPrefixString) || _$jscmd("lib/GruntO.js", "cond", "56_29_29", !moduleFunctionOrPathToModule))) {
_$jscmd("lib/GruntO.js", "line", 57);
throw new Error("grunto: target prefix and module function must be specified!");
}
_$jscmd("lib/GruntO.js", "line", 60);
this._checkPrefix(targetPrefixString);
_$jscmd("lib/GruntO.js", "line", 62);
var moduleFunction = _.isString(moduleFunctionOrPathToModule) ? _$jscmd("lib/GruntO.js", "cond", "62_66_66", require(path.resolve(process.cwd(), moduleFunctionOrPathToModule))) : _$jscmd("lib/GruntO.js", "cond", "62_135_28", moduleFunctionOrPathToModule);
_$jscmd("lib/GruntO.js", "line", 64);
// eslint-disable-line
var context = new GruntOModuleContext(this.grunt, this._taskAliases, this._moduleTaskRefs, this._config, targetPrefixString, this._contextOptions);
_$jscmd("lib/GruntO.js", "line", 66);
var config = moduleFunction.call(context, this.grunt, this._contextOptions);
_$jscmd("lib/GruntO.js", "line", 68);
this.addConfig(config);
_$jscmd("lib/GruntO.js", "line", 70);
return this;
},
_checkPrefix: function(targetPrefixString) {
if (_$jscmd("lib/GruntO.js", "cond", "74_6_29", /\\/.test(targetPrefixString))) {
_$jscmd("lib/GruntO.js", "line", 75);
throw new Error("invalid target prefix. it must not contains \\ symbol");
}
},
_compilePrefix: function(filePathRel, targetPrefixString) {
if (_$jscmd("lib/GruntO.js", "cond", "80_6_32", _.isFunction(targetPrefixString))) {
_$jscmd("lib/GruntO.js", "line", 81);
targetPrefixString = targetPrefixString(filePathRel);
}
_$jscmd("lib/GruntO.js", "line", 84);
targetPrefixString = targetPrefixString ? _$jscmd("lib/GruntO.js", "cond", "84_44_26", String(targetPrefixString)) : _$jscmd("lib/GruntO.js", "cond", "84_73_64", filePathRel.replace(/^[\/]?(.+?)(?:\/default)?(?:\.js)?$/, "$1"));
_$jscmd("lib/GruntO.js", "line", 86);
targetPrefixString = targetPrefixString.replace(/\\/g, "/").replace(/\/+$/, "").replace(/^\/+/, "");
_$jscmd("lib/GruntO.js", "line", 88);
return targetPrefixString;
},
/**
* @this GruntO
* @public
* @param {!Object} params - params for extend the standard GruntO context
* @returns {GruntO} this
*/
context: function initContextOptions(params) {
if (_$jscmd("lib/GruntO.js", "cond", "98_6_24", !_.isPlainObject(params))) {
_$jscmd("lib/GruntO.js", "line", 99);
throw new Error("Invalid options type, must be object");
}
_$jscmd("lib/GruntO.js", "line", 102);
_.extend(this._contextOptions, params);
_$jscmd("lib/GruntO.js", "line", 104);
return this;
},
/**
* @this GruntO
* @public
* @param {!Object} config - config object for adding to main config
* @returns {GruntO} this
*/
addConfig: function addConfig(config) {
if (_$jscmd("lib/GruntO.js", "cond", "114_6_14", config == null)) {
_$jscmd("lib/GruntO.js", "line", 115);
return this;
}
if (_$jscmd("lib/GruntO.js", "cond", "118_6_24", !_.isPlainObject(config))) {
_$jscmd("lib/GruntO.js", "line", 119);
throw new Error("invalid config value, must be object");
}
_$jscmd("lib/GruntO.js", "line", 122);
var that = this;
_$jscmd("lib/GruntO.js", "line", 124);
_.each(config, function(v, k) {
_$jscmd("lib/GruntO.js", "line", 125);
that._config[k] = that._config.hasOwnProperty(k) ? _$jscmd("lib/GruntO.js", "cond", "125_54_28", _.extend(that._config[k], v)) : _$jscmd("lib/GruntO.js", "cond", "125_85_1", v);
});
_$jscmd("lib/GruntO.js", "line", 128);
return this;
},
addTaskNames: function addTaskNames(taskOrArray) {
if (_$jscmd("lib/GruntO.js", "cond", "132_6_23", !_.isArray(taskOrArray))) {
_$jscmd("lib/GruntO.js", "line", 133);
taskOrArray = [ taskOrArray ];
}
_$jscmd("lib/GruntO.js", "line", 136);
_.each(taskOrArray, function(taskName) {
_$jscmd("lib/GruntO.js", "line", 137);
GruntOModuleContext.addTask(taskName);
});
_$jscmd("lib/GruntO.js", "line", 140);
return this;
},
_commit: function commitConfigsAndAliasTasks() {
_$jscmd("lib/GruntO.js", "line", 144);
var that = this;
_$jscmd("lib/GruntO.js", "line", 145);
var grunt = this.grunt;
_$jscmd("lib/GruntO.js", "line", 147);
_.each(this._taskAliases, function(tasksArray, name) {
_$jscmd("lib/GruntO.js", "line", 148);
tasksArray = _.map(tasksArray, function(taskName) {
if (_$jscmd("lib/GruntO.js", "cond", "149_8_45", that._moduleTaskRefs.hasOwnProperty(taskName))) {
_$jscmd("lib/GruntO.js", "line", 150);
return taskName;
}
_$jscmd("lib/GruntO.js", "line", 153);
var tmpTaskName = utils.genUniqueTaskName();
_$jscmd("lib/GruntO.js", "line", 155);
grunt.task.registerTask(tmpTaskName, [ taskName ]);
_$jscmd("lib/GruntO.js", "line", 157);
return tmpTaskName;
});
_$jscmd("lib/GruntO.js", "line", 160);
grunt.task.registerTask(name, tasksArray);
});
_$jscmd("lib/GruntO.js", "line", 163);
grunt.task.registerTask("_grunto", []);
_$jscmd("lib/GruntO.js", "line", 165);
grunt.initConfig(this._config);
}
};
_$jscmd("lib/GruntO.js", "line", 169);
GruntO.run = function gruntORun(grunt, initializeFunction) {
_$jscmd("lib/GruntO.js", "line", 170);
var gruntO = new GruntO(grunt);
_$jscmd("lib/GruntO.js", "line", 172);
GruntO.shimGruntMethods(gruntO, function(grunt) {
_$jscmd("lib/GruntO.js", "line", 173);
gruntOTaskInitialize(grunt);
_$jscmd("lib/GruntO.js", "line", 175);
var configMayBe = initializeFunction.call(gruntO, grunt);
_$jscmd("lib/GruntO.js", "line", 177);
gruntO.addConfig(configMayBe);
});
_$jscmd("lib/GruntO.js", "line", 180);
gruntO._commit();
};
_$jscmd("lib/GruntO.js", "line", 183);
GruntO.shimGruntMethods = function shimGruntMethods(gruntO, method) {
_$jscmd("lib/GruntO.js", "line", 184);
var grunt = gruntO.grunt;
_$jscmd("lib/GruntO.js", "line", 185);
var oldGruntRegisterTask = grunt.task.registerTask;
_$jscmd("lib/GruntO.js", "line", 186);
var oldGruntInitConfig = grunt.initConfig;
_$jscmd("lib/GruntO.js", "line", 188);
grunt.task.registerTask = function(taskName) {
_$jscmd("lib/GruntO.js", "line", 189);
gruntO.addTaskNames(taskName);
_$jscmd("lib/GruntO.js", "line", 191);
return oldGruntRegisterTask.apply(this, arguments);
};
_$jscmd("lib/GruntO.js", "line", 194);
grunt.initConfig = function(config) {
_$jscmd("lib/GruntO.js", "line", 195);
gruntO.addConfig(config);
};
_$jscmd("lib/GruntO.js", "line", 198);
method(grunt);
_$jscmd("lib/GruntO.js", "line", 201);
// rollback
grunt.task.registerTask = oldGruntRegisterTask;
_$jscmd("lib/GruntO.js", "line", 202);
grunt.initConfig = oldGruntInitConfig;
_$jscmd("lib/GruntO.js", "line", 204);
oldGruntInitConfig = null;
_$jscmd("lib/GruntO.js", "line", 205);
oldGruntRegisterTask = null;
};