fc902b78f072b76cab21d5be5a6de400.json 19.6 KB
{"ast":null,"code":"/**\n * @fileoverview This module has some functions for handling a plain object, json.\n * @author NHN.\n *         FE Development Lab <dl_javascript@nhn.com>\n */\n'use strict';\n\nvar type = require('./type');\n\nvar array = require('./array');\n/**\n * The last id of stamp\n * @type {number}\n * @private\n */\n\n\nvar lastId = 0;\n/**\n * Extend the target object from other objects.\n * @param {object} target - Object that will be extended\n * @param {...object} objects - Objects as sources\n * @returns {object} Extended object\n * @memberof tui.util\n */\n\nfunction extend(target, objects) {\n  // eslint-disable-line no-unused-vars\n  var hasOwnProp = Object.prototype.hasOwnProperty;\n  var source, prop, i, len;\n\n  for (i = 1, len = arguments.length; i < len; i += 1) {\n    source = arguments[i];\n\n    for (prop in source) {\n      if (hasOwnProp.call(source, prop)) {\n        target[prop] = source[prop];\n      }\n    }\n  }\n\n  return target;\n}\n/**\n * Assign a unique id to an object\n * @param {object} obj - Object that will be assigned id.\n * @returns {number} Stamped id\n * @memberof tui.util\n */\n\n\nfunction stamp(obj) {\n  if (!obj.__fe_id) {\n    lastId += 1;\n    obj.__fe_id = lastId; // eslint-disable-line camelcase\n  }\n\n  return obj.__fe_id;\n}\n/**\n * Verify whether an object has a stamped id or not.\n * @param {object} obj - adjusted object\n * @returns {boolean}\n * @memberof tui.util\n */\n\n\nfunction hasStamp(obj) {\n  return type.isExisty(pick(obj, '__fe_id'));\n}\n/**\n * Reset the last id of stamp\n * @private\n */\n\n\nfunction resetLastId() {\n  lastId = 0;\n}\n/**\n * Return a key-list(array) of a given object\n * @param {object} obj - Object from which a key-list will be extracted\n * @returns {Array} A key-list(array)\n * @memberof tui.util\n */\n\n\nfunction keys(obj) {\n  var keyArray = [];\n  var key;\n\n  for (key in obj) {\n    if (obj.hasOwnProperty(key)) {\n      keyArray.push(key);\n    }\n  }\n\n  return keyArray;\n}\n/**\n * Return the equality for multiple objects(jsonObjects).<br>\n *  See {@link http://stackoverflow.com/questions/1068834/object-comparison-in-javascript}\n * @param {...object} object - Multiple objects for comparing.\n * @returns {boolean} Equality\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var jsonObj1 = {name:'milk', price: 1000};\n * var jsonObj2 = {name:'milk', price: 1000};\n * var jsonObj3 = {name:'milk', price: 1000};\n * util.compareJSON(jsonObj1, jsonObj2, jsonObj3);   // true\n *\n * var jsonObj4 = {name:'milk', price: 1000};\n * var jsonObj5 = {name:'beer', price: 3000};\n * util.compareJSON(jsonObj4, jsonObj5); // false\n */\n\n\nfunction compareJSON(object) {\n  var argsLen = arguments.length;\n  var i = 1;\n\n  if (argsLen < 1) {\n    return true;\n  }\n\n  for (; i < argsLen; i += 1) {\n    if (!isSameObject(object, arguments[i])) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/**\n * @param {*} x - object to compare\n * @param {*} y - object to compare\n * @returns {boolean} - whether object x and y is same or not\n * @private\n */\n\n\nfunction isSameObject(x, y) {\n  // eslint-disable-line complexity\n  var leftChain = [];\n  var rightChain = [];\n  var p; // remember that NaN === NaN returns false\n  // and isNaN(undefined) returns true\n\n  if (isNaN(x) && isNaN(y) && type.isNumber(x) && type.isNumber(y)) {\n    return true;\n  } // Compare primitives and functions.\n  // Check if both arguments link to the same object.\n  // Especially useful on step when comparing prototypes\n\n\n  if (x === y) {\n    return true;\n  } // Works in case when functions are created in constructor.\n  // Comparing dates is a common scenario. Another built-ins?\n  // We can even handle functions passed across iframes\n\n\n  if (type.isFunction(x) && type.isFunction(y) || x instanceof Date && y instanceof Date || x instanceof RegExp && y instanceof RegExp || x instanceof String && y instanceof String || x instanceof Number && y instanceof Number) {\n    return x.toString() === y.toString();\n  } // At last checking prototypes as good a we can\n\n\n  if (!(x instanceof Object && y instanceof Object)) {\n    return false;\n  }\n\n  if (x.isPrototypeOf(y) || y.isPrototypeOf(x) || x.constructor !== y.constructor || x.prototype !== y.prototype) {\n    return false;\n  } // check for infinitive linking loops\n\n\n  if (array.inArray(x, leftChain) > -1 || array.inArray(y, rightChain) > -1) {\n    return false;\n  } // Quick checking of one object beeing a subset of another.\n\n\n  for (p in y) {\n    if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n      return false;\n    } else if (typeof y[p] !== typeof x[p]) {\n      return false;\n    }\n  } // This for loop executes comparing with hasOwnProperty() and typeof for each property in 'x' object,\n  // and verifying equality for x[property] and y[property].\n\n\n  for (p in x) {\n    if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n      return false;\n    } else if (typeof y[p] !== typeof x[p]) {\n      return false;\n    }\n\n    if (typeof x[p] === 'object' || typeof x[p] === 'function') {\n      leftChain.push(x);\n      rightChain.push(y);\n\n      if (!isSameObject(x[p], y[p])) {\n        return false;\n      }\n\n      leftChain.pop();\n      rightChain.pop();\n    } else if (x[p] !== y[p]) {\n      return false;\n    }\n  }\n\n  return true;\n}\n/* eslint-enable complexity */\n\n/**\n * Retrieve a nested item from the given object/array\n * @param {object|Array} obj - Object for retrieving\n * @param {...string|number} paths - Paths of property\n * @returns {*} Value\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var obj = {\n *     'key1': 1,\n *     'nested' : {\n *         'key1': 11,\n *         'nested': {\n *             'key1': 21\n *         }\n *     }\n * };\n * util.pick(obj, 'nested', 'nested', 'key1'); // 21\n * util.pick(obj, 'nested', 'nested', 'key2'); // undefined\n *\n * var arr = ['a', 'b', 'c'];\n * util.pick(arr, 1); // 'b'\n */\n\n\nfunction pick(obj, paths) {\n  // eslint-disable-line no-unused-vars\n  var args = arguments;\n  var target = args[0];\n  var i = 1;\n  var length = args.length;\n\n  for (; i < length; i += 1) {\n    if (type.isUndefined(target) || type.isNull(target)) {\n      return;\n    }\n\n    target = target[args[i]];\n  }\n\n  return target; // eslint-disable-line consistent-return\n}\n\nmodule.exports = {\n  extend: extend,\n  stamp: stamp,\n  hasStamp: hasStamp,\n  resetLastId: resetLastId,\n  keys: Object.prototype.keys || keys,\n  compareJSON: compareJSON,\n  pick: pick\n};","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/node_modules/tui-code-snippet/src/js/object.js"],"names":["type","require","array","lastId","extend","target","objects","hasOwnProp","Object","prototype","hasOwnProperty","source","prop","i","len","arguments","length","call","stamp","obj","__fe_id","hasStamp","isExisty","pick","resetLastId","keys","keyArray","key","push","compareJSON","object","argsLen","isSameObject","x","y","leftChain","rightChain","p","isNaN","isNumber","isFunction","Date","RegExp","String","Number","toString","isPrototypeOf","constructor","inArray","pop","paths","args","isUndefined","isNull","module","exports"],"mappings":"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","sourcesContent":["/**\n * @fileoverview This module has some functions for handling a plain object, json.\n * @author NHN.\n *         FE Development Lab <dl_javascript@nhn.com>\n */\n\n'use strict';\n\nvar type = require('./type');\nvar array = require('./array');\n\n/**\n * The last id of stamp\n * @type {number}\n * @private\n */\nvar lastId = 0;\n\n/**\n * Extend the target object from other objects.\n * @param {object} target - Object that will be extended\n * @param {...object} objects - Objects as sources\n * @returns {object} Extended object\n * @memberof tui.util\n */\nfunction extend(target, objects) { // eslint-disable-line no-unused-vars\n    var hasOwnProp = Object.prototype.hasOwnProperty;\n    var source, prop, i, len;\n\n    for (i = 1, len = arguments.length; i < len; i += 1) {\n        source = arguments[i];\n        for (prop in source) {\n            if (hasOwnProp.call(source, prop)) {\n                target[prop] = source[prop];\n            }\n        }\n    }\n\n    return target;\n}\n\n/**\n * Assign a unique id to an object\n * @param {object} obj - Object that will be assigned id.\n * @returns {number} Stamped id\n * @memberof tui.util\n */\nfunction stamp(obj) {\n    if (!obj.__fe_id) {\n        lastId += 1;\n        obj.__fe_id = lastId; // eslint-disable-line camelcase\n    }\n\n    return obj.__fe_id;\n}\n\n/**\n * Verify whether an object has a stamped id or not.\n * @param {object} obj - adjusted object\n * @returns {boolean}\n * @memberof tui.util\n */\nfunction hasStamp(obj) {\n    return type.isExisty(pick(obj, '__fe_id'));\n}\n\n/**\n * Reset the last id of stamp\n * @private\n */\nfunction resetLastId() {\n    lastId = 0;\n}\n\n/**\n * Return a key-list(array) of a given object\n * @param {object} obj - Object from which a key-list will be extracted\n * @returns {Array} A key-list(array)\n * @memberof tui.util\n */\nfunction keys(obj) {\n    var keyArray = [];\n    var key;\n\n    for (key in obj) {\n        if (obj.hasOwnProperty(key)) {\n            keyArray.push(key);\n        }\n    }\n\n    return keyArray;\n}\n\n/**\n * Return the equality for multiple objects(jsonObjects).<br>\n *  See {@link http://stackoverflow.com/questions/1068834/object-comparison-in-javascript}\n * @param {...object} object - Multiple objects for comparing.\n * @returns {boolean} Equality\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var jsonObj1 = {name:'milk', price: 1000};\n * var jsonObj2 = {name:'milk', price: 1000};\n * var jsonObj3 = {name:'milk', price: 1000};\n * util.compareJSON(jsonObj1, jsonObj2, jsonObj3);   // true\n *\n * var jsonObj4 = {name:'milk', price: 1000};\n * var jsonObj5 = {name:'beer', price: 3000};\n * util.compareJSON(jsonObj4, jsonObj5); // false\n */\nfunction compareJSON(object) {\n    var argsLen = arguments.length;\n    var i = 1;\n\n    if (argsLen < 1) {\n        return true;\n    }\n\n    for (; i < argsLen; i += 1) {\n        if (!isSameObject(object, arguments[i])) {\n            return false;\n        }\n    }\n\n    return true;\n}\n\n/**\n * @param {*} x - object to compare\n * @param {*} y - object to compare\n * @returns {boolean} - whether object x and y is same or not\n * @private\n */\nfunction isSameObject(x, y) { // eslint-disable-line complexity\n    var leftChain = [];\n    var rightChain = [];\n    var p;\n\n    // remember that NaN === NaN returns false\n    // and isNaN(undefined) returns true\n    if (isNaN(x) &&\n        isNaN(y) &&\n        type.isNumber(x) &&\n        type.isNumber(y)) {\n        return true;\n    }\n\n    // Compare primitives and functions.\n    // Check if both arguments link to the same object.\n    // Especially useful on step when comparing prototypes\n    if (x === y) {\n        return true;\n    }\n\n    // Works in case when functions are created in constructor.\n    // Comparing dates is a common scenario. Another built-ins?\n    // We can even handle functions passed across iframes\n    if ((type.isFunction(x) && type.isFunction(y)) ||\n        (x instanceof Date && y instanceof Date) ||\n        (x instanceof RegExp && y instanceof RegExp) ||\n        (x instanceof String && y instanceof String) ||\n        (x instanceof Number && y instanceof Number)) {\n        return x.toString() === y.toString();\n    }\n\n    // At last checking prototypes as good a we can\n    if (!(x instanceof Object && y instanceof Object)) {\n        return false;\n    }\n\n    if (x.isPrototypeOf(y) ||\n        y.isPrototypeOf(x) ||\n        x.constructor !== y.constructor ||\n        x.prototype !== y.prototype) {\n        return false;\n    }\n\n    // check for infinitive linking loops\n    if (array.inArray(x, leftChain) > -1 ||\n        array.inArray(y, rightChain) > -1) {\n        return false;\n    }\n\n    // Quick checking of one object beeing a subset of another.\n    for (p in y) {\n        if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n            return false;\n        } else if (typeof y[p] !== typeof x[p]) {\n            return false;\n        }\n    }\n\n    // This for loop executes comparing with hasOwnProperty() and typeof for each property in 'x' object,\n    // and verifying equality for x[property] and y[property].\n    for (p in x) {\n        if (y.hasOwnProperty(p) !== x.hasOwnProperty(p)) {\n            return false;\n        } else if (typeof y[p] !== typeof x[p]) {\n            return false;\n        }\n\n        if (typeof (x[p]) === 'object' || typeof (x[p]) === 'function') {\n            leftChain.push(x);\n            rightChain.push(y);\n\n            if (!isSameObject(x[p], y[p])) {\n                return false;\n            }\n\n            leftChain.pop();\n            rightChain.pop();\n        } else if (x[p] !== y[p]) {\n            return false;\n        }\n    }\n\n    return true;\n}\n/* eslint-enable complexity */\n\n/**\n * Retrieve a nested item from the given object/array\n * @param {object|Array} obj - Object for retrieving\n * @param {...string|number} paths - Paths of property\n * @returns {*} Value\n * @memberof tui.util\n * @example\n * //-- #1. Get Module --//\n * var util = require('tui-code-snippet'); // node, commonjs\n * var util = tui.util; // distribution file\n *\n * //-- #2. Use property --//\n * var obj = {\n *     'key1': 1,\n *     'nested' : {\n *         'key1': 11,\n *         'nested': {\n *             'key1': 21\n *         }\n *     }\n * };\n * util.pick(obj, 'nested', 'nested', 'key1'); // 21\n * util.pick(obj, 'nested', 'nested', 'key2'); // undefined\n *\n * var arr = ['a', 'b', 'c'];\n * util.pick(arr, 1); // 'b'\n */\nfunction pick(obj, paths) { // eslint-disable-line no-unused-vars\n    var args = arguments;\n    var target = args[0];\n    var i = 1;\n    var length = args.length;\n\n    for (; i < length; i += 1) {\n        if (type.isUndefined(target) ||\n            type.isNull(target)) {\n            return;\n        }\n\n        target = target[args[i]];\n    }\n\n    return target; // eslint-disable-line consistent-return\n}\n\nmodule.exports = {\n    extend: extend,\n    stamp: stamp,\n    hasStamp: hasStamp,\n    resetLastId: resetLastId,\n    keys: Object.prototype.keys || keys,\n    compareJSON: compareJSON,\n    pick: pick\n};\n"]},"metadata":{},"sourceType":"script"}