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 65 66 67 68 69 70 71 72 73 74 75 76 | 8x 8x 8x 8x 8x 8x 8x 8x 6x 6x 2x 2x 2x 2x 2x 6x 6x 6x 8x 8x 8x 8x 5x 5x 5x 8x 8x 8x 8x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 8x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 8x | const Prototype2ApiChain = new Map(); const OBJ_prototype = Object.getPrototypeOf( {} ); export const setProp = ( refObj, k, ApiChainLocal )=> { if( typeof refObj[ k ] == 'function' ) { ApiChainLocal.prototype[ k ] = function( ...args ) { if( k.startsWith('get') ) { if( this.length ) return this[ 0 ][ k ]( ...args ) else return; } this.forEach( el => el[ k ]( ...args ) ); return this; } }else { Object.defineProperty( ApiChainLocal.prototype, k, { get : function(){ if( this.length ) return this[ 0 ][ k ] } , set: function( v ) { this.forEach( el => el[ k ] = v ); return v } } ); } } function applyPrototype( elementProto, refObj ) { let ChainClass = Prototype2ApiChain.get(elementProto); if( ChainClass ) return ChainClass; class ApiChainLocal extends Array{} const applied = {"constructor":1}; for ( let obj=refObj; obj !== OBJ_prototype && obj != null ; obj = Object.getPrototypeOf(obj)) { for( let k of Object.getOwnPropertyNames(obj) ) if( !applied[k]) { setProp( refObj, k, ApiChainLocal ); applied[k]=1; } } Prototype2ApiChain.set(elementProto, ApiChainLocal); return ApiChainLocal; } export function ApiChain( elOrArr, elementProto = undefined ) { const isArr = Array.isArray( elOrArr ); const arr = isArr ? elOrArr : [ elOrArr ]; if( ! elementProto ) elementProto = Object.getPrototypeOf( isArr ? elOrArr[0] : elOrArr ); const refObj = arr[0]; if( elementProto === OBJ_prototype ) { class ApiChainLocal extends Array{} for( let k in refObj ) setProp( refObj, k, ApiChainLocal ); const ret = new ApiChainLocal(); ret.push(...arr); return ret; } // class object const ApiChain = applyPrototype( elementProto, refObj ); const ret = new ApiChain(); ret.push(...arr); return ret; } export default ApiChain; |