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

79 lines (66 loc) 2.57 kB
'use strict'; // var Construct = require('es-abstract/2019/Construct'); var Get = require('es-abstract/2019/Get'); var Set = require('es-abstract/2019/Set'); var SpeciesConstructor = require('es-abstract/2019/SpeciesConstructor'); var ToLength = require('es-abstract/2019/ToLength'); var ToString = require('es-abstract/2019/ToString'); var Type = require('es-abstract/2019/Type'); var flagsGetter = require('regexp.prototype.flags'); var RegExpStringIterator = require('./helpers/RegExpStringIterator'); var OrigRegExp = RegExp; var CreateRegExpStringIterator = function CreateRegExpStringIterator(R, S, global, fullUnicode) { if (Type(S) !== 'String') { throw new TypeError('"S" value must be a String'); } if (Type(global) !== 'Boolean') { throw new TypeError('"global" value must be a Boolean'); } if (Type(fullUnicode) !== 'Boolean') { throw new TypeError('"fullUnicode" value must be a Boolean'); } var iterator = new RegExpStringIterator(R, S, global, fullUnicode); return iterator; }; var supportsConstructingWithFlags = 'flags' in RegExp.prototype; var constructRegexWithFlags = function constructRegex(C, R) { var matcher; // workaround for older engines that lack RegExp.prototype.flags var flags = 'flags' in R ? Get(R, 'flags') : ToString(flagsGetter(R)); if (supportsConstructingWithFlags && typeof flags === 'string') { matcher = new C(R, flags); } else if (C === OrigRegExp) { // workaround for older engines that can not construct a RegExp with flags matcher = new C(R.source, flags); } else { matcher = new C(R, flags); } return { flags: flags, matcher: matcher }; }; var regexMatchAll = function SymbolMatchAll(string) { var R = this; if (Type(R) !== 'Object') { throw new TypeError('"this" value must be an Object'); } var S = ToString(string); var C = SpeciesConstructor(R, OrigRegExp); var tmp = constructRegexWithFlags(C, R); // var flags = ToString(Get(R, 'flags')); var flags = tmp.flags; // var matcher = Construct(C, [R, flags]); var matcher = tmp.matcher; var lastIndex = ToLength(Get(R, 'lastIndex')); Set(matcher, 'lastIndex', lastIndex, true); var global = flags.indexOf('g') > -1; var fullUnicode = flags.indexOf('u') > -1; return CreateRegExpStringIterator(matcher, S, global, fullUnicode); }; var defineP = Object.defineProperty; var gOPD = Object.getOwnPropertyDescriptor; if (defineP && gOPD) { var desc = gOPD(regexMatchAll, 'name'); if (desc && desc.configurable) { defineP(regexMatchAll, 'name', { value: '[Symbol.matchAll]' }); } } module.exports = regexMatchAll;