dartify function

dynamic dartify(
  1. Object? jsObject,
  2. [Object? customDartify(
    1. Object? object
    )?]
)

Returns Dart representation from JS Object.

The optional customDartify function may return null to indicate, that it could not handle the given JS Object.

Implementation

dynamic dartify(
  Object? jsObject, [
  Object? Function(Object? object)? customDartify,
]) {
  if (_isBasicType(jsObject)) {
    return jsObject;
  }

  // Handle list
  if (jsObject is Iterable) {
    return jsObject.map((item) => dartify(item, customDartify)).toList();
  }

  var jsDate = js.dartifyDate(jsObject!);
  if (jsDate != null) {
    return jsDate;
  }

  Object? value = customDartify?.call(jsObject);

  if (value == null) {
    var keys = js.objectKeys(jsObject);
    var map = <String, dynamic>{};
    for (final key in keys) {
      map[key] = dartify(util.getProperty(jsObject, key), customDartify);
    }
    return map;
  }

  return value;
}