UNPKG

@surface/path-matcher

Version:

Provides path matching capabilities.

67 lines (50 loc) 5.56 kB
# Provides path matching capabilities Supported Syntax | Pattern | Description | |--------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | * | Matches any string, including the null string. | | ** | Matches all files and zero or more directories and subdirectories. | | […] | Matches any one of the enclosed characters. A pair of characters separated by a hyphen denotes a range expression (`[A-Za-z]`). If the first character following the `[` is a `!` or a `^` then any character not enclosed is matched. | | ? | Matches any single character. | | ?(pattern-list) | Matches zero or one occurrence of the given patterns. | | *(pattern-list) | Matches zero or more occurrences of the given patterns. | | +(pattern-list) | Matches one or more occurrences of the given patterns. | | @(pattern-list) | Matches one of the given patterns. | | !(pattern-list) | Matches anything except one of the given patterns. | | {a,[x..y[..incr]]} | A brace expansion is contained between a pair of braces `{}`. It can be a list of comma-separated items or a range specifier. Spaces are not permitted inside the braces unless you’ve wrapped the string in quotation marks `"`. | | ! | When used at start, all pattern is negated | | "..." or '...' | Escapes any character between quotes. | ## Examples ### instance ```ts import PathMatcher from "@surface/path-matcher"; const matcher = new PathMatcher("/packages/**/*.{ts,js}", "/modules", "!/packages/node_modules"); console.log(matcher.paths) // ["/packages", "/modules"]; console.log(matcher.negatedPaths) // ["/packages/node_modules"]; console.log(matcher.isMatch("/packages/foo/index.js")); // true console.log(matcher.isMatch("/packages/foo/bar/index.ts")); // true console.log(matcher.isMatch("/modules/index.js")); // true console.log(matcher.isMatch("/lib/foo/baz/index.js")); // false console.log(matcher.isMatch("/packages/node_modules/foo/bar/index.ts")); // false ``` ### makeRegex ```ts import PathMatcher from "@surface/path-matcher"; const regex = PathMatcher.makeRegex("/packages/**/*.{ts,js}"); console.log(regex.test("/lib/foo/baz/index.js")); // false console.log(regex.test("/packages/foo/index.js")); // true console.log(regex.test("/packages/foo/bar/index.ts")); // true ``` ### split ```ts import PathMatcher from "@surface/path-matcher"; console.log(PathMatcher.split("/foo/**/baz.{ts,js}")); // { base: "/foo", pattern: "**/baz.{ts,js}" } console.log(PathMatcher.split("/foo/../baz.{ts,js}")); // { base: "/foo/..", pattern: "baz.{ts,js}" } ``` ### resolve ```ts import PathMatcher from "@surface/path-matcher"; console.log(PathMatcher.resolve("/foo/bar", "./baz.{ts,js}")); // { base: "/foo/bar", pattern: "baz.{ts,js}", fullPattern: "/foo/bar/baz.{ts,js}" } console.log(PathMatcher.resolve("/foo/bar", "../baz.{ts,js}")); // { base: "/foo", pattern: "baz.{ts,js}", fullPattern: "/foo/baz.{ts,js}" } console.log(PathMatcher.resolve("/foo/bar", "!../baz.{ts,js}")); // { base: "/foo", pattern: "!baz.{ts,js}", fullPattern: "!/foo/baz.{ts,js}" }" ```