[Params] always return a new object from Params.parse
Rather than returning a modified copy of the input params/defaults, always return a new object, copying the appropriate values into it. https://bugzilla.gnome.org/show_bug.cgi?id=608667
This commit is contained in:
parent
024ab39c6d
commit
e9e2786fa3
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
// parse:
|
// parse:
|
||||||
// @params: caller-provided parameter object, or %null
|
// @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
|
// @allowExtras: whether or not to allow properties not in @default
|
||||||
//
|
//
|
||||||
// Examines @params and fills in default values from @defaults for
|
// 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
|
// @allowExtras is not %true, it will throw an error if @params
|
||||||
// contains any properties that aren't in @defaults.
|
// 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) {
|
function parse(params, defaults, allowExtras) {
|
||||||
|
let ret = {}, prop;
|
||||||
|
|
||||||
if (!params)
|
if (!params)
|
||||||
return defaults;
|
params = {};
|
||||||
|
|
||||||
if (!allowExtras) {
|
for (prop in params) {
|
||||||
for (let prop in params) {
|
if (!(prop in defaults) && !allowExtras)
|
||||||
if (!(prop in defaults))
|
throw new Error('Unrecognized parameter "' + prop + '"');
|
||||||
throw new Error('Unrecognized parameter "' + prop + '"');
|
ret[prop] = params[prop];
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let prop in defaults) {
|
for (prop in defaults) {
|
||||||
if (!(prop in params))
|
if (!(prop in params))
|
||||||
params[prop] = defaults[prop];
|
ret[prop] = defaults[prop];
|
||||||
}
|
}
|
||||||
|
|
||||||
return params;
|
return ret;
|
||||||
}
|
}
|
Loading…
Reference in New Issue
Block a user