Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor TypeScript definition to CommonJS compatible export #115

Merged
merged 1 commit into from
Apr 1, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
239 changes: 131 additions & 108 deletions index.d.ts
Original file line number Diff line number Diff line change
@@ -1,123 +1,146 @@
import {IOptions as NodeGlobOptions} from 'glob';
import {Options as FastGlobOptions} from 'fast-glob';

export type ExpandDirectoriesOption =
| boolean
| ReadonlyArray<string>
| {files: ReadonlyArray<string>; extensions: ReadonlyArray<string>};
declare namespace globby {
type ExpandDirectoriesOption =
| boolean
| ReadonlyArray<string>
| {files: ReadonlyArray<string>; extensions: ReadonlyArray<string>};

export interface GlobbyOptions extends FastGlobOptions {
interface GlobbyOptions extends FastGlobOptions {
/**
If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `Object` with `files` and `extensions` like in the example below.

Note that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.

@default true

@example
```
import globby = require('globby');

(async () => {
const paths = await globby('images', {
expandDirectories: {
files: ['cat', 'unicorn', '*.jpg'],
extensions: ['png']
}
});
console.log(paths);
//=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
})();
```
*/
readonly expandDirectories?: ExpandDirectoriesOption;

/**
Respect ignore patterns in `.gitignore` files that apply to the globbed files.

@default false
*/
readonly gitignore?: boolean;
}

interface GlobTask {
readonly pattern: string;
readonly options: globby.GlobbyOptions;
}

interface GitignoreOptions {
readonly cwd?: string;
readonly ignore?: ReadonlyArray<string>;
}

type FilterFunction = (path: string) => boolean;
}

interface Gitignore {
/**
* If set to `true`, `globby` will automatically glob directories for you. If you define an `Array` it will only glob files that matches the patterns inside the `Array`. You can also define an `Object` with `files` and `extensions` like in the example below.
*
* Note that if you set this option to `false`, you won't get back matched directories unless you set `onlyFiles: false`.
*
* @default true
*
* @example
*
* import globby from 'globby';
*
* (async () => {
* const paths = await globby('images', {
* expandDirectories: {
* files: ['cat', 'unicorn', '*.jpg'],
* extensions: ['png']
* }
* });
* console.log(paths);
* //=> ['cat.png', 'unicorn.png', 'cow.jpg', 'rainbow.jpg']
* })();
*/
readonly expandDirectories?: ExpandDirectoriesOption;
`.gitignore` files matched by the ignore config are not used for the resulting filter function.

@returns A `Promise` for a filter function indicating whether a given path is ignored via a `.gitignore` file.

@example
```
import {gitignore} from 'globby';

(async () => {
const isIgnored = await gitignore();
console.log(isIgnored('some/file'));
})();
```
*/
(options?: globby.GitignoreOptions): Promise<globby.FilterFunction>;

/**
* Respect ignore patterns in `.gitignore` files that apply to the globbed files.
*
* @default false
*/
readonly gitignore?: boolean;
@returns A filter function indicating whether a given path is ignored via a `.gitignore` file.
*/
sync(options?: globby.GitignoreOptions): globby.FilterFunction;
}

/**
* @param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
* @param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
* @returns A `Promise<Array>` of matching paths.
*/
export default function globby(
patterns: string | ReadonlyArray<string>,
options?: GlobbyOptions
): Promise<string[]>;

/**
* @param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
* @param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
* @returns An `Array` of matching paths.
*/
export function sync(
patterns: string | ReadonlyArray<string>,
options?: GlobbyOptions
): string[];

export interface GlobTask {
readonly pattern: string;
readonly options: GlobbyOptions;
}
declare const globby: {
/**
@param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
@returns A `Promise<Array>` of matching paths.

/**
* Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
*
* @param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
* @param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
* @returns An `Array<Object>` in the format `{ pattern: string, options: Object }`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
*/
export function generateGlobTasks(
patterns: string | ReadonlyArray<string>,
options?: GlobbyOptions
): GlobTask[];

/**
* Note that the options affect the results. If `noext: true` is set, then `+(a|b)` will not be considered a magic pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`, then that is considered magical, unless `nobrace: true` is set.
*
* This function is backed by [`node-glob`](https://github.com/isaacs/node-glob#globhasmagicpattern-options).
*
* @param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
* @param options - See the [`node-glob` options](https://github.com/isaacs/node-glob#globhasmagicpattern-options).
* @returns A boolean of whether there are any special glob characters in the `patterns`.
*/
export function hasMagic(
patterns: string | ReadonlyArray<string>,
options?: NodeGlobOptions
): boolean;

export interface GitignoreOptions {
readonly cwd?: string;
readonly ignore?: ReadonlyArray<string>;
}
@example
```
import globby = require('globby');

export type FilterFunction = (path: string) => boolean;
(async () => {
const paths = await globby(['*', '!cake']);

export interface Gitignore {
(options?: GitignoreOptions): Promise<FilterFunction>;
console.log(paths);
//=> ['unicorn', 'rainbow']
})();
```
*/
(
patterns: string | ReadonlyArray<string>,
options?: globby.GlobbyOptions
): Promise<string[]>;

/**
* @returns A filter function indicating whether a given path is ignored via a `.gitignore` file.
*/
sync(options?: GitignoreOptions): FilterFunction;
}
@param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
@returns An `Array` of matching paths.
*/
sync(
patterns: string | ReadonlyArray<string>,
options?: globby.GlobbyOptions
): string[];

/**
Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.

@param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
@param options - See the [`fast-glob` options](https://github.com/mrmlnc/fast-glob#options-1) in addition to the ones in this package.
@returns An `Array<Object>` in the format `{ pattern: string, options: Object }`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
*/
generateGlobTasks(
patterns: string | ReadonlyArray<string>,
options?: globby.GlobbyOptions
): globby.GlobTask[];

/**
Note that the options affect the results. If `noext: true` is set, then `+(a|b)` will not be considered a magic pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`, then that is considered magical, unless `nobrace: true` is set.

This function is backed by [`node-glob`](https://github.com/isaacs/node-glob#globhasmagicpattern-options).

@param patterns - See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
@param options - See the [`node-glob` options](https://github.com/isaacs/node-glob#globhasmagicpattern-options).
@returns A boolean of whether there are any special glob characters in the `patterns`.
*/
hasMagic(
patterns: string | ReadonlyArray<string>,
options?: NodeGlobOptions
): boolean;

readonly gitignore: Gitignore;

// TODO: Remove this for the next major release
default: typeof globby;
};

