foop
Version:
interfaces that describe their intentions.
93 lines (80 loc) • 7.52 kB
JavaScript
// 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==