aboutsummaryrefslogtreecommitdiff
path: root/node_modules/normalize-range/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/normalize-range/index.js')
-rw-r--r--node_modules/normalize-range/index.js54
1 files changed, 54 insertions, 0 deletions
diff --git a/node_modules/normalize-range/index.js b/node_modules/normalize-range/index.js
new file mode 100644
index 0000000..d5a2ea8
--- /dev/null
+++ b/node_modules/normalize-range/index.js
@@ -0,0 +1,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
+ };
+}