| "use strict"; | 
|   | 
| var objUtils = require("./util/object"); | 
|   | 
|   | 
|   | 
| function getOptions(options, defaults) | 
| { | 
|     if ( objUtils.isPlainObject(options) ) | 
|     { | 
|         var newOptions = {}; | 
|          | 
|         for (var i in defaults) | 
|         { | 
|             if ( defaults.hasOwnProperty(i) ) | 
|             { | 
|                 if (options[i] !== undefined) | 
|                 { | 
|                     newOptions[i] = mergeOption(options[i], defaults[i]); | 
|                 } | 
|                 else | 
|                 { | 
|                     newOptions[i] = defaults[i]; | 
|                 } | 
|             } | 
|         } | 
|          | 
|         return newOptions; | 
|     } | 
|     else | 
|     { | 
|         return defaults; | 
|     } | 
| } | 
|   | 
|   | 
|   | 
| function mergeOption(newValues, defaultValues) | 
| { | 
|     if (defaultValues instanceof Object && newValues instanceof Object) | 
|     { | 
|         if (defaultValues instanceof Array && newValues instanceof Array) | 
|         { | 
|             return defaultValues.concat(newValues); | 
|         } | 
|         else | 
|         { | 
|             return objUtils.shallowMerge(newValues, defaultValues); | 
|         } | 
|     } | 
|      | 
|     return newValues; | 
| } | 
|   | 
|   | 
|   | 
| module.exports = getOptions; |