You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							91 lines
						
					
					
						
							3.1 KiB
						
					
					
				
			
		
		
	
	
							91 lines
						
					
					
						
							3.1 KiB
						
					
					
				"use strict"; | 
						|
Object.defineProperty(exports, "__esModule", { value: true }); | 
						|
exports.objectToString = void 0; | 
						|
const quote_1 = require("./quote"); | 
						|
const function_1 = require("./function"); | 
						|
const array_1 = require("./array"); | 
						|
/** | 
						|
 * Transform an object into a string. | 
						|
 */ | 
						|
const objectToString = (value, space, next, key) => { | 
						|
    // Support buffer in all environments. | 
						|
    if (typeof Buffer === "function" && Buffer.isBuffer(value)) { | 
						|
        return `Buffer.from(${next(value.toString("base64"))}, 'base64')`; | 
						|
    } | 
						|
    // Support `global` under test environments that don't print `[object global]`. | 
						|
    if (typeof global === "object" && value === global) { | 
						|
        return globalToString(value, space, next, key); | 
						|
    } | 
						|
    // Use the internal object string to select stringify method. | 
						|
    const toString = OBJECT_TYPES[Object.prototype.toString.call(value)]; | 
						|
    return toString ? toString(value, space, next, key) : undefined; | 
						|
}; | 
						|
exports.objectToString = objectToString; | 
						|
/** | 
						|
 * Stringify an object of keys and values. | 
						|
 */ | 
						|
const rawObjectToString = (obj, indent, next, key) => { | 
						|
    const eol = indent ? "\n" : ""; | 
						|
    const space = indent ? " " : ""; | 
						|
    // Iterate over object keys and concat string together. | 
						|
    const values = Object.keys(obj) | 
						|
        .reduce(function (values, key) { | 
						|
        const fn = obj[key]; | 
						|
        const result = next(fn, key); | 
						|
        // Omit `undefined` object entries. | 
						|
        if (result === undefined) | 
						|
            return values; | 
						|
        // String format the value data. | 
						|
        const value = result.split("\n").join(`\n${indent}`); | 
						|
        // Skip `key` prefix for function parser. | 
						|
        if (function_1.USED_METHOD_KEY.has(fn)) { | 
						|
            values.push(`${indent}${value}`); | 
						|
            return values; | 
						|
        } | 
						|
        values.push(`${indent}${quote_1.quoteKey(key, next)}:${space}${value}`); | 
						|
        return values; | 
						|
    }, []) | 
						|
        .join(`,${eol}`); | 
						|
    // Avoid new lines in an empty object. | 
						|
    if (values === "") | 
						|
        return "{}"; | 
						|
    return `{${eol}${values}${eol}}`; | 
						|
}; | 
						|
/** | 
						|
 * Stringify global variable access. | 
						|
 */ | 
						|
const globalToString = (value, space, next) => { | 
						|
    return `Function(${next("return this")})()`; | 
						|
}; | 
						|
/** | 
						|
 * Convert JavaScript objects into strings. | 
						|
 */ | 
						|
const OBJECT_TYPES = { | 
						|
    "[object Array]": array_1.arrayToString, | 
						|
    "[object Object]": rawObjectToString, | 
						|
    "[object Error]": (error, space, next) => { | 
						|
        return `new Error(${next(error.message)})`; | 
						|
    }, | 
						|
    "[object Date]": (date) => { | 
						|
        return `new Date(${date.getTime()})`; | 
						|
    }, | 
						|
    "[object String]": (str, space, next) => { | 
						|
        return `new String(${next(str.toString())})`; | 
						|
    }, | 
						|
    "[object Number]": (num) => { | 
						|
        return `new Number(${num})`; | 
						|
    }, | 
						|
    "[object Boolean]": (bool) => { | 
						|
        return `new Boolean(${bool})`; | 
						|
    }, | 
						|
    "[object Set]": (set, space, next) => { | 
						|
        return `new Set(${next(Array.from(set))})`; | 
						|
    }, | 
						|
    "[object Map]": (map, space, next) => { | 
						|
        return `new Map(${next(Array.from(map))})`; | 
						|
    }, | 
						|
    "[object RegExp]": String, | 
						|
    "[object global]": globalToString, | 
						|
    "[object Window]": globalToString, | 
						|
}; | 
						|
//# sourceMappingURL=object.js.map
 |