JSFiddle - React, Tailwind, and code Playground

by xavierm02

JavaScript

( function ( ) {
    
    var valueOf = { }.valueOf;
    var hasOwnProperty = { }.hasOwnProperty;
    var DOMMimeType = navigator.mimeTypes[ 0 ].constructor;
    var cloneNode = Node.prototype.cloneNode;
    
    Object.getOwnPropertyDescriptors = function ( object ) {
        var propertiesDescriptor = { };
        Object.getOwnPropertyNames( object ).forEach( function ( key ) {
            propertiesDescriptor[ key ] = Object.getOwnPropertyDescriptor( object, key );
        } );
        return propertiesDescriptor;
    };
    
    Object.clone = function ( object, deep ) {
        if ( deep ) {
            return deepClone( object, new WeakMap( ) );
        } else {
            return shallowClone( object );
        }
    };
    
    var shallowClone = function ( object ) {
        if ( Object( object ) !== object || Object.isFrozen( object ) ) {
            return object;
        }
        if ( object instanceof Node ) {
            return cloneNode.call( object, false );
        }
        return Object.create( Object.getPrototypeOf( object ), Object.getOwnPropertyDescriptors( object ) );
    };
    
    var deepClone = function ( object, clones ) {
        var clone;
        
        if ( Object( object ) !== object || Object.isFrozen( object ) ) {
            return object;
        }
        
        if ( object instanceof DOMMimeType ) {// chrome bug http://jsfiddle.net/xavierm02/HpD92/
            return object;
        }
        
        if ( clones.has( object ) ) {
            return clones.get( object );
        }
        
        if ( object instanceof Node ) {
            if ( object instanceof HTMLDocument ) {
                return document.implementation.createHTMLDocument( object.title );
            }
            clone = cloneNode.call( object, true );
            clones.set( object, clone );
            return clone;
        }
        
        clone = Object.create( Object.getPrototypeOf( object ) );
        clones.set( object, clone );
       ...