UNPKG

foop

Version:

interfaces that describe their intentions.

63 lines (60 loc) 5.57 kB
var EMPTY_STRING = require('../native/EMPTY_STRING') var mapArray = require('../loop/map/mapArray') var symbolToString = require('../symbols/toString') var isSymbol = require('../is/symbol') var isNill = require('../is/nullOrUndefined') var isArray = require('../is/array') var isString = require('../is/stringPrimitive') var castToKey = require('./toKey') /** * Converts `value` to a string. An empty string is returned for `null` * and `undefined` values. The sign of `-0` is preserved. * @memberOf cast * @since 5.0.0-beta.6 * * @param {*} value The value to convert. * @return {string} Returns the converted string. * * @fork 4.0.0 * @category Lang * * @see http://people.mozilla.org/~jorendorff/es6-draft.html#sec-tostring * @see https://github.com/svaarala/duktape/issues/204 * @see https://github.com/substack/json-stable-stringify * @see https://github.com/nickyout/fast-stable-stringify * @see https://hacks.mozilla.org/2012/12/performance-with-javascript-string-objects/ * * @example * * toString(null) * //=> '' * * toString(-0) * //=> '-0' * * toString([1, 2, 3]) * //=> '1,2,3' * */ function castToString(value) { if (isNill(value)) { return EMPTY_STRING } // Exit early for strings to avoid a performance hit in some environments. else if (isString(value)) { return value } else if (isArray(value)) { // Recursively convert values (susceptible to call stack limits). return ("" + (mapArray(value, function (other) { return (isNill(other) ? other : castToString(other)); }))) } else if (isSymbol(value)) { return symbolToString.call(value) } // e.g. isNumber else { return castToKey(value) } } module.exports = castToString //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9TdHJpbmcuanMiLCJzb3VyY2VzIjpbInRvU3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IEVNUFRZX1NUUklORyA9IHJlcXVpcmUoJy4uL25hdGl2ZS9FTVBUWV9TVFJJTkcnKVxuY29uc3QgbWFwQXJyYXkgPSByZXF1aXJlKCcuLi9sb29wL21hcC9tYXBBcnJheScpXG5jb25zdCBzeW1ib2xUb1N0cmluZyA9IHJlcXVpcmUoJy4uL3N5bWJvbHMvdG9TdHJpbmcnKVxuY29uc3QgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pcy9zeW1ib2wnKVxuY29uc3QgaXNOaWxsID0gcmVxdWlyZSgnLi4vaXMvbnVsbE9yVW5kZWZpbmVkJylcbmNvbnN0IGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pcy9hcnJheScpXG5jb25zdCBpc1N0cmluZyA9IHJlcXVpcmUoJy4uL2lzL3N0cmluZ1ByaW1pdGl2ZScpXG5jb25zdCBjYXN0VG9LZXkgPSByZXF1aXJlKCcuL3RvS2V5JylcblxuLyoqXG4gKiBDb252ZXJ0cyBgdmFsdWVgIHRvIGEgc3RyaW5nLiBBbiBlbXB0eSBzdHJpbmcgaXMgcmV0dXJuZWQgZm9yIGBudWxsYFxuICogYW5kIGB1bmRlZmluZWRgIHZhbHVlcy4gVGhlIHNpZ24gb2YgYC0wYCBpcyBwcmVzZXJ2ZWQuXG4gKiBAbWVtYmVyT2YgY2FzdFxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsdWUgVGhlIHZhbHVlIHRvIGNvbnZlcnQuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIGNvbnZlcnRlZCBzdHJpbmcuXG4gKlxuICogQGZvcmsgNC4wLjBcbiAqIEBjYXRlZ29yeSBMYW5nXG4gKlxuICogQHNlZSBodHRwOi8vcGVvcGxlLm1vemlsbGEub3JnL35qb3JlbmRvcmZmL2VzNi1kcmFmdC5odG1sI3NlYy10b3N0cmluZ1xuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vc3ZhYXJhbGEvZHVrdGFwZS9pc3N1ZXMvMjA0XG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zdWJzdGFjay9qc29uLXN0YWJsZS1zdHJpbmdpZnlcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL25pY2t5b3V0L2Zhc3Qtc3RhYmxlLXN0cmluZ2lmeVxuICogQHNlZSBodHRwczovL2hhY2tzLm1vemlsbGEub3JnLzIwMTIvMTIvcGVyZm9ybWFuY2Utd2l0aC1qYXZhc2NyaXB0LXN0cmluZy1vYmplY3RzL1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogICB0b1N0cmluZyhudWxsKVxuICogICAvLz0+ICcnXG4gKlxuICogICB0b1N0cmluZygtMClcbiAqICAgLy89PiAnLTAnXG4gKlxuICogICB0b1N0cmluZyhbMSwgMiwgM10pXG4gKiAgIC8vPT4gJzEsMiwzJ1xuICpcbiAqL1xuZnVuY3Rpb24gY2FzdFRvU3RyaW5nKHZhbHVlKSB7XG4gIGlmIChpc05pbGwodmFsdWUpKSB7XG4gICAgcmV0dXJuIEVNUFRZX1NUUklOR1xuICB9XG4gIC8vIEV4aXQgZWFybHkgZm9yIHN0cmluZ3MgdG8gYXZvaWQgYSBwZXJmb3JtYW5jZSBoaXQgaW4gc29tZSBlbnZpcm9ubWVudHMuXG4gIGVsc2UgaWYgKGlzU3RyaW5nKHZhbHVlKSkge1xuICAgIHJldHVybiB2YWx1ZVxuICB9XG4gIGVsc2UgaWYgKGlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUmVjdXJzaXZlbHkgY29udmVydCB2YWx1ZXMgKHN1c2NlcHRpYmxlIHRvIGNhbGwgc3RhY2sgbGltaXRzKS5cbiAgICByZXR1cm4gYCR7bWFwQXJyYXkodmFsdWUsIG90aGVyID0+XG4gICAgICAoaXNOaWxsKG90aGVyKSA/IG90aGVyIDogY2FzdFRvU3RyaW5nKG90aGVyKSkpfWBcbiAgfVxuICBlbHNlIGlmIChpc1N5bWJvbCh2YWx1ZSkpIHtcbiAgICByZXR1cm4gc3ltYm9sVG9TdHJpbmcuY2FsbCh2YWx1ZSlcbiAgfVxuICAvLyBlLmcuIGlzTnVtYmVyXG4gIGVsc2Uge1xuICAgIHJldHVybiBjYXN0VG9LZXkodmFsdWUpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjYXN0VG9TdHJpbmdcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0FBQ3REQSxHQUFLLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQztBQUNoREEsR0FBSyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUM7QUFDckRBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDL0NBLEdBQUssQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztBQUN0Q0EsR0FBSyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDakRBLEdBQUssQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQ3BDLFNBQVMsWUFBWSxDQUFDLEtBQUssRUFBRTtFQUMzQixJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNqQixPQUFPLFlBQVk7R0FDcEI7O09BRUksSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7SUFDeEIsT0FBTyxLQUFLO0dBQ2I7T0FDSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTs7SUFFdkIsT0FBTyxDQUFBLEVBQUMsSUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLFVBQUEsS0FBSyxDQUFBLENBQUMsQUFDOUIsU0FBQSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUEsQ0FBQyxDQUFBLENBQUU7R0FDbkQ7T0FDSSxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUN4QixPQUFPLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO0dBQ2xDOztPQUVJO0lBQ0gsT0FBTyxTQUFTLENBQUMsS0FBSyxDQUFDO0dBQ3hCO0NBQ0Y7O0FBRUQsTUFBTSxDQUFDLE9BQU8sR0FBRyxZQUFZOyJ9