UNPKG

foop

Version:

interfaces that describe their intentions.

113 lines (106 loc) 8.85 kB
var isObjNotNull = require('../is/objNotNull') var isRegExp = require('../is/regexp') var isError = require('../is/error') var isDate = require('../is/date') var isArray = require('../is/array') var newRegExp = require('../construct/regexp') var ENV_DEBUG = require('../env/debug') /* prettier-ignore */ /** * @desc copy any primitive value, part of clone * @version 5.0.0 * @since 3.0.0 * @name copy * @see clone * @memberOf Traverse * * {@link https://github.com/the-grid/finitedomain/blob/master/src/solver.js#L750 qfox-clone} * {@link https://github.com/lodash/lodash/blob/master/.internal/cloneRegExp.js lodash-clone-regexp} * * @param {*} src value to copy * @return {*} copied * * @example * * copy(/eh/gmi) //=> new RegExp('eh', 'gmi') * copy(new Error('eh')) //=> new Error with copied stack + msg * copy([1]) //=> [1] * copy({}) //=> {} * */ module.exports = function copy(src) { if (isObjNotNull(src)) { var dst // if (isPrimitive(src)) { // if (isNullOrUndefined(src)) { // dst = src // } // @TODO @IMPORTANT @FIXME @!IMPORTANT - COVER THIS OR NOT? // for string value number boolean objects... // if (isString(src)) { // dst = src + '' // } // else if (isNumber(src)) { // dst = src + 0 // } // else if (isBoolean(src)) { // dst = !!src // } // else // lists... <- needs to have dot-prop support on Map/Set // if (isMap(src)) { // dst = new Map() // const obj = reduce(src) // // src.clear() // ObjectKeys(obj).forEach(key => dst.set(key, obj[key])) // return dst // } // else if (isSet(src)) { // dst = new Set() // // could clone here too // const obj = toarr(src) // // src.clear() // obj.forEach(value => dst.add(value)) // return dst // } // ------ if (isArray(src)) { dst = [] } // @TODO also would just be isPrimitive // was new date(src.getTime()) // || isBoolean(src) || isNumber(src) || isString(src) else if (isDate(src)) { dst = new src.constructor(src.valueOf()) } else if (isRegExp(src)) { // dst = new RegExp(src) dst = newRegExp(src.src, src.toString().match(/[^/]*$/)[0]) // dst = new RegExp(src.src, src.toString().match(/[^/]*$/)[0]) dst.lastIndex = src.lastIndex } // @TODO this should just be handled by the next condition... // else if (isError(src)) { // dst = new Error(src.message) // dst.stack = src.stack // } else { dst = Object.create(Object.getPrototypeOf(src)) } // @TODO: copy descriptor // eslint-disable-next-line for (var prop in src) { dst[prop] = src // const desc = Object.getOwnPropertyDescriptor(src, prop) // Object.defineProperty(dst, prop, desc) } return dst } else { if (ENV_DEBUG) { console.log('is not obj', src) } return src } } //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29weS5qcyIsInNvdXJjZXMiOlsiY29weS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJjb25zdCBpc09iak5vdE51bGwgPSByZXF1aXJlKCcuLi9pcy9vYmpOb3ROdWxsJylcbmNvbnN0IGlzUmVnRXhwID0gcmVxdWlyZSgnLi4vaXMvcmVnZXhwJylcbmNvbnN0IGlzRXJyb3IgPSByZXF1aXJlKCcuLi9pcy9lcnJvcicpXG5jb25zdCBpc0RhdGUgPSByZXF1aXJlKCcuLi9pcy9kYXRlJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBuZXdSZWdFeHAgPSByZXF1aXJlKCcuLi9jb25zdHJ1Y3QvcmVnZXhwJylcbmNvbnN0IEVOVl9ERUJVRyA9IHJlcXVpcmUoJy4uL2Vudi9kZWJ1ZycpXG5cbi8qIHByZXR0aWVyLWlnbm9yZSAqL1xuLyoqXG4gKiBAZGVzYyBjb3B5IGFueSBwcmltaXRpdmUgdmFsdWUsIHBhcnQgb2YgY2xvbmVcbiAqIEB2ZXJzaW9uIDUuMC4wXG4gKiBAc2luY2UgMy4wLjBcbiAqIEBuYW1lIGNvcHlcbiAqIEBzZWUgY2xvbmVcbiAqIEBtZW1iZXJPZiBUcmF2ZXJzZVxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vdGhlLWdyaWQvZmluaXRlZG9tYWluL2Jsb2IvbWFzdGVyL3NyYy9zb2x2ZXIuanMjTDc1MCBxZm94LWNsb25lfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvbWFzdGVyLy5pbnRlcm5hbC9jbG9uZVJlZ0V4cC5qcyBsb2Rhc2gtY2xvbmUtcmVnZXhwfVxuICpcbiAqIEBwYXJhbSAgeyp9IHNyYyB2YWx1ZSB0byBjb3B5XG4gKiBAcmV0dXJuIHsqfSBjb3BpZWRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqICAgIGNvcHkoL2VoL2dtaSkgLy89PiBuZXcgUmVnRXhwKCdlaCcsICdnbWknKVxuICogICAgY29weShuZXcgRXJyb3IoJ2VoJykpIC8vPT4gbmV3IEVycm9yIHdpdGggY29waWVkIHN0YWNrICsgbXNnXG4gKiAgICBjb3B5KFsxXSkgLy89PiBbMV1cbiAqICAgIGNvcHkoe30pIC8vPT4ge31cbiAqXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gY29weShzcmMpIHtcbiAgaWYgKGlzT2JqTm90TnVsbChzcmMpKSB7XG4gICAgbGV0IGRzdFxuXG4gICAgLy8gaWYgKGlzUHJpbWl0aXZlKHNyYykpIHtcbiAgICAvLyBpZiAoaXNOdWxsT3JVbmRlZmluZWQoc3JjKSkge1xuICAgIC8vICAgZHN0ID0gc3JjXG4gICAgLy8gfVxuXG4gICAgLy8gQFRPRE8gQElNUE9SVEFOVCBARklYTUUgQCFJTVBPUlRBTlQgLSBDT1ZFUiBUSElTIE9SIE5PVD9cbiAgICAvLyBmb3Igc3RyaW5nIHZhbHVlIG51bWJlciBib29sZWFuIG9iamVjdHMuLi5cbiAgICAvLyBpZiAoaXNTdHJpbmcoc3JjKSkge1xuICAgIC8vICAgZHN0ID0gc3JjICsgJydcbiAgICAvLyB9XG4gICAgLy8gZWxzZSBpZiAoaXNOdW1iZXIoc3JjKSkge1xuICAgIC8vICAgZHN0ID0gc3JjICsgMFxuICAgIC8vIH1cbiAgICAvLyBlbHNlIGlmIChpc0Jvb2xlYW4oc3JjKSkge1xuICAgIC8vICAgZHN0ID0gISFzcmNcbiAgICAvLyB9XG4gICAgLy8gZWxzZVxuXG4gICAgLy8gbGlzdHMuLi4gPC0gbmVlZHMgdG8gaGF2ZSBkb3QtcHJvcCBzdXBwb3J0IG9uIE1hcC9TZXRcbiAgICAvLyBpZiAoaXNNYXAoc3JjKSkge1xuICAgIC8vICAgZHN0ID0gbmV3IE1hcCgpXG4gICAgLy8gICBjb25zdCBvYmogPSByZWR1Y2Uoc3JjKVxuICAgIC8vICAgLy8gc3JjLmNsZWFyKClcbiAgICAvLyAgIE9iamVjdEtleXMob2JqKS5mb3JFYWNoKGtleSA9PiBkc3Quc2V0KGtleSwgb2JqW2tleV0pKVxuICAgIC8vICAgcmV0dXJuIGRzdFxuICAgIC8vIH1cbiAgICAvLyBlbHNlIGlmIChpc1NldChzcmMpKSB7XG4gICAgLy8gICBkc3QgPSBuZXcgU2V0KClcbiAgICAvLyAgIC8vIGNvdWxkIGNsb25lIGhlcmUgdG9vXG4gICAgLy8gICBjb25zdCBvYmogPSB0b2FycihzcmMpXG4gICAgLy8gICAvLyBzcmMuY2xlYXIoKVxuICAgIC8vICAgb2JqLmZvckVhY2godmFsdWUgPT4gZHN0LmFkZCh2YWx1ZSkpXG4gICAgLy8gICByZXR1cm4gZHN0XG4gICAgLy8gfVxuXG4gICAgLy8gLS0tLS0tXG4gICAgaWYgKGlzQXJyYXkoc3JjKSkge1xuICAgICAgZHN0ID0gW11cbiAgICB9XG4gICAgLy8gQFRPRE8gYWxzbyB3b3VsZCBqdXN0IGJlIGlzUHJpbWl0aXZlXG4gICAgLy8gd2FzIG5ldyBkYXRlKHNyYy5nZXRUaW1lKCkpXG4gICAgLy8gfHwgaXNCb29sZWFuKHNyYykgfHwgaXNOdW1iZXIoc3JjKSB8fCBpc1N0cmluZyhzcmMpXG4gICAgZWxzZSBpZiAoaXNEYXRlKHNyYykpIHtcbiAgICAgIGRzdCA9IG5ldyBzcmMuY29uc3RydWN0b3Ioc3JjLnZhbHVlT2YoKSlcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNSZWdFeHAoc3JjKSkge1xuICAgICAgLy8gZHN0ID0gbmV3IFJlZ0V4cChzcmMpXG4gICAgICBkc3QgPSBuZXdSZWdFeHAoc3JjLnNyYywgc3JjLnRvU3RyaW5nKCkubWF0Y2goL1teL10qJC8pWzBdKVxuICAgICAgLy8gZHN0ID0gbmV3IFJlZ0V4cChzcmMuc3JjLCBzcmMudG9TdHJpbmcoKS5tYXRjaCgvW14vXSokLylbMF0pXG4gICAgICBkc3QubGFzdEluZGV4ID0gc3JjLmxhc3RJbmRleFxuICAgIH1cbiAgICAvLyBAVE9ETyB0aGlzIHNob3VsZCBqdXN0IGJlIGhhbmRsZWQgYnkgdGhlIG5leHQgY29uZGl0aW9uLi4uXG4gICAgLy8gZWxzZSBpZiAoaXNFcnJvcihzcmMpKSB7XG4gICAgLy8gICBkc3QgPSBuZXcgRXJyb3Ioc3JjLm1lc3NhZ2UpXG4gICAgLy8gICBkc3Quc3RhY2sgPSBzcmMuc3RhY2tcbiAgICAvLyB9XG4gICAgZWxzZSB7XG4gICAgICBkc3QgPSBPYmplY3QuY3JlYXRlKE9iamVjdC5nZXRQcm90b3R5cGVPZihzcmMpKVxuICAgIH1cblxuICAgIC8vIEBUT0RPOiBjb3B5IGRlc2NyaXB0b3JcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmVcbiAgICBmb3IgKHZhciBwcm9wIGluIHNyYykge1xuICAgICAgZHN0W3Byb3BdID0gc3JjXG4gICAgICAvLyBjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzcmMsIHByb3ApXG4gICAgICAvLyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZHN0LCBwcm9wLCBkZXNjKVxuICAgIH1cbiAgICByZXR1cm4gZHN0XG4gIH1cbiAgZWxzZSB7XG4gICAgaWYgKEVOVl9ERUJVRykge1xuICAgICAgY29uc29sZS5sb2coJ2lzIG5vdCBvYmonLCBzcmMpXG4gICAgfVxuICAgIHJldHVybiBzcmNcbiAgfVxufVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQUEsR0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsa0JBQWtCLENBQUM7QUFDaERBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDO0FBQ3RDQSxHQUFLLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxZQUFZLENBQUM7QUFDcENBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDaERBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQXlCekMsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQyxHQUFHLEVBQUU7RUFDbEMsSUFBSSxZQUFZLENBQUMsR0FBRyxDQUFDLEVBQUU7SUFDckJDLEdBQUcsQ0FBQyxHQUFHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQXNDUCxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtNQUNoQixHQUFHLEdBQUcsRUFBRTtLQUNUOzs7O1NBSUksSUFBSSxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUU7TUFDcEIsR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDekM7U0FDSSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTs7TUFFdEIsR0FBRyxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7O01BRTNELEdBQUcsQ0FBQyxTQUFTLEdBQUcsR0FBRyxDQUFDLFNBQVM7S0FDOUI7Ozs7OztTQU1JO01BQ0gsR0FBRyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNoRDs7OztJQUlELEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxFQUFFO01BQ3BCLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHOzs7S0FHaEI7SUFDRCxPQUFPLEdBQUc7R0FDWDtPQUNJO0lBQ0gsSUFBSSxTQUFTLEVBQUU7TUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxHQUFHLENBQUM7S0FDL0I7SUFDRCxPQUFPLEdBQUc7R0FDWDtDQUNGOyJ9