- 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
93 lines
2.7 KiB
TypeScript
93 lines
2.7 KiB
TypeScript
#!/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(); |