Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | 13x 8x 130x 130x 130x 340x 4x 336x 126x 126x 126x 199x 126x 264x 87x 43x 2x 8x 124x 13x 65x | // from https://github.com/ramda/ramda/blob/master/source/internal/_clone.js import { type } from './type'; function _cloneRegExp(pattern: RegExp) { return new RegExp( pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : '') ); } function _clone(value: any, refFrom: any[], refTo: any[], deep: boolean) { function copy(copiedValue: any) { const len = refFrom.length; let idx = 0; while (idx < len) { if (value === refFrom[idx]) { return refTo[idx]; } idx += 1; } refFrom[idx + 1] = value; refTo[idx + 1] = copiedValue; // tslint:disable-next-line:forin for (const key in value) { copiedValue[key] = deep ? _clone(value[key], refFrom, refTo, true) : value[key]; } return copiedValue; } switch (type(value)) { case 'Object': return copy({}); case 'Array': return copy([]); case 'Date': return new Date(value.valueOf()); case 'RegExp': return _cloneRegExp(value); default: return value; } } /** * Creates a deep copy of the value. Supported types: `Array`, `Object`, `Number`, `String`, `Boolean`, `Date`, `RegExp`. Functions are assigned by reference rather than copied. * @param value - the object to clone * @signature P.clone(value) * @example P.clone({foo: 'bar'}) // {foo: 'bar'} * @category Object */ export function clone<T extends any>(value: T): T { // @ts-ignore return value != null && typeof value.clone === 'function' ? // @ts-ignore value.clone() : _clone(value, [], [], true); } |