Initial commit
[yaffs-website] / node_modules / grunt-contrib-sass / node_modules / dargs / index.js
1 'use strict';
2 var numberIsNan = require('number-is-nan');
3
4 function createArg(key, val, separator) {
5         key = key.replace(/[A-Z]/g, '-$&').toLowerCase();
6         return '--' + key + (val ? separator + val : '');
7 }
8
9 function match(arr, val) {
10         return arr.some(function (x) {
11                 return x instanceof RegExp ? x.test(val) : x === val;
12         });
13 }
14
15 function createAliasArg(key, val) {
16         return '-' + key + (val ? ' ' + val : '');
17 }
18
19 module.exports = function (input, opts) {
20         var args = [];
21         var extraArgs = [];
22
23         opts = opts || {};
24
25         var separator = opts.useEquals === false ? ' ' : '=';
26
27         Object.keys(input).forEach(function (key) {
28                 var val = input[key];
29                 var argFn = createArg;
30
31                 if (Array.isArray(opts.excludes) && match(opts.excludes, key)) {
32                         return;
33                 }
34
35                 if (Array.isArray(opts.includes) && !match(opts.includes, key)) {
36                         return;
37                 }
38
39                 if (typeof opts.aliases === 'object' && opts.aliases[key]) {
40                         key = opts.aliases[key];
41                         argFn = createAliasArg;
42                 }
43
44                 if (key === '_') {
45                         if (!Array.isArray(val)) {
46                                 throw new TypeError('Expected key \'_\' to be an array, but found ' + (typeof val));
47                         }
48
49                         extraArgs = val;
50                         return;
51                 }
52
53                 if (val === true) {
54                         args.push(argFn(key, ''));
55                 }
56
57                 if (val === false && !opts.ignoreFalse) {
58                         args.push(argFn('no-' + key));
59                 }
60
61                 if (typeof val === 'string') {
62                         args.push(argFn(key, val, separator));
63                 }
64
65                 if (typeof val === 'number' && !numberIsNan(val)) {
66                         args.push(argFn(key, String(val), separator));
67                 }
68
69                 if (Array.isArray(val)) {
70                         val.forEach(function (arrVal) {
71                                 args.push(argFn(key, arrVal, separator));
72                         });
73                 }
74         });
75
76         extraArgs.forEach(function (extraArgVal) {
77                 args.push(String(extraArgVal));
78         });
79
80         return args;
81 };