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

118 lines (93 loc) 3.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = traverse; Object.defineProperty(exports, "NodePath", { enumerable: true, get: function () { return _path.default; } }); Object.defineProperty(exports, "Scope", { enumerable: true, get: function () { return _scope.default; } }); Object.defineProperty(exports, "Hub", { enumerable: true, get: function () { return _hub.default; } }); exports.visitors = void 0; var _context = _interopRequireDefault(require("./context")); var visitors = _interopRequireWildcard(require("./visitors")); exports.visitors = visitors; var t = _interopRequireWildcard(require("@babel/types")); var cache = _interopRequireWildcard(require("./cache")); var _path = _interopRequireDefault(require("./path")); var _scope = _interopRequireDefault(require("./scope")); var _hub = _interopRequireDefault(require("./hub")); function _getRequireWildcardCache() { if (typeof WeakMap !== "function") return null; var cache = new WeakMap(); _getRequireWildcardCache = function () { return cache; }; return cache; } function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function traverse(parent, opts, scope, state, parentPath) { if (!parent) return; if (!opts) opts = {}; if (!opts.noScope && !scope) { if (parent.type !== "Program" && parent.type !== "File") { throw new Error("You must pass a scope and parentPath unless traversing a Program/File. " + `Instead of that you tried to traverse a ${parent.type} node without ` + "passing scope and parentPath."); } } if (!t.VISITOR_KEYS[parent.type]) { return; } visitors.explode(opts); traverse.node(parent, opts, scope, state, parentPath); } traverse.visitors = visitors; traverse.verify = visitors.verify; traverse.explode = visitors.explode; traverse.cheap = function (node, enter) { return t.traverseFast(node, enter); }; traverse.node = function (node, opts, scope, state, parentPath, skipKeys) { const keys = t.VISITOR_KEYS[node.type]; if (!keys) return; const context = new _context.default(scope, opts, state, parentPath); for (const key of keys) { if (skipKeys && skipKeys[key]) continue; if (context.visit(node, key)) return; } }; traverse.clearNode = function (node, opts) { t.removeProperties(node, opts); cache.path.delete(node); }; traverse.removeProperties = function (tree, opts) { t.traverseFast(tree, traverse.clearNode, opts); return tree; }; function hasDenylistedType(path, state) { if (path.node.type === state.type) { state.has = true; path.stop(); } } traverse.hasType = function (tree, type, denylistTypes) { if (denylistTypes == null ? void 0 : denylistTypes.includes(tree.type)) return false; if (tree.type === type) return true; const state = { has: false, type: type }; traverse(tree, { noScope: true, denylist: denylistTypes, enter: hasDenylistedType }, null, state); return state.has; }; traverse.cache = cache;