1
0
Fork 0
mirror of https://github.com/denoland/deno.git synced 2024-11-23 15:16:54 -05:00

Refactoring + Enhance UTs + Enhance doc (denoland/deno_std#230)

Original: e2fd507cfd
This commit is contained in:
Vincent LE GOFF 2019-03-04 19:06:05 +01:00 committed by Ryan Dahl
parent 87d044ec24
commit 2bbde0c226
3 changed files with 70 additions and 11 deletions

View file

@ -1,6 +1,48 @@
import { FileInfo } from "deno";
import { globrex, GlobOptions } from "./globrex.ts";
import { globrex } from "./globrex.ts";
export interface GlobOptions {
// Allow ExtGlob features
extended?: boolean;
// When globstar is true, '/foo/**' is equivelant
// to '/foo/*' when globstar is false.
// Having globstar set to true is the same usage as
// using wildcards in bash
globstar?: boolean;
// be laissez faire about mutiple slashes
strict?: boolean;
// Parse as filepath for extra path related features
filepath?: boolean;
// Flag to use in the generated RegExp
flags?: string;
}
/**
* Generate a regex based on glob pattern and options
* This was meant to be using the the `fs.walk` function
* but can be used anywhere else.
* @param glob - Glob pattern to be used
* @param options - Specific options for the glob pattern
* @returns A RegExp for the glob pattern
* @example
* Looking for all the `ts` files
* ```typescript
* walkSync(".", {
* match: [glob("*.ts")]
* })
* ```
* @example
* Looking for all the `.json` files in any subfolder
* of the `a` folder
* ```typescript
* walkSync(".", {
* match: [glob(join("a", "**", "*.json"),flags: "g",
* extended: true,
* globstar: true
* })]
* })
* ```
*/
export function glob(glob: string, options: GlobOptions = {}): RegExp {
return globrex(glob, options).regex;
}

View file

@ -106,7 +106,6 @@ testWalk(
match: [
glob(join("a", "**", "*.ts"), {
flags: "g",
extended: true,
globstar: true
})
]
@ -116,6 +115,31 @@ testWalk(
}
);
testWalk(
async (d: string) => {
await mkdir(d + "/a");
await mkdir(d + "/a/unicorn");
await mkdir(d + "/a/deno");
await mkdir(d + "/a/raptor");
await touch(d + "/a/raptor/x.ts");
await touch(d + "/a/deno/x.ts");
await touch(d + "/a/unicorn/x.ts");
},
async function globInWalkFolderExtended() {
const arr = await walkArray(".", {
match: [
glob(join("a", "+(raptor|deno)", "*.ts"), {
flags: "g",
extended: true
})
]
});
assert.equal(arr.length, 2);
assert.equal(arr[0], "./a/deno/x.ts");
assert.equal(arr[1], "./a/raptor/x.ts");
}
);
testWalk(
async (d: string) => {
await touch(d + "/x.ts");
@ -124,7 +148,7 @@ testWalk(
},
async function globInWalkWildcardExtension() {
const arr = await walkArray(".", {
match: [glob("x.*", { flags: "g", extended: true, globstar: true })]
match: [glob("x.*", { flags: "g", globstar: true })]
});
console.log(arr);
assert.equal(arr.length, 2);

View file

@ -3,6 +3,7 @@
// Copyright (c) 2018 Terkel Gjervig Nielsen
import * as deno from "deno";
import { GlobOptions } from "./glob.ts";
const isWin = deno.platform.os === "win";
const SEP = isWin ? `\\\\+` : `\\/`;
@ -12,14 +13,6 @@ const WILDCARD = `([^/]*)`;
const GLOBSTAR_SEGMENT = `((?:[^${SEP_ESC}]*(?:${SEP_ESC}|$))*)`;
const WILDCARD_SEGMENT = `([^${SEP_ESC}]*)`;
export interface GlobOptions {
extended?: boolean;
globstar?: boolean;
strict?: boolean;
filepath?: boolean;
flags?: string;
}
/**
* Convert any glob pattern to a JavaScript Regexp object
* @param {String} glob Glob pattern to convert