Initial commit
This commit is contained in:
		
							
								
								
									
										104
									
								
								node_modules/rc/lib/utils.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										104
									
								
								node_modules/rc/lib/utils.js
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							@@ -0,0 +1,104 @@
 | 
			
		||||
'use strict';
 | 
			
		||||
var fs   = require('fs')
 | 
			
		||||
var ini  = require('ini')
 | 
			
		||||
var path = require('path')
 | 
			
		||||
var stripJsonComments = require('strip-json-comments')
 | 
			
		||||
 | 
			
		||||
var parse = exports.parse = function (content) {
 | 
			
		||||
 | 
			
		||||
  //if it ends in .json or starts with { then it must be json.
 | 
			
		||||
  //must be done this way, because ini accepts everything.
 | 
			
		||||
  //can't just try and parse it and let it throw if it's not ini.
 | 
			
		||||
  //everything is ini. even json with a syntax error.
 | 
			
		||||
 | 
			
		||||
  if(/^\s*{/.test(content))
 | 
			
		||||
    return JSON.parse(stripJsonComments(content))
 | 
			
		||||
  return ini.parse(content)
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var file = exports.file = function () {
 | 
			
		||||
  var args = [].slice.call(arguments).filter(function (arg) { return arg != null })
 | 
			
		||||
 | 
			
		||||
  //path.join breaks if it's a not a string, so just skip this.
 | 
			
		||||
  for(var i in args)
 | 
			
		||||
    if('string' !== typeof args[i])
 | 
			
		||||
      return
 | 
			
		||||
 | 
			
		||||
  var file = path.join.apply(null, args)
 | 
			
		||||
  var content
 | 
			
		||||
  try {
 | 
			
		||||
    return fs.readFileSync(file,'utf-8')
 | 
			
		||||
  } catch (err) {
 | 
			
		||||
    return
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var json = exports.json = function () {
 | 
			
		||||
  var content = file.apply(null, arguments)
 | 
			
		||||
  return content ? parse(content) : null
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var env = exports.env = function (prefix, env) {
 | 
			
		||||
  env = env || process.env
 | 
			
		||||
  var obj = {}
 | 
			
		||||
  var l = prefix.length
 | 
			
		||||
  for(var k in env) {
 | 
			
		||||
    if(k.toLowerCase().indexOf(prefix.toLowerCase()) === 0) {
 | 
			
		||||
 | 
			
		||||
      var keypath = k.substring(l).split('__')
 | 
			
		||||
 | 
			
		||||
      // Trim empty strings from keypath array
 | 
			
		||||
      var _emptyStringIndex
 | 
			
		||||
      while ((_emptyStringIndex=keypath.indexOf('')) > -1) {
 | 
			
		||||
        keypath.splice(_emptyStringIndex, 1)
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      var cursor = obj
 | 
			
		||||
      keypath.forEach(function _buildSubObj(_subkey,i){
 | 
			
		||||
 | 
			
		||||
        // (check for _subkey first so we ignore empty strings)
 | 
			
		||||
        // (check for cursor to avoid assignment to primitive objects)
 | 
			
		||||
        if (!_subkey || typeof cursor !== 'object')
 | 
			
		||||
          return
 | 
			
		||||
 | 
			
		||||
        // If this is the last key, just stuff the value in there
 | 
			
		||||
        // Assigns actual value from env variable to final key
 | 
			
		||||
        // (unless it's just an empty string- in that case use the last valid key)
 | 
			
		||||
        if (i === keypath.length-1)
 | 
			
		||||
          cursor[_subkey] = env[k]
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        // Build sub-object if nothing already exists at the keypath
 | 
			
		||||
        if (cursor[_subkey] === undefined)
 | 
			
		||||
          cursor[_subkey] = {}
 | 
			
		||||
 | 
			
		||||
        // Increment cursor used to track the object at the current depth
 | 
			
		||||
        cursor = cursor[_subkey]
 | 
			
		||||
 | 
			
		||||
      })
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return obj
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var find = exports.find = function () {
 | 
			
		||||
  var rel = path.join.apply(null, [].slice.call(arguments))
 | 
			
		||||
 | 
			
		||||
  function find(start, rel) {
 | 
			
		||||
    var file = path.join(start, rel)
 | 
			
		||||
    try {
 | 
			
		||||
      fs.statSync(file)
 | 
			
		||||
      return file
 | 
			
		||||
    } catch (err) {
 | 
			
		||||
      if(path.dirname(start) !== start) // root
 | 
			
		||||
        return find(path.dirname(start), rel)
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return find(process.cwd(), rel)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user