methods method

  1. @override
Map<String, Function> methods()
override

Implementation

@override
Map<String, Function> methods() {
  return {
    'init': () => {},
    'keys': (dynamic value) => (value is Map)
        ? InvokableController.ownEnumerableKeys(value)
        : (value == null ? [] : null),
    'values': (dynamic value) => (value is Map)
        ? InvokableController.ownEnumerableKeys(value)
            .map((key) => InvokableController.getProperty(value, key))
            .toList()
        : (value == null ? [] : null),
    'entries': (dynamic value) => (value is Map)
        ? InvokableController.ownEnumerableKeys(value)
            .map((key) => [key, InvokableController.getProperty(value, key)])
            .toList()
        : (value == null ? [] : null),
    'create': (dynamic proto) {
      final Map<String, dynamic> obj = {};
      if (proto != null) {
        InvokableController.setPrototype(obj, proto);
      }
      return obj;
    },
    'getPrototypeOf': (dynamic value) =>
        InvokableController.getPrototype(value),
    'hasOwnProperty': (dynamic value, String key) =>
        InvokableController.hasOwnProperty(value, key),
    'getPropertyNames': (dynamic value) => (value is Map)
        ? InvokableController.ownPropertyKeys(value)
        : (value == null ? [] : null),
    'toString': (dynamic value) => value.toString(),
    'toJSON': (dynamic value) => JSON().methods()['stringify']!(value),
    'defineProperty': (dynamic value, String key, dynamic property) {
      if (value is Map) {
        InvokableController.defineProperty(
            value, key, _descriptorFromMap(property));
      }
      return value;
    },
    'getOwnPropertyDescriptor': (dynamic value, String key) =>
        InvokableController.getOwnPropertyDescriptor(value, key)?.toMap(),
    'deleteProperty': (dynamic value, String key) =>
        InvokableController.deleteProperty(value, key),
    'has': (dynamic value, String key) =>
        InvokableController.hasProperty(value, key),
    'isPrototypeOf': (dynamic proto, dynamic value) =>
        InvokableController.isPrototypeInChain(value, proto),
    'propertyIsEnumerable': (dynamic value, String key) =>
        InvokableController.propertyIsEnumerable(value, key),
    'assign': (dynamic target, [dynamic source, dynamic source2]) {
      if (target is! Map) return target;
      for (final sourceValue in [source, source2]) {
        if (sourceValue is Map) {
          for (final key
              in InvokableController.ownEnumerableKeys(sourceValue)) {
            InvokableController.setProperty(target, key,
                InvokableController.getProperty(sourceValue, key));
          }
        }
      }
      return target;
    },
  };
}