/** * Specificity arrays always have 4 numbers (integers) for quick comparison * comparing from left to right, the next number only has to be checked if * two numbers of the same index are equal. */ export type SpecificityArray = [number, number, number, number]; /** * A result of parsing a selector into an array of parts. * Calculating a specificity array is a matter of summing * over all the parts and adding the values to the right * bucket in a specificity array. * * @interface Part */ export interface Part { selector: string; type: 'a' | 'b' | 'c'; index: number; length: number; } /** * Returned by the calculate function. Represents the results * of parsing and calculating the specificity of a selector. * * @interface Specificity */ export interface Specificity { selector: string; specificity: string; specificityArray: SpecificityArray; parts: Array; } /** * Calculates the specificity for the given selector string. * If the string contains a comma, each selector will be parsed * separately. * * @returns A list of specificity objects one for each selector in the * selector string. */ export function calculate(selector: string): Array; /** * Compares two selectors. If a string, the string cannot contain a comma. * * @returns A value less than 0 if selector a is less specific than selector b. * A value more than 0 if selector a is more specific than selector b. * 0 if the two selectors have the same specificity. */ export function compare(a: string | SpecificityArray, b: string | SpecificityArray): -1 | 0 | 1;