Improve the bridge params validator, and its invariant string
Summary: NaN is not handled consistently by the bridge in all cases, so detect it and complain. In order to make the complaint more obvious, use JSON.stringify on the value, and a replacer so that some of the censoring which normally takes place doesn't get in the way of clarity. Reviewed By: mmmulani Differential Revision: D9779799 fbshipit-source-id: 6c1a6bfe05ecaa3aeb558acc49dfd54461e1ba74
This commit is contained in:
parent
6ea2e3ff8c
commit
7f1fcb67e5
|
@ -213,11 +213,13 @@ class MessageQueue {
|
||||||
t === 'undefined' ||
|
t === 'undefined' ||
|
||||||
t === 'null' ||
|
t === 'null' ||
|
||||||
t === 'boolean' ||
|
t === 'boolean' ||
|
||||||
t === 'number' ||
|
|
||||||
t === 'string'
|
t === 'string'
|
||||||
) {
|
) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
if (t === 'number') {
|
||||||
|
return isFinite(val);
|
||||||
|
}
|
||||||
if (t === 'function' || t !== 'object') {
|
if (t === 'function' || t !== 'object') {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -232,10 +234,25 @@ class MessageQueue {
|
||||||
return true;
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Replacement allows normally non-JSON-convertible values to be
|
||||||
|
// seen. There is ambiguity with string values, but in context,
|
||||||
|
// it should at least be a strong hint.
|
||||||
|
const replacer = (key, val) => {
|
||||||
|
const t = typeof val;
|
||||||
|
if (t === 'function') {
|
||||||
|
return '<<Function ' + val.name + '>>';
|
||||||
|
} else if (t === 'number' && !isFinite(val)) {
|
||||||
|
return '<<' + val.toString() + '>>';
|
||||||
|
} else {
|
||||||
|
return val;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Note that JSON.stringify
|
||||||
invariant(
|
invariant(
|
||||||
isValidArgument(params),
|
isValidArgument(params),
|
||||||
'%s is not usable as a native method argument',
|
'%s is not usable as a native method argument',
|
||||||
params,
|
JSON.stringify(params, replacer),
|
||||||
);
|
);
|
||||||
|
|
||||||
// The params object should not be mutated after being queued
|
// The params object should not be mutated after being queued
|
||||||
|
|
Loading…
Reference in New Issue