whole_func_string: function existsOrCreate(filePath, opts, cb){
      if(arguments.length===2){
          cb = arguments[1];
          opts = {};
      }
      opts.encoding = opts.encoding || 'utf8';
      opts.data = opts.data || opts.content || '';
      opts.mode = opts.mode || '0777';
      opts.replace = opts.replace ? true : false;
      
      var fp = resolve(filePath);
      var isFile = opts.hasOwnProperty('isFile') ? opts.isFile : !!fp.extName;
      
      fs.exists(fp.fullPath, function(exists){
          if(exists && !opts.replace) cb(null, exists);
          else {
              
              // file doesn't exists, create folder first
              mkdirp((isFile ? fp.dirName : fp.fullPath), opts.mode, function(err) {
                  if (err) cb(new Error('fsExt.existsOrCreate: creating folders failed').cause(err));
                  else if(isFile || opts.replace){
                      
                      // folders are created, so create file
                      fs.writeFile(fp.fullPath, opts.data, opts.encoding, function(err){
                          if (err) cb(new Error('fsExt.existsOrCreate: creating file failed').cause(err));
                          else cb(null, exists);
                      });
                  }
                  else cb(null, exists);
              });
          }
      });
  }
func_code_string: function existsOrCreate(filePath, opts, cb){
      if(arguments.length===2){
          cb = arguments[1];
          opts = {};
      }
      opts.encoding = opts.encoding || 'utf8';
      opts.data = opts.data || opts.content || '';
      opts.mode = opts.mode || '0777';
      opts.replace = opts.replace ? true : false;
      
      var fp = resolve(filePath);
      var isFile = opts.hasOwnProperty('isFile') ? opts.isFile : !!fp.extName;
      
      fs.exists(fp.fullPath, function(exists){
          if(exists && !opts.replace) cb(null, exists);
          else {
              
              // file doesn't exists, create folder first
              mkdirp((isFile ? fp.dirName : fp.fullPath), opts.mode, function(err) {
                  if (err) cb(new Error('fsExt.existsOrCreate: creating folders failed').cause(err));
                  else if(isFile || opts.replace){
                      
                      // folders are created, so create file
                      fs.writeFile(fp.fullPath, opts.data, opts.encoding, function(err){
                          if (err) cb(new Error('fsExt.existsOrCreate: creating file failed').cause(err));
                          else cb(null, exists);
                      });
                  }
                  else cb(null, exists);
              });
          }
      });
  }
func_documentation_string: check if folder or file exists, if not create it
  @param {String} filePath file path or array of paths to resolve
  @param {Object} opts aditional options when creating file or directory (encoding, data, mode, replace, isFile) - use isFile when creating file with no extension, or folder with dot inside
  @param {Function} cb callback(err,exists)