diff --git a/src/api/functions/push-directory.ts b/src/api/functions/push-directory.ts index 6541299..5aaf565 100644 --- a/src/api/functions/push-directory.ts +++ b/src/api/functions/push-directory.ts @@ -6,6 +6,23 @@ export type PushDirectoryFunction = ( filters?: FilterPredicate[] ) => void; +function pushDirectoryWithRelativePath(root: string): PushDirectoryFunction { + return function (directoryPath, paths) { + paths.push((directoryPath || ".").substring(root.length)); + }; +} + +function pushDirectoryFilterWithRelativePath( + root: string +): PushDirectoryFunction { + return function (directoryPath, paths, filters) { + const relativePath = directoryPath.substring(root.length); + if (filters!.every((filter) => filter(relativePath, true))) { + paths.push(relativePath); + } + }; +} + const pushDirectory: PushDirectoryFunction = (directoryPath, paths) => { paths.push(directoryPath || "."); }; @@ -22,9 +39,13 @@ const pushDirectoryFilter: PushDirectoryFunction = ( const empty: PushDirectoryFunction = () => {}; -export function build(options: Options): PushDirectoryFunction { - const { includeDirs, filters } = options; +export function build(root: string, options: Options): PushDirectoryFunction { + const { includeDirs, filters, relativePaths } = options; if (!includeDirs) return empty; + if (relativePaths) + return filters && filters.length + ? pushDirectoryFilterWithRelativePath(root) + : pushDirectoryWithRelativePath(root); return filters && filters.length ? pushDirectoryFilter : pushDirectory; } diff --git a/src/api/walker.ts b/src/api/walker.ts index fdc9e3d..338316d 100644 --- a/src/api/walker.ts +++ b/src/api/walker.ts @@ -54,7 +54,7 @@ export class Walker { * by the javascript engine so there's no function call overhead (in most cases). */ this.joinPath = joinPath.build(this.root, options); - this.pushDirectory = pushDirectory.build(options); + this.pushDirectory = pushDirectory.build(this.root, options); this.pushFile = pushFile.build(options); this.getArray = getArray.build(options); this.groupFiles = groupFiles.build(options);