diff --git a/js/misc/params.js b/js/misc/params.js index 09e46b0b2..88596ce7c 100644 --- a/js/misc/params.js +++ b/js/misc/params.js @@ -2,7 +2,7 @@ // parse: // @params: caller-provided parameter object, or %null -// @default: function-provided defaults object +// @defaults: function-provided defaults object // @allowExtras: whether or not to allow properties not in @default // // Examines @params and fills in default values from @defaults for @@ -10,24 +10,26 @@ // @allowExtras is not %true, it will throw an error if @params // contains any properties that aren't in @defaults. // -// If @params is %null, this returns @defaults. +// If @params is %null, this returns the values from @defaults. // -// Return value: the updated params +// Return value: a new object, containing the merged parameters from +// @params and @defaults function parse(params, defaults, allowExtras) { + let ret = {}, prop; + if (!params) - return defaults; + params = {}; - if (!allowExtras) { - for (let prop in params) { - if (!(prop in defaults)) - throw new Error('Unrecognized parameter "' + prop + '"'); - } + for (prop in params) { + if (!(prop in defaults) && !allowExtras) + throw new Error('Unrecognized parameter "' + prop + '"'); + ret[prop] = params[prop]; } - for (let prop in defaults) { + for (prop in defaults) { if (!(prop in params)) - params[prop] = defaults[prop]; + ret[prop] = defaults[prop]; } - return params; + return ret; } \ No newline at end of file