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

63 lines (50 loc) 1.61 kB
'use strict'; const semver = require('semver'); const flags = require('./flags.json'); const getDescriptors = require('object.getownpropertydescriptors'); const replaceUnderscoresRegex = /_/g; const leadingDashesRegex = /^--?/; const trailingValuesRegex = /=.*$/; const replace = Function.call.bind(String.prototype.replace); const has = Function.call.bind(Set.prototype.has); const test = Function.call.bind(RegExp.prototype.test); const [allowedNodeEnvironmentFlags, detectedSemverRange] = Object.keys( flags ).reduce( (acc, range) => acc || (semver.satisfies(process.version, range) ? [flags[range], range] : acc), null ); const trimLeadingDashes = flag => replace(flag, leadingDashesRegex, ''); class NodeEnvironmentFlagsSet extends Set { constructor(...args) { super(...args); this.add = () => this; } delete() { return false; } clear() {} has(key) { if (typeof key === 'string') { key = replace(key, replaceUnderscoresRegex, '-'); if (test(leadingDashesRegex, key)) { key = replace(key, trailingValuesRegex, ''); return has(this, key); } return has(nodeFlags, key); } return false; } } const nodeFlags = Object.defineProperties( new Set(allowedNodeEnvironmentFlags.map(trimLeadingDashes)), getDescriptors(Set.prototype) ); Object.freeze(NodeEnvironmentFlagsSet.prototype.constructor); Object.freeze(NodeEnvironmentFlagsSet.prototype); exports.allowedNodeEnvironmentFlags = Object.freeze( new NodeEnvironmentFlagsSet(allowedNodeEnvironmentFlags) ); exports.detectedSemverRange = detectedSemverRange;