@yydb/light-db 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (150) hide show
  1. package/dist/api/LightDB.d.ts +194 -0
  2. package/dist/api/LightDB.d.ts.map +1 -0
  3. package/dist/api/LightDB.js +299 -0
  4. package/dist/api/LightDB.js.map +1 -0
  5. package/dist/api/Transaction.d.ts +100 -0
  6. package/dist/api/Transaction.d.ts.map +1 -0
  7. package/dist/api/Transaction.js +263 -0
  8. package/dist/api/Transaction.js.map +1 -0
  9. package/dist/api/index.d.ts +24 -0
  10. package/dist/api/index.d.ts.map +1 -0
  11. package/dist/api/index.js +54 -0
  12. package/dist/api/index.js.map +1 -0
  13. package/dist/api/types.d.ts +154 -0
  14. package/dist/api/types.d.ts.map +1 -0
  15. package/dist/api/types.js +7 -0
  16. package/dist/api/types.js.map +1 -0
  17. package/dist/collection/Collection.d.ts +235 -0
  18. package/dist/collection/Collection.d.ts.map +1 -0
  19. package/dist/collection/Collection.js +671 -0
  20. package/dist/collection/Collection.js.map +1 -0
  21. package/dist/collection/QueryBuilder.d.ts +225 -0
  22. package/dist/collection/QueryBuilder.d.ts.map +1 -0
  23. package/dist/collection/QueryBuilder.js +475 -0
  24. package/dist/collection/QueryBuilder.js.map +1 -0
  25. package/dist/collection/QueryParser.d.ts +117 -0
  26. package/dist/collection/QueryParser.d.ts.map +1 -0
  27. package/dist/collection/QueryParser.js +438 -0
  28. package/dist/collection/QueryParser.js.map +1 -0
  29. package/dist/collection/index.d.ts +42 -0
  30. package/dist/collection/index.d.ts.map +1 -0
  31. package/dist/collection/index.js +41 -0
  32. package/dist/collection/index.js.map +1 -0
  33. package/dist/collection/types.d.ts +365 -0
  34. package/dist/collection/types.d.ts.map +1 -0
  35. package/dist/collection/types.js +7 -0
  36. package/dist/collection/types.js.map +1 -0
  37. package/dist/constants/index.d.ts +51 -0
  38. package/dist/constants/index.d.ts.map +1 -0
  39. package/dist/constants/index.js +68 -0
  40. package/dist/constants/index.js.map +1 -0
  41. package/dist/errors/index.d.ts +69 -0
  42. package/dist/errors/index.d.ts.map +1 -0
  43. package/dist/errors/index.js +132 -0
  44. package/dist/errors/index.js.map +1 -0
  45. package/dist/index.d.ts +220 -0
  46. package/dist/index.d.ts.map +1 -0
  47. package/dist/index.js +729 -0
  48. package/dist/index.js.map +1 -0
  49. package/dist/indexes/BPlusTree.d.ts +181 -0
  50. package/dist/indexes/BPlusTree.d.ts.map +1 -0
  51. package/dist/indexes/BPlusTree.js +528 -0
  52. package/dist/indexes/BPlusTree.js.map +1 -0
  53. package/dist/indexes/IndexManager.d.ts +236 -0
  54. package/dist/indexes/IndexManager.d.ts.map +1 -0
  55. package/dist/indexes/IndexManager.js +502 -0
  56. package/dist/indexes/IndexManager.js.map +1 -0
  57. package/dist/indexes/PrimaryIndex.d.ts +240 -0
  58. package/dist/indexes/PrimaryIndex.d.ts.map +1 -0
  59. package/dist/indexes/PrimaryIndex.js +354 -0
  60. package/dist/indexes/PrimaryIndex.js.map +1 -0
  61. package/dist/indexes/SecondaryIndex.d.ts +204 -0
  62. package/dist/indexes/SecondaryIndex.d.ts.map +1 -0
  63. package/dist/indexes/SecondaryIndex.js +480 -0
  64. package/dist/indexes/SecondaryIndex.js.map +1 -0
  65. package/dist/indexes/errors.d.ts +66 -0
  66. package/dist/indexes/errors.d.ts.map +1 -0
  67. package/dist/indexes/errors.js +117 -0
  68. package/dist/indexes/errors.js.map +1 -0
  69. package/dist/indexes/index.d.ts +52 -0
  70. package/dist/indexes/index.d.ts.map +1 -0
  71. package/dist/indexes/index.js +131 -0
  72. package/dist/indexes/index.js.map +1 -0
  73. package/dist/indexes/types.d.ts +246 -0
  74. package/dist/indexes/types.d.ts.map +1 -0
  75. package/dist/indexes/types.js +30 -0
  76. package/dist/indexes/types.js.map +1 -0
  77. package/dist/performance/BatchWALWriter.d.ts +185 -0
  78. package/dist/performance/BatchWALWriter.d.ts.map +1 -0
  79. package/dist/performance/BatchWALWriter.js +490 -0
  80. package/dist/performance/BatchWALWriter.js.map +1 -0
  81. package/dist/performance/ColumnarStorage.d.ts +138 -0
  82. package/dist/performance/ColumnarStorage.d.ts.map +1 -0
  83. package/dist/performance/ColumnarStorage.js +875 -0
  84. package/dist/performance/ColumnarStorage.js.map +1 -0
  85. package/dist/performance/LazyQuery.d.ts +307 -0
  86. package/dist/performance/LazyQuery.d.ts.map +1 -0
  87. package/dist/performance/LazyQuery.js +588 -0
  88. package/dist/performance/LazyQuery.js.map +1 -0
  89. package/dist/performance/OptimizedBuffer.d.ts +375 -0
  90. package/dist/performance/OptimizedBuffer.d.ts.map +1 -0
  91. package/dist/performance/OptimizedBuffer.js +730 -0
  92. package/dist/performance/OptimizedBuffer.js.map +1 -0
  93. package/dist/performance/RWLock.d.ts +260 -0
  94. package/dist/performance/RWLock.d.ts.map +1 -0
  95. package/dist/performance/RWLock.js +570 -0
  96. package/dist/performance/RWLock.js.map +1 -0
  97. package/dist/performance/index.d.ts +41 -0
  98. package/dist/performance/index.d.ts.map +1 -0
  99. package/dist/performance/index.js +162 -0
  100. package/dist/performance/index.js.map +1 -0
  101. package/dist/performance/types.d.ts +247 -0
  102. package/dist/performance/types.d.ts.map +1 -0
  103. package/dist/performance/types.js +26 -0
  104. package/dist/performance/types.js.map +1 -0
  105. package/dist/storage/Checkpoint.d.ts +128 -0
  106. package/dist/storage/Checkpoint.d.ts.map +1 -0
  107. package/dist/storage/Checkpoint.js +251 -0
  108. package/dist/storage/Checkpoint.js.map +1 -0
  109. package/dist/storage/LightFile.d.ts +227 -0
  110. package/dist/storage/LightFile.d.ts.map +1 -0
  111. package/dist/storage/LightFile.js +526 -0
  112. package/dist/storage/LightFile.js.map +1 -0
  113. package/dist/storage/Recovery.d.ts +172 -0
  114. package/dist/storage/Recovery.d.ts.map +1 -0
  115. package/dist/storage/Recovery.js +399 -0
  116. package/dist/storage/Recovery.js.map +1 -0
  117. package/dist/storage/SHMFile.d.ts +243 -0
  118. package/dist/storage/SHMFile.d.ts.map +1 -0
  119. package/dist/storage/SHMFile.js +436 -0
  120. package/dist/storage/SHMFile.js.map +1 -0
  121. package/dist/storage/StorageEngine.d.ts +146 -0
  122. package/dist/storage/StorageEngine.d.ts.map +1 -0
  123. package/dist/storage/StorageEngine.js +353 -0
  124. package/dist/storage/StorageEngine.js.map +1 -0
  125. package/dist/storage/WALFile.d.ts +248 -0
  126. package/dist/storage/WALFile.d.ts.map +1 -0
  127. package/dist/storage/WALFile.js +597 -0
  128. package/dist/storage/WALFile.js.map +1 -0
  129. package/dist/storage/index.d.ts +10 -0
  130. package/dist/storage/index.d.ts.map +1 -0
  131. package/dist/storage/index.js +153 -0
  132. package/dist/storage/index.js.map +1 -0
  133. package/dist/types/index.d.ts +220 -0
  134. package/dist/types/index.d.ts.map +1 -0
  135. package/dist/types/index.js +7 -0
  136. package/dist/types/index.js.map +1 -0
  137. package/dist/utils/binary.d.ts +271 -0
  138. package/dist/utils/binary.d.ts.map +1 -0
  139. package/dist/utils/binary.js +454 -0
  140. package/dist/utils/binary.js.map +1 -0
  141. package/dist/utils/file.d.ts +166 -0
  142. package/dist/utils/file.d.ts.map +1 -0
  143. package/dist/utils/file.js +346 -0
  144. package/dist/utils/file.js.map +1 -0
  145. package/dist/utils/index.d.ts +6 -0
  146. package/dist/utils/index.d.ts.map +1 -0
  147. package/dist/utils/index.js +39 -0
  148. package/dist/utils/index.js.map +1 -0
  149. package/package.json +37 -0
  150. package/readme.md +124 -0
