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":"AAAA;AACA;AACA;AACA;AACA;AAEA;;AAEA,IAAIA,IAAI,GAAGC,OAAO,CAAC,QAAD,CAAlB;;AACA,IAAIC,KAAK,GAAGD,OAAO,CAAC,SAAD,CAAnB;AAEA;AACA;AACA;AACA;AACA;;;AACA,IAAIE,MAAM,GAAG,CAAb;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASC,MAAT,CAAgBC,MAAhB,EAAwBC,OAAxB,EAAiC;AAAE;AAC/B,MAAIC,UAAU,GAAGC,MAAM,CAACC,SAAP,CAAiBC,cAAlC;AACA,MAAIC,MAAJ,EAAYC,IAAZ,EAAkBC,CAAlB,EAAqBC,GAArB;;AAEA,OAAKD,CAAC,GAAG,CAAJ,EAAOC,GAAG,GAAGC,SAAS,CAACC,MAA5B,EAAoCH,CAAC,GAAGC,GAAxC,EAA6CD,CAAC,IAAI,CAAlD,EAAqD;AACjDF,IAAAA,MAAM,GAAGI,SAAS,CAACF,CAAD,CAAlB;;AACA,SAAKD,IAAL,IAAaD,MAAb,EAAqB;AACjB,UAAIJ,UAAU,CAACU,IAAX,CAAgBN,MAAhB,EAAwBC,IAAxB,CAAJ,EAAmC;AAC/BP,QAAAA,MAAM,CAACO,IAAD,CAAN,GAAeD,MAAM,CAACC,IAAD,CAArB;AACH;AACJ;AACJ;;AAED,SAAOP,MAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASa,KAAT,CAAeC,GAAf,EAAoB;AAChB,MAAI,CAACA,GAAG,CAACC,OAAT,EAAkB;AACdjB,IAAAA,MAAM,IAAI,CAAV;AACAgB,IAAAA,GAAG,CAACC,OAAJ,GAAcjB,MAAd,CAFc,CAEQ;AACzB;;AAED,SAAOgB,GAAG,CAACC,OAAX;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASC,QAAT,CAAkBF,GAAlB,EAAuB;AACnB,SAAOnB,IAAI,CAACsB,QAAL,CAAcC,IAAI,CAACJ,GAAD,EAAM,SAAN,CAAlB,CAAP;AACH;AAED;AACA;AACA;AACA;;;AACA,SAASK,WAAT,GAAuB;AACnBrB,EAAAA,MAAM,GAAG,CAAT;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASsB,IAAT,CAAcN,GAAd,EAAmB;AACf,MAAIO,QAAQ,GAAG,EAAf;AACA,MAAIC,GAAJ;;AAEA,OAAKA,GAAL,IAAYR,GAAZ,EAAiB;AACb,QAAIA,GAAG,CAACT,cAAJ,CAAmBiB,GAAnB,CAAJ,EAA6B;AACzBD,MAAAA,QAAQ,CAACE,IAAT,CAAcD,GAAd;AACH;AACJ;;AAED,SAAOD,QAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASG,WAAT,CAAqBC,MAArB,EAA6B;AACzB,MAAIC,OAAO,GAAGhB,SAAS,CAACC,MAAxB;AACA,MAAIH,CAAC,GAAG,CAAR;;AAEA,MAAIkB,OAAO,GAAG,CAAd,EAAiB;AACb,WAAO,IAAP;AACH;;AAED,SAAOlB,CAAC,GAAGkB,OAAX,EAAoBlB,CAAC,IAAI,CAAzB,EAA4B;AACxB,QAAI,CAACmB,YAAY,CAACF,MAAD,EAASf,SAAS,CAACF,CAAD,CAAlB,CAAjB,EAAyC;AACrC,aAAO,KAAP;AACH;AACJ;;AAED,SAAO,IAAP;AACH;AAED;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASmB,YAAT,CAAsBC,CAAtB,EAAyBC,CAAzB,EAA4B;AAAE;AAC1B,MAAIC,SAAS,GAAG,EAAhB;AACA,MAAIC,UAAU,GAAG,EAAjB;AACA,MAAIC,CAAJ,CAHwB,CAKxB;AACA;;AACA,MAAIC,KAAK,CAACL,CAAD,CAAL,IACAK,KAAK,CAACJ,CAAD,CADL,IAEAlC,IAAI,CAACuC,QAAL,CAAcN,CAAd,CAFA,IAGAjC,IAAI,CAACuC,QAAL,CAAcL,CAAd,CAHJ,EAGsB;AAClB,WAAO,IAAP;AACH,GAZuB,CAcxB;AACA;AACA;;;AACA,MAAID,CAAC,KAAKC,CAAV,EAAa;AACT,WAAO,IAAP;AACH,GAnBuB,CAqBxB;AACA;AACA;;;AACA,MAAKlC,IAAI,CAACwC,UAAL,CAAgBP,CAAhB,KAAsBjC,IAAI,CAACwC,UAAL,CAAgBN,CAAhB,CAAvB,IACCD,CAAC,YAAYQ,IAAb,IAAqBP,CAAC,YAAYO,IADnC,IAECR,CAAC,YAAYS,MAAb,IAAuBR,CAAC,YAAYQ,MAFrC,IAGCT,CAAC,YAAYU,MAAb,IAAuBT,CAAC,YAAYS,MAHrC,IAICV,CAAC,YAAYW,MAAb,IAAuBV,CAAC,YAAYU,MAJzC,EAIkD;AAC9C,WAAOX,CAAC,CAACY,QAAF,OAAiBX,CAAC,CAACW,QAAF,EAAxB;AACH,GA9BuB,CAgCxB;;;AACA,MAAI,EAAEZ,CAAC,YAAYzB,MAAb,IAAuB0B,CAAC,YAAY1B,MAAtC,CAAJ,EAAmD;AAC/C,WAAO,KAAP;AACH;;AAED,MAAIyB,CAAC,CAACa,aAAF,CAAgBZ,CAAhB,KACAA,CAAC,CAACY,aAAF,CAAgBb,CAAhB,CADA,IAEAA,CAAC,CAACc,WAAF,KAAkBb,CAAC,CAACa,WAFpB,IAGAd,CAAC,CAACxB,SAAF,KAAgByB,CAAC,CAACzB,SAHtB,EAGiC;AAC7B,WAAO,KAAP;AACH,GA1CuB,CA4CxB;;;AACA,MAAIP,KAAK,CAAC8C,OAAN,CAAcf,CAAd,EAAiBE,SAAjB,IAA8B,CAAC,CAA/B,IACAjC,KAAK,CAAC8C,OAAN,CAAcd,CAAd,EAAiBE,UAAjB,IAA+B,CAAC,CADpC,EACuC;AACnC,WAAO,KAAP;AACH,GAhDuB,CAkDxB;;;AACA,OAAKC,CAAL,IAAUH,CAAV,EAAa;AACT,QAAIA,CAAC,CAACxB,cAAF,CAAiB2B,CAAjB,MAAwBJ,CAAC,CAACvB,cAAF,CAAiB2B,CAAjB,CAA5B,EAAiD;AAC7C,aAAO,KAAP;AACH,KAFD,MAEO,IAAI,OAAOH,CAAC,CAACG,CAAD,CAAR,KAAgB,OAAOJ,CAAC,CAACI,CAAD,CAA5B,EAAiC;AACpC,aAAO,KAAP;AACH;AACJ,GAzDuB,CA2DxB;AACA;;;AACA,OAAKA,CAAL,IAAUJ,CAAV,EAAa;AACT,QAAIC,CAAC,CAACxB,cAAF,CAAiB2B,CAAjB,MAAwBJ,CAAC,CAACvB,cAAF,CAAiB2B,CAAjB,CAA5B,EAAiD;AAC7C,aAAO,KAAP;AACH,KAFD,MAEO,IAAI,OAAOH,CAAC,CAACG,CAAD,CAAR,KAAgB,OAAOJ,CAAC,CAACI,CAAD,CAA5B,EAAiC;AACpC,aAAO,KAAP;AACH;;AAED,QAAI,OAAQJ,CAAC,CAACI,CAAD,CAAT,KAAkB,QAAlB,IAA8B,OAAQJ,CAAC,CAACI,CAAD,CAAT,KAAkB,UAApD,EAAgE;AAC5DF,MAAAA,SAAS,CAACP,IAAV,CAAeK,CAAf;AACAG,MAAAA,UAAU,CAACR,IAAX,CAAgBM,CAAhB;;AAEA,UAAI,CAACF,YAAY,CAACC,CAAC,CAACI,CAAD,CAAF,EAAOH,CAAC,CAACG,CAAD,CAAR,CAAjB,EAA+B;AAC3B,eAAO,KAAP;AACH;;AAEDF,MAAAA,SAAS,CAACc,GAAV;AACAb,MAAAA,UAAU,CAACa,GAAX;AACH,KAVD,MAUO,IAAIhB,CAAC,CAACI,CAAD,CAAD,KAASH,CAAC,CAACG,CAAD,CAAd,EAAmB;AACtB,aAAO,KAAP;AACH;AACJ;;AAED,SAAO,IAAP;AACH;AACD;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AACA,SAASd,IAAT,CAAcJ,GAAd,EAAmB+B,KAAnB,EAA0B;AAAE;AACxB,MAAIC,IAAI,GAAGpC,SAAX;AACA,MAAIV,MAAM,GAAG8C,IAAI,CAAC,CAAD,CAAjB;AACA,MAAItC,CAAC,GAAG,CAAR;AACA,MAAIG,MAAM,GAAGmC,IAAI,CAACnC,MAAlB;;AAEA,SAAOH,CAAC,GAAGG,MAAX,EAAmBH,CAAC,IAAI,CAAxB,EAA2B;AACvB,QAAIb,IAAI,CAACoD,WAAL,CAAiB/C,MAAjB,KACAL,IAAI,CAACqD,MAAL,CAAYhD,MAAZ,CADJ,EACyB;AACrB;AACH;;AAEDA,IAAAA,MAAM,GAAGA,MAAM,CAAC8C,IAAI,CAACtC,CAAD,CAAL,CAAf;AACH;;AAED,SAAOR,MAAP,CAfsB,CAeP;AAClB;;AAEDiD,MAAM,CAACC,OAAP,GAAiB;AACbnD,EAAAA,MAAM,EAAEA,MADK;AAEbc,EAAAA,KAAK,EAAEA,KAFM;AAGbG,EAAAA,QAAQ,EAAEA,QAHG;AAIbG,EAAAA,WAAW,EAAEA,WAJA;AAKbC,EAAAA,IAAI,EAAEjB,MAAM,CAACC,SAAP,CAAiBgB,IAAjB,IAAyBA,IALlB;AAMbI,EAAAA,WAAW,EAAEA,WANA;AAObN,EAAAA,IAAI,EAAEA;AAPO,CAAjB","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"}