Tie Library

The Utility Belt Javascript Library

by ipark

JavaScript

//------------------------------------------------
// Tie Utility Belt Javascript Library
// It is written followed by underscore API 0.1.0, but internal implementation was by my self
//
// - History
//    1. 0.1.0 (Draft) 2016. 04. 19.(Tue) ~ 2016. 04. 24.(Sun)
//

(function tie(window) {
  var tie = {
    name: 'Tie - Utility Belt Library',
    version: '0.1.0'
  };

  var prevOwner = window.tie;
  window.tie = tie;

  var native = Array.prototype;

  //------------------------------------------------
  // Internal Utility Functions
  //
  tie.extend = function extend(dest, src) {
    if (isUndefined(src)) {
      src = dest;
      dest = this;
    }

    tie.each(src, function(key, value) {
      dest[key] = src[key];
    });
    return dest;
  }

  function toArray(obj) {
    return Array.prototype.slice.call(obj);
  }

  function toObject(array, valueFn) {
    var obj = {};
    tie.each(array, function(item) {
      obj[item] = valueFn(item);
    });
    return obj;
  }

  function isEqual(left, right) {
    return left === right;
  }

  function isArray(list) {
    return (!!list.length &&
            Number.isInteger(list.length) &&
            isEqual(Object.prototype.toString.call(list), '[object Array]'));
  }

  function isObject(obj) {
    return (isEqual(obj.toString(), '[object Object]'));
  }

  function inverse(fn) {
    return function() {
      var args = toArray(arguments);
      return !fn.apply(fn, args);
    };
  }

  var FALSY = [false, null, 0, '', undefined];

  function isFalsy(value) {
    return tie.include(FALSY, value) || Number.isNaN(value);
  }

  var isTruthy = inverse(isFalsy);

  function isUndefeind(value) {
    return isEqual(value, undefined);
  }

  function binarySearch(list, value, iterator) {
    iterator = iterator || Number;
    var low = 0, high = list.length, mid;
    var src, diff = iterator(value);

    while (low < high) {
      mid = Math.floor((low + high) / 2);
      src = iterator(list[mid]);

      if...