JSFiddle - React, Tailwind, and code Playground

by vjeux

JavaScript

var XSON = {
    stringify: function (obj, replacer, space) {
        if (replacer) {
            throw new Exception('Replacer is not supported');
        }
                
        function rec(obj, level) {
            function indent(str) {
                if (space === undefined) {
                    return str;
                }
                return '\n' + Array(level + 1).join(space) + str;
            }
            
            if (typeof obj === 'string') {
                if (obj.indexOf('<') !== -1) {
                    return indent('<s><![CDATA[' + obj.split(']]>').join(']]]]><![CDATA[>') + ']]></s>');
                }
                return indent('<s>' + obj + '</s>');
            }
            
            if (obj === null) {
                return indent('<l/>');
            }
            
            if (typeof obj === 'boolean') {
                if (obj) {
                    return indent('<t/>');
                }
                return indent('<f/>');
            }
            
            if (typeof obj === 'number') {
                return indent('<n>' + obj + '</n>');
            }
            
            if ('slice' in obj) {
                if (!obj.length) {
                    return indent('<a/>');
                }
                return indent('<a>') + obj.map(function (obj) {
                    return rec(obj, level + 1);
                }).join('') + indent('</a>');
            }
            
            var elements = [];
            for (var key in obj) {
                var element = rec(obj[key], level + 1);
                var pos = space.length * (level + 1) + 3;
                elements.push(element.substr(0, pos) + ' k="' + key.replace(/"/g, '&quot;') + '"' + element.substr(pos));
            }
            if (!elements.length) {
                return indent('<o/>');
            }
            return indent('<o>') + elements.join('') + indent('</o>');
        }
        
        return rec(obj, 0).substr(1);
   ...