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),
    'fromEntries': (dynamic entries) {
      final result = <dynamic, dynamic>{};
      List<dynamic> entryList = [];
      if (entries is List) {
        entryList = entries;
      } else if (entries is Invokable) {
        final method = entries.methods()['entries'];
        final value =
            method == null ? null : Function.apply(method, const []);
        if (value is List) entryList = value;
      }
      for (final entry in entryList) {
        if (entry is List && entry.length >= 2) {
          result[entry[0]] = entry[1];
        } else if (entry is Map) {
          final key = entry.containsKey('key') ? entry['key'] : entry[0];
          final value =
              entry.containsKey('value') ? entry['value'] : entry[1];
          result[key] = value;
        }
      }
      return result;
    },
    'create': (dynamic proto) {
      final Map<String, dynamic> obj = {};
      if (proto != null) {
        InvokableController.setPrototype(obj, proto);
      }
      return obj;
    },
    'getPrototypeOf': (dynamic value) =>
        InvokableController.getPrototype(value),
    'hasOwn': (dynamic value, dynamic key) =>
        InvokableController.hasOwnProperty(value, key),
    'hasOwnProperty': (dynamic value, String key) =>
        InvokableController.hasOwnProperty(value, key),
    'getOwnPropertyNames': (dynamic value) => (value is Map)
        ? InvokableController.ownPropertyKeys(value)
        : (value == null ? [] : null),
    '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;
    },
  };
}