@yanit/jsondb 0.1.1

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 (118) hide show
  1. package/README.md +903 -0
  2. package/dist/bin/cli-export.d.ts +7 -0
  3. package/dist/bin/cli-export.d.ts.map +1 -0
  4. package/dist/bin/cli-export.js +318 -0
  5. package/dist/bin/cli-export.js.map +1 -0
  6. package/dist/bin/cli-import.d.ts +7 -0
  7. package/dist/bin/cli-import.d.ts.map +1 -0
  8. package/dist/bin/cli-import.js +298 -0
  9. package/dist/bin/cli-import.js.map +1 -0
  10. package/dist/bin/server.d.ts +7 -0
  11. package/dist/bin/server.d.ts.map +1 -0
  12. package/dist/bin/server.js +92 -0
  13. package/dist/bin/server.js.map +1 -0
  14. package/dist/examples/sql-example.d.ts +7 -0
  15. package/dist/examples/sql-example.d.ts.map +1 -0
  16. package/dist/examples/sql-example.js +131 -0
  17. package/dist/examples/sql-example.js.map +1 -0
  18. package/dist/src/BulkOp.d.ts +74 -0
  19. package/dist/src/BulkOp.d.ts.map +1 -0
  20. package/dist/src/BulkOp.js +143 -0
  21. package/dist/src/BulkOp.js.map +1 -0
  22. package/dist/src/Collection.d.ts +232 -0
  23. package/dist/src/Collection.d.ts.map +1 -0
  24. package/dist/src/Collection.js +705 -0
  25. package/dist/src/Collection.js.map +1 -0
  26. package/dist/src/Cursor.d.ts +94 -0
  27. package/dist/src/Cursor.d.ts.map +1 -0
  28. package/dist/src/Cursor.js +259 -0
  29. package/dist/src/Cursor.js.map +1 -0
  30. package/dist/src/Database.d.ts +98 -0
  31. package/dist/src/Database.d.ts.map +1 -0
  32. package/dist/src/Database.js +198 -0
  33. package/dist/src/Database.js.map +1 -0
  34. package/dist/src/Operators.d.ts +73 -0
  35. package/dist/src/Operators.d.ts.map +1 -0
  36. package/dist/src/Operators.js +339 -0
  37. package/dist/src/Operators.js.map +1 -0
  38. package/dist/src/QueryCache.d.ts +87 -0
  39. package/dist/src/QueryCache.d.ts.map +1 -0
  40. package/dist/src/QueryCache.js +155 -0
  41. package/dist/src/QueryCache.js.map +1 -0
  42. package/dist/src/SQLExecutor.d.ts +60 -0
  43. package/dist/src/SQLExecutor.d.ts.map +1 -0
  44. package/dist/src/SQLExecutor.js +317 -0
  45. package/dist/src/SQLExecutor.js.map +1 -0
  46. package/dist/src/SQLParser.d.ts +181 -0
  47. package/dist/src/SQLParser.d.ts.map +1 -0
  48. package/dist/src/SQLParser.js +640 -0
  49. package/dist/src/SQLParser.js.map +1 -0
  50. package/dist/src/Schema.d.ts +92 -0
  51. package/dist/src/Schema.d.ts.map +1 -0
  52. package/dist/src/Schema.js +253 -0
  53. package/dist/src/Schema.js.map +1 -0
  54. package/dist/src/Transaction.d.ts +118 -0
  55. package/dist/src/Transaction.d.ts.map +1 -0
  56. package/dist/src/Transaction.js +233 -0
  57. package/dist/src/Transaction.js.map +1 -0
  58. package/dist/src/Utils.d.ts +68 -0
  59. package/dist/src/Utils.d.ts.map +1 -0
  60. package/dist/src/Utils.js +187 -0
  61. package/dist/src/Utils.js.map +1 -0
  62. package/dist/src/errors.d.ts +58 -0
  63. package/dist/src/errors.d.ts.map +1 -0
  64. package/dist/src/errors.js +85 -0
  65. package/dist/src/errors.js.map +1 -0
  66. package/dist/src/index.d.ts +39 -0
  67. package/dist/src/index.d.ts.map +1 -0
  68. package/dist/src/index.js +44 -0
  69. package/dist/src/index.js.map +1 -0
  70. package/dist/test/basic.test.d.ts +5 -0
  71. package/dist/test/basic.test.d.ts.map +1 -0
  72. package/dist/test/basic.test.js +283 -0
  73. package/dist/test/basic.test.js.map +1 -0
  74. package/dist/test/index.test.d.ts +5 -0
  75. package/dist/test/index.test.d.ts.map +1 -0
  76. package/dist/test/index.test.js +126 -0
  77. package/dist/test/index.test.js.map +1 -0
  78. package/dist/test/jsonb.test.d.ts +5 -0
  79. package/dist/test/jsonb.test.d.ts.map +1 -0
  80. package/dist/test/jsonb.test.js +165 -0
  81. package/dist/test/jsonb.test.js.map +1 -0
  82. package/dist/test/optimization.test.d.ts +6 -0
  83. package/dist/test/optimization.test.d.ts.map +1 -0
  84. package/dist/test/optimization.test.js +196 -0
  85. package/dist/test/optimization.test.js.map +1 -0
  86. package/dist/test/schema.test.d.ts +5 -0
  87. package/dist/test/schema.test.d.ts.map +1 -0
  88. package/dist/test/schema.test.js +197 -0
  89. package/dist/test/schema.test.js.map +1 -0
  90. package/dist/test/sql.test.d.ts +7 -0
  91. package/dist/test/sql.test.d.ts.map +1 -0
  92. package/dist/test/sql.test.js +21 -0
  93. package/dist/test/sql.test.js.map +1 -0
  94. package/package.json +73 -0
  95. package/src/BulkOp.js +181 -0
  96. package/src/BulkOp.ts +191 -0
  97. package/src/Collection.js +843 -0
  98. package/src/Collection.ts +896 -0
  99. package/src/Cursor.js +315 -0
  100. package/src/Cursor.ts +319 -0
  101. package/src/Database.js +244 -0
  102. package/src/Database.ts +268 -0
  103. package/src/Operators.js +382 -0
  104. package/src/Operators.ts +375 -0
  105. package/src/QueryCache.js +190 -0
  106. package/src/QueryCache.ts +208 -0
  107. package/src/SQLExecutor.ts +391 -0
  108. package/src/SQLParser.ts +814 -0
  109. package/src/Schema.js +292 -0
  110. package/src/Schema.ts +317 -0
  111. package/src/Transaction.js +291 -0
  112. package/src/Transaction.ts +313 -0
  113. package/src/Utils.js +205 -0
  114. package/src/Utils.ts +205 -0
  115. package/src/errors.js +93 -0
  116. package/src/errors.ts +93 -0
  117. package/src/index.js +90 -0
  118. package/src/index.ts +106 -0
