Skip to content

Commit cc8a22c

Browse files
committed
feat: add support for patterns in options object
1 parent dde7d17 commit cc8a22c

File tree

1 file changed

+45
-14
lines changed

1 file changed

+45
-14
lines changed

src/fs/glob.ts

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,56 @@
11
import { glob as tinyGlob, globSync as tinyGlobSync } from "tinyglobby";
22

3-
import type { GlobOptions } from "tinyglobby";
3+
import { isArray, isString, omit } from "@/remeda";
44

5-
export const glob = (
6-
patterns: string | readonly string[],
5+
import type { GlobOptions as TinyGlobOptions } from "tinyglobby";
6+
7+
export type { FileSystemAdapter } from "tinyglobby";
8+
9+
export interface GlobOptions extends Omit<TinyGlobOptions, "patterns"> {
10+
/**
11+
* Provide patterns as the first argument instead.
12+
*/
13+
patterns: string | string[];
14+
}
15+
16+
export { convertPathToPattern, escapePath, isDynamicPattern } from "tinyglobby";
17+
18+
const normalizeArgs = (
19+
patternsOrOptions: string | string[] | GlobOptions,
20+
maybeOptions?: Omit<GlobOptions, "patterns">,
21+
) => {
22+
const patternsAsArgument = isString(patternsOrOptions) || isArray(patternsOrOptions);
23+
24+
const patterns = patternsAsArgument ? patternsOrOptions : patternsOrOptions.patterns;
25+
const options = patternsAsArgument ? maybeOptions || {} : omit(patternsOrOptions, ["patterns"]);
26+
27+
return { patterns, options };
28+
};
29+
30+
export function glob(
31+
patterns: string | string[],
732
options?: Omit<GlobOptions, "patterns">,
8-
): Promise<string[]> =>
9-
tinyGlob(patterns, {
33+
): Promise<string[]>;
34+
export function glob(options: GlobOptions): Promise<string[]>;
35+
export function glob(...args: [any, any?]): Promise<string[]> {
36+
const { patterns, options } = normalizeArgs(...args);
37+
38+
return tinyGlob(patterns, {
1039
expandDirectories: false,
1140
...options,
1241
});
42+
}
43+
44+
export function globSync(
45+
patterns: string | string[],
46+
options?: Omit<GlobOptions, "patterns">,
47+
): string[];
48+
export function globSync(options: GlobOptions): string[];
49+
export function globSync(...args: [any, any?]): string[] {
50+
const { patterns, options } = normalizeArgs(...args);
1351

14-
export const globSync = (
15-
patterns: string | readonly string[],
16-
options: Omit<GlobOptions, "patterns"> = {},
17-
): string[] =>
18-
tinyGlobSync(patterns, {
52+
return tinyGlobSync(patterns, {
1953
expandDirectories: false,
2054
...options,
2155
});
22-
23-
export { convertPathToPattern, escapePath, isDynamicPattern } from "tinyglobby";
24-
25-
export type { FileSystemAdapter, GlobOptions } from "tinyglobby";
56+
}

0 commit comments

Comments
 (0)