123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- const quote_1 = require("./quote");
- const function_1 = require("./function");
- const array_1 = require("./array");
- /**
- * Transform an object into a string.
- */
- exports.objectToString = (value, space, next, key) => {
- if (typeof Buffer === "function" && Buffer.isBuffer(value)) {
- return `new Buffer(${next(value.toString())})`;
- }
- // 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;
- };
- /**
- * Stringify an object of keys and values.
- */
- const rawObjectToString = (obj, indent, next) => {
- 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
|