@@ -0,0 +1,233 @@
1
+ /**
2
+ * 简单事务模块
3
+ * 提供多操作的原子性保证
4
+ */
5
+ import { deepClone } from './Utils.js';
6
+ /**
7
+ * 事务状态
8
+ */
9
+ export const TransactionStatus = {
10
+ ACTIVE: 'active',
11
+ COMMITTED: 'committed',
12
+ ROLLED_BACK: 'rolled_back',
13
+ FAILED: 'failed'
14
+ };
15
+ /**
16
+ * 操作类型
17
+ */
18
+ export const OperationType = {
19
+ INSERT: 'insert',
20
+ UPDATE: 'update',
21
+ DELETE: 'delete'
22
+ };
23
+ /**
24
+ * 事务类
25
+ */
26
+ export class Transaction {
27
+ collections;
28
+ operations;
29
+ status;
30
+ backup;
31
+ results;
32
+ constructor(collections) {
33
+ this.collections = Array.isArray(collections) ? collections : [collections];
34
+ this.operations = [];
35
+ this.status = TransactionStatus.ACTIVE;
36
+ this.backup = new Map();
37
+ this.results = [];
38
+ }
39
+ /**
40
+ * 备份集合数据
41
+ */
42
+ async _backup() {
43
+ for (const collection of this.collections) {
44
+ await collection._load();
45
+ // 深拷贝备份
46
+ this.backup.set(collection.name, {
47
+ documents: deepClone(collection._data._documents),
48
+ indexes: deepClone(collection._data._indexes),
49
+ meta: deepClone(collection._data._meta)
50
+ });
51
+ }
52
+ }
53
+ /**
54
+ * 恢复集合数据
55
+ */
56
+ async _restore() {
57
+ for (const [name, data] of this.backup.entries()) {
58
+ const collection = this.collections.find(c => c.name === name);
59
+ if (collection && collection._data) {
60
+ collection._data._documents = data.documents;
61
+ collection._data._indexes = data.indexes;
62
+ collection._data._meta = data.meta;
63
+ }
64
+ }
65
+ }
66
+ /**
67
+ * 添加插入操作
68
+ */
69
+ insert(collection, docs) {
70
+ if (this.status !== TransactionStatus.ACTIVE) {
71
+ throw new Error('事务已不再活跃');
72
+ }
73
+ if (!this.collections.includes(collection)) {
74
+ throw new Error('集合不在事务范围内');
75
+ }
76
+ this.operations.push({
77
+ type: OperationType.INSERT,
78
+ collection,
79
+ docs: Array.isArray(docs) ? docs : [docs]
80
+ });
81
+ return this;
82
+ }
83
+ /**
84
+ * 添加更新操作
85
+ */
86
+ update(collection, query, update, options = {}) {
87
+ if (this.status !== TransactionStatus.ACTIVE) {
88
+ throw new Error('事务已不再活跃');
89
+ }
90
+ if (!this.collections.includes(collection)) {
91
+ throw new Error('集合不在事务范围内');
92
+ }
93
+ this.operations.push({
94
+ type: OperationType.UPDATE,
95
+ collection,
96
+ query,
97
+ update,
98
+ options
99
+ });
100
+ return this;
101
+ }
102
+ /**
103
+ * 添加删除操作
104
+ */
105
+ delete(collection, query) {
106
+ if (this.status !== TransactionStatus.ACTIVE) {
107
+ throw new Error('事务已不再活跃');
108
+ }
109
+ if (!this.collections.includes(collection)) {
110
+ throw new Error('集合不在事务范围内');
111
+ }
112
+ this.operations.push({
113
+ type: OperationType.DELETE,
114
+ collection,
115
+ query
116
+ });
117
+ return this;
118
+ }
119
+ /**
120
+ * 提交事务
121
+ */
122
+ async commit() {
123
+ if (this.status !== TransactionStatus.ACTIVE) {
124
+ throw new Error('事务已不再活跃');
125
+ }
126
+ try {
127
+ // 1. 备份数据
128
+ await this._backup();
129
+ // 2. 执行所有操作
130
+ for (const op of this.operations) {
131
+ const result = await this._executeOperation(op);
132
+ this.results.push(result);
133
+ }
134
+ // 3. 保存所有集合
135
+ for (const collection of this.collections) {
136
+ await collection._save();
137
+ // 失效缓存
138
+ collection._cache = null;
139
+ collection._cacheTime = 0;
140
+ }
141
+ this.status = TransactionStatus.COMMITTED;
142
+ return {
143
+ success: true,
144
+ operations: this.results
145
+ };
146
+ }
147
+ catch (error) {
148
+ // 执行失败,回滚
149
+ await this.rollback();
150
+ this.status = TransactionStatus.FAILED;
151
+ return {
152
+ success: false,
153
+ error: error.message
154
+ };
155
+ }
156
+ }
157
+ /**
158
+ * 执行单个操作
159
+ */
160
+ async _executeOperation(op) {
161
+ const { matchQuery, applyUpdate } = await import('./Operators.js');
162
+ const { generateId } = await import('./Utils.js');
163
+ switch (op.type) {
164
+ case OperationType.INSERT: {
165
+ const now = new Date().toISOString();
166
+ const docs = op.docs.map(doc => ({
167
+ ...deepClone(doc),
168
+ _id: doc._id || generateId(),
169
+ createdAt: doc.createdAt || now
170
+ }));
171
+ op.collection._data._documents.push(...docs);
172
+ return { type: 'insert', count: docs.length, ids: docs.map(d => d._id) };
173
+ }
174
+ case OperationType.UPDATE: {
175
+ let count = 0;
176
+ for (let i = 0; i < op.collection._data._documents.length; i++) {
177
+ const doc = op.collection._data._documents[i];
178
+ if (matchQuery(doc, op.query)) {
179
+ const updated = applyUpdate(doc, op.update);
180
+ updated.updatedAt = new Date().toISOString();
181
+ op.collection._data._documents[i] = updated;
182
+ count++;
183
+ }
184
+ }
185
+ return { type: 'update', count };
186
+ }
187
+ case OperationType.DELETE: {
188
+ const initial = op.collection._data._documents.length;
189
+ op.collection._data._documents = op.collection._data._documents.filter(doc => !matchQuery(doc, op.query));
190
+ return { type: 'delete', count: initial - op.collection._data._documents.length };
191
+ }
192
+ default:
193
+ throw new Error(`未知操作类型:${op.type}`);
194
+ }
195
+ }
196
+ /**
197
+ * 回滚事务
198
+ */
199
+ async rollback() {
200
+ if (this.status === TransactionStatus.COMMITTED) {
201
+ throw new Error('已提交的事务无法回滚');
202
+ }
203
+ await this._restore();
204
+ this.status = TransactionStatus.ROLLED_BACK;
205
+ }
206
+ /**
207
+ * 获取事务状态
208
+ */
209
+ getStatus() {
210
+ return this.status;
211
+ }
212
+ /**
213
+ * 获取操作数量
214
+ */
215
+ getOperationCount() {
216
+ return this.operations.length;
217
+ }
218
+ }
219
+ /**
220
+ * 创建事务
221
+ */
222
+ export function createTransaction(collections) {
223
+ return new Transaction(collections);
224
+ }
225
+ /**
226
+ * 执行事务(快捷方式)
227
+ */
228
+ export async function withTransaction(collections, fn) {
229
+ const tx = createTransaction(collections);
230
+ await fn(tx);
231
+ return await tx.commit();
232
+ }
233
+ //# sourceMappingURL=Transaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Transaction.js","sourceRoot":"","sources":["../../src/Transaction.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * 工具函数模块
3
+ */
4
+ /**
5
+ * 生成唯一 ID(类似 MongoDB ObjectId 简化版)
6
+ * @returns 24 位十六进制字符串
7
+ */
8
+ export declare function generateId(): string;
9
+ /**
10
+ * 深拷贝对象
11
+ * @param obj - 要拷贝的对象
12
+ * @returns 拷贝后的对象
13
+ */
14
+ export declare function deepClone<T>(obj: T): T;
15
+ /**
16
+ * 获取嵌套对象的值
17
+ * @param obj - 对象
18
+ * @param path - 路径,如 'user.name'
19
+ * @returns 值
20
+ */
21
+ export declare function getNestedValue(obj: Record<string, unknown>, path: string): unknown;
22
+ /**
23
+ * 设置嵌套对象的值
24
+ * @param obj - 对象
25
+ * @param path - 路径,如 'user.name'
26
+ * @param value - 值
27
+ */
28
+ export declare function setNestedValue(obj: Record<string, unknown>, path: string, value: unknown): void;
29
+ /**
30
+ * 删除嵌套对象的属性
31
+ * @param obj - 对象
32
+ * @param path - 路径,如 'user.name'
33
+ * @returns 是否删除成功
34
+ */
35
+ export declare function deleteNestedValue(obj: Record<string, unknown>, path: string): boolean;
36
+ /**
37
+ * 确保目录存在
38
+ * @param dirPath - 目录路径
39
+ */
40
+ export declare function ensureDir(dirPath: string): void;
41
+ /**
42
+ * 检查值是否匹配类型
43
+ * @param value - 值
44
+ * @param type - 类型名称
45
+ * @returns 是否匹配
46
+ */
47
+ export declare function isType(value: unknown, type: string): boolean;
48
+ /**
49
+ * 比较两个值
50
+ * @param a - 值 a
51
+ * @param b - 值 b
52
+ * @returns -1, 0, 1
53
+ */
54
+ export declare function compareValues(a: unknown, b: unknown): number;
55
+ /**
56
+ * 将排序规范转换为比较函数
57
+ * @param sortSpec - 排序规范,如 { age: -1, name: 1 }
58
+ * @returns 比较函数
59
+ */
60
+ export declare function createSortFunction(sortSpec: Record<string, number>): (a: Record<string, unknown>, b: Record<string, unknown>) => number;
61
+ /**
62
+ * 投影文档字段
63
+ * @param doc - 文档
64
+ * @param projection - 投影规范
65
+ * @returns 投影后的文档
66
+ */
67
+ export declare function projectDocument(doc: Record<string, unknown>, projection?: Record<string, unknown>): Record<string, unknown>;
68
+ //# sourceMappingURL=Utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.d.ts","sourceRoot":"","sources":["../../src/Utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAOnC;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAEtC;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBlF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAa/F;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAYrF;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED;;;;;GAKG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAW5D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,GAAG,MAAM,CAO5D;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAgBvI;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoC3H"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * 工具函数模块
3
+ */
4
+ import { createHash } from 'crypto';
5
+ import { existsSync, mkdirSync } from 'fs';
6
+ import { dirname } from 'path';
7
+ /**
8
+ * 生成唯一 ID(类似 MongoDB ObjectId 简化版)
9
+ * @returns 24 位十六进制字符串
10
+ */
11
+ export function generateId() {
12
+ const timestamp = Math.floor(Date.now() / 1000).toString(16).padStart(8, '0');
13
+ const randomPart = createHash('sha256')
14
+ .update(Math.random().toString() + Date.now().toString())
15
+ .digest('hex')
16
+ .substring(0, 16);
17
+ return timestamp + randomPart;
18
+ }
19
+ /**
20
+ * 深拷贝对象
21
+ * @param obj - 要拷贝的对象
22
+ * @returns 拷贝后的对象
23
+ */
24
+ export function deepClone(obj) {
25
+ return JSON.parse(JSON.stringify(obj));
26
+ }
27
+ /**
28
+ * 获取嵌套对象的值
29
+ * @param obj - 对象
30
+ * @param path - 路径,如 'user.name'
31
+ * @returns 值
32
+ */
33
+ export function getNestedValue(obj, path) {
34
+ if (!path || typeof path !== 'string') {
35
+ return obj;
36
+ }
37
+ const keys = path.split('.');
38
+ let result = obj;
39
+ for (const key of keys) {
40
+ if (result === null || result === undefined) {
41
+ return undefined;
42
+ }
43
+ result = result[key];
44
+ }
45
+ return result;
46
+ }
47
+ /**
48
+ * 设置嵌套对象的值
49
+ * @param obj - 对象
50
+ * @param path - 路径,如 'user.name'
51
+ * @param value - 值
52
+ */
53
+ export function setNestedValue(obj, path, value) {
54
+ const keys = path.split('.');
55
+ let current = obj;
56
+ for (let i = 0; i < keys.length - 1; i++) {
57
+ const key = keys[i];
58
+ if (!(key in current)) {
59
+ current[key] = {};
60
+ }
61
+ current = current[key];
62
+ }
63
+ current[keys[keys.length - 1]] = value;
64
+ }
65
+ /**
66
+ * 删除嵌套对象的属性
67
+ * @param obj - 对象
68
+ * @param path - 路径,如 'user.name'
69
+ * @returns 是否删除成功
70
+ */
71
+ export function deleteNestedValue(obj, path) {
72
+ const keys = path.split('.');
73
+ let current = obj;
74
+ for (let i = 0; i < keys.length - 1; i++) {
75
+ if (!(keys[i] in current)) {
76
+ return false;
77
+ }
78
+ current = current[keys[i]];
79
+ }
80
+ return delete current[keys[keys.length - 1]];
81
+ }
82
+ /**
83
+ * 确保目录存在
84
+ * @param dirPath - 目录路径
85
+ */
86
+ export function ensureDir(dirPath) {
87
+ if (!existsSync(dirPath)) {
88
+ mkdirSync(dirname(dirPath), { recursive: true });
89
+ }
90
+ }
91
+ /**
92
+ * 检查值是否匹配类型
93
+ * @param value - 值
94
+ * @param type - 类型名称
95
+ * @returns 是否匹配
96
+ */
97
+ export function isType(value, type) {
98
+ if (type === 'array') {
99
+ return Array.isArray(value);
100
+ }
101
+ if (type === 'null') {
102
+ return value === null;
103
+ }
104
+ if (type === 'object') {
105
+ return value !== null && typeof value === 'object' && !Array.isArray(value);
106
+ }
107
+ return typeof value === type;
108
+ }
109
+ /**
110
+ * 比较两个值
111
+ * @param a - 值 a
112
+ * @param b - 值 b
113
+ * @returns -1, 0, 1
114
+ */
115
+ export function compareValues(a, b) {
116
+ if (a === b)
117
+ return 0;
118
+ if (a === null)
119
+ return -1;
120
+ if (b === null)
121
+ return 1;
122
+ if (a < b)
123
+ return -1;
124
+ if (a > b)
125
+ return 1;
126
+ return 0;
127
+ }
128
+ /**
129
+ * 将排序规范转换为比较函数
130
+ * @param sortSpec - 排序规范,如 { age: -1, name: 1 }
131
+ * @returns 比较函数
132
+ */
133
+ export function createSortFunction(sortSpec) {
134
+ const keys = Object.keys(sortSpec);
135
+ return (a, b) => {
136
+ for (const key of keys) {
137
+ const direction = sortSpec[key];
138
+ const aVal = getNestedValue(a, key);
139
+ const bVal = getNestedValue(b, key);
140
+ const cmp = compareValues(aVal, bVal);
141
+ if (cmp !== 0) {
142
+ return cmp * direction;
143
+ }
144
+ }
145
+ return 0;
146
+ };
147
+ }
148
+ /**
149
+ * 投影文档字段
150
+ * @param doc - 文档
151
+ * @param projection - 投影规范
152
+ * @returns 投影后的文档
153
+ */
154
+ export function projectDocument(doc, projection) {
155
+ if (!projection) {
156
+ return deepClone(doc);
157
+ }
158
+ const result = {};
159
+ const keys = Object.keys(projection);
160
+ // 检查是包含模式还是排除模式
161
+ let isIncludeMode = false;
162
+ for (const key of keys) {
163
+ if (key !== '_id' && projection[key]) {
164
+ isIncludeMode = true;
165
+ break;
166
+ }
167
+ }
168
+ // 处理 _id 字段
169
+ if (projection._id !== undefined) {
170
+ if (projection._id) {
171
+ result._id = doc._id;
172
+ }
173
+ }
174
+ else if (isIncludeMode) {
175
+ result._id = doc._id;
176
+ }
177
+ // 处理其他字段
178
+ for (const key of keys) {
179
+ if (key === '_id')
180
+ continue;
181
+ if (projection[key]) {
182
+ result[key] = getNestedValue(doc, key);
183
+ }
184
+ }
185
+ return result;
186
+ }
187
+ //# sourceMappingURL=Utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Utils.js","sourceRoot":"","sources":["../../src/Utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * JSONDB 错误类定义
3
+ */
4
+ /**
5
+ * 基础错误类
6
+ */
7
+ export declare class JSONDBError extends Error {
8
+ constructor(message: string);
9
+ }
10
+ /**
11
+ * 数据库不存在错误
12
+ */
13
+ export declare class DatabaseNotFoundError extends JSONDBError {
14
+ constructor(dbPath: string);
15
+ }
16
+ /**
17
+ * 数据库已存在错误
18
+ */
19
+ export declare class DatabaseExistsError extends JSONDBError {
20
+ constructor(dbPath: string);
21
+ }
22
+ /**
23
+ * 集合不存在错误
24
+ */
25
+ export declare class CollectionNotFoundError extends JSONDBError {
26
+ constructor(collectionName: string);
27
+ }
28
+ /**
29
+ * 集合已存在错误
30
+ */
31
+ export declare class CollectionExistsError extends JSONDBError {
32
+ constructor(collectionName: string);
33
+ }
34
+ /**
35
+ * 文档未找到错误
36
+ */
37
+ export declare class DocumentNotFoundError extends JSONDBError {
38
+ constructor(query: Record<string, unknown>);
39
+ }
40
+ /**
41
+ * 索引错误
42
+ */
43
+ export declare class IndexError extends JSONDBError {
44
+ constructor(message: string);
45
+ }
46
+ /**
47
+ * 查询错误
48
+ */
49
+ export declare class QueryError extends JSONDBError {
50
+ constructor(message: string);
51
+ }
52
+ /**
53
+ * 验证错误
54
+ */
55
+ export declare class ValidationError extends JSONDBError {
56
+ constructor(message: string);
57
+ }
58
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;gBACxB,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,MAAM,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,WAAW;gBACtC,MAAM,EAAE,MAAM;CAI3B;AAED;;GAEG;AACH,qBAAa,uBAAwB,SAAQ,WAAW;gBAC1C,cAAc,EAAE,MAAM;CAInC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,cAAc,EAAE,MAAM;CAInC;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAI3C;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,WAAW;gBAC7B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * JSONDB 错误类定义
3
+ */
4
+ /**
5
+ * 基础错误类
6
+ */
7
+ export class JSONDBError extends Error {
8
+ constructor(message) {
9
+ super(message);
10
+ this.name = 'JSONDBError';
11
+ }
12
+ }
13
+ /**
14
+ * 数据库不存在错误
15
+ */
16
+ export class DatabaseNotFoundError extends JSONDBError {
17
+ constructor(dbPath) {
18
+ super(`数据库不存在:${dbPath}`);
19
+ this.name = 'DatabaseNotFoundError';
20
+ }
21
+ }
22
+ /**
23
+ * 数据库已存在错误
24
+ */
25
+ export class DatabaseExistsError extends JSONDBError {
26
+ constructor(dbPath) {
27
+ super(`数据库已存在:${dbPath}`);
28
+ this.name = 'DatabaseExistsError';
29
+ }
30
+ }
31
+ /**
32
+ * 集合不存在错误
33
+ */
34
+ export class CollectionNotFoundError extends JSONDBError {
35
+ constructor(collectionName) {
36
+ super(`集合不存在:${collectionName}`);
37
+ this.name = 'CollectionNotFoundError';
38
+ }
39
+ }
40
+ /**
41
+ * 集合已存在错误
42
+ */
43
+ export class CollectionExistsError extends JSONDBError {
44
+ constructor(collectionName) {
45
+ super(`集合已存在:${collectionName}`);
46
+ this.name = 'CollectionExistsError';
47
+ }
48
+ }
49
+ /**
50
+ * 文档未找到错误
51
+ */
52
+ export class DocumentNotFoundError extends JSONDBError {
53
+ constructor(query) {
54
+ super(`文档未找到:${JSON.stringify(query)}`);
55
+ this.name = 'DocumentNotFoundError';
56
+ }
57
+ }
58
+ /**
59
+ * 索引错误
60
+ */
61
+ export class IndexError extends JSONDBError {
62
+ constructor(message) {
63
+ super(message);
64
+ this.name = 'IndexError';
65
+ }
66
+ }
67
+ /**
68
+ * 查询错误
69
+ */
70
+ export class QueryError extends JSONDBError {
71
+ constructor(message) {
72
+ super(message);
73
+ this.name = 'QueryError';
74
+ }
75
+ }
76
+ /**
77
+ * 验证错误
78
+ */
79
+ export class ValidationError extends JSONDBError {
80
+ constructor(message) {
81
+ super(message);
82
+ this.name = 'ValidationError';
83
+ }
84
+ }
85
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IACpC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;IAC5B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,YAAY,MAAc;QACxB,KAAK,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,mBAAoB,SAAQ,WAAW;IAClD,YAAY,MAAc;QACxB,KAAK,CAAC,UAAU,MAAM,EAAE,CAAC,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,uBAAwB,SAAQ,WAAW;IACtD,YAAY,cAAsB;QAChC,KAAK,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,yBAAyB,CAAC;IACxC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,YAAY,cAAsB;QAChC,KAAK,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,qBAAsB,SAAQ,WAAW;IACpD,YAAY,KAA8B;QACxC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxC,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,WAAW;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,UAAW,SAAQ,WAAW;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;IAC3B,CAAC;CACF;AAED;;GAEG;AACH,MAAM,OAAO,eAAgB,SAAQ,WAAW;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}