Files
Edu/scripts/arch-scan/query.ts
SpecialX 2ba4250165
Some checks failed
CI Go / test (push) Has been cancelled
CI Proto / lint (push) Has been cancelled
CI Python / test (push) Has been cancelled
CI TypeScript / test (push) Has been cancelled
feat(p1): complete P1 foundation stage
- monorepo: pnpm workspace + go.work + pyproject.toml + commitlint/husky
- infra: docker-compose (minimal + full profiles) + init-sql + prometheus
- arch-scan: multi-language scanner skeleton (TS/Go/Python/Proto)
- shared-proto: buf v2 + classes.proto (ClassService CRUD contract)
- api-gateway: Go/Gin + JWT HS256 auth + reverse proxy + request ID
- classes: NestJS golden template (error system + observability + middleware + CRUD + tests)
- teacher-portal: Next.js + paper-feel UI design system
- CI/CD: 4 workflows (go/ts/py/proto)
- docs: migration guide + project_rules + coding-standards + git-workflow + ui-design-system + 004 + 9 module READMEs + known-issues + spec/plan migration + roadmap
2026-07-07 23:39:37 +08:00

93 lines
2.7 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env tsx
import { createDb } from './schema.js';
const args = process.argv.slice(2);
const command = args[0];
function main(): void {
const db = createDb('arch.db');
switch (command) {
case 'stats':
printStats(db);
break;
case 'modules':
printModules(db);
break;
case 'symbols':
printSymbols(db, args[1]);
break;
case 'deps':
printDependencies(db, args[1]);
break;
case 'violations':
printViolations(db);
break;
case 'sql':
printSql(db, args[1]);
break;
default:
console.log(`Usage: arch-query <command> [args]
Commands:
stats 显示统计信息
modules 列出所有模块
symbols <name> 查询符号
deps <module> 查模块依赖
violations 查架构违规
sql <SQL> 自定义 SQL 查询`);
}
db.close();
}
function printStats(db: ReturnType<typeof createDb>): void {
const modules = (db.prepare('SELECT COUNT(*) as c FROM modules').get() as { c: number }).c;
const symbols = (db.prepare('SELECT COUNT(*) as c FROM symbols').get() as { c: number }).c;
const calls = (db.prepare('SELECT COUNT(*) as c FROM calls').get() as { c: number }).c;
const deps = (db.prepare('SELECT COUNT(*) as c FROM dependencies').get() as { c: number }).c;
console.log(`模块: ${modules}\n符号: ${symbols}\n调用: ${calls}\n依赖: ${deps}`);
}
function printModules(db: ReturnType<typeof createDb>): void {
const rows = db.prepare('SELECT name, language, service, type FROM modules ORDER BY name').all();
rows.forEach((r) => console.log(r));
}
function printSymbols(db: ReturnType<typeof createDb>, name: string | undefined): void {
if (!name) {
console.log('Usage: arch-query symbols <name>');
return;
}
const rows = db.prepare('SELECT * FROM symbols WHERE name LIKE ?').all(`%${name}%`);
rows.forEach((r) => console.log(r));
}
function printDependencies(db: ReturnType<typeof createDb>, module: string | undefined): void {
if (!module) {
console.log('Usage: arch-query deps <module>');
return;
}
const rows = db.prepare(`
SELECT m2.name as depends_on FROM dependencies d
JOIN modules m1 ON d.source_module_id = m1.id
JOIN modules m2 ON d.target_module_id = m2.id
WHERE m1.name = ?
`).all(module);
rows.forEach((r) => console.log(r));
}
function printViolations(db: ReturnType<typeof createDb>): void {
// 骨架:检查长文件、未校验权限的 Action 等
console.log('骨架实现P1 后期补全违规检测');
}
function printSql(db: ReturnType<typeof createDb>, sql: string | undefined): void {
if (!sql) {
console.log('Usage: arch-query sql "<SQL>"');
return;
}
const rows = db.prepare(sql).all();
rows.forEach((r) => console.log(r));
}
main();