97 lines
2.5 KiB
JavaScript
Raw Normal View History

// grid-db/src/index.js
// Grid-DB · 自研逻辑格点数据库 · 主入口
// PRJ-GDB-001 · Phase 0
// 版权:国作登字-2026-A-00037559
'use strict';
const path = require('path');
const fs = require('fs');
const GridCell = require('./core/grid-cell');
const WAL = require('./storage/wal');
const PageManager = require('./storage/page-manager');
const EventLog = require('./events/event-log');
const GridAPI = require('./api/grid-api');
const BTree = require('./index/btree');
const NamespaceManager = require('./core/namespace');
const RangeScanner = require('./query/scan');
const NearbyQuery = require('./query/nearby');
const SecondaryIndex = require('./index/secondary-index');
/**
* Grid-DB 初始化器
*
* 本体论锚定 [ONT-PATCH-006]
* 笔需要纸来承载笔迹
* Grid-DB = 纸上有格子格点每个格子是最小寻址单元
* 笔在格子里写字格子记住了所有笔迹
* 纸不属于笔纸属于写字的人
*/
/**
* 打开或创建一个 Grid-DB 实例
*
* @param {object} [config]
* @param {string} [config.dataDir] 数据目录默认 grid-db/data
* @param {number} [config.pageSize] 页大小默认 4096
* @returns {GridAPI}
*/
function open(config = {}) {
const dataDir = config.dataDir || path.resolve(__dirname, '../data');
if (!fs.existsSync(dataDir)) {
fs.mkdirSync(dataDir, { recursive: true });
}
return new GridAPI({
dataDir,
pageSize: config.pageSize || PageManager.DEFAULT_PAGE_SIZE
});
}
// ── CLI 入口 ──
if (require.main === module) {
const cmd = process.argv[2];
if (cmd === 'status') {
const db = open();
const status = db.stats();
// eslint-disable-next-line no-console
console.log(JSON.stringify(status, null, 2));
db.close();
} else {
// eslint-disable-next-line no-console
console.log([
'🗄️ Grid-DB v0.1.0 · PRJ-GDB-001 · Phase 0',
'',
'本体论锚定Grid-DB = 纸 · 格点 = 格子 · WAL = 草稿本',
'',
'用法:',
' node grid-db/src/index.js status 查看数据库状态',
'',
'组件:',
' GridAPI 统一 API 接口',
' GridCell 格点数据模型',
' WAL Write-Ahead Log',
' PageManager 页管理器',
' EventLog 事件溯源日志',
].join('\n'));
}
}
module.exports = {
open,
GridAPI,
GridCell,
WAL,
PageManager,
EventLog,
BTree,
NamespaceManager,
RangeScanner,
NearbyQuery,
SecondaryIndex
};