/
index.js
81 lines (72 loc) · 2.14 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
/**
* @author Gilles Coomans <gilles.coomans@gmail.com>
*
*/
if (typeof define !== 'function') {
var define = require('amdefine')(module);
}
define(["require", "deep-promise/index", "deep-utils/index", "deep-utils/lib/array"], function(require, prom, utils) {
var moder = {};
// local private generalModes namespace
var generalModes = {};
moder.setModesIn = function(obj, key, value) {
if (typeof key === 'string')
obj[key] = value;
else
for (var i in key)
obj[i] = key[i];
};
/**
* modifiy or return general modes.
* @param {[type]} arg [description]
* @param {[type]} arg2 [description]
*/
moder.Modes = function(key, value) { // general MODES
if (!key)
return generalModes;
if (!value && typeof key === 'string')
return generalModes[key];
moder.setModesIn(generalModes, key, value);
};
/**
* Without argument : return current complete modes object. It provide the merge between context.modes and generalModes.
*
* With "modes" to select as argument(s) : return the concatened array of all matched modes
* @example
* var modes = deep.currentModes("env", "roles");
* // modes = ["dev", "public"]
*
* @return {Object|Array} either the full modes object, or the selected modes array
*/
moder.currentModes = function(arg) {
var context = prom.Promise.context || {};
//console.log('current modes : arguments length : ', arguments);
if (arguments.length > 0 && (typeof arg === 'string' || (arg && arg.forEach))) {
var modes = [],
args = arguments;
if (arg.forEach)
args = arg;
for (var i = 0, len = args.length; i < len; ++i) {
var argi = args[i];
if (context.modes && context.modes[argi])
modes = modes.concat(context.modes[argi]);
else if (generalModes[argi])
modes = modes.concat(generalModes[argi]);
}
return modes;
}
var base = utils.copy(generalModes);
if (context.modes)
for (var i in context.modes)
base[i] = context.modes[i];
if (!arg)
return base;
for (var i in arg)
base[i] = arg[i];
return base;
};
moder.matchModes = function(value, mode) {
return utils.inArray(value, moder.currentModes(mode));
};
return moder;
});