UNPKG

luhn-generator

Version:

A generator of numbers that passes the validation of Luhn algorithm or Luhn formula, also known as the 'modulus 10' or 'mod 10' algorithm

108 lines (103 loc) 2.7 kB
'use strict'; var GetIntrinsic = require('es-abstract/GetIntrinsic'); var callBound = require('es-abstract/helpers/callBound'); var inspect = require('object-inspect'); var $TypeError = GetIntrinsic('%TypeError%'); var $WeakMap = GetIntrinsic('%WeakMap%', true); var $Map = GetIntrinsic('%Map%', true); var $push = callBound('Array.prototype.push'); var $weakMapGet = callBound('WeakMap.prototype.get', true); var $weakMapSet = callBound('WeakMap.prototype.set', true); var $weakMapHas = callBound('WeakMap.prototype.has', true); var $mapGet = callBound('Map.prototype.get', true); var $mapSet = callBound('Map.prototype.set', true); var $mapHas = callBound('Map.prototype.has', true); var objectGet = function (objects, key) { // eslint-disable-line consistent-return for (var i = 0; i < objects.length; i += 1) { if (objects[i].key === key) { return objects[i].value; } } }; var objectSet = function (objects, key, value) { for (var i = 0; i < objects.length; i += 1) { if (objects[i].key === key) { objects[i].value = value; // eslint-disable-line no-param-reassign return; } } $push(objects, { key: key, value: value }); }; var objectHas = function (objects, key) { for (var i = 0; i < objects.length; i += 1) { if (objects[i].key === key) { return true; } } return false; }; module.exports = function getSideChannel() { var $wm; var $m; var $o; var channel = { assert: function (key) { if (!channel.has(key)) { throw new $TypeError('Side channel does not contain ' + inspect(key)); } }, get: function (key) { // eslint-disable-line consistent-return if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapGet($wm, key); } } else if ($Map) { if ($m) { return $mapGet($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return objectGet($o, key); } } }, has: function (key) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if ($wm) { return $weakMapHas($wm, key); } } else if ($Map) { if ($m) { return $mapHas($m, key); } } else { if ($o) { // eslint-disable-line no-lonely-if return objectHas($o, key); } } return false; }, set: function (key, value) { if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { if (!$wm) { $wm = new $WeakMap(); } $weakMapSet($wm, key, value); } else if ($Map) { if (!$m) { $m = new $Map(); } $mapSet($m, key, value); } else { if (!$o) { $o = []; } objectSet($o, key, value); } } }; return channel; };