nl_tokens: Sets a value to an object property by a link or returns / deletes the property . At changing or deleting the property returns an object :
pl_tokens: function byLink ( obj , link , opt_params ) { const p = opt_params || { } ; const linkList = ( 0 , _types . isString ) ( link ) ? ( 0 , _gcc . <mask> ) ( link ) . split ( '.' ) : [ ] . concat ( link ) , length = linkList . length , last = length - 1 ; let pre , preKey ; for ( let i = - 1 ; ++ i < length ; ) { const el = linkList [ i ] ; if ( obj == null ) { if ( p . test ) { return false ; } if ( p . error ) { throw new ReferenceError ( ` ${ el } ` ) ; } if ( p . delete ) { return { notFound : true , result : false , key : undefined , value : undefined } ; } return undefined ; } const isTest = i === last && p . test ; if ( isTest ) { pre = obj ; preKey = el ; } const objIsMap = ( 0 , _types . isMap ) ( obj ) , objIsSet = ( 0 , _types . isSet ) ( obj ) ; const isAMap = objIsMap || ( 0 , _types . isWeakMap ) ( obj ) , isASet = objIsSet || ( 0 , _types . isWeakSet ) ( obj ) ; // Set or delete if ( ! isTest && i === last && ( p . delete || 'value' in p ) ) { const cache = { key : isASet ? null : el , result : isAMap || isASet ? obj . has ( el ) : el in obj , value : isAMap ? obj . get ( el ) : isASet ? el : obj [ el ] } ; if ( 'value' in p ) { cache . newValue = p . value ; } if ( p . delete ) { if ( cache . result ) { if ( isAMap || isASet ) { obj . delete ( el ) ; cache . result = ! obj . has ( el ) ; } else { if ( ( 0 , _types . isLikeArray ) ( obj ) && ! isNaN ( Number ( el ) ) ) { if ( ( 0 , _types . isArray ) ( obj ) ) { obj . splice ( el , 1 ) ; } else { splice . call ( obj , el , 1 ) ; } } else { delete obj [ el ] ; } cache . result = el in obj === false || obj [ el ] !== cache . value ; } } } else { if ( isAMap ) { if ( obj . get ( el ) !== p . value ) { obj . set ( el , p . value ) ; cache . result = obj . get ( el ) === p . value ; } else { cache . result = false ; } } else if ( isASet ) { const has = obj . has ( el ) ; cache . result = false ; cache . value = has ? el : undefined ; if ( ! obj . has ( p . value ) ) { if ( has ) { obj . delete ( el ) ; } obj . add ( p . value ) ; cache . result = obj . has ( p . value ) ; } } else { if ( ( 0 , _types . isLikeArray ) ( obj ) && ! isNaN ( Number ( cache . key ) ) ) { cache . key = Number ( cache . key ) ; } else { cache . key = String ( cache . key ) ; } if ( obj [ el ] !== p . value ) { obj [ el ] = p . value ; cache . result = obj [ el ] === p . value ; } else { cache . result = false ; } } } return cache ; } if ( isAMap ) { obj = obj . get ( el ) ; } else if ( isASet ) { if ( obj . has ( el ) ) { obj = el ; } else { obj = undefined ; } } else { if ( p . create && obj [ el ] === undefined ) { obj [ el ] = { } ; } obj = obj [ el ] ; } } if ( p . test ) { if ( ( 0 , _types . isMap ) ( pre ) || ( 0 , _types . isWeakMap ) ( pre ) || ( 0 , _types . isSet ) ( pre ) || ( 0 , _types . isWeakSet ) ( pre ) ) { return pre . has ( preKey ) ; } return preKey in pre ; } return obj ; }