42 lines
1.6 KiB
JavaScript
42 lines
1.6 KiB
JavaScript
// ═══════════════════════════════════════════════════════════
|
||
// 知識庫載入器
|
||
// 讀 data/knowledge.json(課綱輕量包)與 data/notes.json(全文)
|
||
// 進記憶體。由 scripts/build-knowledge.mjs 從 ../emmy 產生。
|
||
// ═══════════════════════════════════════════════════════════
|
||
import fs from 'node:fs';
|
||
import path from 'node:path';
|
||
import { fileURLToPath } from 'node:url';
|
||
|
||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||
const DATA_DIR = path.join(__dirname, '..', 'data');
|
||
const KNOWLEDGE_PATH = path.join(DATA_DIR, 'knowledge.json');
|
||
const NOTES_PATH = path.join(DATA_DIR, 'notes.json');
|
||
|
||
let _knowledge = null;
|
||
let _notes = null;
|
||
|
||
export function knowledgeReady() {
|
||
return fs.existsSync(KNOWLEDGE_PATH) && fs.existsSync(NOTES_PATH);
|
||
}
|
||
|
||
export function getKnowledge() {
|
||
if (_knowledge) return _knowledge;
|
||
if (!fs.existsSync(KNOWLEDGE_PATH)) return null;
|
||
_knowledge = JSON.parse(fs.readFileSync(KNOWLEDGE_PATH, 'utf8'));
|
||
return _knowledge;
|
||
}
|
||
|
||
export function getNote(kind, id) {
|
||
if (!_notes) {
|
||
if (!fs.existsSync(NOTES_PATH)) return null;
|
||
_notes = JSON.parse(fs.readFileSync(NOTES_PATH, 'utf8'));
|
||
}
|
||
return _notes[`${kind}:${id}`] || null;
|
||
}
|
||
|
||
// 給 fincheck 用:心法/名詞/案例的 linkMap,方便把檢查結果連回筆記
|
||
export function getLinkMap() {
|
||
const k = getKnowledge();
|
||
return (k && k.linkMap) || {};
|
||
}
|