123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- "use strict";
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.Builder = void 0;
- const path_1 = require("path");
- const api_builder_1 = require("./api-builder");
- var pm = null;
- /* c8 ignore next 6 */
- try {
- require.resolve("picomatch");
- pm = require("picomatch");
- }
- catch (_e) {
- // do nothing
- }
- class Builder {
- globCache = {};
- options = {
- maxDepth: Infinity,
- suppressErrors: true,
- pathSeparator: path_1.sep,
- filters: [],
- };
- globFunction;
- constructor(options) {
- this.options = { ...this.options, ...options };
- this.globFunction = this.options.globFunction;
- }
- group() {
- this.options.group = true;
- return this;
- }
- withPathSeparator(separator) {
- this.options.pathSeparator = separator;
- return this;
- }
- withBasePath() {
- this.options.includeBasePath = true;
- return this;
- }
- withRelativePaths() {
- this.options.relativePaths = true;
- return this;
- }
- withDirs() {
- this.options.includeDirs = true;
- return this;
- }
- withMaxDepth(depth) {
- this.options.maxDepth = depth;
- return this;
- }
- withMaxFiles(limit) {
- this.options.maxFiles = limit;
- return this;
- }
- withFullPaths() {
- this.options.resolvePaths = true;
- this.options.includeBasePath = true;
- return this;
- }
- withErrors() {
- this.options.suppressErrors = false;
- return this;
- }
- withSymlinks({ resolvePaths = true } = {}) {
- this.options.resolveSymlinks = true;
- this.options.useRealPaths = resolvePaths;
- return this.withFullPaths();
- }
- withAbortSignal(signal) {
- this.options.signal = signal;
- return this;
- }
- normalize() {
- this.options.normalizePath = true;
- return this;
- }
- filter(predicate) {
- this.options.filters.push(predicate);
- return this;
- }
- onlyDirs() {
- this.options.excludeFiles = true;
- this.options.includeDirs = true;
- return this;
- }
- exclude(predicate) {
- this.options.exclude = predicate;
- return this;
- }
- onlyCounts() {
- this.options.onlyCounts = true;
- return this;
- }
- crawl(root) {
- return new api_builder_1.APIBuilder(root || ".", this.options);
- }
- withGlobFunction(fn) {
- // cast this since we don't have the new type params yet
- this.globFunction = fn;
- return this;
- }
- /**
- * @deprecated Pass options using the constructor instead:
- * ```ts
- * new fdir(options).crawl("/path/to/root");
- * ```
- * This method will be removed in v7.0
- */
- /* c8 ignore next 4 */
- crawlWithOptions(root, options) {
- this.options = { ...this.options, ...options };
- return new api_builder_1.APIBuilder(root || ".", this.options);
- }
- glob(...patterns) {
- if (this.globFunction) {
- return this.globWithOptions(patterns);
- }
- return this.globWithOptions(patterns, ...[{ dot: true }]);
- }
- globWithOptions(patterns, ...options) {
- const globFn = (this.globFunction || pm);
- /* c8 ignore next 5 */
- if (!globFn) {
- throw new Error('Please specify a glob function to use glob matching.');
- }
- var isMatch = this.globCache[patterns.join("\0")];
- if (!isMatch) {
- isMatch = globFn(patterns, ...options);
- this.globCache[patterns.join("\0")] = isMatch;
- }
- this.options.filters.push((path) => isMatch(path));
- return this;
- }
- }
- exports.Builder = Builder;
|