/**
* `.gitignore` files matched by the ignore config are not used for the resulting filter function.
*
* @returns A `Promise` for a filter function indicating whether a given path is ignored via a `.gitignore` file.
*
* @example
*
* import {gitignore} from 'globby';
*
* (async () => {
* const isIgnored = await gitignore();
* console.log(isIgnored('some/file'));
* })();
*/
export const gitignore: Gitignore;
export = globby;
1 change: 1 addition & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ const globby = (patterns, options) => {
};

module.exports = globby;
// TODO: Remove this for the next major release
module.exports.default = globby;

module.exports.sync = (patterns, options) => {
Expand Down
5 changes: 3 additions & 2 deletions index.test-d.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import {expectType} from 'tsd-check';
import globby, {
import {expectType} from 'tsd';
import globby = require('.');
import {
GlobTask,
FilterFunction,
sync as globbySync,
Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
},
"scripts": {
"bench": "npm update glob-stream fast-glob && matcha bench.js",
"test": "xo && ava && tsd-check"
"test": "xo && ava && tsd"
},
"files": [
"index.js",
Expand Down Expand Up @@ -58,20 +58,20 @@
"dependencies": {
"@types/glob": "^7.1.1",
"array-union": "^1.0.2",
"dir-glob": "^2.2.1",
"dir-glob": "^2.2.2",
"fast-glob": "^2.2.6",
"glob": "^7.1.3",
"ignore": "^4.0.3",
"pify": "^4.0.1",
"slash": "^2.0.0"
},
"devDependencies": {
"ava": "^1.2.1",
"ava": "^1.4.1",
"glob-stream": "^6.1.0",
"globby": "sindresorhus/globby#master",
"matcha": "^0.7.0",
"rimraf": "^2.6.3",
"tsd-check": "^0.3.0",
"tsd": "^0.7.1",
"xo": "^0.24.0"
},
"xo": {
Expand Down