criticizer
Version:
Linting for Angular applications, following angular.io/styleguide.
41 lines (34 loc) • 1.02 kB
text/typescript
export const SelectorValidator = {
attribute(selector: string): boolean {
return selector.length !== 0;
},
element(selector: string): boolean {
return selector !== null;
},
kebabCase(selector: string): boolean {
return /^[a-z0-9\-]+\-[a-z0-9\-]+$/.test(selector);
},
camelCase(selector: string): boolean {
return /^[a-zA-Z0-9\[\]]+$/.test(selector);
},
prefix(prefix: string, selectorType: string): Function {
const regex = new RegExp(`^\\[?(${prefix})`);
return (selector: string) => {
if (!prefix) {
return true;
}
if (!regex.test(selector)) {
return false;
} else {
const suffix = selector.replace(regex, '');
if (selectorType === 'camelCase') {
return !suffix || suffix[0] === suffix[0].toUpperCase();
} else if (selectorType === 'kebab-case') {
return !suffix || suffix[0] === '-';
} else {
throw new Error('Invalid selector type');
}
}
};
}
};