Download scripts/check-service-naming.mjs from SaylorTwift/kimi-code: direct link, hf CLI and curl.
- Browser
- Download file 2.27 kB
-
https://huggingface.co/SaylorTwift/kimi-code/resolve/main/scripts/check-service-naming.mjs
- Command line
-
hf download hf://SaylorTwift/kimi-code/scripts/check-service-naming.mjs
-
curl -L -o check-service-naming.mjs https://huggingface.co/SaylorTwift/kimi-code/resolve/main/scripts/check-service-naming.mjs
2.27 kB
| /** | |
| * Enforce the VS Code-style service naming convention finalized in | |
| * Phase 5 of the 2026.06.07 services-alignment plan: | |
| * | |
| * - packages/services/src/<domain>/<domain>.ts (+ <domain>Service.ts) | |
| * - packages/kap-server/src/services/<domain>/<domain>.ts (+ <domain>Service.ts) | |
| * | |
| * Domain dirs and service-related .ts files must be camelCase — never | |
| * kebab-case (no `-` in the name). Anything outside these two roots is | |
| * ignored (test fixtures, etc.). | |
| * | |
| * Exit code 0 if clean, 1 with an actionable report otherwise. | |
| */ | |
| import { readdirSync, statSync, existsSync } from "node:fs"; | |
| import { resolve, join, relative } from "node:path"; | |
| const ROOT = resolve(import.meta.dirname, ".."); | |
| const SERVICES_SRC = join(ROOT, "packages/services/src"); | |
| const SERVER_SERVICES_SRC = join(ROOT, "packages/kap-server/src/services"); | |
| /** @type {Array<{ kind: string, path: string }>} */ | |
| const violations = []; | |
| function isKebab(name) { | |
| return name.includes("-"); | |
| } | |
| function report(kind, absPath) { | |
| violations.push({ kind, path: relative(ROOT, absPath) }); | |
| } | |
| /** | |
| * Both roots are organised as <domain>/<files>.ts plus a few top-level files | |
| * (index.ts, module.ts, pinoLoggerService.ts). Flag kebab in dir names and in | |
| * any .ts file directly under a domain dir. | |
| */ | |
| function scanServicesSrc(srcRoot = SERVICES_SRC) { | |
| if (!existsSync(srcRoot)) return; | |
| for (const entry of readdirSync(srcRoot)) { | |
| const abs = join(srcRoot, entry); | |
| const st = statSync(abs); | |
| if (st.isDirectory()) { | |
| if (isKebab(entry)) report("kebab-dir", abs); | |
| for (const f of readdirSync(abs)) { | |
| if (!f.endsWith(".ts")) continue; | |
| if (isKebab(f)) report("kebab-file", join(abs, f)); | |
| } | |
| } else if (entry.endsWith(".ts") && isKebab(entry)) { | |
| report("kebab-file", abs); | |
| } | |
| } | |
| } | |
| scanServicesSrc(); | |
| scanServicesSrc(SERVER_SERVICES_SRC); | |
| if (violations.length > 0) { | |
| console.error( | |
| "Service naming violations (no kebab-case allowed for service files/dirs):" | |
| ); | |
| for (const v of violations) console.error(` [${v.kind}] ${v.path}`); | |
| console.error( | |
| "\nRename to camelCase per VS Code convention: <domain>.ts + <domain>Service.ts." | |
| ); | |
| process.exit(1); | |
| } | |
| console.log("Service naming check passed."); | |