-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathassertRank.js
More file actions
61 lines (47 loc) · 1.37 KB
/
assertRank.js
File metadata and controls
61 lines (47 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
"use strict";
exports.assertRank = assertRank;
exports.rank = rank;
exports.rankCheck = rankCheck;
exports.equalCheck = equalCheck;
var RankToken = function() {
var RankToken = function RankToken(base, assert, equal) {
this.base = base
this.assert = assert
this.equal = equal
this.is = this.is.bind(this)
this.isEqual = this.isEqual.bind(this)
};
Object.defineProperties(RankToken.prototype, {
is: {
writable: true,
value: function(value) { return this.assert(this.base, value) }
},
isEqual: {
writable: true,
value: function(value) { return this.equal(this.base, value) }
}
});
return RankToken;
}();
exports.RankToken = RankToken;
function assertRank (base) {
return new RankToken(base, rankCheck, equalCheck)
}
function rank (value) {
// minimal assertions to detect all native ES5 types
return [
(typeof value === 'boolean')|0,
(typeof value === 'number')|0,
(typeof value === 'string')|0,
(typeof value === 'function')|0,
(value === void 0)|0,
(value === null)|0,
(value === value)|0, // 0 if NaN
(value instanceof Array)|0,
(value instanceof RegExp)|0,
(value instanceof Date)|0,
(value instanceof Error)|0,
].join('')
}
function rankCheck (val0, val1) { return !!(rank(val0) === rank(val1)) }
function equalCheck (val0, val1) { return !!(val0 === val1) }