tbdb 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 (65) hide show
  1. package/dist/adapter/MongoDB/MongoDBAdapter.d.ts +59 -0
  2. package/dist/adapter/MongoDB/index.d.ts +1 -0
  3. package/dist/adapter/MongoDB/lib/docType.d.ts +9 -0
  4. package/dist/adapter/MongoDB/lib/normalizeProjection.d.ts +13 -0
  5. package/dist/adapter/MongoDB/lib/normalizeSort.d.ts +3 -0
  6. package/dist/adapter/MongoDB/test/base.test.d.ts +1 -0
  7. package/dist/adapter/MongoDB/test/docType.test.d.ts +1 -0
  8. package/dist/adapter/MongoDB/test/fitler.test.d.ts +1 -0
  9. package/dist/adapter/MongoDB/test/getTestMongo.d.ts +1 -0
  10. package/dist/adapter/MongoDB/test/setMany.test.d.ts +1 -0
  11. package/dist/adapter/MongoDB/test/updateOne.test.d.ts +1 -0
  12. package/dist/adapter/MongoDB/useMongoDB.d.ts +4 -0
  13. package/dist/adapter/SQLite/SQLiteAdapter.d.ts +49 -0
  14. package/dist/adapter/SQLite/index.d.ts +1 -0
  15. package/dist/adapter/SQLite/test/sqlite-find-sort.test.d.ts +1 -0
  16. package/dist/adapter/SQLite/test/sqlite-merge-union.test.d.ts +1 -0
  17. package/dist/adapter/SQLite/test/sqlite-overwrite.test.d.ts +1 -0
  18. package/dist/adapter/SQLite/test/sqlite-zstd.test.d.ts +1 -0
  19. package/dist/adapter/SQLite/test/sqlite.test.d.ts +1 -0
  20. package/dist/adapter/SQLite/utils/matcher.d.ts +9 -0
  21. package/dist/adapter/SQLite/utils/mongoToSql.d.ts +10 -0
  22. package/dist/adapter/SQLite/utils/patch.d.ts +10 -0
  23. package/dist/adapter/SQLite/utils/serializer.d.ts +14 -0
  24. package/dist/adapter/SQLite/utils/zstdHelper.d.ts +12 -0
  25. package/dist/adapter/adapter.d.ts +237 -0
  26. package/dist/benchmark/1-single-crud.bench.d.ts +1 -0
  27. package/dist/benchmark/2-batch-crud.bench.d.ts +1 -0
  28. package/dist/benchmark/3-paging.bench.d.ts +1 -0
  29. package/dist/benchmark/base.try.d.ts +1 -0
  30. package/dist/benchmark/utils.d.ts +15 -0
  31. package/dist/core/Table.d.ts +240 -0
  32. package/dist/core/backup.d.ts +38 -0
  33. package/dist/core/check.d.ts +28 -0
  34. package/dist/core/defineTable.d.ts +26 -0
  35. package/dist/core/event.d.ts +0 -0
  36. package/dist/core/join.d.ts +23 -0
  37. package/dist/core/list.d.ts +87 -0
  38. package/dist/core/schema.d.ts +9 -0
  39. package/dist/core/types.d.ts +280 -0
  40. package/dist/index.d.ts +6 -0
  41. package/dist/index.js +6287 -0
  42. package/dist/rslib-runtime.js +18 -0
  43. package/dist/test/backup/backup.try.d.ts +1 -0
  44. package/dist/test/backup-test.test.d.ts +1 -0
  45. package/dist/test/bulk-update.test.d.ts +1 -0
  46. package/dist/test/getTestTable.d.ts +5 -0
  47. package/dist/test/map-set-types.test.d.ts +1 -0
  48. package/dist/test/null-undefined-query.test.d.ts +1 -0
  49. package/dist/test/sort-type.test.d.ts +1 -0
  50. package/dist/test/table-doc-api.test.d.ts +1 -0
  51. package/dist/test/table-doc.test.d.ts +1 -0
  52. package/dist/test/table-filter.test.d.ts +1 -0
  53. package/dist/test/table-join.test.d.ts +1 -0
  54. package/dist/test/table-kv.test.d.ts +1 -0
  55. package/dist/test/table-list.test.d.ts +1 -0
  56. package/dist/test/table-markdelete.test.d.ts +1 -0
  57. package/dist/test/table-undfined.test.d.ts +1 -0
  58. package/dist/test/table-update.test.d.ts +1 -0
  59. package/dist/test/try/delete.try.d.ts +1 -0
  60. package/dist/test/try/doc.try.d.ts +5 -0
  61. package/dist/test/try/getTestUserTable.d.ts +5 -0
  62. package/dist/test/try/insert.try.d.ts +5 -0
  63. package/dist/test/try//345/210/233/345/273/272350/344/270/207/346/225/260/346/215/256.d.ts +2 -0
  64. package/dist/test/try//346/223/215/344/275/234350/344/270/207/346/225/260/346/215/256.d.ts +1 -0
  65. package/package.json +45 -0
