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
74 lines (67 loc) • 1.95 kB
JavaScript
import attributes from './attributes';
import condition from './condition';
import explicitRole from './explicit-role';
import implicitRole from './implicit-role';
import nodeName from './node-name';
import properties from './properties';
import semanticRole from './semantic-role';
import AbstractVirtualNode from '../../core/base/virtual-node/abstract-virtual-node';
import { getNodeFromTree, matches } from '../../core/utils';
const matchers = {
attributes,
condition,
explicitRole,
implicitRole,
nodeName,
properties,
semanticRole
};
/**
* Check if a virtual node matches some definition
*
* Note: matches.fromDefinition(vNode, definition) can be indirectly used through
* matches(vNode, definition)
*
* Example:
* ```js
* matches.fromDefinition(vNode, {
* nodeName: ['div', 'span']
* attributes: {
* 'aria-live': 'assertive'
* }
* })
* ```
*
* @deprecated HTMLElement is deprecated, use VirtualNode instead
*
* @private
* @param {HTMLElement|VirtualNode} vNode
* @param {Object|Array<Object>} definition
* @returns {Boolean}
*/
function fromDefinition(vNode, definition) {
if (!(vNode instanceof AbstractVirtualNode)) {
vNode = getNodeFromTree(vNode);
}
if (Array.isArray(definition)) {
return definition.some(definitionItem =>
fromDefinition(vNode, definitionItem)
);
}
if (typeof definition === 'string') {
return matches(vNode, definition);
}
return Object.keys(definition).every(matcherName => {
if (!matchers[matcherName]) {
throw new Error(`Unknown matcher type "${matcherName}"`);
}
// Find the specific matches method to.
// matches.attributes, matches.nodeName, matches.properties, etc.
const matchMethod = matchers[matcherName];
// Find the matcher that goes into the matches method.
// 'div', /^div$/, (str) => str === 'div', etc.
const matcher = definition[matcherName];
return matchMethod(vNode, matcher);
});
}
export default fromDefinition;