@quarkly/atomize
Version:
Library for creating atomic react components
64 lines (56 loc) • 1.33 kB
JavaScript
var PAIRED_CHARS = [{
open: '"',
closed: '"'
}, {
open: "'",
closed: "'"
}, {
open: '`',
closed: '`'
}, {
open: '(',
closed: ')'
}, {
open: '[',
closed: ']'
}, {
open: '{',
closed: '}'
}, {
open: '/*',
closed: '*/'
}];
var slash = function slash(string) {
return string.replace(/(.)/g, '\\$1');
};
var charList = PAIRED_CHARS.map(function (_ref) {
var open = _ref.open,
closed = _ref.closed;
return closed ? slash(open) + "|" + slash(closed) : "" + slash(open);
}).join('|');
var getChar = function getChar(_char) {
return PAIRED_CHARS.filter(function (_ref2) {
var open = _ref2.open,
closed = _ref2.closed;
return open === _char || closed === _char;
});
};
var validate = function validate(value) {
var regexp = new RegExp("(" + charList + ")", 'g');
var matches = value.match(regexp);
if (!matches) return true;
var notPaired = matches.reduce(function (list, match) {
var _getChar = getChar(match),
_getChar$ = _getChar[0],
open = _getChar$.open,
closed = _getChar$.closed;
var previous = list[list.length - 1];
if (previous && match === closed && previous === open) {
list.pop();
return list;
}
return [].concat(list, [match]);
}, []);
return notPaired.length === 0;
};
export default validate;