@yydb/light-db 0.0.0 → 0.0.11

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 (230) hide show
  1. package/dist/api/database.d.ts +48 -0
  2. package/dist/api/database.d.ts.map +1 -0
  3. package/dist/api/database.js +120 -0
  4. package/dist/api/database.js.map +1 -0
  5. package/dist/api/index.d.ts +7 -22
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +5 -52
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/schema.d.ts +33 -0
  10. package/dist/api/schema.d.ts.map +1 -0
  11. package/dist/api/schema.js +80 -0
  12. package/dist/api/schema.js.map +1 -0
  13. package/dist/api/transaction.d.ts +26 -0
  14. package/dist/api/transaction.d.ts.map +1 -0
  15. package/dist/api/transaction.js +52 -0
  16. package/dist/api/transaction.js.map +1 -0
  17. package/dist/api/types.d.ts +55 -148
  18. package/dist/api/types.d.ts.map +1 -1
  19. package/dist/api/types.js +6 -5
  20. package/dist/api/types.js.map +1 -1
  21. package/dist/codec/binary.d.ts +196 -0
  22. package/dist/codec/binary.d.ts.map +1 -0
  23. package/dist/codec/binary.js +342 -0
  24. package/dist/codec/binary.js.map +1 -0
  25. package/dist/codec/checksum.d.ts +21 -0
  26. package/dist/codec/checksum.d.ts.map +1 -0
  27. package/dist/codec/checksum.js +46 -0
  28. package/dist/codec/checksum.js.map +1 -0
  29. package/dist/codec/index.d.ts +12 -0
  30. package/dist/codec/index.d.ts.map +1 -0
  31. package/dist/codec/index.js +10 -0
  32. package/dist/codec/index.js.map +1 -0
  33. package/dist/codec/page.d.ts +114 -0
  34. package/dist/codec/page.d.ts.map +1 -0
  35. package/dist/codec/page.js +225 -0
  36. package/dist/codec/page.js.map +1 -0
  37. package/dist/codec/record.d.ts +62 -0
  38. package/dist/codec/record.d.ts.map +1 -0
  39. package/dist/codec/record.js +82 -0
  40. package/dist/codec/record.js.map +1 -0
  41. package/dist/core/broadcast.d.ts +39 -0
  42. package/dist/core/broadcast.d.ts.map +1 -0
  43. package/dist/core/broadcast.js +54 -0
  44. package/dist/core/broadcast.js.map +1 -0
  45. package/dist/core/checkpoint.d.ts +23 -0
  46. package/dist/core/checkpoint.d.ts.map +1 -0
  47. package/dist/core/checkpoint.js +49 -0
  48. package/dist/core/checkpoint.js.map +1 -0
  49. package/dist/core/engine.d.ts +142 -0
  50. package/dist/core/engine.d.ts.map +1 -0
  51. package/dist/core/engine.js +304 -0
  52. package/dist/core/engine.js.map +1 -0
  53. package/dist/core/index.d.ts +17 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/index.js +13 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/lease.d.ts +32 -0
  58. package/dist/core/lease.d.ts.map +1 -0
  59. package/dist/core/lease.js +81 -0
  60. package/dist/core/lease.js.map +1 -0
  61. package/dist/core/records.d.ts +49 -0
  62. package/dist/core/records.d.ts.map +1 -0
  63. package/dist/core/records.js +70 -0
  64. package/dist/core/records.js.map +1 -0
  65. package/dist/core/recovery.d.ts +43 -0
  66. package/dist/core/recovery.d.ts.map +1 -0
  67. package/dist/core/recovery.js +99 -0
  68. package/dist/core/recovery.js.map +1 -0
  69. package/dist/core/wal.d.ts +50 -0
  70. package/dist/core/wal.d.ts.map +1 -0
  71. package/dist/core/wal.js +114 -0
  72. package/dist/core/wal.js.map +1 -0
  73. package/dist/errors/index.d.ts +44 -66
  74. package/dist/errors/index.d.ts.map +1 -1
  75. package/dist/errors/index.js +43 -128
  76. package/dist/errors/index.js.map +1 -1
  77. package/dist/index.d.ts +14 -215
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +14 -724
  80. package/dist/index.js.map +1 -1
  81. package/dist/storage/StorageAdapter.d.ts +97 -0
  82. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  83. package/dist/storage/StorageAdapter.js +9 -0
  84. package/dist/storage/StorageAdapter.js.map +1 -0
  85. package/dist/storage/index.d.ts +9 -8
  86. package/dist/storage/index.d.ts.map +1 -1
  87. package/dist/storage/index.js +8 -151
  88. package/dist/storage/index.js.map +1 -1
  89. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +140 -0
  90. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +1 -0
  91. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +403 -0
  92. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +1 -0
  93. package/dist/storage/memory/MemoryStorageAdapter.d.ts +76 -0
  94. package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +1 -0
  95. package/dist/storage/memory/MemoryStorageAdapter.js +212 -0
  96. package/dist/storage/memory/MemoryStorageAdapter.js.map +1 -0
  97. package/dist/storage/opfs/OpfsStorageAdapter.d.ts +141 -0
  98. package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +1 -0
  99. package/dist/storage/opfs/OpfsStorageAdapter.js +400 -0
  100. package/dist/storage/opfs/OpfsStorageAdapter.js.map +1 -0
  101. package/package.json +48 -36
  102. package/readme.md +80 -94
  103. package/dist/api/LightDB.d.ts +0 -194
  104. package/dist/api/LightDB.d.ts.map +0 -1
  105. package/dist/api/LightDB.js +0 -299
  106. package/dist/api/LightDB.js.map +0 -1
  107. package/dist/api/Transaction.d.ts +0 -100
  108. package/dist/api/Transaction.d.ts.map +0 -1
  109. package/dist/api/Transaction.js +0 -263
  110. package/dist/api/Transaction.js.map +0 -1
  111. package/dist/collection/Collection.d.ts +0 -235
  112. package/dist/collection/Collection.d.ts.map +0 -1
  113. package/dist/collection/Collection.js +0 -671
  114. package/dist/collection/Collection.js.map +0 -1
  115. package/dist/collection/QueryBuilder.d.ts +0 -225
  116. package/dist/collection/QueryBuilder.d.ts.map +0 -1
  117. package/dist/collection/QueryBuilder.js +0 -475
  118. package/dist/collection/QueryBuilder.js.map +0 -1
  119. package/dist/collection/QueryParser.d.ts +0 -117
  120. package/dist/collection/QueryParser.d.ts.map +0 -1
  121. package/dist/collection/QueryParser.js +0 -438
  122. package/dist/collection/QueryParser.js.map +0 -1
  123. package/dist/collection/index.d.ts +0 -42
  124. package/dist/collection/index.d.ts.map +0 -1
  125. package/dist/collection/index.js +0 -41
  126. package/dist/collection/index.js.map +0 -1
  127. package/dist/collection/types.d.ts +0 -365
  128. package/dist/collection/types.d.ts.map +0 -1
  129. package/dist/collection/types.js +0 -7
  130. package/dist/collection/types.js.map +0 -1
  131. package/dist/constants/index.d.ts +0 -51
  132. package/dist/constants/index.d.ts.map +0 -1
  133. package/dist/constants/index.js +0 -68
  134. package/dist/constants/index.js.map +0 -1
  135. package/dist/indexes/BPlusTree.d.ts +0 -181
  136. package/dist/indexes/BPlusTree.d.ts.map +0 -1
  137. package/dist/indexes/BPlusTree.js +0 -528
  138. package/dist/indexes/BPlusTree.js.map +0 -1
  139. package/dist/indexes/IndexManager.d.ts +0 -236
  140. package/dist/indexes/IndexManager.d.ts.map +0 -1
  141. package/dist/indexes/IndexManager.js +0 -502
  142. package/dist/indexes/IndexManager.js.map +0 -1
  143. package/dist/indexes/PrimaryIndex.d.ts +0 -240
  144. package/dist/indexes/PrimaryIndex.d.ts.map +0 -1
  145. package/dist/indexes/PrimaryIndex.js +0 -354
  146. package/dist/indexes/PrimaryIndex.js.map +0 -1
  147. package/dist/indexes/SecondaryIndex.d.ts +0 -204
  148. package/dist/indexes/SecondaryIndex.d.ts.map +0 -1
  149. package/dist/indexes/SecondaryIndex.js +0 -480
  150. package/dist/indexes/SecondaryIndex.js.map +0 -1
  151. package/dist/indexes/errors.d.ts +0 -66
  152. package/dist/indexes/errors.d.ts.map +0 -1
  153. package/dist/indexes/errors.js +0 -117
  154. package/dist/indexes/errors.js.map +0 -1
  155. package/dist/indexes/index.d.ts +0 -52
  156. package/dist/indexes/index.d.ts.map +0 -1
  157. package/dist/indexes/index.js +0 -131
  158. package/dist/indexes/index.js.map +0 -1
  159. package/dist/indexes/types.d.ts +0 -246
  160. package/dist/indexes/types.d.ts.map +0 -1
  161. package/dist/indexes/types.js +0 -30
  162. package/dist/indexes/types.js.map +0 -1
  163. package/dist/performance/BatchWALWriter.d.ts +0 -185
  164. package/dist/performance/BatchWALWriter.d.ts.map +0 -1
  165. package/dist/performance/BatchWALWriter.js +0 -490
  166. package/dist/performance/BatchWALWriter.js.map +0 -1
  167. package/dist/performance/ColumnarStorage.d.ts +0 -138
  168. package/dist/performance/ColumnarStorage.d.ts.map +0 -1
  169. package/dist/performance/ColumnarStorage.js +0 -875
  170. package/dist/performance/ColumnarStorage.js.map +0 -1
  171. package/dist/performance/LazyQuery.d.ts +0 -307
  172. package/dist/performance/LazyQuery.d.ts.map +0 -1
  173. package/dist/performance/LazyQuery.js +0 -588
  174. package/dist/performance/LazyQuery.js.map +0 -1
  175. package/dist/performance/OptimizedBuffer.d.ts +0 -375
  176. package/dist/performance/OptimizedBuffer.d.ts.map +0 -1
  177. package/dist/performance/OptimizedBuffer.js +0 -730
  178. package/dist/performance/OptimizedBuffer.js.map +0 -1
  179. package/dist/performance/RWLock.d.ts +0 -260
  180. package/dist/performance/RWLock.d.ts.map +0 -1
  181. package/dist/performance/RWLock.js +0 -570
  182. package/dist/performance/RWLock.js.map +0 -1
  183. package/dist/performance/index.d.ts +0 -41
  184. package/dist/performance/index.d.ts.map +0 -1
  185. package/dist/performance/index.js +0 -162
  186. package/dist/performance/index.js.map +0 -1
  187. package/dist/performance/types.d.ts +0 -247
  188. package/dist/performance/types.d.ts.map +0 -1
  189. package/dist/performance/types.js +0 -26
  190. package/dist/performance/types.js.map +0 -1
  191. package/dist/storage/Checkpoint.d.ts +0 -128
  192. package/dist/storage/Checkpoint.d.ts.map +0 -1
  193. package/dist/storage/Checkpoint.js +0 -251
  194. package/dist/storage/Checkpoint.js.map +0 -1
  195. package/dist/storage/LightFile.d.ts +0 -227
  196. package/dist/storage/LightFile.d.ts.map +0 -1
  197. package/dist/storage/LightFile.js +0 -526
  198. package/dist/storage/LightFile.js.map +0 -1
  199. package/dist/storage/Recovery.d.ts +0 -172
  200. package/dist/storage/Recovery.d.ts.map +0 -1
  201. package/dist/storage/Recovery.js +0 -399
  202. package/dist/storage/Recovery.js.map +0 -1
  203. package/dist/storage/SHMFile.d.ts +0 -243
  204. package/dist/storage/SHMFile.d.ts.map +0 -1
  205. package/dist/storage/SHMFile.js +0 -436
  206. package/dist/storage/SHMFile.js.map +0 -1
  207. package/dist/storage/StorageEngine.d.ts +0 -146
  208. package/dist/storage/StorageEngine.d.ts.map +0 -1
  209. package/dist/storage/StorageEngine.js +0 -353
  210. package/dist/storage/StorageEngine.js.map +0 -1
  211. package/dist/storage/WALFile.d.ts +0 -248
  212. package/dist/storage/WALFile.d.ts.map +0 -1
  213. package/dist/storage/WALFile.js +0 -597
  214. package/dist/storage/WALFile.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -220
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -7
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/utils/binary.d.ts +0 -271
  220. package/dist/utils/binary.d.ts.map +0 -1
  221. package/dist/utils/binary.js +0 -454
  222. package/dist/utils/binary.js.map +0 -1
  223. package/dist/utils/file.d.ts +0 -166
  224. package/dist/utils/file.d.ts.map +0 -1
  225. package/dist/utils/file.js +0 -346
  226. package/dist/utils/file.js.map +0 -1
  227. package/dist/utils/index.d.ts +0 -6
  228. package/dist/utils/index.d.ts.map +0 -1
  229. package/dist/utils/index.js +0 -39
  230. package/dist/utils/index.js.map +0 -1
