⌈⌋ ⎇ branch:  Bitrhythm


Hex Artifact Content

Artifact 32bfe1330f4e89627035b03a11bfac70312099e907e31f38567a1b443cd1d27b:


0000: 69 6d 70 6f 72 74 20 69 73 57 72 69 74 61 62 6c  import isWritabl
0010: 65 20 66 72 6f 6d 20 27 2e 2e 2f 63 68 65 63 6b  e from '../check
0020: 73 2f 69 73 2d 77 72 69 74 61 62 6c 65 27 0a 0a  s/is-writable'..
0030: 2f 2a 2a 0a 20 2a 20 45 78 74 65 6e 64 20 61 6e  /**. * Extend an
0040: 79 20 6f 62 6a 65 63 74 20 77 69 74 68 20 6f 74  y object with ot
0050: 68 65 72 20 70 72 6f 70 65 72 74 69 65 73 0a 20  her properties. 
0060: 2a 20 40 70 61 72 61 6d 20 20 20 7b 20 4f 62 6a  * @param   { Obj
0070: 65 63 74 20 7d 20 73 72 63 20 2d 20 73 6f 75 72  ect } src - sour
0080: 63 65 20 6f 62 6a 65 63 74 0a 20 2a 20 40 72 65  ce object. * @re
0090: 74 75 72 6e 73 20 7b 20 4f 62 6a 65 63 74 20 7d  turns { Object }
00a0: 20 74 68 65 20 72 65 73 75 6c 74 69 6e 67 20 65   the resulting e
00b0: 78 74 65 6e 64 65 64 20 6f 62 6a 65 63 74 0a 20  xtended object. 
00c0: 2a 0a 20 2a 20 76 61 72 20 6f 62 6a 20 3d 20 7b  *. * var obj = {
00d0: 20 66 6f 6f 3a 20 27 62 61 7a 27 20 7d 0a 20 2a   foo: 'baz' }. *
00e0: 20 65 78 74 65 6e 64 28 6f 62 6a 2c 20 7b 62 61   extend(obj, {ba
00f0: 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20 27  r: 'bar', foo: '
0100: 62 61 72 27 7d 29 0a 20 2a 20 63 6f 6e 73 6f 6c  bar'}). * consol
0110: 65 2e 6c 6f 67 28 6f 62 6a 29 20 3d 3e 20 7b 62  e.log(obj) => {b
0120: 61 72 3a 20 27 62 61 72 27 2c 20 66 6f 6f 3a 20  ar: 'bar', foo: 
0130: 27 62 61 72 27 7d 0a 20 2a 0a 20 2a 2f 0a 65 78  'bar'}. *. */.ex
0140: 70 6f 72 74 20 64 65 66 61 75 6c 74 20 66 75 6e  port default fun
0150: 63 74 69 6f 6e 20 65 78 74 65 6e 64 28 73 72 63  ction extend(src
0160: 29 20 7b 0a 20 20 6c 65 74 20 6f 62 6a 0a 20 20  ) {.  let obj.  
0170: 6c 65 74 20 69 20 3d 20 31 0a 20 20 63 6f 6e 73  let i = 1.  cons
0180: 74 20 61 72 67 73 20 3d 20 61 72 67 75 6d 65 6e  t args = argumen
0190: 74 73 0a 20 20 63 6f 6e 73 74 20 6c 20 3d 20 61  ts.  const l = a
01a0: 72 67 73 2e 6c 65 6e 67 74 68 0a 0a 20 20 66 6f  rgs.length..  fo
01b0: 72 20 28 3b 20 69 20 3c 20 6c 3b 20 69 2b 2b 29  r (; i < l; i++)
01c0: 20 7b 0a 20 20 20 20 69 66 20 28 6f 62 6a 20 3d   {.    if (obj =
01d0: 20 61 72 67 73 5b 69 5d 29 20 7b 0a 20 20 20 20   args[i]) {.    
01e0: 20 20 66 6f 72 20 28 63 6f 6e 73 74 20 6b 65 79    for (const key
01f0: 20 69 6e 20 6f 62 6a 29 20 7b 0a 20 20 20 20 20   in obj) {.     
0200: 20 20 20 2f 2f 20 63 68 65 63 6b 20 69 66 20 74     // check if t
0210: 68 69 73 20 70 72 6f 70 65 72 74 79 20 6f 66 20  his property of 
0220: 74 68 65 20 73 6f 75 72 63 65 20 6f 62 6a 65 63  the source objec
0230: 74 20 63 6f 75 6c 64 20 62 65 20 6f 76 65 72 72  t could be overr
0240: 69 64 64 65 6e 0a 20 20 20 20 20 20 20 20 69 66  idden.        if
0250: 20 28 69 73 57 72 69 74 61 62 6c 65 28 73 72 63   (isWritable(src
0260: 2c 20 6b 65 79 29 29 0a 20 20 20 20 20 20 20 20  , key)).        
0270: 20 20 73 72 63 5b 6b 65 79 5d 20 3d 20 6f 62 6a    src[key] = obj
0280: 5b 6b 65 79 5d 0a 20 20 20 20 20 20 7d 0a 20 20  [key].      }.  
0290: 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e    }.  }.  return
02a0: 20 73 72 63 0a 7d                                 src.}