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

87 lines (72 loc) 2.85 kB
"use strict"; exports.__esModule = true; exports.default = function (_ref) { var t = _ref.types; function createImportDeclaration(polyfill) { var declar = t.importDeclaration([], t.stringLiteral(polyfill)); declar._blockHoist = 3; return declar; } function createRequireStatement(polyfill) { return t.expressionStatement(t.callExpression(t.identifier("require"), [t.stringLiteral(polyfill)])); } function isRequire(path) { return t.isExpressionStatement(path.node) && t.isCallExpression(path.node.expression) && t.isIdentifier(path.node.expression.callee) && path.node.expression.callee.name === "require" && path.node.expression.arguments.length === 1 && t.isStringLiteral(path.node.expression.arguments[0]) && isPolyfillSource(path.node.expression.arguments[0].value); } function createImport(polyfill, requireType, core) { if (core) { polyfill = "core-js/modules/" + polyfill; } if (requireType === "import") { return createImportDeclaration(polyfill); } else { return createRequireStatement(polyfill); } } function createImports(polyfills, requireType, regenerator) { var imports = polyfills.filter(function (el, i, arr) { return arr.indexOf(el) === i; }).map(function (polyfill) { return createImport(polyfill, requireType, true); }); return [].concat(imports, [regenerator && createImport("regenerator-runtime/runtime", requireType)]).filter(Boolean); } var isPolyfillImport = { ImportDeclaration: function ImportDeclaration(path, state) { if (path.node.specifiers.length === 0 && isPolyfillSource(path.node.source.value)) { this.numPolyfillImports++; if (this.numPolyfillImports > 1) { path.remove(); return; } path.replaceWithMultiple(createImports(state.opts.polyfills, "import", state.opts.regenerator)); } }, Program: function Program(path, state) { var _this = this; if (!state.opts.polyfills) { throw path.buildCodeFrameError("\nThere was an issue in \"babel-preset-env\" such that\nthe \"polyfills\" option was not correctly passed\nto the \"transform-polyfill-require\" plugin\n"); } path.get("body").forEach(function (bodyPath) { if (isRequire(bodyPath)) { _this.numPolyfillImports++; if (_this.numPolyfillImports > 1) { path.remove(); return; } bodyPath.replaceWithMultiple(createImports(state.opts.polyfills, "require", state.opts.regenerator)); } }); } }; return { name: "transform-polyfill-require", visitor: isPolyfillImport, pre: function pre() { this.numPolyfillImports = 0; } }; }; function isPolyfillSource(value) { return value === "babel-polyfill" || value === "core-js"; }