UNPKG

foop

Version:

interfaces that describe their intentions.

62 lines (59 loc) 4.25 kB
var isStringPrimitive = require('../is/stringPrimitive') var isSymbol = require('../is/symbol') var isZeroish = require('../is/zeroish') var isMinusInfinity = require('../is/negativeInfinity') /** * Converts `value` to a string key if it's not a string or symbol. * Use non-numeric keys to prevent V8 performance issues * * @memberOf cast * @since 5.0.0-beta.6 * @alias toProperty * @alias toProp * * @param {*} value The value to inspect. * @return {string|symbol} Returns the key. * * {@link https://github.com/facebook/react/pull/7232 react-tokey} * {@link https://tc39.github.io/ecma262/#sec-topropertykey emca-topropertykey} * {@link https://tc39.github.io/ecma262/#sec-canonicalnumericindexstring emca-canonicalnumericindexstring} * @see {@link emca-canonicalnumericindexstring} * @see {@link emca-topropertykey} * @see {@link react-tokey} * * @example * * const symba = Symbol.for('symba') * toKey(symba) * //=> Symbol.for('symba') * * toKey(0) * //=> '0' * * toKey('0') * //=> '0' * * toKey(-Infinity) * //=> '-0' * * toKey(-0) * //=> '-0' * * toKey(null) * //=> 'null' * * */ function toKey(value) { if (isStringPrimitive(value) || isSymbol(value)) { return value } else if (isZeroish(value) && isMinusInfinity(value)) { return '-0' } else { return '' + value } } module.exports = toKey //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9LZXkuanMiLCJzb3VyY2VzIjpbInRvS2V5LmpzIl0sInNvdXJjZXNDb250ZW50IjpbImNvbnN0IGlzU3RyaW5nUHJpbWl0aXZlID0gcmVxdWlyZSgnLi4vaXMvc3RyaW5nUHJpbWl0aXZlJylcbmNvbnN0IGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaXMvc3ltYm9sJylcbmNvbnN0IGlzWmVyb2lzaCA9IHJlcXVpcmUoJy4uL2lzL3plcm9pc2gnKVxuY29uc3QgaXNNaW51c0luZmluaXR5ID0gcmVxdWlyZSgnLi4vaXMvbmVnYXRpdmVJbmZpbml0eScpXG5cbi8qKlxuICogQ29udmVydHMgYHZhbHVlYCB0byBhIHN0cmluZyBrZXkgaWYgaXQncyBub3QgYSBzdHJpbmcgb3Igc3ltYm9sLlxuICogVXNlIG5vbi1udW1lcmljIGtleXMgdG8gcHJldmVudCBWOCBwZXJmb3JtYW5jZSBpc3N1ZXNcbiAqXG4gKiBAbWVtYmVyT2YgY2FzdFxuICogQHNpbmNlIDUuMC4wLWJldGEuNlxuICogQGFsaWFzIHRvUHJvcGVydHlcbiAqIEBhbGlhcyB0b1Byb3BcbiAqXG4gKiBAcGFyYW0geyp9IHZhbHVlIFRoZSB2YWx1ZSB0byBpbnNwZWN0LlxuICogQHJldHVybiB7c3RyaW5nfHN5bWJvbH0gUmV0dXJucyB0aGUga2V5LlxuICpcbiAqIHtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvcHVsbC83MjMyIHJlYWN0LXRva2V5fVxuICoge0BsaW5rIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLXRvcHJvcGVydHlrZXkgZW1jYS10b3Byb3BlcnR5a2V5fVxuICoge0BsaW5rIGh0dHBzOi8vdGMzOS5naXRodWIuaW8vZWNtYTI2Mi8jc2VjLWNhbm9uaWNhbG51bWVyaWNpbmRleHN0cmluZyBlbWNhLWNhbm9uaWNhbG51bWVyaWNpbmRleHN0cmluZ31cbiAqIEBzZWUge0BsaW5rIGVtY2EtY2Fub25pY2FsbnVtZXJpY2luZGV4c3RyaW5nfVxuICogQHNlZSB7QGxpbmsgZW1jYS10b3Byb3BlcnR5a2V5fVxuICogQHNlZSB7QGxpbmsgcmVhY3QtdG9rZXl9XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiAgICBjb25zdCBzeW1iYSA9IFN5bWJvbC5mb3IoJ3N5bWJhJylcbiAqICAgIHRvS2V5KHN5bWJhKVxuICogICAgLy89PiBTeW1ib2wuZm9yKCdzeW1iYScpXG4gKlxuICogICAgdG9LZXkoMClcbiAqICAgIC8vPT4gJzAnXG4gKlxuICogICAgdG9LZXkoJzAnKVxuICogICAgLy89PiAnMCdcbiAqXG4gKiAgICB0b0tleSgtSW5maW5pdHkpXG4gKiAgICAvLz0+ICctMCdcbiAqXG4gKiAgICB0b0tleSgtMClcbiAqICAgIC8vPT4gJy0wJ1xuICpcbiAqICAgIHRvS2V5KG51bGwpXG4gKiAgICAvLz0+ICdudWxsJ1xuICpcbiAqXG4gKi9cbmZ1bmN0aW9uIHRvS2V5KHZhbHVlKSB7XG4gIGlmIChpc1N0cmluZ1ByaW1pdGl2ZSh2YWx1ZSkgfHwgaXNTeW1ib2wodmFsdWUpKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cbiAgZWxzZSBpZiAoaXNaZXJvaXNoKHZhbHVlKSAmJiBpc01pbnVzSW5maW5pdHkodmFsdWUpKSB7XG4gICAgcmV0dXJuICctMCdcbiAgfVxuICBlbHNlIHtcbiAgICByZXR1cm4gJycgKyB2YWx1ZVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdG9LZXlcbiJdLCJuYW1lcyI6WyJjb25zdCJdLCJtYXBwaW5ncyI6IkFBQUFBLEdBQUssQ0FBQyxpQkFBaUIsR0FBRyxPQUFPLENBQUMsdUJBQXVCLENBQUM7QUFDMURBLEdBQUssQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztBQUN4Q0EsR0FBSyxDQUFDLFNBQVMsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDO0FBQzFDQSxHQUFLLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Q3pELFNBQVMsS0FBSyxDQUFDLEtBQUssRUFBRTtFQUNwQixJQUFJLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUMvQyxPQUFPLEtBQUs7R0FDYjtPQUNJLElBQUksU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtJQUNuRCxPQUFPLElBQUk7R0FDWjtPQUNJO0lBQ0gsT0FBTyxFQUFFLEdBQUcsS0FBSztHQUNsQjtDQUNGOztBQUVELE1BQU0sQ0FBQyxPQUFPLEdBQUcsS0FBSzsifQ==