dartify method
Converts a JavaScript JSON-like value to the Dart equivalent if possible.
Effectively the inverse of NullableObjectUtilExtension.jsify, dartify takes a JavaScript JSON-like value and recursively converts it to a Dart object, doing the following:
- If the value is a string, number, boolean,
null
,undefined
,DataView
or a typed array, does the equivalenttoDart
operation if it exists and returns the result. - If the value is a simple JS object (the protoype is either
null
or JSObject
), creates and returns a[Map]<Object?, Object?>
whose keys are the recursively converted keys obtained fromObject.keys
and its values are the associated values of the keys in the JS object. - If the value is a JS
Array
, each item in it is recursively converted and added to a new[List]<Object?>
, which is then returned. - Otherwise, the conversion is undefined.
If the value contains a cycle, the behavior is undefined.
Note
Prefer using the specific conversion method like toDart
if you know
the JavaScript type as this method may perform many type-checks. You
should generally call this method with values that only contain
JSON-like values as the conversion may be platform- and
compiler-specific otherwise.
Implementation
// TODO(srujzs): We likely need stronger tests for this method to ensure
// consistency. We should also limit the accepted types in this API to avoid
// confusion. Once the conversion for unrelated types is consistent across all
// backends, we can update the documentation to say that the value is
// internalized instead of the conversion being undefined.
external Object? dartify();