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

139 lines (105 loc) 3.85 kB
"use strict"; exports.__esModule = true; var _browserslist = require("browserslist"); var _browserslist2 = _interopRequireDefault(_browserslist); var _semver = require("semver"); var _semver2 = _interopRequireDefault(_semver); var _utils = require("./utils"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var browserNameMap = { android: "android", chrome: "chrome", and_chr: "chrome", edge: "edge", firefox: "firefox", ie: "ie", ios_saf: "ios", safari: "safari" }; var isBrowsersQueryValid = function isBrowsersQueryValid(browsers) { return typeof browsers === "string" || Array.isArray(browsers); }; var semverMin = function semverMin(first, second) { return first && _semver2.default.lt(first, second) ? first : second; }; var getLowestVersions = function getLowestVersions(browsers) { return browsers.reduce(function (all, browser) { var _browser$split = browser.split(" "), browserName = _browser$split[0], browserVersion = _browser$split[1]; var normalizedBrowserName = browserNameMap[browserName]; if (!normalizedBrowserName) { return all; } try { // Browser version can return as "10.0-10.2" var splitVersion = browserVersion.split("-")[0]; var parsedBrowserVersion = (0, _utils.semverify)(splitVersion); all[normalizedBrowserName] = semverMin(all[normalizedBrowserName], parsedBrowserVersion); } catch (e) {} return all; }, {}); }; var outputDecimalWarning = function outputDecimalWarning(decimalTargets) { if (!decimalTargets || !decimalTargets.length) { return; } console.log("Warning, the following targets are using a decimal version:"); console.log(""); decimalTargets.forEach(function (_ref) { var target = _ref.target, value = _ref.value; return console.log(" " + target + ": " + value); }); console.log(""); console.log("We recommend using a string for minor/patch versions to avoid numbers like 6.10"); console.log("getting parsed as 6.1, which can lead to unexpected behavior."); console.log(""); }; var targetParserMap = { __default: function __default(target, value) { return [target, (0, _utils.semverify)(value)]; }, // Parse `node: true` and `node: "current"` to version node: function node(target, value) { var parsed = value === true || value === "current" ? process.versions.node : (0, _utils.semverify)(value); return [target, parsed]; }, // Only valid value for Uglify is `true` uglify: function uglify(target, value) { return [target, value === true]; } }; var getTargets = function getTargets() { var targets = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; var targetOpts = {}; // Parse browsers target via browserslist if (isBrowsersQueryValid(targets.browsers)) { targetOpts = getLowestVersions((0, _browserslist2.default)(targets.browsers)); } // Parse remaining targets var parsed = Object.keys(targets).reduce(function (results, target) { if (target !== "browsers") { var value = targets[target]; // Warn when specifying minor/patch as a decimal if (typeof value === "number" && value % 1 !== 0) { results.decimalWarnings.push({ target: target, value: value }); } // Check if we have a target parser? var parser = targetParserMap[target] || targetParserMap.__default; var _parser = parser(target, value), parsedTarget = _parser[0], parsedValue = _parser[1]; if (parsedValue) { results.targets[parsedTarget] = parsedValue; } } return results; }, { targets: targetOpts, decimalWarnings: [] }); outputDecimalWarning(parsed.decimalWarnings); return parsed.targets; }; exports.default = getTargets;