zhizhi/scripts/grid-db/generate-drive-index.js

86 lines
2.5 KiB
JavaScript
Raw Normal View History

/**
* scripts/grid-db/generate-drive-index.js
*
* 功能读取 dev-module-map.json为每个活跃 DEV 生成专属的 Drive index.json
*
* 输出grid-db/drive-index/DEV-XXX.json每个活跃 DEV 一个文件
*
* 触发 sync-to-drive.js 调用或独立运行
*
* 守护: PER-ZY001 铸渊
* 系统: SYS-GLW-0001
*/
const fs = require('fs');
const path = require('path');
const GRID_DB_ROOT = path.join(__dirname, '../../grid-db');
const RULES_DIR = path.join(GRID_DB_ROOT, 'rules');
const INDEX_DIR = path.join(GRID_DB_ROOT, 'drive-index');
const TEMPLATE_PATH = path.join(GRID_DB_ROOT, 'schema/drive-index-template.json');
function main() {
// 读取开发者映射表
const moduleMapPath = path.join(RULES_DIR, 'dev-module-map.json');
if (!fs.existsSync(moduleMapPath)) {
console.log('[generate-drive-index] dev-module-map.json not found, skipping');
return;
}
const moduleMap = JSON.parse(fs.readFileSync(moduleMapPath, 'utf8'));
// 读取索引模板
if (!fs.existsSync(TEMPLATE_PATH)) {
console.log('[generate-drive-index] drive-index-template.json not found, skipping');
return;
}
const templateData = JSON.parse(fs.readFileSync(TEMPLATE_PATH, 'utf8'));
const template = templateData.template;
// 确保输出目录存在
if (!fs.existsSync(INDEX_DIR)) {
fs.mkdirSync(INDEX_DIR, { recursive: true });
}
const now = new Date().toISOString();
let generated = 0;
// 为每个活跃 DEV 生成 index.json
for (const [devId, devInfo] of Object.entries(moduleMap.mappings)) {
if (!devInfo.active) continue;
if (!devInfo.persona_id) continue;
const index = {
system: template.system,
version: template.version,
dev_id: devId,
persona_id: devInfo.persona_id,
persona_name: devInfo.persona_name,
dev_name: devInfo.dev_name,
last_sync: now,
routes: {}
};
// 替换模板中的 {DEV_ID} 占位符
for (const [key, val] of Object.entries(template.routes)) {
index.routes[key] = val.replace(/\{DEV_ID\}/g, devId);
}
index.shortcuts = { ...template.shortcuts };
const outputPath = path.join(INDEX_DIR, `${devId}.json`);
fs.writeFileSync(outputPath, JSON.stringify(index, null, 2) + '\n');
generated++;
console.log(`[generate-drive-index] Generated: ${devId}.json`);
}
console.log(`[generate-drive-index] Total generated: ${generated}`);
}
module.exports = { main };
if (require.main === module) {
main();
}