Blame view

node_modules/normalize-range/index.js 1.42 KB
aaac7fed   liuqimichale   add
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
  'use strict';
  module.exports = {
    wrap: wrapRange,
    limit: limitRange,
    validate: validateRange,
    test: testRange,
    curry: curry,
    name: name
  };
  
  function wrapRange(min, max, value) {
    var maxLessMin = max - min;
    return ((value - min) % maxLessMin + maxLessMin) % maxLessMin + min;
  }
  
  function limitRange(min, max, value) {
    return Math.max(min, Math.min(max, value));
  }
  
  function validateRange(min, max, value, minExclusive, maxExclusive) {
    if (!testRange(min, max, value, minExclusive, maxExclusive)) {
      throw new Error(value + ' is outside of range [' + min + ',' + max + ')');
    }
    return value;
  }
  
  function testRange(min, max, value, minExclusive, maxExclusive) {
    return !(
         value < min ||
         value > max ||
         (maxExclusive && (value === max)) ||
         (minExclusive && (value === min))
    );
  }
  
  function name(min, max, minExcl, maxExcl) {
    return (minExcl ? '(' : '[') + min + ',' + max + (maxExcl ? ')' : ']');
  }
  
  function curry(min, max, minExclusive, maxExclusive) {
    var boundNameFn = name.bind(null, min, max, minExclusive, maxExclusive);
    return {
      wrap: wrapRange.bind(null, min, max),
      limit: limitRange.bind(null, min, max),
      validate: function(value) {
        return validateRange(min, max, value, minExclusive, maxExclusive);
      },
      test: function(value) {
        return testRange(min, max, value, minExclusive, maxExclusive);
      },
      toString: boundNameFn,
      name: boundNameFn
    };
  }