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

119 lines (100 loc) 2.68 kB
"use strict"; var t = require("@babel/types"); var convertComments = require("./convertComments"); module.exports = function(ast, traverse, code) { var state = { source: code }; // Monkey patch visitor keys in order to be able to traverse the estree nodes t.VISITOR_KEYS.Property = t.VISITOR_KEYS.ObjectProperty; t.VISITOR_KEYS.MethodDefinition = [ "key", "value", "decorators", "returnType", "typeParameters", ]; traverse(ast, astTransformVisitor, null, state); delete t.VISITOR_KEYS.Property; delete t.VISITOR_KEYS.MethodDefinition; }; var astTransformVisitor = { noScope: true, enter(path) { var node = path.node; // private var to track original node type node._babelType = node.type; if (node.innerComments) { node.trailingComments = node.innerComments; delete node.innerComments; } if (node.trailingComments) { convertComments(node.trailingComments); } if (node.leadingComments) { convertComments(node.leadingComments); } }, exit(path) { var node = path.node; if (path.isJSXText()) { node.type = "Literal"; } if ( path.isRestElement() && path.parent && path.parent.type === "ObjectPattern" ) { node.type = "ExperimentalRestProperty"; } if ( path.isSpreadElement() && path.parent && path.parent.type === "ObjectExpression" ) { node.type = "ExperimentalSpreadProperty"; } if (path.isTypeParameter()) { node.type = "Identifier"; node.typeAnnotation = node.bound; delete node.bound; } // flow: prevent "no-undef" // for "Component" in: "let x: React.Component" if (path.isQualifiedTypeIdentifier()) { delete node.id; } // for "b" in: "var a: { b: Foo }" if (path.isObjectTypeProperty()) { delete node.key; } // for "indexer" in: "var a: {[indexer: string]: number}" if (path.isObjectTypeIndexer()) { delete node.id; } // for "param" in: "var a: { func(param: Foo): Bar };" if (path.isFunctionTypeParam()) { delete node.name; } // modules if (path.isImportDeclaration()) { delete node.isType; } // template string range fixes if (path.isTemplateLiteral()) { for (var j = 0; j < node.quasis.length; j++) { var q = node.quasis[j]; q.range[0] -= 1; if (q.tail) { q.range[1] += 1; } else { q.range[1] += 2; } q.loc.start.column -= 1; if (q.tail) { q.loc.end.column += 1; } else { q.loc.end.column += 2; } } } }, };