86 lines
2.5 KiB
JavaScript
86 lines
2.5 KiB
JavaScript
/**
|
||
* 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();
|
||
}
|