| "use strict"; |
| |
| var slice = require("@sinonjs/commons").prototypes.string.slice; |
| var typeOf = require("@sinonjs/commons").typeOf; |
| var valueToString = require("@sinonjs/commons").valueToString; |
| |
| /** |
| * Creates a string represenation of an iterable object |
| * |
| * @private |
| * @param {object} obj The iterable object to stringify |
| * @returns {string} A string representation |
| */ |
| function iterableToString(obj) { |
| if (typeOf(obj) === "map") { |
| return mapToString(obj); |
| } |
| |
| return genericIterableToString(obj); |
| } |
| |
| /** |
| * Creates a string representation of a Map |
| * |
| * @private |
| * @param {Map} map The map to stringify |
| * @returns {string} A string representation |
| */ |
| function mapToString(map) { |
| var representation = ""; |
| |
| // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods |
| map.forEach(function (value, key) { |
| representation += `[${stringify(key)},${stringify(value)}],`; |
| }); |
| |
| representation = slice(representation, 0, -1); |
| return representation; |
| } |
| |
| /** |
| * Create a string represenation for an iterable |
| * |
| * @private |
| * @param {object} iterable The iterable to stringify |
| * @returns {string} A string representation |
| */ |
| function genericIterableToString(iterable) { |
| var representation = ""; |
| |
| // eslint-disable-next-line @sinonjs/no-prototype-methods/no-prototype-methods |
| iterable.forEach(function (value) { |
| representation += `${stringify(value)},`; |
| }); |
| |
| representation = slice(representation, 0, -1); |
| return representation; |
| } |
| |
| /** |
| * Creates a string representation of the passed `item` |
| * |
| * @private |
| * @param {object} item The item to stringify |
| * @returns {string} A string representation of `item` |
| */ |
| function stringify(item) { |
| return typeof item === "string" ? `'${item}'` : valueToString(item); |
| } |
| |
| module.exports = iterableToString; |