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 | 1x 1x 2x 1x 1x 1x 74261x 12000x 12000x 74261x 159838x 157460x 157460x 62261x 62261x 74261x 69360x 69360x 74261x | /*! * VisualEditor Object freeze utilities. * * @copyright See AUTHORS.txt */ ( function () { const freezeProxyHandler = { set: ( obj, name ) => { throw new Error( 'Object is frozen, can\'t set property: ' + name ); }, deleteProperty: ( obj, name ) => { throw new Error( 'Object is frozen, can\'t delete property: ' + name ); } }; Iif ( !window.Proxy || !window.Set ) { return; } let deepFreeze; /** * Deep freeze an object, making it immutable * * Original object properties are overwritten with frozen versions. * * @param {Object} object Object to freeze * @param {boolean} [onlyProperties] Only freeze properties (or array items) * @param {Set} [seen] Set of already-seen objects (for internal, recursive use) * @return {Object} Immutable deep copy of the original object */ ve.deepFreeze = deepFreeze = function ( object, onlyProperties, seen ) { if ( !seen ) { seen = new Set(); seen.add( object ); } for ( const name in object ) { if ( Object.prototype.hasOwnProperty.call( object, name ) ) { const value = object[ name ]; if ( // Truth check so we don't try to freeze null value && typeof value === 'object' && !seen.has( value ) && !Object.isFrozen( value ) ) { seen.add( value ); // Recurse. Use local name (tests may alias ve.deepFreeze) object[ name ] = deepFreeze( value, false, seen ); } } } if ( !onlyProperties ) { object = new window.Proxy( object, freezeProxyHandler ); // Object#freeze isn't really necessary after proxying, // but use it so we can detect frozen objects with Object.isFrozen. Object.freeze( object ); } return object; }; }() ); |