File tree 5 files changed +52
-39
lines changed
5 files changed +52
-39
lines changed Original file line number Diff line number Diff line change @@ -8,20 +8,23 @@ export function isObject(o) {
8
8
}
9
9
10
10
export function extend ( target , src ) {
11
- Object . keys ( src ) . forEach ( ( key ) => {
12
- if ( typeof target [ key ] === 'undefined' ) {
13
- target [ key ] = src [ key ] ;
14
- return ;
15
- }
16
- if ( target [ key ] && ! src [ key ] ) {
17
- return ;
18
- }
19
- if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
20
- extend ( target [ key ] , src [ key ] ) ;
21
- } else {
22
- target [ key ] = src [ key ] ;
23
- }
24
- } ) ;
11
+ const noExtend = [ '__proto__' , 'constructor' , 'prototype' ] ;
12
+ Object . keys ( src )
13
+ . filter ( ( key ) => noExtend . indexOf ( key ) < 0 )
14
+ . forEach ( ( key ) => {
15
+ if ( typeof target [ key ] === 'undefined' ) {
16
+ target [ key ] = src [ key ] ;
17
+ return ;
18
+ }
19
+ if ( target [ key ] && ! src [ key ] ) {
20
+ return ;
21
+ }
22
+ if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
23
+ extend ( target [ key ] , src [ key ] ) ;
24
+ } else {
25
+ target [ key ] = src [ key ] ;
26
+ }
27
+ } ) ;
25
28
}
26
29
27
30
export function coerceBooleanProperty ( value : any ) : boolean {
Original file line number Diff line number Diff line change @@ -8,14 +8,17 @@ function isObject(o) {
8
8
}
9
9
10
10
function extend ( target , src ) {
11
- Object . keys ( src ) . forEach ( ( key ) => {
12
- if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
13
- else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
14
- extend ( target [ key ] , src [ key ] ) ;
15
- } else {
16
- target [ key ] = src [ key ] ;
17
- }
18
- } ) ;
11
+ const noExtend = [ '__proto__' , 'constructor' , 'prototype' ] ;
12
+ Object . keys ( src )
13
+ . filter ( ( key ) => noExtend . indexOf ( key ) < 0 )
14
+ . forEach ( ( key ) => {
15
+ if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
16
+ else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
17
+ extend ( target [ key ] , src [ key ] ) ;
18
+ } else {
19
+ target [ key ] = src [ key ] ;
20
+ }
21
+ } ) ;
19
22
}
20
23
21
24
function needsNavigation ( params = { } ) {
Original file line number Diff line number Diff line change @@ -8,14 +8,17 @@ function isObject(o) {
8
8
}
9
9
10
10
function extend ( target , src ) {
11
- Object . keys ( src ) . forEach ( ( key ) => {
12
- if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
13
- else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
14
- extend ( target [ key ] , src [ key ] ) ;
15
- } else {
16
- target [ key ] = src [ key ] ;
17
- }
18
- } ) ;
11
+ const noExtend = [ '__proto__' , 'constructor' , 'prototype' ] ;
12
+ Object . keys ( src )
13
+ . filter ( ( key ) => noExtend . indexOf ( key ) < 0 )
14
+ . forEach ( ( key ) => {
15
+ if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
16
+ else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
17
+ extend ( target [ key ] , src [ key ] ) ;
18
+ } else {
19
+ target [ key ] = src [ key ] ;
20
+ }
21
+ } ) ;
19
22
}
20
23
21
24
function needsNavigation ( params = { } ) {
Original file line number Diff line number Diff line change @@ -94,10 +94,11 @@ function isObject(o) {
94
94
}
95
95
function extend ( ...args ) {
96
96
const to = Object ( args [ 0 ] ) ;
97
+ const noExtend = [ '__proto__' , 'constructor' , 'prototype' ] ;
97
98
for ( let i = 1 ; i < args . length ; i += 1 ) {
98
99
const nextSource = args [ i ] ;
99
100
if ( nextSource !== undefined && nextSource !== null ) {
100
- const keysArray = Object . keys ( Object ( nextSource ) ) . filter ( ( key ) => key !== '__proto__' ) ;
101
+ const keysArray = Object . keys ( Object ( nextSource ) ) . filter ( ( key ) => noExtend . indexOf ( key ) < 0 ) ;
101
102
for ( let nextIndex = 0 , len = keysArray . length ; nextIndex < len ; nextIndex += 1 ) {
102
103
const nextKey = keysArray [ nextIndex ] ;
103
104
const desc = Object . getOwnPropertyDescriptor ( nextSource , nextKey ) ;
Original file line number Diff line number Diff line change @@ -8,14 +8,17 @@ function isObject(o) {
8
8
}
9
9
10
10
function extend ( target , src ) {
11
- Object . keys ( src ) . forEach ( ( key ) => {
12
- if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
13
- else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
14
- extend ( target [ key ] , src [ key ] ) ;
15
- } else {
16
- target [ key ] = src [ key ] ;
17
- }
18
- } ) ;
11
+ const noExtend = [ '__proto__' , 'constructor' , 'prototype' ] ;
12
+ Object . keys ( src )
13
+ . filter ( ( key ) => noExtend . indexOf ( key ) < 0 )
14
+ . forEach ( ( key ) => {
15
+ if ( typeof target [ key ] === 'undefined' ) target [ key ] = src [ key ] ;
16
+ else if ( isObject ( src [ key ] ) && isObject ( target [ key ] ) && Object . keys ( src [ key ] ) . length > 0 ) {
17
+ extend ( target [ key ] , src [ key ] ) ;
18
+ } else {
19
+ target [ key ] = src [ key ] ;
20
+ }
21
+ } ) ;
19
22
}
20
23
21
24
function needsNavigation ( props = { } ) {
You can’t perform that action at this time.
0 commit comments