@@ -1,299 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"LightDB.js","sourceRoot":"","sources":["../../src/api/LightDB.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAgVH,wDAEC;AASD,oCAEC;AA3VD,wCAAgE;AAChE,8CAA2C;AAE3C,+CAAmD;AAanD,sCAAyC;AAEzC;;;GAGG;AACH,MAAa,OAAO;IAShB;;;;OAIG;IACH,YACI,aAA4B,EAC5B,OAEC;QAED,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,WAAW,GAAG,IAAI,GAAG,EAAE,CAAC;QAC7B,IAAI,CAAC,kBAAkB,GAAG,IAAI,gCAAkB,CAAC,IAAI,CAAC,WAA+D,CAAC,CAAC;QACvH,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC;IACxB,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAY,EAAE,UAA0B,EAAE;QAC/D,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;QAC3C,MAAM,WAAW,GAAG;YAChB,MAAM;YACN,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,IAAI;YAClC,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,EAAE,GAAG,IAAI,GAAG,IAAI;YACtD,cAAc,EAAE,OAAO,CAAC,cAAc,IAAI,IAAI;YAC9C,aAAa,EAAE,OAAO,CAAC,aAAa;SACvC,CAAC;QAER,MAAM,oBAAoB,GAAyB;YAClD,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,cAAc,EAAE,WAAW,CAAC,cAAc;SAC1C,CAAC;QAEF,IAAI,WAAW,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;YAC5C,oBAA6E,CAAC,aAAa,GAAG,WAAW,CAAC,aAAa,CAAC;QAC1H,CAAC;QAED,MAAM,aAAa,GAAG,MAAM,IAAA,6BAAmB,EAAC,IAAI,EAAE,MAAM,EAAE,oBAAoB,CAAC,CAAC;QAE9E,OAAO,IAAI,OAAO,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED;;OAEG;IACH,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,IAAW,MAAM;QACb,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,CAAC;IAC9D,CAAC;IAED;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACI,UAAU,CAAoC,IAAY,EAAE,OAAmC;QAClG,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,kBAAkB,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtD,IAAI,kBAAkB,EAAE,CAAC;YACrB,OAAO,kBAAmC,CAAC;QAC/C,CAAC;QAED,MAAM,iBAAiB,GAAyB;YAC5C,IAAI;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE;SACjC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAI,iBAAiB,CAAC,CAAC;QACxD,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,UAAiD,CAAC,CAAC;QAE9E,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;;;OAKG;IACI,aAAa,CAAC,IAAY;QAC7B,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAED;;;;;OAKG;IACI,cAAc,CAAC,IAAY;QAC9B,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,kBAAkB;QACrB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED;;;;;;;;;;;;;;;;OAgBG;IACI,KAAK,CAAC,WAAW,CAAC,QAA6B,EAAE,OAA4B;QAChF,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9D,CAAC;IAED;;;;;OAKG;IACI,KAAK,CAAC,UAAU;QACnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,OAAO,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,CAAC;IAC3C,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,QAAQ;QACjB,IAAI,CAAC,UAAU,EAAE,CAAC;QAElB,MAAM,YAAY,GAAiB,MAAM,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE,CAAC;QAEvE,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;YACxF,IAAI;YACJ,aAAa,EAAE,UAAU,CAAC,IAAI;YAC9B,UAAU,EAAE,UAAU,CAAC,QAAQ,EAAE,CAAC,UAAU;SAC/C,CAAC,CAAC,CAAC;QAEJ,OAAO;YACH,GAAG,YAAY;YACf,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,eAAe,EAAE,IAAI,CAAC,WAAW,CAAC,IAAI;YACtC,WAAW,EAAE,eAAe;SAC/B,CAAC;IACN,CAAC;IAED;;;;OAIG;IACI,SAAS;QACZ,OAAO;YACH,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM;YAC3B,IAAI,EAAE,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE;YACtC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ;YAC/B,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,YAAY;YACvC,cAAc,EAAE,IAAI,CAAC,OAAO,CAAC,cAAc;SAC9C,CAAC;IACN,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,MAAM,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,KAAK,MAAM,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,EAAE,CAAC;YACjD,UAAU,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;QAEzB,MAAM,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,UAAU;QACd,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,qBAAY,CAAC,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,aAAa,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,qBAAY,CAAC,6BAA6B,EAAE,0BAA0B,CAAC,CAAC;QACtF,CAAC;IACL,CAAC;IAED;;OAEG;IACI,gBAAgB;QACnB,OAAO,IAAI,CAAC,aAAa,CAAC;IAC9B,CAAC;CACJ;AApSD,0BAoSC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAgB,sBAAsB,CAAoC,MAA2B;IACjG,OAAO,MAAM,CAAC;AAClB,CAAC;AAED;;;;;;GAMG;AACI,KAAK,UAAU,YAAY,CAAC,IAAY,EAAE,OAAwB;IACrE,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AACvC,CAAC"}
@@ -1,100 +0,0 @@
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
@@ -1 +0,0 @@
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"}
@@ -1,263 +0,0 @@
1
- "use strict";
2
- /**
3
- * LightDB 事务实现
4
- * 提供 ACID 事务支持
5
- */
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.TransactionManager = exports.Transaction = exports.TransactionError = void 0;
8
- /**
9
- * 事务错误类
10
- */
11
- class TransactionError extends Error {
12
- constructor(message, code) {
13
- super(message);
14
- this.name = "TransactionError";
15
- this.code = code;
16
- Object.setPrototypeOf(this, TransactionError.prototype);
17
- }
18
- }
19
- exports.TransactionError = TransactionError;
20
- /**
21
- * 事务集合包装器
22
- * 提供事务内的集合操作
23
- */
24
- class TransactionCollectionWrapper {
25
- constructor(collection, transaction) {
26
- this.collection = collection;
27
- this.transaction = transaction;
28
- }
29
- async find(filter = {}) {
30
- this.transaction.ensureActive();
31
- return this.collection.find({
32
- where: filter,
33
- }).docs;
34
- }
35
- async findOne(filter) {
36
- this.transaction.ensureActive();
37
- return this.collection.findOne(filter);
38
- }
39
- async insert(doc) {
40
- this.transaction.ensureActive();
41
- const result = this.collection.insert(doc);
42
- if (!result.success) {
43
- throw new TransactionError("Failed to insert document in transaction", "INSERT_FAILED");
44
- }
45
- this.transaction.recordOperation("insert", this.collection.Name, doc);
46
- }
47
- async update(filter, update) {
48
- this.transaction.ensureActive();
49
- const result = this.collection.updateMany(filter, { $set: update });
50
- this.transaction.recordOperation("update", this.collection.Name, {
51
- filter,
52
- update,
53
- count: result.modifiedCount,
54
- });
55
- return result.modifiedCount;
56
- }
57
- async delete(filter) {
58
- this.transaction.ensureActive();
59
- const result = this.collection.deleteMany(filter);
60
- this.transaction.recordOperation("delete", this.collection.Name, {
61
- filter,
62
- count: result.deletedCount,
63
- });
64
- return result.deletedCount;
65
- }
66
- }
67
- /**
68
- * 事务类
69
- * 管理事务的生命周期和操作
70
- */
71
- class Transaction {
72
- constructor(collections, options) {
73
- this.collections = collections;
74
- this.options = {
75
- timeout: options?.timeout ?? 5000,
76
- isolationLevel: options?.isolationLevel ?? "read_committed",
77
- };
78
- this.state = "active";
79
- this.operations = [];
80
- this.startTime = Date.now();
81
- }
82
- /**
83
- * 获取事务集合
84
- */
85
- collection(name) {
86
- this.ensureActive();
87
- const collection = this.collections.get(name);
88
- if (!collection) {
89
- throw new TransactionError(`Collection "${name}" not found`, "COLLECTION_NOT_FOUND");
90
- }
91
- return new TransactionCollectionWrapper(collection, this);
92
- }
93
- /**
94
- * 确保事务处于活动状态
95
- */
96
- ensureActive() {
97
- if (this.state !== "active") {
98
- throw new TransactionError(`Transaction is not active (current state: ${this.state})`, "TRANSACTION_NOT_ACTIVE");
99
- }
100
- if (Date.now() - this.startTime > this.options.timeout) {
101
- this.state = "failed";
102
- throw new TransactionError("Transaction timed out", "TRANSACTION_TIMEOUT");
103
- }
104
- }
105
- /**
106
- * 记录操作
107
- */
108
- recordOperation(type, collectionName, data) {
109
- this.operations.push({ type, collectionName, data });
110
- }
111
- /**
112
- * 提交事务
113
- */
114
- commit() {
115
- if (this.state !== "active") {
116
- return {
117
- success: false,
118
- state: this.state,
119
- durationMs: Date.now() - this.startTime,
120
- error: `Cannot commit transaction in state: ${this.state}`,
121
- };
122
- }
123
- try {
124
- this.state = "committed";
125
- return {
126
- success: true,
127
- state: "committed",
128
- durationMs: Date.now() - this.startTime,
129
- };
130
- } catch (error) {
131
- this.state = "failed";
132
- return {
133
- success: false,
134
- state: "failed",
135
- durationMs: Date.now() - this.startTime,
136
- error: error instanceof Error ? error.message : "Unknown error",
137
- };
138
- }
139
- }
140
- /**
141
- * 回滚事务
142
- */
143
- rollback() {
144
- if (this.state !== "active") {
145
- return {
146
- success: false,
147
- state: this.state,
148
- durationMs: Date.now() - this.startTime,
149
- error: `Cannot rollback transaction in state: ${this.state}`,
150
- };
151
- }
152
- try {
153
- for (let i = this.operations.length - 1; i >= 0; i--) {
154
- const op = this.operations[i];
155
- this.undoOperation(op);
156
- }
157
- this.state = "rolled_back";
158
- return {
159
- success: true,
160
- state: "rolled_back",
161
- durationMs: Date.now() - this.startTime,
162
- };
163
- } catch (error) {
164
- this.state = "failed";
165
- return {
166
- success: false,
167
- state: "failed",
168
- durationMs: Date.now() - this.startTime,
169
- error: error instanceof Error ? error.message : "Unknown error",
170
- };
171
- }
172
- }
173
- /**
174
- * 撤销操作
175
- */
176
- undoOperation(op) {
177
- const collection = this.collections.get(op.collectionName);
178
- if (!collection) return;
179
- switch (op.type) {
180
- case "insert": {
181
- const doc = op.data;
182
- const primaryKey = collection.extractPrimaryKey(doc);
183
- collection.deleteByPrimaryKey(primaryKey);
184
- break;
185
- }
186
- case "delete": {
187
- break;
188
- }
189
- case "update": {
190
- break;
191
- }
192
- }
193
- }
194
- /**
195
- * 获取事务状态
196
- */
197
- getState() {
198
- return this.state;
199
- }
200
- /**
201
- * 获取操作数量
202
- */
203
- getOperationCount() {
204
- return this.operations.length;
205
- }
206
- }
207
- exports.Transaction = Transaction;
208
- /**
209
- * 事务管理器
210
- * 管理多个并发事务
211
- */
212
- class TransactionManager {
213
- constructor(collections) {
214
- this.collections = collections;
215
- this.activeTransactions = new Map();
216
- this.transactionCounter = 0;
217
- }
218
- /**
219
- * 开始新事务
220
- */
221
- begin(options) {
222
- const transaction = new Transaction(this.collections, options);
223
- const txId = `tx_${++this.transactionCounter}`;
224
- this.activeTransactions.set(txId, transaction);
225
- return transaction;
226
- }
227
- /**
228
- * 执行事务
229
- */
230
- async execute(callback, options) {
231
- const transaction = this.begin(options);
232
- try {
233
- await callback(transaction);
234
- return transaction.commit();
235
- } catch (error) {
236
- const rollbackResult = transaction.rollback();
237
- return {
238
- success: false,
239
- state: "failed",
240
- durationMs: rollbackResult.durationMs,
241
- error: error instanceof Error ? error.message : "Unknown error",
242
- };
243
- }
244
- }
245
- /**
246
- * 获取活动事务数量
247
- */
248
- getActiveTransactionCount() {
249
- return this.activeTransactions.size;
250
- }
251
- /**
252
- * 清理已完成的事务
253
- */
254
- cleanup() {
255
- for (const [txId, tx] of this.activeTransactions) {
256
- if (tx.getState() !== "active") {
257
- this.activeTransactions.delete(txId);
258
- }
259
- }
260
- }
261
- }
262
- exports.TransactionManager = TransactionManager;
263
- //# sourceMappingURL=Transaction.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/api/Transaction.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAYH;;GAEG;AACH,MAAa,gBAAiB,SAAQ,KAAK;IAGvC,YAAY,OAAe,EAAE,IAAY;QACrC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;IAC5D,CAAC;CACJ;AATD,4CASC;AAED;;;GAGG;AACH,MAAM,4BAA4B;IAI9B,YAAY,UAAyB,EAAE,WAAwB;QAC3D,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACnC,CAAC;IAEM,KAAK,CAAC,IAAI,CAAC,SAAkC,EAAE;QAClD,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;YACxB,KAAK,EAAE,MAAwB;SAClC,CAAC,CAAC,IAAI,CAAC;IACZ,CAAC;IAEM,KAAK,CAAC,OAAO,CAAC,MAA+B;QAChD,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAChC,OAAO,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,MAAiD,CAAC,CAAC;IACtF,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,GAAM;QACtB,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YAClB,MAAM,IAAI,gBAAgB,CAAC,0CAA0C,EAAE,eAAe,CAAC,CAAC;QAC5F,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC1E,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAA+B,EAAE,MAAkB;QACnE,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAoD,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;QAClH,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAC7D,MAAM;YACN,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,aAAa;SAC9B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,aAAa,CAAC;IAChC,CAAC;IAEM,KAAK,CAAC,MAAM,CAAC,MAA+B;QAC/C,IAAI,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,MAAoD,CAAC,CAAC;QAChG,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE;YAC7D,MAAM;YACN,KAAK,EAAE,MAAM,CAAC,YAAY;SAC7B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC,YAAY,CAAC;IAC/B,CAAC;CACJ;AAWD;;;GAGG;AACH,MAAa,WAAW;IAOpB,YAAY,WAA6D,EAAE,OAA4B;QACnG,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,OAAO,GAAG;YACX,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;YACjC,cAAc,EAAE,OAAO,EAAE,cAAc,IAAI,gBAAgB;SAC9D,CAAC;QACF,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;QACtB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,UAAU,CAAoC,IAAY;QAC7D,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,MAAM,IAAI,gBAAgB,CAAC,eAAe,IAAI,aAAa,EAAE,sBAAsB,CAAC,CAAC;QACzF,CAAC;QAED,OAAO,IAAI,4BAA4B,CAAI,UAA2B,EAAE,IAAI,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACI,YAAY;QACf,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1B,MAAM,IAAI,gBAAgB,CAAC,6CAA6C,IAAI,CAAC,KAAK,GAAG,EAAE,wBAAwB,CAAC,CAAC;QACrH,CAAC;QAED,IAAI,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACrD,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,MAAM,IAAI,gBAAgB,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAAC;QAC/E,CAAC;IACL,CAAC;IAED;;OAEG;IACI,eAAe,CAAC,IAA6B,EAAE,cAAsB,EAAE,IAAa;QACvF,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC;IAED;;OAEG;IACI,MAAM;QACT,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;gBACvC,KAAK,EAAE,uCAAuC,IAAI,CAAC,KAAK,EAAE;aAC7D,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,IAAI,CAAC,KAAK,GAAG,WAAW,CAAC;YACzB,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,WAAW;gBAClB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;aAC1C,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,QAAQ;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;gBACvC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC1B,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;gBACvC,KAAK,EAAE,yCAAyC,IAAI,CAAC,KAAK,EAAE;aAC/D,CAAC;QACN,CAAC;QAED,IAAI,CAAC;YACD,KAAK,IAAI,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;gBACnD,MAAM,EAAE,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;gBAC/B,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;YAC3B,CAAC;YAED,IAAI,CAAC,KAAK,GAAG,aAAa,CAAC;YAC3B,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,aAAa;gBACpB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;aAC1C,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,GAAG,QAAQ,CAAC;YACtB,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,QAAQ;gBACf,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,SAAS;gBACvC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACK,aAAa,CAAC,EAAmB;QACrC,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU;YAAE,OAAO;QAExB,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC;YACd,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM,GAAG,GAAG,EAAE,CAAC,IAA+B,CAAC;gBAC/C,MAAM,UAAU,GAAG,UAAU,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;gBACrD,UAAU,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAC1C,MAAM;YACV,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM;YACV,CAAC;YACD,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACZ,MAAM;YACV,CAAC;QACL,CAAC;IACL,CAAC;IAED;;OAEG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED;;OAEG;IACI,iBAAiB;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;IAClC,CAAC;CACJ;AA5JD,kCA4JC;AAED;;;GAGG;AACH,MAAa,kBAAkB;IAK3B,YAAY,WAA6D;QACrE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,kBAAkB,GAAG,IAAI,GAAG,EAAE,CAAC;QACpC,IAAI,CAAC,kBAAkB,GAAG,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAA4B;QACrC,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;QAC/C,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;QAC/C,OAAO,WAAW,CAAC;IACvB,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,OAAO,CAAC,QAA6B,EAAE,OAA4B;QAC5E,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAExC,IAAI,CAAC;YACD,MAAM,QAAQ,CAAC,WAAW,CAAC,CAAC;YAC5B,OAAO,WAAW,CAAC,MAAM,EAAE,CAAC;QAChC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,cAAc,GAAG,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC9C,OAAO;gBACH,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,QAAQ;gBACf,UAAU,EAAE,cAAc,CAAC,UAAU;gBACrC,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe;aAClE,CAAC;QACN,CAAC;IACL,CAAC;IAED;;OAEG;IACI,yBAAyB;QAC5B,OAAO,IAAI,CAAC,kBAAkB,CAAC,IAAI,CAAC;IACxC,CAAC;IAED;;OAEG;IACI,OAAO;QACV,KAAK,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC/C,IAAI,EAAE,CAAC,QAAQ,EAAE,KAAK,QAAQ,EAAE,CAAC;gBAC7B,IAAI,CAAC,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzC,CAAC;QACL,CAAC;IACL,CAAC;CACJ;AA1DD,gDA0DC"}