UNPKG

foop

Version:

interfaces that describe their intentions.

93 lines (80 loc) 7.52 kB
// const curry = require('../fp/curry') /** * @desc typeof x === type * @since 5.0.0-beta.6 * @name tagEq * @alias isTagEq * @alias tagEquals * @alias isA * * @curried 2 * * @param {string} type to match * @param {string} x object to match `typeof x === type` * @return {boolean} * * {@link https://github.com/andrewplummer/Sugar/blob/master/lib/common.js#L66 sugar-tags} * {@link https://github.com/jasmine/jasmine.github.io/blob/master/lib/jasmine-1.3.1/jasmine.js#L171 jasmine-isA} * {@link https://github.com/gcanti/tcomb/blob/master/lib/isType.js tcomb-istype} * {@link https://github.com/yesvods/sanife/blob/master/src/type.js#L3 sanife-type} * @see {@link sanife-type} * @see {@link tcomb-istype} * @see {@link jasmine-isA} * @see {@link sugar-tags} * * @example * isType('string')('eh') //=> true * */ var symbolToString = require('../symbols/toString') var symbolToStringTag = require('../symbols/toStringTag') var toStringTag = require('./toS') var hasIn = require('./hasIn') // const hasOwnProperty = require('../util/hasOwnProperty') // if (value === null || value === undefined) { // return value === undefined ? '[object Undefined]' : '[object Null]' // } function getForSymbol(symbolToGet, value) { // typeof value[symbolToString] === 'function' ? value[symbolToString]() : value[symbolToString] var atSymbol = value[symbolToString] // @NOTE not sure if we really need this if (typeof atSymbol === 'function') { atSymbol = atSymbol() } if (typeof atSymbol === 'string') { return atSymbol } return undefined } /** * The base implementation of `getTag` without fallbacks for buggy environments. * * @curried 2 * * @param {*} x The value to query. * @param {*} value getTag(x) === value * @return {string} Returns the `toStringTag`. */ module.exports = function tagEquals(x, value) { var type if (value === undefined) { type = '[object Undefined]' } else if (value === null) { type = '[object Null]' } else if (hasIn(symbolToStringTag, value)) { var atSymbol = getForSymbol(symbolToStringTag, value) if (atSymbol !== undefined) { type = atSymbol } } // @NOTE not sure if we would really need to call a toString symbol // ...when there is toStringTag? // else if (hasIn(symbolToString, value)) {} if (type === null || typeof type !== 'string') { type = toStringTag(value) } return type === value } // module.exports = curry(2, tagEquals) // const xIsType = flip2(isType) //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFnRXEuanMiLCJzb3VyY2VzIjpbInRhZ0VxLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8vIGNvbnN0IGN1cnJ5ID0gcmVxdWlyZSgnLi4vZnAvY3VycnknKVxuXG4vKipcbiAqIEBkZXNjIHR5cGVvZiB4ID09PSB0eXBlXG4gKiBAc2luY2UgNS4wLjAtYmV0YS42XG4gKiBAbmFtZSB0YWdFcVxuICogQGFsaWFzIGlzVGFnRXFcbiAqIEBhbGlhcyB0YWdFcXVhbHNcbiAqIEBhbGlhcyBpc0FcbiAqXG4gKiBAY3VycmllZCAyXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSB0eXBlIHRvIG1hdGNoXG4gKiBAcGFyYW0gIHtzdHJpbmd9IHggb2JqZWN0IHRvIG1hdGNoIGB0eXBlb2YgeCA9PT0gdHlwZWBcbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKlxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmRyZXdwbHVtbWVyL1N1Z2FyL2Jsb2IvbWFzdGVyL2xpYi9jb21tb24uanMjTDY2IHN1Z2FyLXRhZ3N9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL2phc21pbmUvamFzbWluZS5naXRodWIuaW8vYmxvYi9tYXN0ZXIvbGliL2phc21pbmUtMS4zLjEvamFzbWluZS5qcyNMMTcxIGphc21pbmUtaXNBfVxuICoge0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9nY2FudGkvdGNvbWIvYmxvYi9tYXN0ZXIvbGliL2lzVHlwZS5qcyB0Y29tYi1pc3R5cGV9XG4gKiB7QGxpbmsgaHR0cHM6Ly9naXRodWIuY29tL3llc3ZvZHMvc2FuaWZlL2Jsb2IvbWFzdGVyL3NyYy90eXBlLmpzI0wzIHNhbmlmZS10eXBlfVxuICogQHNlZSB7QGxpbmsgc2FuaWZlLXR5cGV9XG4gKiBAc2VlIHtAbGluayB0Y29tYi1pc3R5cGV9XG4gKiBAc2VlIHtAbGluayBqYXNtaW5lLWlzQX1cbiAqIEBzZWUge0BsaW5rIHN1Z2FyLXRhZ3N9XG4gKlxuICogQGV4YW1wbGVcbiAqICAgIGlzVHlwZSgnc3RyaW5nJykoJ2VoJykgLy89PiB0cnVlXG4gKlxuICovXG5jb25zdCBzeW1ib2xUb1N0cmluZyA9IHJlcXVpcmUoJy4uL3N5bWJvbHMvdG9TdHJpbmcnKVxuY29uc3Qgc3ltYm9sVG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9zeW1ib2xzL3RvU3RyaW5nVGFnJylcbmNvbnN0IHRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi90b1MnKVxuY29uc3QgaGFzSW4gPSByZXF1aXJlKCcuL2hhc0luJylcblxuLy8gY29uc3QgaGFzT3duUHJvcGVydHkgPSByZXF1aXJlKCcuLi91dGlsL2hhc093blByb3BlcnR5Jylcbi8vIGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4vLyAgIHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID8gJ1tvYmplY3QgVW5kZWZpbmVkXScgOiAnW29iamVjdCBOdWxsXSdcbi8vIH1cblxuZnVuY3Rpb24gZ2V0Rm9yU3ltYm9sKHN5bWJvbFRvR2V0LCB2YWx1ZSkge1xuICAvLyB0eXBlb2YgdmFsdWVbc3ltYm9sVG9TdHJpbmddID09PSAnZnVuY3Rpb24nID8gdmFsdWVbc3ltYm9sVG9TdHJpbmddKCkgOiB2YWx1ZVtzeW1ib2xUb1N0cmluZ11cbiAgbGV0IGF0U3ltYm9sID0gdmFsdWVbc3ltYm9sVG9TdHJpbmddXG5cbiAgLy8gQE5PVEUgbm90IHN1cmUgaWYgd2UgcmVhbGx5IG5lZWQgdGhpc1xuICBpZiAodHlwZW9mIGF0U3ltYm9sID09PSAnZnVuY3Rpb24nKSB7XG4gICAgYXRTeW1ib2wgPSBhdFN5bWJvbCgpXG4gIH1cbiAgaWYgKHR5cGVvZiBhdFN5bWJvbCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gYXRTeW1ib2xcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWRcbn1cblxuLyoqXG4gKiBUaGUgYmFzZSBpbXBsZW1lbnRhdGlvbiBvZiBgZ2V0VGFnYCB3aXRob3V0IGZhbGxiYWNrcyBmb3IgYnVnZ3kgZW52aXJvbm1lbnRzLlxuICpcbiAqIEBjdXJyaWVkIDJcbiAqXG4gKiBAcGFyYW0geyp9IHggVGhlIHZhbHVlIHRvIHF1ZXJ5LlxuICogQHBhcmFtIHsqfSB2YWx1ZSBnZXRUYWcoeCkgPT09IHZhbHVlXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFJldHVybnMgdGhlIGB0b1N0cmluZ1RhZ2AuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdGFnRXF1YWxzKHgsIHZhbHVlKSB7XG4gIGxldCB0eXBlXG5cbiAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICB0eXBlID0gJ1tvYmplY3QgVW5kZWZpbmVkXSdcbiAgfVxuICBlbHNlIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHR5cGUgPSAnW29iamVjdCBOdWxsXSdcbiAgfVxuICBlbHNlIGlmIChoYXNJbihzeW1ib2xUb1N0cmluZ1RhZywgdmFsdWUpKSB7XG4gICAgbGV0IGF0U3ltYm9sID0gZ2V0Rm9yU3ltYm9sKHN5bWJvbFRvU3RyaW5nVGFnLCB2YWx1ZSlcbiAgICBpZiAoYXRTeW1ib2wgIT09IHVuZGVmaW5lZCkgdHlwZSA9IGF0U3ltYm9sXG4gIH1cblxuICAvLyBATk9URSBub3Qgc3VyZSBpZiB3ZSB3b3VsZCByZWFsbHkgbmVlZCB0byBjYWxsIGEgdG9TdHJpbmcgc3ltYm9sXG4gIC8vICAgICAgIC4uLndoZW4gdGhlcmUgaXMgdG9TdHJpbmdUYWc/XG4gIC8vIGVsc2UgaWYgKGhhc0luKHN5bWJvbFRvU3RyaW5nLCB2YWx1ZSkpIHt9XG5cbiAgaWYgKHR5cGUgPT09IG51bGwgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgdHlwZSA9IHRvU3RyaW5nVGFnKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHR5cGUgPT09IHZhbHVlXG59XG5cbi8vIG1vZHVsZS5leHBvcnRzID0gY3VycnkoMiwgdGFnRXF1YWxzKVxuXG4vLyBjb25zdCB4SXNUeXBlID0gZmxpcDIoaXNUeXBlKVxuIl0sIm5hbWVzIjpbImNvbnN0IiwibGV0Il0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE2QkFBLEdBQUssQ0FBQyxjQUFjLEdBQUcsT0FBTyxDQUFDLHFCQUFxQixDQUFDO0FBQ3JEQSxHQUFLLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixDQUFDO0FBQzNEQSxHQUFLLENBQUMsV0FBVyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDcENBLEdBQUssQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQzs7Ozs7OztBQU9oQyxTQUFTLFlBQVksQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFOztFQUV4Q0MsR0FBRyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDOzs7RUFHcEMsSUFBSSxPQUFPLFFBQVEsS0FBSyxVQUFVLEVBQUU7SUFDbEMsUUFBUSxHQUFHLFFBQVEsRUFBRTtHQUN0QjtFQUNELElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxFQUFFO0lBQ2hDLE9BQU8sUUFBUTtHQUNoQjs7RUFFRCxPQUFPLFNBQVM7Q0FDakI7Ozs7Ozs7Ozs7O0FBV0QsTUFBTSxDQUFDLE9BQU8sR0FBRyxTQUFTLFNBQVMsQ0FBQyxDQUFDLEVBQUUsS0FBSyxFQUFFO0VBQzVDQSxHQUFHLENBQUMsSUFBSTs7RUFFUixJQUFJLEtBQUssS0FBSyxTQUFTLEVBQUU7SUFDdkIsSUFBSSxHQUFHLG9CQUFvQjtHQUM1QjtPQUNJLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtJQUN2QixJQUFJLEdBQUcsZUFBZTtHQUN2QjtPQUNJLElBQUksS0FBSyxDQUFDLGlCQUFpQixFQUFFLEtBQUssQ0FBQyxFQUFFO0lBQ3hDQSxHQUFHLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQyxpQkFBaUIsRUFBRSxLQUFLLENBQUM7SUFDckQsSUFBSSxRQUFRLEtBQUssU0FBUyxFQUFFLEVBQUEsSUFBSSxHQUFHLFFBQVEsRUFBQTtHQUM1Qzs7Ozs7O0VBTUQsSUFBSSxJQUFJLEtBQUssSUFBSSxJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsRUFBRTtJQUM3QyxJQUFJLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztHQUMxQjs7RUFFRCxPQUFPLElBQUksS0FBSyxLQUFLO0NBQ3RCOzs7OzsifQ==