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
|