Skip to content

Commit e84b9cc

Browse files
committed
test: accomdate file names like README.md
1 parent 174a3e6 commit e84b9cc

1 file changed

Lines changed: 19 additions & 3 deletions

File tree

bin/codemods/kebab-case.ts

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,8 @@ export const codemodCamelToKebab = async ({ cwd }: { cwd: string }) => {
6262
const transformed = segments.map((seg) => {
6363
const ext = path.extname(seg)
6464
const name = path.basename(seg, ext)
65+
// skip ALL_CAPS files like README.md, LICENSE, CLAUDE.md
66+
if (/^[A-Z0-9_]+$/.test(name)) return seg
6567
const kebab = name.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()
6668
return `${kebab}${ext}`
6769
})
@@ -80,6 +82,8 @@ export const codemodCamelToKebab = async ({ cwd }: { cwd: string }) => {
8082
.map((seg, i) => {
8183
if (seg === "." || seg === "..") return seg
8284
if (i === 0 && seg.startsWith("@")) return seg
85+
// skip ALL_CAPS segments in imports too
86+
if (/^[A-Z0-9_]+$/.test(seg)) return seg
8387
return seg.replace(/([a-z])([A-Z])/g, "$1-$2").toLowerCase()
8488
})
8589
.join("/")
@@ -94,15 +98,27 @@ export const codemodCamelToKebab = async ({ cwd }: { cwd: string }) => {
9498
const absPath = path.resolve(cwd, relPath)
9599
let content = await fs.promises.readFile(absPath, "utf8")
96100

97-
// a) update real imports: from "…"
101+
// a1) update real imports: from "…"
98102
content = content.replace(
99103
/(from\s+['"`])([^'"`]+)(['"`])/g,
100104
(_full, p1, p2, p3) => `${p1}${kebabifyPath(p2)}${p3}`,
101105
)
102106

103-
// b) update Vitest mock imports: vi.mock("…") & vi.importActual("…")
107+
// a2) update side-effect imports: import "…"
104108
content = content.replace(
105-
/(vi\.(?:mock|importActual)\(\s*['"`])([^'"`]+)(['"`])/g,
109+
/(import\s+['"`])([^'"`]+)(['"`])/g,
110+
(_full, p1, p2, p3) => `${p1}${kebabifyPath(p2)}${p3}`,
111+
)
112+
113+
// a3) update dynamic imports & require: import("…"), require("…")
114+
content = content.replace(
115+
/((?:import|require)\s*\(\s*['"`])([^'"`]+)(['"`]\s*\))/g,
116+
(_full, p1, p2, p3) => `${p1}${kebabifyPath(p2)}${p3}`,
117+
)
118+
119+
// b) update Vitest/Jest mock imports: vi.mock("…"), jest.mock("…")
120+
content = content.replace(
121+
/((?:vi|jest)\.(?:mock|importActual|requireActual)\(\s*['"`])([^'"`]+)(['"`])/g,
106122
(_full, p1, p2, p3) => `${p1}${kebabifyPath(p2)}${p3}`,
107123
)
108124

0 commit comments

Comments
 (0)