@@ -0,0 +1,194 @@
1
+ /**
2
+ * LightDB 主类
3
+ * 提供用户直接使用的接口层
4
+ */
5
+ import { StorageEngine } from "../storage";
6
+ import { Collection } from "../collection";
7
+ import type {
8
+ LightDBOptions,
9
+ CollectionCreateOptions,
10
+ TransactionCallback,
11
+ TransactionOptions,
12
+ TransactionResult,
13
+ DatabaseStats,
14
+ DatabaseConfig,
15
+ ILightDB,
16
+ CollectionSchema,
17
+ } from "./types";
18
+ import type { CheckpointResult } from "../types";
19
+ /**
20
+ * LightDB 数据库实例
21
+ * 提供完整的数据库操作 API
22
+ */
23
+ export declare class LightDB implements ILightDB {
24
+ private readonly storageEngine;
25
+ private readonly collections;
26
+ private readonly transactionManager;
27
+ private readonly options;
28
+ private closed;
29
+ /**
30
+ * 创建 LightDB 实例
31
+ * @param storageEngine 已初始化的存储引擎
32
+ * @param options 配置选项
33
+ */
34
+ private constructor();
35
+ /**
36
+ * 打开数据库
37
+ * 创建或打开指定路径的数据库
38
+ *
39
+ * @param path 数据库文件存储路径
40
+ * @param options 配置选项
41
+ * @returns 初始化完成的 LightDB 实例
42
+ *
43
+ * @example
44
+ * ```typescript
45
+ * const db = await LightDB.open('./data/mydb', {
46
+ * dbName: 'mydb',
47
+ * autoCheckpoint: true,
48
+ * pageSize: 4096
49
+ * });
50
+ * ```
51
+ */
52
+ static open(path: string, options?: LightDBOptions): Promise<LightDB>;
53
+ /**
54
+ * 获取数据库名称
55
+ */
56
+ get dbName(): string;
57
+ /**
58
+ * 获取数据库路径
59
+ */
60
+ get path(): string;
61
+ /**
62
+ * 检查数据库是否已打开
63
+ */
64
+ get isOpen(): boolean;
65
+ /**
66
+ * 获取或创建集合
67
+ * 返回类型安全的集合实例
68
+ *
69
+ * @param name 集合名称
70
+ * @param options 集合配置选项
71
+ * @returns 集合实例
72
+ *
73
+ * @example
74
+ * ```typescript
75
+ * interface User {
76
+ * id: number;
77
+ * name: string;
78
+ * age: number;
79
+ * }
80
+ *
81
+ * const users = db.collection<User>('users', {
82
+ * name: 'users',
83
+ * primaryKey: 'id',
84
+ * indexes: [
85
+ * { name: 'name_idx', fieldName: 'name' }
86
+ * ]
87
+ * });
88
+ * ```
89
+ */
90
+ collection<T extends Record<string, unknown>>(name: string, options: CollectionCreateOptions<T>): Collection<T>;
91
+ /**
92
+ * 检查集合是否存在
93
+ *
94
+ * @param name 集合名称
95
+ * @returns 集合是否存在
96
+ */
97
+ hasCollection(name: string): boolean;
98
+ /**
99
+ * 删除集合
100
+ *
101
+ * @param name 集合名称
102
+ * @returns 是否删除成功
103
+ */
104
+ dropCollection(name: string): boolean;
105
+ /**
106
+ * 获取所有集合名称
107
+ *
108
+ * @returns 集合名称数组
109
+ */
110
+ getCollectionNames(): string[];
111
+ /**
112
+ * 执行事务
113
+ * 支持 ACID 事务特性
114
+ *
115
+ * @param callback 事务回调函数
116
+ * @param options 事务选项
117
+ * @returns 事务执行结果
118
+ *
119
+ * @example
120
+ * ```typescript
121
+ * await db.transaction(async (tx) => {
122
+ * const users = tx.collection<User>('users');
123
+ * const user = await users.findOne({ id: 1 });
124
+ * await users.update({ id: 1 }, { balance: user.balance - 100 });
125
+ * });
126
+ * ```
127
+ */
128
+ transaction(callback: TransactionCallback, options?: TransactionOptions): Promise<TransactionResult>;
129
+ /**
130
+ * 执行检查点
131
+ * 将内存中的数据持久化到磁盘
132
+ *
133
+ * @returns 检查点执行结果
134
+ */
135
+ checkpoint(): Promise<CheckpointResult>;
136
+ /**
137
+ * 获取数据库统计信息
138
+ *
139
+ * @returns 数据库统计信息
140
+ */
141
+ getStats(): Promise<DatabaseStats>;
142
+ /**
143
+ * 获取数据库配置
144
+ *
145
+ * @returns 数据库配置信息
146
+ */
147
+ getConfig(): DatabaseConfig;
148
+ /**
149
+ * 同步数据到磁盘
150
+ * 确保所有数据都已持久化
151
+ */
152
+ sync(): Promise<void>;
153
+ /**
154
+ * 关闭数据库
155
+ * 释放所有资源并确保数据持久化
156
+ */
157
+ close(): Promise<void>;
158
+ /**
159
+ * 确保数据库处于打开状态
160
+ */
161
+ private ensureOpen;
162
+ /**
163
+ * 获取存储引擎(内部使用)
164
+ */
165
+ getStorageEngine(): StorageEngine;
166
+ }
167
+ /**
168
+ * 定义集合 Schema 的辅助函数
169
+ * 提供类型推断和 IDE 支持
170
+ *
171
+ * @param schema Schema 定义
172
+ * @returns Schema 对象
173
+ *
174
+ * @example
175
+ * ```typescript
176
+ * const UserSchema = defineCollectionSchema({
177
+ * schema: {} as User,
178
+ * primaryKey: 'id',
179
+ * indexes: [
180
+ * { name: 'name_idx', fieldName: 'name' }
181
+ * ]
182
+ * });
183
+ * ```
184
+ */
185
+ export declare function defineCollectionSchema<T extends Record<string, unknown>>(schema: CollectionSchema<T>): CollectionSchema<T>;
186
+ /**
187
+ * 打开数据库的便捷函数
188
+ *
189
+ * @param path 数据库文件存储路径
190
+ * @param options 配置选项
191
+ * @returns 初始化完成的 LightDB 实例
192
+ */
193
+ export declare function openDatabase(path: string, options?: LightDBOptions): Promise<LightDB>;
194
+ //# sourceMappingURL=LightDB.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightDB.d.ts","sourceRoot":"","sources":["../../src/api/LightDB.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,aAAa,EAAuB,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAG3C,OAAO,KAAK,EACR,cAAc,EACd,uBAAuB,EACvB,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,cAAc,EACd,QAAQ,EACR,gBAAgB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,gBAAgB,EAAsC,MAAM,UAAU,CAAC;AAGrF;;;GAGG;AACH,qBAAa,OAAQ,YAAW,QAAQ;IACpC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAqB;IACxD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAEtB;IACF,OAAO,CAAC,MAAM,CAAU;IAExB;;;;OAIG;IACH,OAAO;IAaP;;;;;;;;;;;;;;;;OAgBG;WACiB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,OAAO,CAAC;IAyBtF;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC;IAoBtH;;;;;OAKG;IACI,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAK3C;;;;;OAKG;IACI,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAa5C;;;;OAIG;IACI,kBAAkB,IAAI,MAAM,EAAE;IAKrC;;;;;;;;;;;;;;;;OAgBG;IACU,WAAW,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAKjH;;;;;OAKG;IACU,UAAU,IAAI,OAAO,CAAC,gBAAgB,CAAC;IAKpD;;;;OAIG;IACU,QAAQ,IAAI,OAAO,CAAC,aAAa,CAAC;IAmB/C;;;;OAIG;IACI,SAAS,IAAI,cAAc;IAUlC;;;OAGG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC;;;OAGG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAcnC;;OAEG;IACH,OAAO,CAAC,UAAU;IASlB;;OAEG;IACI,gBAAgB,IAAI,aAAa;CAG3C;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,sBAAsB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,CAAC,CAAC,CAE1H;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAE3F"}
@@ -0,0 +1,299 @@
1
+ "use strict";
2
+ /**
3
+ * LightDB 主类
4
+ * 提供用户直接使用的接口层
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.LightDB = void 0;
8
+ exports.defineCollectionSchema = defineCollectionSchema;
9
+ exports.openDatabase = openDatabase;
10
+ const storage_1 = require("../storage");
11
+ const collection_1 = require("../collection");
12
+ const Transaction_1 = require("./Transaction");
13
+ const errors_1 = require("../errors");
14
+ /**
15
+ * LightDB 数据库实例
16
+ * 提供完整的数据库操作 API
17
+ */
18
+ class LightDB {
19
+ /**
20
+ * 创建 LightDB 实例
21
+ * @param storageEngine 已初始化的存储引擎
22
+ * @param options 配置选项
23
+ */
24
+ constructor(storageEngine, options) {
25
+ this.storageEngine = storageEngine;
26
+ this.options = options;
27
+ this.collections = new Map();
28
+ this.transactionManager = new Transaction_1.TransactionManager(this.collections);
29
+ this.closed = false;
30
+ }
31
+ /**
32
+ * 打开数据库
33
+ * 创建或打开指定路径的数据库
34
+ *
35
+ * @param path 数据库文件存储路径
36
+ * @param options 配置选项
37
+ * @returns 初始化完成的 LightDB 实例
38
+ *
39
+ * @example
40
+ * ```typescript
41
+ * const db = await LightDB.open('./data/mydb', {
42
+ * dbName: 'mydb',
43
+ * autoCheckpoint: true,
44
+ * pageSize: 4096
45
+ * });
46
+ * ```
47
+ */
48
+ static async open(path, options = {}) {
49
+ const dbName = options.dbName ?? "default";
50
+ const fullOptions = {
51
+ dbName,
52
+ pageSize: options.pageSize ?? 4096,
53
+ walThreshold: options.walThreshold ?? 16 * 1024 * 1024,
54
+ autoCheckpoint: options.autoCheckpoint ?? true,
55
+ fsyncStrategy: options.fsyncStrategy,
56
+ };
57
+ const storageEngineOptions = {
58
+ pageSize: fullOptions.pageSize,
59
+ walThreshold: fullOptions.walThreshold,
60
+ autoCheckpoint: fullOptions.autoCheckpoint,
61
+ };
62
+ if (fullOptions.fsyncStrategy !== undefined) {
63
+ storageEngineOptions.fsyncStrategy = fullOptions.fsyncStrategy;
64
+ }
65
+ const storageEngine = await (0, storage_1.createStorageEngine)(path, dbName, storageEngineOptions);
66
+ return new LightDB(storageEngine, fullOptions);
67
+ }
68
+ /**
69
+ * 获取数据库名称
70
+ */
71
+ get dbName() {
72
+ return this.options.dbName;
73
+ }
74
+ /**
75
+ * 获取数据库路径
76
+ */
77
+ get path() {
78
+ return this.storageEngine.getBasePath();
79
+ }
80
+ /**
81
+ * 检查数据库是否已打开
82
+ */
83
+ get isOpen() {
84
+ return !this.closed && this.storageEngine.isInitialized();
85
+ }
86
+ /**
87
+ * 获取或创建集合
88
+ * 返回类型安全的集合实例
89
+ *
90
+ * @param name 集合名称
91
+ * @param options 集合配置选项
92
+ * @returns 集合实例
93
+ *
94
+ * @example
95
+ * ```typescript
96
+ * interface User {
97
+ * id: number;
98
+ * name: string;
99
+ * age: number;
100
+ * }
101
+ *
102
+ * const users = db.collection<User>('users', {
103
+ * name: 'users',
104
+ * primaryKey: 'id',
105
+ * indexes: [
106
+ * { name: 'name_idx', fieldName: 'name' }
107
+ * ]
108
+ * });
109
+ * ```
110
+ */
111
+ collection(name, options) {
112
+ this.ensureOpen();
113
+ const existingCollection = this.collections.get(name);
114
+ if (existingCollection) {
115
+ return existingCollection;
116
+ }
117
+ const collectionOptions = {
118
+ name,
119
+ primaryKey: options.primaryKey,
120
+ indexes: options.indexes ?? [],
121
+ };
122
+ const collection = new collection_1.Collection(collectionOptions);
123
+ this.collections.set(name, collection);
124
+ return collection;
125
+ }
126
+ /**
127
+ * 检查集合是否存在
128
+ *
129
+ * @param name 集合名称
130
+ * @returns 集合是否存在
131
+ */
132
+ hasCollection(name) {
133
+ this.ensureOpen();
134
+ return this.collections.has(name);
135
+ }
136
+ /**
137
+ * 删除集合
138
+ *
139
+ * @param name 集合名称
140
+ * @returns 是否删除成功
141
+ */
142
+ dropCollection(name) {
143
+ this.ensureOpen();
144
+ const collection = this.collections.get(name);
145
+ if (!collection) {
146
+ return false;
147
+ }
148
+ collection.clear();
149
+ this.collections.delete(name);
150
+ return true;
151
+ }
152
+ /**
153
+ * 获取所有集合名称
154
+ *
155
+ * @returns 集合名称数组
156
+ */
157
+ getCollectionNames() {
158
+ this.ensureOpen();
159
+ return Array.from(this.collections.keys());
160
+ }
161
+ /**
162
+ * 执行事务
163
+ * 支持 ACID 事务特性
164
+ *
165
+ * @param callback 事务回调函数
166
+ * @param options 事务选项
167
+ * @returns 事务执行结果
168
+ *
169
+ * @example
170
+ * ```typescript
171
+ * await db.transaction(async (tx) => {
172
+ * const users = tx.collection<User>('users');
173
+ * const user = await users.findOne({ id: 1 });
174
+ * await users.update({ id: 1 }, { balance: user.balance - 100 });
175
+ * });
176
+ * ```
177
+ */
178
+ async transaction(callback, options) {
179
+ this.ensureOpen();
180
+ return this.transactionManager.execute(callback, options);
181
+ }
182
+ /**
183
+ * 执行检查点
184
+ * 将内存中的数据持久化到磁盘
185
+ *
186
+ * @returns 检查点执行结果
187
+ */
188
+ async checkpoint() {
189
+ this.ensureOpen();
190
+ return this.storageEngine.checkpoint();
191
+ }
192
+ /**
193
+ * 获取数据库统计信息
194
+ *
195
+ * @returns 数据库统计信息
196
+ */
197
+ async getStats() {
198
+ this.ensureOpen();
199
+ const storageStats = await this.storageEngine.getStats();
200
+ const collectionStats = Array.from(this.collections.entries()).map(([name, collection]) => ({
201
+ name,
202
+ documentCount: collection.Size,
203
+ indexCount: collection.getStats().indexCount,
204
+ }));
205
+ return {
206
+ ...storageStats,
207
+ dbName: this.options.dbName,
208
+ collectionCount: this.collections.size,
209
+ collections: collectionStats,
210
+ };
211
+ }
212
+ /**
213
+ * 获取数据库配置
214
+ *
215
+ * @returns 数据库配置信息
216
+ */
217
+ getConfig() {
218
+ return {
219
+ dbName: this.options.dbName,
220
+ path: this.storageEngine.getBasePath(),
221
+ pageSize: this.options.pageSize,
222
+ walThreshold: this.options.walThreshold,
223
+ autoCheckpoint: this.options.autoCheckpoint,
224
+ };
225
+ }
226
+ /**
227
+ * 同步数据到磁盘
228
+ * 确保所有数据都已持久化
229
+ */
230
+ async sync() {
231
+ this.ensureOpen();
232
+ await this.storageEngine.sync();
233
+ }
234
+ /**
235
+ * 关闭数据库
236
+ * 释放所有资源并确保数据持久化
237
+ */
238
+ async close() {
239
+ if (this.closed) {
240
+ return;
241
+ }
242
+ for (const collection of this.collections.values()) {
243
+ collection.clear();
244
+ }
245
+ this.collections.clear();
246
+ await this.storageEngine.close();
247
+ this.closed = true;
248
+ }
249
+ /**
250
+ * 确保数据库处于打开状态
251
+ */
252
+ ensureOpen() {
253
+ if (this.closed) {
254
+ throw new errors_1.StorageError("Database is closed", "DATABASE_CLOSED");
255
+ }
256
+ if (!this.storageEngine.isInitialized()) {
257
+ throw new errors_1.StorageError("Database is not initialized", "DATABASE_NOT_INITIALIZED");
258
+ }
259
+ }
260
+ /**
261
+ * 获取存储引擎(内部使用)
262
+ */
263
+ getStorageEngine() {
264
+ return this.storageEngine;
265
+ }
266
+ }
267
+ exports.LightDB = LightDB;
268
+ /**
269
+ * 定义集合 Schema 的辅助函数
270
+ * 提供类型推断和 IDE 支持
271
+ *
272
+ * @param schema Schema 定义
273
+ * @returns Schema 对象
274
+ *
275
+ * @example
276
+ * ```typescript
277
+ * const UserSchema = defineCollectionSchema({
278
+ * schema: {} as User,
279
+ * primaryKey: 'id',
280
+ * indexes: [
281
+ * { name: 'name_idx', fieldName: 'name' }
282
+ * ]
283
+ * });
284
+ * ```
285
+ */
286
+ function defineCollectionSchema(schema) {
287
+ return schema;
288
+ }
289
+ /**
290
+ * 打开数据库的便捷函数
291
+ *
292
+ * @param path 数据库文件存储路径
293
+ * @param options 配置选项
294
+ * @returns 初始化完成的 LightDB 实例
295
+ */
296
+ async function openDatabase(path, options) {
297
+ return LightDB.open(path, options);
298
+ }
299
+ //# sourceMappingURL=LightDB.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LightDB.js","sourceRoot":"","sources":["../../src/api/LightDB.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * LightDB 事务实现
3
+ * 提供 ACID 事务支持
4
+ */
5
+ import type { Collection } from "../collection";
6
+ import type {
7
+ TransactionContext,
8
+ TransactionCollection,
9
+ TransactionCallback,
10
+ TransactionOptions,
11
+ TransactionState,
12
+ TransactionResult,
13
+ } from "./types";
14
+ /**
15
+ * 事务错误类
16
+ */
17
+ export declare class TransactionError extends Error {
18
+ readonly code: string;
19
+ constructor(message: string, code: string);
20
+ }
21
+ /**
22
+ * 操作记录类型
23
+ */
24
+ interface OperationRecord {
25
+ type: "insert" | "update" | "delete";
26
+ collectionName: string;
27
+ data: unknown;
28
+ }
29
+ /**
30
+ * 事务类
31
+ * 管理事务的生命周期和操作
32
+ */
33
+ export declare class Transaction implements TransactionContext {
34
+ private readonly collections;
35
+ private readonly options;
36
+ private state;
37
+ private readonly operations;
38
+ private readonly startTime;
39
+ constructor(collections: Map<string, Collection<Record<string, unknown>>>, options?: TransactionOptions);
40
+ /**
41
+ * 获取事务集合
42
+ */
43
+ collection<T extends Record<string, unknown>>(name: string): TransactionCollection<T>;
44
+ /**
45
+ * 确保事务处于活动状态
46
+ */
47
+ ensureActive(): void;
48
+ /**
49
+ * 记录操作
50
+ */
51
+ recordOperation(type: OperationRecord["type"], collectionName: string, data: unknown): void;
52
+ /**
53
+ * 提交事务
54
+ */
55
+ commit(): TransactionResult;
56
+ /**
57
+ * 回滚事务
58
+ */
59
+ rollback(): TransactionResult;
60
+ /**
61
+ * 撤销操作
62
+ */
63
+ private undoOperation;
64
+ /**
65
+ * 获取事务状态
66
+ */
67
+ getState(): TransactionState;
68
+ /**
69
+ * 获取操作数量
70
+ */
71
+ getOperationCount(): number;
72
+ }
73
+ /**
74
+ * 事务管理器
75
+ * 管理多个并发事务
76
+ */
77
+ export declare class TransactionManager {
78
+ private readonly collections;
79
+ private readonly activeTransactions;
80
+ private transactionCounter;
81
+ constructor(collections: Map<string, Collection<Record<string, unknown>>>);
82
+ /**
83
+ * 开始新事务
84
+ */
85
+ begin(options?: TransactionOptions): Transaction;
86
+ /**
87
+ * 执行事务
88
+ */
89
+ execute(callback: TransactionCallback, options?: TransactionOptions): Promise<TransactionResult>;
90
+ /**
91
+ * 获取活动事务数量
92
+ */
93
+ getActiveTransactionCount(): number;
94
+ /**
95
+ * 清理已完成的事务
96
+ */
97
+ cleanup(): void;
98
+ }
99
+ export {};
100
+ //# sourceMappingURL=Transaction.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.d.ts","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAe,MAAM,eAAe,CAAC;AAC7D,OAAO,KAAK,EACR,kBAAkB,EAClB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACpB,MAAM,SAAS,CAAC;AAEjB;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACvC,SAAgB,IAAI,EAAE,MAAM,CAAC;gBAEjB,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;CAM5C;AA0DD;;GAEG;AACH,UAAU,eAAe;IACrB,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACjB;AAED;;;GAGG;AACH,qBAAa,WAAY,YAAW,kBAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA+B;IACvD,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;gBAEvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,kBAAkB;IAWvG;;OAEG;IACI,UAAU,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,qBAAqB,CAAC,CAAC,CAAC;IAW5F;;OAEG;IACI,YAAY,IAAI,IAAI;IAW3B;;OAEG;IACI,eAAe,CAAC,IAAI,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI;IAIlG;;OAEG;IACI,MAAM,IAAI,iBAAiB;IA4BlC;;OAEG;IACI,QAAQ,IAAI,iBAAiB;IAiCpC;;OAEG;IACH,OAAO,CAAC,aAAa;IAoBrB;;OAEG;IACI,QAAQ,IAAI,gBAAgB;IAInC;;OAEG;IACI,iBAAiB,IAAI,MAAM;CAGrC;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAmD;IAC/E,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA2B;IAC9D,OAAO,CAAC,kBAAkB,CAAS;gBAEvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAMzE;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,EAAE,kBAAkB,GAAG,WAAW;IAOvD;;OAEG;IACU,OAAO,CAAC,QAAQ,EAAE,mBAAmB,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAiB7G;;OAEG;IACI,yBAAyB,IAAI,MAAM;IAI1C;;OAEG;IACI,OAAO,IAAI,IAAI;CAOzB"}