@reliverse/rematch
Version:
@reliverse/rematch is a high-performance minimal glob matcher, with micromatch-level power, zepto-level size, and reliverse-grade dx.
136 lines (135 loc) • 4.33 kB
JavaScript
const WIN_SLASH = "\\\\/";
const WIN_NO_SLASH = `[^${WIN_SLASH}]`;
const DOT_LITERAL = "\\.";
const PLUS_LITERAL = "\\+";
const QMARK_LITERAL = "\\?";
const SLASH_LITERAL = "\\/";
const ONE_CHAR = "(?=.)";
const QMARK = "[^/]";
const END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;
const START_ANCHOR = `(?:^|${SLASH_LITERAL})`;
const DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;
const NO_DOT = `(?!${DOT_LITERAL})`;
const NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;
const NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;
const NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;
const QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;
const STAR = `${QMARK}*?`;
const SEP = "/";
const POSIX_CHARS = {
DOT_LITERAL,
PLUS_LITERAL,
QMARK_LITERAL,
SLASH_LITERAL,
ONE_CHAR,
QMARK,
END_ANCHOR,
DOTS_SLASH,
NO_DOT,
NO_DOTS,
NO_DOT_SLASH,
NO_DOTS_SLASH,
QMARK_NO_DOT,
STAR,
START_ANCHOR,
SEP
};
const WINDOWS_CHARS = {
...POSIX_CHARS,
SLASH_LITERAL: `[${WIN_SLASH}]`,
QMARK: WIN_NO_SLASH,
STAR: `${WIN_NO_SLASH}*?`,
DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,
NO_DOT: `(?!${DOT_LITERAL})`,
NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,
NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,
QMARK_NO_DOT: `[^.${WIN_SLASH}]`,
START_ANCHOR: `(?:^|[${WIN_SLASH}])`,
END_ANCHOR: `(?:[${WIN_SLASH}]|$)`,
SEP: "\\"
};
const POSIX_REGEX_SOURCE = {
alnum: "a-zA-Z0-9",
alpha: "a-zA-Z",
ascii: "\\x00-\\x7F",
blank: " \\t",
cntrl: "\\x00-\\x1F\\x7F",
digit: "0-9",
graph: "\\x21-\\x7E",
lower: "a-z",
print: "\\x20-\\x7E ",
punct: "\\-!\"#$%&'()\\*+,./:;<=>?@[\\]^_`{|}~",
space: " \\t\\r\\n\\v\\f",
upper: "A-Z",
word: "A-Za-z0-9_",
xdigit: "A-Fa-f0-9"
};
export const MAX_LENGTH = 1024 * 64;
export { POSIX_REGEX_SOURCE };
export const REGEX_BACKSLASH = /\\(?![*+?^${}(|)[\]])/g;
export const REGEX_NON_SPECIAL_CHARS = /^[^@![\].,$*+?^{}()|\\/]+/;
export const REGEX_SPECIAL_CHARS = /[-*+?.^${}(|)[\]]/;
export const REGEX_SPECIAL_CHARS_BACKREF = /(\\?)((\W)(\3*))/g;
export const REGEX_SPECIAL_CHARS_GLOBAL = /([-*+?.^${}(|)[\]])/g;
export const REGEX_REMOVE_BACKSLASH = /(?:\[.*?[^\\]\]|\\(?=.))/g;
export const REPLACEMENTS = {
"***": "*",
"**/**": "**",
"**/**/**": "**"
};
export const CHAR_0 = 48;
export const CHAR_9 = 57;
export const CHAR_UPPERCASE_A = 65;
export const CHAR_LOWERCASE_A = 97;
export const CHAR_UPPERCASE_Z = 90;
export const CHAR_LOWERCASE_Z = 122;
export const CHAR_LEFT_PARENTHESES = 40;
export const CHAR_RIGHT_PARENTHESES = 41;
export const CHAR_ASTERISK = 42;
export const CHAR_AMPERSAND = 38;
export const CHAR_AT = 64;
export const CHAR_BACKWARD_SLASH = 92;
export const CHAR_CARRIAGE_RETURN = 13;
export const CHAR_CIRCUMFLEX_ACCENT = 94;
export const CHAR_COLON = 58;
export const CHAR_COMMA = 44;
export const CHAR_DOT = 46;
export const CHAR_DOUBLE_QUOTE = 34;
export const CHAR_EQUAL = 61;
export const CHAR_EXCLAMATION_MARK = 33;
export const CHAR_FORM_FEED = 12;
export const CHAR_FORWARD_SLASH = 47;
export const CHAR_GRAVE_ACCENT = 96;
export const CHAR_HASH = 35;
export const CHAR_HYPHEN_MINUS = 45;
export const CHAR_LEFT_ANGLE_BRACKET = 60;
export const CHAR_LEFT_CURLY_BRACE = 123;
export const CHAR_LEFT_SQUARE_BRACKET = 91;
export const CHAR_LINE_FEED = 10;
export const CHAR_NO_BREAK_SPACE = 160;
export const CHAR_PERCENT = 37;
export const CHAR_PLUS = 43;
export const CHAR_QUESTION_MARK = 63;
export const CHAR_RIGHT_ANGLE_BRACKET = 62;
export const CHAR_RIGHT_CURLY_BRACE = 125;
export const CHAR_RIGHT_SQUARE_BRACKET = 93;
export const CHAR_SEMICOLON = 59;
export const CHAR_SINGLE_QUOTE = 39;
export const CHAR_SPACE = 32;
export const CHAR_TAB = 9;
export const CHAR_UNDERSCORE = 95;
export const CHAR_VERTICAL_LINE = 124;
export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279;
export function extglobChars(chars) {
return {
"!": { type: "negate", open: "(?:(?!(?:", close: `))${chars.STAR})` },
"?": { type: "qmark", open: "(?:", close: ")?" },
"+": { type: "plus", open: "(?:", close: ")+" },
"*": { type: "star", open: "(?:", close: ")*" },
"@": { type: "at", open: "(?:", close: ")" }
};
}
export function globChars(win32) {
return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;
}