chore(shared): add EXCLUDED_DIRS constant for recursive FS scans
Introduces a frozen Set<string> of directory basenames (node_modules, .git, dist, build, .next, .sisyphus, .omx, .turbo, coverage, out, .cache, .vscode-test, target, .local-ignore) that callers performing recursive filesystem scans should skip. This is shared infrastructure for upcoming fixes in rules-injector, command-discovery, and claude-code-command-loader that currently descend into node_modules and other junk directories, causing slow plugin init and slow edit loops when the plugin is launched in-tree.
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
import { describe, expect, test } from "bun:test"
|
||||
import { EXCLUDED_DIRS } from "./excluded-dirs"
|
||||
import { EXCLUDED_DIRS as EXCLUDED_DIRS_FROM_BARREL } from "."
|
||||
|
||||
describe("EXCLUDED_DIRS", () => {
|
||||
test("contains the well-known junk directories we never want to recurse into", () => {
|
||||
// given
|
||||
const expected = [
|
||||
"node_modules",
|
||||
".git",
|
||||
"dist",
|
||||
"build",
|
||||
".next",
|
||||
".sisyphus",
|
||||
".omx",
|
||||
".turbo",
|
||||
"coverage",
|
||||
"out",
|
||||
".cache",
|
||||
".vscode-test",
|
||||
"target",
|
||||
".local-ignore",
|
||||
]
|
||||
|
||||
// when / then
|
||||
for (const name of expected) {
|
||||
expect(EXCLUDED_DIRS.has(name)).toBe(true)
|
||||
}
|
||||
})
|
||||
|
||||
test("does not contain commonly-wanted project directories", () => {
|
||||
// given
|
||||
const shouldBeAllowed = ["src", "lib", "tests", "test", "docs", ".github", ".cursor", ".claude", ".opencode"]
|
||||
|
||||
// when / then
|
||||
for (const name of shouldBeAllowed) {
|
||||
expect(EXCLUDED_DIRS.has(name)).toBe(false)
|
||||
}
|
||||
})
|
||||
|
||||
test("is frozen so consumers cannot mutate shared state", () => {
|
||||
// given / when / then
|
||||
expect(Object.isFrozen(EXCLUDED_DIRS)).toBe(true)
|
||||
})
|
||||
|
||||
test("is re-exported from the shared barrel", () => {
|
||||
// given / when / then
|
||||
expect(EXCLUDED_DIRS_FROM_BARREL).toBe(EXCLUDED_DIRS)
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,18 @@
|
||||
const EXCLUDED_DIR_NAMES = [
|
||||
"node_modules",
|
||||
".git",
|
||||
"dist",
|
||||
"build",
|
||||
".next",
|
||||
".sisyphus",
|
||||
".omx",
|
||||
".turbo",
|
||||
"coverage",
|
||||
"out",
|
||||
".cache",
|
||||
".vscode-test",
|
||||
"target",
|
||||
".local-ignore",
|
||||
] as const
|
||||
|
||||
export const EXCLUDED_DIRS: ReadonlySet<string> = Object.freeze(new Set<string>(EXCLUDED_DIR_NAMES))
|
||||
@@ -79,3 +79,4 @@ export * from "./log-legacy-plugin-startup-warning"
|
||||
export * from "./task-system-enabled"
|
||||
export * from "./parse-tools-config"
|
||||
export { parseModelString } from "./model-string-parser"
|
||||
export { EXCLUDED_DIRS } from "./excluded-dirs"
|
||||
|
||||
Reference in New Issue
Block a user