diff --git a/CHANGELOG.md b/CHANGELOG.md index 2cb98fd22..965a34f19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ # Unreleased +### Bug Fixes + +- If `src/` and `src/x` are specified as entry points, `src/` will no longer be ignored, #2121. + ## v0.23.22 (2022-12-11) ### Features diff --git a/src/lib/utils/fs.ts b/src/lib/utils/fs.ts index e761b9f30..256e2419f 100644 --- a/src/lib/utils/fs.ts +++ b/src/lib/utils/fs.ts @@ -148,13 +148,14 @@ export function glob( do { const dir = dirs.shift()!; + if (options?.includeDirectories && mini.match(dir.join("/"))) { + result.push(dir.join("/")); + } + for (const child of fs.readdirSync(dir.join("/"), { withFileTypes: true, })) { - if ( - child.isFile() || - (options?.includeDirectories && child.isDirectory()) - ) { + if (child.isFile()) { const childPath = [...dir, child.name].join("/"); if (mini.match(childPath)) { result.push(childPath); diff --git a/src/test/utils/fs.test.ts b/src/test/utils/fs.test.ts new file mode 100644 index 000000000..0b8bca05e --- /dev/null +++ b/src/test/utils/fs.test.ts @@ -0,0 +1,41 @@ +import { Project, tempdirProject } from "@typestrong/fs-fixture-builder"; +import { deepStrictEqual as equal } from "assert"; +import { basename } from "path"; +import { glob } from "../../lib/utils/fs"; + +describe("fs.ts", () => { + let fix: Project; + beforeEach(() => { + fix = tempdirProject(); + }); + + afterEach(() => { + fix.rm(); + }); + + describe("glob", () => { + it("handles root match", () => { + fix.write(); + + const result = glob(fix.cwd, fix.cwd, { includeDirectories: true }); + equal(result, [fix.cwd]); + }); + + it("Handles basic globbing", () => { + fix.addFile("test.ts"); + fix.addFile("test2.ts"); + fix.addFile("a.ts"); + fix.addFile("b.js"); + fix.write(); + + equal( + glob(`${fix.cwd}/*.ts`, fix.cwd).map((f) => basename(f)), + ["a.ts", "test.ts", "test2.ts"] + ); + equal( + glob(`**/test*.ts`, fix.cwd).map((f) => basename(f)), + ["test.ts", "test2.ts"] + ); + }); + }); +});