@@ -0,0 +1,280 @@
1
+ import { ITableDoc } from "../adapter/adapter";
2
+ /** Table 的基本类型
3
+ * 这格式可以直接存入 Table 后取出时,类型不会变化,Table 会保持其原始类型
4
+ */
5
+ export type ITablePrimitive = string | number | boolean | null | undefined | Date | RegExp | Map<any, any> | Set<any> | bigint | Blob | File | ArrayBuffer | DataView | Int8Array | Int16Array | Int32Array | Uint8Array | Uint8ClampedArray | Uint16Array | Uint32Array | Float32Array | Float64Array | BigInt64Array | BigUint64Array;
6
+ /**
7
+ * Table 的数据类型,可以是基本类型、对象或数组
8
+ *
9
+ * 对象会在存储前进行 Key 排序,以确保 MongoDB, sqlite 匹配对象更容易
10
+ * 也就是说对象 keys 顺序会丢失
11
+ */
12
+ export type ITableValue = ITablePrimitive | {
13
+ [field: string]: ITableValue;
14
+ } | ITableValue[];
15
+ /**
16
+ * Table 查询过滤器定义,
17
+ * 过滤器用来描述查询文档时的条件
18
+ *
19
+ */
20
+ export type ITableFilter = {
21
+ [field: string]: ITableQuery;
22
+ } | {
23
+ $and?: {
24
+ [field: string]: ITableQuery;
25
+ }[];
26
+ } | {
27
+ $or?: {
28
+ [field: string]: ITableQuery;
29
+ }[];
30
+ } | {
31
+ $nor?: {
32
+ [field: string]: ITableQuery;
33
+ }[];
34
+ };
35
+ export type ITableQuery = ITableValue | ITableMatchOp | ITableMatchLogic;
36
+ /**
37
+ * Table 逻辑操作定义
38
+ */
39
+ export interface ITableMatchLogic {
40
+ /** 多个条件同时成立 */
41
+ $and?: ITableMatchOp[];
42
+ /** 多个条件中至少一个成立 */
43
+ $or?: (ITableMatchOp | ITableValue)[];
44
+ /** 多个条件都不成立 */
45
+ $nor?: (ITableMatchOp | ITableValue)[];
46
+ /** 条件不成立 */
47
+ $not?: ITableMatchOp | ITableValue | Omit<ITableMatchLogic, "$not">;
48
+ }
49
+ /**
50
+ * Table 匹配操作定义
51
+ */
52
+ export interface ITableMatchOp {
53
+ /**
54
+ * 等于
55
+ *
56
+ * 相当于 field === value\
57
+ * 对于对象类型,会要求字段和值完全匹配(包括嵌套对象),顺序无关\
58
+ * 如果目标字段是数组,查询是非数组,则表示数组中包含该值(相当于 arr.includes(value))\
59
+ * 如果目标字段是数组,查询也是数组,则表示数组要完全匹配(包括顺序)
60
+ *
61
+ */
62
+ $eq?: ITableValue;
63
+ /** 不等于
64
+ *
65
+ * 相当于 field !== value\
66
+ * 对于对象类型,会要求字段和值完全匹配(包括嵌套对象),顺序无关
67
+ * 如果目标字段是数组,查询是非数组,则表示数组中不包含该值(相当于 !arr.includes(value))\
68
+ * 如果目标字段是数组,查询也是数组,则表示数组不完全匹配(包括顺序)
69
+ */
70
+ $ne?: any;
71
+ /**
72
+ * 大于
73
+ *
74
+ * 相当于 field > value\
75
+ * Date 类型会比较时间戳\
76
+ * 二进制数据会进行 Byte-by-byte 比较\
77
+ * 如果目标字段是数组,只要有一个元素满足条件即匹配成功(相当于 arr.some(el => el > value))
78
+ */
79
+ $gt?: any;
80
+ /** 大于等于
81
+ *
82
+ * 相当于 field >= value\
83
+ * Date 类型会比较时间戳
84
+ * 二进制数据会进行 Byte-by-byte 比较\
85
+ * 如果目标字段是数组,只要有一个元素满足条件即匹配成功(相当于 arr.some(el => el >= value))
86
+ */
87
+ $gte?: any;
88
+ /** 小于
89
+ *
90
+ * 相当于 field < value\
91
+ * Date 类型会比较时间戳\
92
+ * 二进制数据会进行 Byte-by-byte 比较\
93
+ * 如果目标字段是数组,只要有一个元素满足条件即匹配成功(相当于 arr.some(el => el < value))
94
+ */
95
+ $lt?: any;
96
+ /** 小于等于
97
+ *
98
+ * 相当于 field <= value\
99
+ * Date 类型会比较时间戳\
100
+ * 二进制数据会进行 Byte-by-byte 比较\
101
+ * 如果目标字段是数组,只要有一个元素满足条件即匹配成功(相当于 arr.some(el => el <= value))
102
+ */
103
+ $lte?: any;
104
+ /** 包含于
105
+ *
106
+ * 相当于 valueArray.includes(field)
107
+ */
108
+ $in?: any[];
109
+ /** 不包含于
110
+ * 相当于 !valueArray.includes(field)
111
+ */
112
+ $nin?: any[];
113
+ /** 模糊匹配(仅适用于字符串字段)
114
+ *
115
+ * 支持 `%` 通配符,表示任意字符序列\
116
+ * 例如:`'foo%'` 可以匹配 `'foo'`、`'foobar'`、`'foo123'` 等
117
+ */
118
+ $like?: string;
119
+ /** 正则表达式匹配(仅适用于字符串字段)
120
+ *
121
+ * 使用 JavaScript 正则表达式语法\
122
+ * 例如:`'^foo.*bar$'` 可以匹配以 `'foo'` 开头、以 `'bar'` 结尾的字符串
123
+ */
124
+ $regex?: string;
125
+ /** 字段是否存在
126
+ *
127
+ * true 表示字段必须存在且不为 null\
128
+ * false 表示字段不存在或值为 null
129
+ */
130
+ $exists?: boolean;
131
+ /**
132
+ * 对数组元素进行匹配
133
+ *
134
+ * 对数组字段使用,表示数组中至少有一个元素满足子条件
135
+ */
136
+ $elemMatch?: {
137
+ [elField: string]: ITableQuery;
138
+ } | ITableQuery;
139
+ /** 包含所有
140
+ *
141
+ * 相当于 valueArray.every(v => field.includes(v))
142
+ * 用于数组字段,表示数组中必须包含所有指定元素
143
+ */
144
+ $all?: any[];
145
+ /**
146
+ * 数组长度匹配
147
+ *
148
+ * 用于数组字段,表示数组长度等于指定值
149
+ */
150
+ $size?: number | {
151
+ $eq?: number;
152
+ $ne?: number;
153
+ $gt?: number;
154
+ $gte?: number;
155
+ $lt?: number;
156
+ $lte?: number;
157
+ };
158
+ }
159
+ /**
160
+ * Table 更新操作定义
161
+ */
162
+ export interface ITableUpdateOp<TSchema extends ITableDoc = ITableDoc> {
163
+ /** 设置指定字段的值
164
+ *
165
+ * 可以使用`.`来处理嵌套对象 */
166
+ $set?: MatchKeysAndValues<TSchema>;
167
+ /** 在创建/插入新文档时设置指定字段的值
168
+ *
169
+ * 仅在创建/插入新文档时生效,可以用来设置默认值、创建时间等\
170
+ * 可以使用`.`来处理嵌套对象 */
171
+ $setOnInsert?: MatchKeysAndValues<TSchema>;
172
+ /** 删除指定字段
173
+ *
174
+ * 可以使用`.`来处理嵌套对象 */
175
+ $unset?: {
176
+ [field: string]: true | 1;
177
+ } | string[];
178
+ /** 对指定字段进行加法操作
179
+ *
180
+ * 相当于 field = field + value\
181
+ * 可以使用`.`来处理嵌套对象 */
182
+ $inc?: {
183
+ [field: string]: number | bigint;
184
+ };
185
+ /** 对指定字段进行乘法操作
186
+ *
187
+ * 相当于 field = field * value\
188
+ * 可以使用`.`来处理嵌套对象 */
189
+ $mul?: {
190
+ [field: string]: number | bigint;
191
+ };
192
+ /** 对指定字段进行最大值更新
193
+ *
194
+ * 相当于 field = max(field, value)\
195
+ * 可以使用`.`来处理嵌套对象 */
196
+ $max?: {
197
+ [field: string]: number | Date | bigint;
198
+ };
199
+ /** 对指定字段进行最小值更新
200
+ *
201
+ * 相当于 field = min(field, value)\
202
+ * 可以使用`.`来处理嵌套对象
203
+ * */
204
+ $min?: {
205
+ [field: string]: number | Date | bigint;
206
+ };
207
+ /**
208
+ * 添加元素到数组字段
209
+ *
210
+ * 默认添加到数组末尾,使用 $position 可以指定位置\
211
+ * 如果目标字段不是数组类型,操作会失败
212
+ *
213
+ * 子算子:{ $each: [value1,value2,...] } 可以一次添加多个元素\
214
+ * 子算子:{ $position: number } 指定添加位置,0 为数组开头(负数不支持)\
215
+ * 子算子:{ $slice: number } 限制添加操作后,字段数组最大长度
216
+ *
217
+ */
218
+ $push?: {
219
+ [field: string]: ITableArrayAddOp;
220
+ };
221
+ /**
222
+ * 添加元素到字段并保持唯一
223
+ *
224
+ * 与 $push 不同,如果目标数组中元素已存在则不会重复添加
225
+ *
226
+ * 子算子:{ $each: [value1,value2,...] } 可以一次添加多个元素\
227
+ * 子算子:{ $position: number } 指定添加位置,0 为数组开头(负数不支持)\
228
+ * 子算子:{ $slice: number } 限制添加操作后,字段数组最大长度
229
+ * 注意元素顺序不影响对象的对比
230
+ */
231
+ $addToSet?: {
232
+ [field: string]: ITableArrayAddOp;
233
+ };
234
+ /**
235
+ * 从数组字段中移除匹配的元素
236
+ *
237
+ * @example
238
+ * // 移除数组中指定值
239
+ * { tags: { $in: [3,'name1'] } }
240
+ * // 移除数组中所有值大于 5 的元素
241
+ * { scores: { $gt: 5 } }
242
+ */
243
+ $pull?: {
244
+ [field: string]: ITableValue | ITableMatchOp | ITableMatchLogic;
245
+ };
246
+ /** 移除数组字段最后一个元素或者第一个元素
247
+ *
248
+ * 1 表示移除最后一个元素\
249
+ * -1 表示移除第一个元素
250
+ */
251
+ $pop?: {
252
+ [field: string]: 1 | -1;
253
+ };
254
+ /** 重命名字段
255
+ *
256
+ * key为旧字段名,value为新字段名\
257
+ * 可以使用`.`来处理嵌套对象,新名字也要是嵌套名\
258
+ * { $rename: { "name.first": "name.fname" } }
259
+ *
260
+ * 如果新字段名已存在,则会覆盖原有字段(原字段数据就删除了)
261
+ * 如果旧字段名不存在,则操作无效
262
+ */
263
+ $rename?: {
264
+ [oldField: string]: string;
265
+ };
266
+ }
267
+ export type ITableArrayAddOp = ITableValue | {
268
+ $each: ITableValue[];
269
+ } | {
270
+ $each: ITableValue[];
271
+ $position: number;
272
+ } | {
273
+ $each: ITableValue[];
274
+ $slice: number;
275
+ } | {
276
+ $each: ITableValue[];
277
+ $position: number;
278
+ $slice: number;
279
+ };
280
+ export type MatchKeysAndValues<TSchema> = Readonly<Partial<TSchema>> & Record<string, any>;
@@ -0,0 +1,6 @@
1
+ export { Table } from "./core/Table";
2
+ export { defineTable } from "./core/defineTable";
3
+ export { SQLiteAdapter } from "./adapter/SQLite";
4
+ export { MongoDBAdapter } from "./adapter/MongoDB";
5
+ export { defineGlobalDBAdapter } from "./core/defineTable";
6
+ export { TableJSON } from "fzz/src/objects/funcs/TableJSON";