1 | 'use strict';
|
2 | var fs = require('fs')
|
3 | var ini = require('ini')
|
4 | var path = require('path')
|
5 | var stripJsonComments = require('strip-json-comments')
|
6 |
|
7 | var parse = exports.parse = function (content) {
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 | if(/^\s*{/.test(content))
|
15 | return JSON.parse(stripJsonComments(content))
|
16 | return ini.parse(content)
|
17 |
|
18 | }
|
19 |
|
20 | var file = exports.file = function () {
|
21 | var args = [].slice.call(arguments).filter(function (arg) { return arg != null })
|
22 |
|
23 |
|
24 | for(var i in args)
|
25 | if('string' !== typeof args[i])
|
26 | return
|
27 |
|
28 | var file = path.join.apply(null, args)
|
29 | var content
|
30 | try {
|
31 | return fs.readFileSync(file,'utf-8')
|
32 | } catch (err) {
|
33 | return
|
34 | }
|
35 | }
|
36 |
|
37 | var json = exports.json = function () {
|
38 | var content = file.apply(null, arguments)
|
39 | return content ? parse(content) : null
|
40 | }
|
41 |
|
42 | var env = exports.env = function (prefix, env) {
|
43 | env = env || process.env
|
44 | var obj = {}
|
45 | var l = prefix.length
|
46 | for(var k in env) {
|
47 | if((k.indexOf(prefix)) === 0) {
|
48 |
|
49 | var keypath = k.substring(l).split('__')
|
50 |
|
51 |
|
52 | var _emptyStringIndex
|
53 | while ((_emptyStringIndex=keypath.indexOf('')) > -1) {
|
54 | keypath.splice(_emptyStringIndex, 1)
|
55 | }
|
56 |
|
57 | var cursor = obj
|
58 | keypath.forEach(function _buildSubObj(_subkey,i){
|
59 |
|
60 |
|
61 |
|
62 | if (!_subkey || typeof cursor !== 'object')
|
63 | return
|
64 |
|
65 |
|
66 |
|
67 |
|
68 | if (i === keypath.length-1)
|
69 | cursor[_subkey] = env[k]
|
70 |
|
71 |
|
72 |
|
73 | if (cursor[_subkey] === undefined)
|
74 | cursor[_subkey] = {}
|
75 |
|
76 |
|
77 | cursor = cursor[_subkey]
|
78 |
|
79 | })
|
80 |
|
81 | }
|
82 |
|
83 | }
|
84 |
|
85 | return obj
|
86 | }
|
87 |
|
88 | var find = exports.find = function () {
|
89 | var rel = path.join.apply(null, [].slice.call(arguments))
|
90 |
|
91 | function find(start, rel) {
|
92 | var file = path.join(start, rel)
|
93 | try {
|
94 | fs.statSync(file)
|
95 | return file
|
96 | } catch (err) {
|
97 | if(path.dirname(start) !== start)
|
98 | return find(path.dirname(start), rel)
|
99 | }
|
100 | }
|
101 | return find(process.cwd(), rel)
|
102 | }
|
103 |
|