@cloudbase/database 1.4.3 → 1.5.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.
- package/dist/commonjs/ObjectId/index.d.ts +1 -1
- package/dist/commonjs/ObjectId/index.js +16 -9
- package/dist/commonjs/aggregate.js +126 -75
- package/dist/commonjs/collection.d.ts +3 -2
- package/dist/commonjs/collection.js +131 -58
- package/dist/commonjs/command.d.ts +5 -5
- package/dist/commonjs/command.js +181 -154
- package/dist/commonjs/commands/logic.js +30 -20
- package/dist/commonjs/commands/query.d.ts +1 -1
- package/dist/commonjs/commands/query.js +85 -65
- package/dist/commonjs/commands/update.js +9 -7
- package/dist/commonjs/config/error.config.js +1 -0
- package/dist/commonjs/const/code.js +1 -0
- package/dist/commonjs/constant.d.ts +7 -7
- package/dist/commonjs/constant.js +13 -11
- package/dist/commonjs/document.d.ts +10 -6
- package/dist/commonjs/document.js +305 -193
- package/dist/commonjs/geo/index.js +20 -9
- package/dist/commonjs/geo/lineString.d.ts +1 -1
- package/dist/commonjs/geo/lineString.js +62 -33
- package/dist/commonjs/geo/multiLineString.d.ts +1 -1
- package/dist/commonjs/geo/multiLineString.js +71 -32
- package/dist/commonjs/geo/multiPoint.d.ts +1 -1
- package/dist/commonjs/geo/multiPoint.js +58 -29
- package/dist/commonjs/geo/multiPolygon.d.ts +1 -1
- package/dist/commonjs/geo/multiPolygon.js +96 -36
- package/dist/commonjs/geo/point.d.ts +1 -1
- package/dist/commonjs/geo/point.js +30 -23
- package/dist/commonjs/geo/polygon.d.ts +1 -1
- package/dist/commonjs/geo/polygon.js +78 -39
- package/dist/commonjs/helper/symbol.js +17 -5
- package/dist/commonjs/index.d.ts +8 -2
- package/dist/commonjs/index.js +73 -20
- package/dist/commonjs/lib/util.d.ts +1 -0
- package/dist/commonjs/lib/util.js +26 -0
- package/dist/commonjs/operator-map.js +7 -6
- package/dist/commonjs/query.d.ts +9 -5
- package/dist/commonjs/query.js +330 -205
- package/dist/commonjs/regexp/index.d.ts +1 -1
- package/dist/commonjs/regexp/index.js +16 -9
- package/dist/commonjs/serializer/common.d.ts +2 -2
- package/dist/commonjs/serializer/common.js +59 -22
- package/dist/commonjs/serializer/datatype.d.ts +2 -2
- package/dist/commonjs/serializer/datatype.js +58 -21
- package/dist/commonjs/serializer/query.d.ts +1 -1
- package/dist/commonjs/serializer/query.js +137 -127
- package/dist/commonjs/serializer/update.d.ts +1 -1
- package/dist/commonjs/serializer/update.js +83 -78
- package/dist/commonjs/serverDate/index.d.ts +1 -1
- package/dist/commonjs/serverDate/index.js +16 -9
- package/dist/commonjs/transaction/collection.d.ts +7 -0
- package/dist/commonjs/transaction/collection.js +49 -0
- package/dist/commonjs/transaction/document.d.ts +27 -0
- package/dist/commonjs/transaction/document.js +205 -0
- package/dist/commonjs/transaction/index.js +196 -86
- package/dist/commonjs/transaction/query.d.ts +43 -0
- package/dist/commonjs/transaction/query.js +261 -0
- package/dist/commonjs/typings/index.d.ts +4 -4
- package/dist/commonjs/typings/realtime.d.ts +16 -16
- package/dist/commonjs/util.js +123 -92
- package/dist/commonjs/utils/error.d.ts +2 -1
- package/dist/commonjs/utils/error.js +74 -38
- package/dist/commonjs/utils/symbol.js +33 -14
- package/dist/commonjs/utils/type.d.ts +1 -1
- package/dist/commonjs/utils/type.js +25 -13
- package/dist/commonjs/utils/utils.d.ts +5 -1
- package/dist/commonjs/utils/utils.js +153 -22
- package/dist/commonjs/validate.js +79 -63
- package/dist/esm/ObjectId/index.d.ts +1 -1
- package/dist/esm/ObjectId/index.js +15 -8
- package/dist/esm/aggregate.js +118 -66
- package/dist/esm/collection.d.ts +3 -2
- package/dist/esm/collection.js +125 -52
- package/dist/esm/command.d.ts +5 -5
- package/dist/esm/command.js +175 -147
- package/dist/esm/commands/logic.js +30 -20
- package/dist/esm/commands/query.d.ts +1 -1
- package/dist/esm/commands/query.js +91 -71
- package/dist/esm/commands/update.js +8 -6
- package/dist/esm/config/error.config.js +1 -1
- package/dist/esm/const/code.js +1 -1
- package/dist/esm/constant.d.ts +7 -7
- package/dist/esm/constant.js +12 -11
- package/dist/esm/document.d.ts +10 -6
- package/dist/esm/document.js +297 -185
- package/dist/esm/geo/interface.js +1 -0
- package/dist/esm/geo/lineString.d.ts +1 -1
- package/dist/esm/geo/lineString.js +57 -28
- package/dist/esm/geo/multiLineString.d.ts +1 -1
- package/dist/esm/geo/multiLineString.js +66 -27
- package/dist/esm/geo/multiPoint.d.ts +1 -1
- package/dist/esm/geo/multiPoint.js +53 -24
- package/dist/esm/geo/multiPolygon.d.ts +1 -1
- package/dist/esm/geo/multiPolygon.js +91 -31
- package/dist/esm/geo/point.d.ts +1 -1
- package/dist/esm/geo/point.js +26 -19
- package/dist/esm/geo/polygon.d.ts +1 -1
- package/dist/esm/geo/polygon.js +73 -34
- package/dist/esm/helper/symbol.js +13 -13
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.js +62 -9
- package/dist/esm/lib/util.d.ts +1 -0
- package/dist/esm/lib/util.js +22 -0
- package/dist/esm/operator-map.js +4 -4
- package/dist/esm/query.d.ts +9 -5
- package/dist/esm/query.js +321 -196
- package/dist/esm/regexp/index.d.ts +1 -1
- package/dist/esm/regexp/index.js +15 -8
- package/dist/esm/serializer/common.d.ts +2 -2
- package/dist/esm/serializer/common.js +49 -13
- package/dist/esm/serializer/datatype.d.ts +2 -2
- package/dist/esm/serializer/datatype.js +44 -8
- package/dist/esm/serializer/query.d.ts +1 -1
- package/dist/esm/serializer/query.js +112 -102
- package/dist/esm/serializer/update.d.ts +1 -1
- package/dist/esm/serializer/update.js +69 -64
- package/dist/esm/serverDate/index.d.ts +1 -1
- package/dist/esm/serverDate/index.js +15 -8
- package/dist/esm/transaction/collection.d.ts +7 -0
- package/dist/esm/transaction/collection.js +46 -0
- package/dist/esm/transaction/document.d.ts +27 -0
- package/dist/esm/transaction/document.js +202 -0
- package/dist/esm/transaction/index.js +191 -81
- package/dist/esm/transaction/query.d.ts +43 -0
- package/dist/esm/transaction/query.js +258 -0
- package/dist/esm/typings/index.d.ts +4 -4
- package/dist/esm/typings/index.js +1 -0
- package/dist/esm/typings/realtime.d.ts +16 -16
- package/dist/esm/typings/realtime.js +1 -0
- package/dist/esm/util.js +121 -90
- package/dist/esm/utils/error.d.ts +2 -1
- package/dist/esm/utils/error.js +70 -35
- package/dist/esm/utils/symbol.js +33 -14
- package/dist/esm/utils/type.d.ts +1 -1
- package/dist/esm/utils/type.js +12 -12
- package/dist/esm/utils/utils.d.ts +5 -1
- package/dist/esm/utils/utils.js +137 -16
- package/dist/esm/validate.js +65 -49
- package/jest.config.js +14 -0
- package/package.json +14 -10
- package/src/aggregate.ts +1 -5
- package/src/collection.ts +15 -2
- package/src/document.ts +45 -34
- package/src/index.ts +51 -4
- package/src/query.ts +48 -38
- package/src/serializer/query.ts +18 -6
- package/src/transaction/index.ts +1 -1
- package/src/typings/index.ts +0 -4
- package/src/utils/utils.ts +105 -0
- package/src/validate.ts +3 -6
- package/tests/gateway-contract.test.ts +180 -0
- package/tests/index.test.ts +283 -0
- package/tests/transaction-query.test.ts +207 -0
- package/tests/watch-query.test.ts +144 -0
- package/tsconfig.esm.json +4 -2
- package/tsconfig.json +16 -6
- package/tsconfig.test.json +15 -0
- package/dist/commonjs/realtime/error.d.ts +0 -7
- package/dist/commonjs/realtime/error.js +0 -11
- package/dist/commonjs/realtime/listener.d.ts +0 -14
- package/dist/commonjs/realtime/listener.js +0 -17
- package/dist/commonjs/realtime/message.d.ts +0 -3
- package/dist/commonjs/realtime/message.js +0 -10
- package/dist/commonjs/realtime/snapshot.d.ts +0 -16
- package/dist/commonjs/realtime/snapshot.js +0 -42
- package/dist/commonjs/realtime/virtual-websocket-client.d.ts +0 -63
- package/dist/commonjs/realtime/virtual-websocket-client.js +0 -736
- package/dist/commonjs/realtime/websocket-client.d.ts +0 -78
- package/dist/commonjs/realtime/websocket-client.js +0 -567
- package/dist/commonjs/realtime/ws-event.d.ts +0 -126
- package/dist/commonjs/realtime/ws-event.js +0 -139
- package/dist/commonjs/transaction.d.ts +0 -42
- package/dist/commonjs/transaction.js +0 -126
- package/dist/esm/realtime/error.d.ts +0 -7
- package/dist/esm/realtime/error.js +0 -8
- package/dist/esm/realtime/listener.d.ts +0 -14
- package/dist/esm/realtime/listener.js +0 -14
- package/dist/esm/realtime/message.d.ts +0 -3
- package/dist/esm/realtime/message.js +0 -6
- package/dist/esm/realtime/snapshot.d.ts +0 -16
- package/dist/esm/realtime/snapshot.js +0 -39
- package/dist/esm/realtime/virtual-websocket-client.d.ts +0 -63
- package/dist/esm/realtime/virtual-websocket-client.js +0 -733
- package/dist/esm/realtime/websocket-client.d.ts +0 -78
- package/dist/esm/realtime/websocket-client.js +0 -564
- package/dist/esm/realtime/ws-event.d.ts +0 -126
- package/dist/esm/realtime/ws-event.js +0 -137
- package/dist/esm/transaction.d.ts +0 -42
- package/dist/esm/transaction.js +0 -121
- package/src/realtime/error.ts +0 -19
- package/src/realtime/listener.ts +0 -35
- package/src/realtime/message.ts +0 -14
- package/src/realtime/snapshot.ts +0 -60
- package/src/realtime/virtual-websocket-client.ts +0 -1195
- package/src/realtime/websocket-client.ts +0 -995
- package/src/realtime/ws-event.ts +0 -163
- package/src/transaction.ts +0 -190
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Query.watch() 回归测试
|
|
3
|
+
*
|
|
4
|
+
* 1.5.0 引入的回归:where() 改用 QuerySerializer.encodeEJSON() 后
|
|
5
|
+
* _fieldFilters 已是 EJSON 字符串,watch() 若再 JSON.stringify 会产生
|
|
6
|
+
* 双重编码(线上 INIT_WATCH 失败、errorCode=100003 的根因)。
|
|
7
|
+
* 伴生问题:orderBy() 改存对象 {field: 1|-1} 后,watch() 仍按 0.12.x
|
|
8
|
+
* 数组形态调用 order.reduce(),带 orderBy 的 watch 会直接抛 TypeError。
|
|
9
|
+
*
|
|
10
|
+
* 第二轮真实环境实测(2026-09-03)追加约束:服务端 watch 查询引擎只认
|
|
11
|
+
* 0.12.x legacy 内部编码——数字裸值、日期 { $date: epoch 毫秒数字 }。
|
|
12
|
+
* canonical EJSON($numberInt/$numberLong/$date ISO)虽不报错但静默匹配
|
|
13
|
+
* 不到文档,因此 watch query 须由 canonical EJSON 转换为 legacy 形态。
|
|
14
|
+
*/
|
|
15
|
+
import { Db } from '../src/index'
|
|
16
|
+
|
|
17
|
+
describe('Query.watch() 参数序列化', () => {
|
|
18
|
+
let watchArgs: any[]
|
|
19
|
+
|
|
20
|
+
class MockRequest {
|
|
21
|
+
constructor(_config: any) {}
|
|
22
|
+
async send(_action: string, _data: any) {
|
|
23
|
+
return { data: { ok: 1 }, requestId: 'mock' }
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
class MockWsClient {
|
|
28
|
+
constructor(_opts: any) {}
|
|
29
|
+
watch(args: any) {
|
|
30
|
+
watchArgs.push(args)
|
|
31
|
+
return { close: () => {} }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
Db.reqClass = MockRequest as any
|
|
37
|
+
Db.wsClientClass = MockWsClient as any
|
|
38
|
+
watchArgs = []
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
function makeDb() {
|
|
42
|
+
// getWsInstance 按 env 缓存实例,每个用例用独立 env
|
|
43
|
+
return new Db({ env: `env-${Math.random()}` } as any)
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
it('数字条件应为裸值(legacy 编码),无 $numberInt/$numberLong 标记', () => {
|
|
47
|
+
const db = makeDb()
|
|
48
|
+
db.collection('test-collection')
|
|
49
|
+
.where({ ts: { $gt: 1788421619261 } } as any)
|
|
50
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
51
|
+
|
|
52
|
+
expect(watchArgs).toHaveLength(1)
|
|
53
|
+
const query = watchArgs[0].query
|
|
54
|
+
// legacy 形态:数字裸值
|
|
55
|
+
expect(query).toBe('{"ts":{"$gt":1788421619261}}')
|
|
56
|
+
// 双重编码的标志形态:外层以引号开头 —— 必须不存在
|
|
57
|
+
expect(query.startsWith('"')).toBe(false)
|
|
58
|
+
// canonical 标记 —— 必须不存在
|
|
59
|
+
expect(query).not.toContain('$numberInt')
|
|
60
|
+
expect(query).not.toContain('$numberLong')
|
|
61
|
+
})
|
|
62
|
+
|
|
63
|
+
it('where() + command 查询条件同样转为裸数字', () => {
|
|
64
|
+
const db = makeDb()
|
|
65
|
+
db.collection('test-collection')
|
|
66
|
+
.where({ count: db.command.gt(10) } as any)
|
|
67
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
68
|
+
|
|
69
|
+
expect(watchArgs[0].query).toBe('{"count":{"$gt":10}}')
|
|
70
|
+
})
|
|
71
|
+
|
|
72
|
+
it('日期条件应转为 { $date: epoch 毫秒数字 }(0.12.x legacy 形态)', () => {
|
|
73
|
+
const db = makeDb()
|
|
74
|
+
const date = new Date('2020-01-01T00:00:00.000Z')
|
|
75
|
+
db.collection('test-collection')
|
|
76
|
+
.where({ createdAt: db.command.gt(date) } as any)
|
|
77
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
78
|
+
|
|
79
|
+
expect(watchArgs[0].query).toBe(`{"createdAt":{"$gt":{"$date":${+date}}}}`)
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
it('db.RegExp / 原生 RegExp 应转为 { $regex, $options }($regularExpression 不被服务端识别)', () => {
|
|
83
|
+
const db = makeDb()
|
|
84
|
+
db.collection('test-collection')
|
|
85
|
+
.where({ text: db.RegExp({ regexp: 'probe-\\d+', options: 'i' }) } as any)
|
|
86
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
87
|
+
// canonical 编码为 $regularExpression,watch 须转为 0.12.x 的 $regex/$options
|
|
88
|
+
expect(watchArgs[0].query).toBe('{"text":{"$regex":"probe-\\\\d+","$options":"i"}}')
|
|
89
|
+
expect(watchArgs[0].query).not.toContain('$regularExpression')
|
|
90
|
+
|
|
91
|
+
db.collection('test-collection')
|
|
92
|
+
.where({ text: /probe-\d+/i } as any)
|
|
93
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
94
|
+
expect(watchArgs[1].query).toBe('{"text":{"$regex":"probe-\\\\d+","$options":"i"}}')
|
|
95
|
+
})
|
|
96
|
+
|
|
97
|
+
it('ObjectId 条件应保持 { $oid } 形态', () => {
|
|
98
|
+
const db = makeDb()
|
|
99
|
+
// 该仓库 ObjectId 构造签名为 { id } 对象形式(bson 风格位置参数会静默得到空 id)
|
|
100
|
+
db.collection('test-collection')
|
|
101
|
+
.where({ _id: db.ObjectId({ id: '507f1f77bcf86cd799439011' }) } as any)
|
|
102
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
103
|
+
|
|
104
|
+
expect(watchArgs[0].query).toBe('{"_id":{"$oid":"507f1f77bcf86cd799439011"}}')
|
|
105
|
+
})
|
|
106
|
+
|
|
107
|
+
it('无 where() 时 query 回退为 "{}"', () => {
|
|
108
|
+
const db = makeDb()
|
|
109
|
+
db.collection('test-collection').watch({ onChange: () => {}, onError: () => {} })
|
|
110
|
+
|
|
111
|
+
expect(watchArgs[0].query).toBe('{}')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('字符串等基本类型条件保持原样', () => {
|
|
115
|
+
const db = makeDb()
|
|
116
|
+
db.collection('test-collection')
|
|
117
|
+
.where({ _id: 'xxx', name: 'foo' } as any)
|
|
118
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
119
|
+
|
|
120
|
+
expect(watchArgs[0].query).toBe('{"_id":"xxx","name":"foo"}')
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
it('orderBy() 后 watch() 不抛错且方向映射为 asc/desc', () => {
|
|
124
|
+
const db = makeDb()
|
|
125
|
+
expect(() => {
|
|
126
|
+
db.collection('test-collection')
|
|
127
|
+
.where({ ts: { $gt: 1 } } as any)
|
|
128
|
+
.orderBy('ts', 'desc')
|
|
129
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
130
|
+
}).not.toThrow()
|
|
131
|
+
|
|
132
|
+
expect(watchArgs[0].orderBy).toEqual({ ts: 'desc' })
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
it('limit 应透传到 watch 参数', () => {
|
|
136
|
+
const db = makeDb()
|
|
137
|
+
db.collection('test-collection')
|
|
138
|
+
.where({ a: 1 } as any)
|
|
139
|
+
.limit(10)
|
|
140
|
+
.watch({ onChange: () => {}, onError: () => {} })
|
|
141
|
+
|
|
142
|
+
expect(watchArgs[0].limit).toBe(10)
|
|
143
|
+
})
|
|
144
|
+
})
|
package/tsconfig.esm.json
CHANGED
|
@@ -20,10 +20,11 @@
|
|
|
20
20
|
"pretty": true,
|
|
21
21
|
"removeComments": true,
|
|
22
22
|
"stripInternal": true,
|
|
23
|
+
"downlevelIteration": true,
|
|
23
24
|
"skipDefaultLibCheck": true,
|
|
24
25
|
"skipLibCheck": true,
|
|
25
26
|
"moduleResolution": "node",
|
|
26
|
-
"target": "
|
|
27
|
+
"target": "es5",
|
|
27
28
|
"lib": [
|
|
28
29
|
"es2015",
|
|
29
30
|
"es6",
|
|
@@ -35,6 +36,7 @@
|
|
|
35
36
|
],
|
|
36
37
|
"exclude": [
|
|
37
38
|
// "node_modules",
|
|
38
|
-
"test"
|
|
39
|
+
"test",
|
|
40
|
+
"tests"
|
|
39
41
|
]
|
|
40
42
|
}
|
package/tsconfig.json
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
"allowJs": false,
|
|
5
5
|
"allowUnreachableCode": false,
|
|
6
6
|
"allowUnusedLabels": false,
|
|
7
|
-
"charset": "utf8",
|
|
8
7
|
"declaration": true,
|
|
9
8
|
"experimentalDecorators": true,
|
|
10
9
|
"emitDecoratorMetadata": true,
|
|
@@ -21,10 +20,21 @@
|
|
|
21
20
|
"removeComments": true,
|
|
22
21
|
"stripInternal": true,
|
|
23
22
|
"skipDefaultLibCheck": true,
|
|
23
|
+
"downlevelIteration": true,
|
|
24
24
|
"skipLibCheck": true,
|
|
25
|
-
"target": "
|
|
26
|
-
"lib": [
|
|
25
|
+
"target": "es5",
|
|
26
|
+
"lib": [
|
|
27
|
+
"es2015",
|
|
28
|
+
"es6",
|
|
29
|
+
"dom"
|
|
30
|
+
]
|
|
27
31
|
},
|
|
28
|
-
"include": [
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
"include": [
|
|
33
|
+
"src/**/*"
|
|
34
|
+
],
|
|
35
|
+
"exclude": [
|
|
36
|
+
"node_modules",
|
|
37
|
+
"test",
|
|
38
|
+
"tests"
|
|
39
|
+
]
|
|
40
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"extends": "./tsconfig.json",
|
|
3
|
+
"compilerOptions": {
|
|
4
|
+
"target": "es6",
|
|
5
|
+
"module": "commonjs",
|
|
6
|
+
"isolatedModules": true,
|
|
7
|
+
"skipLibCheck": true,
|
|
8
|
+
"strict": false,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"moduleResolution": "node",
|
|
11
|
+
"allowJs": true
|
|
12
|
+
},
|
|
13
|
+
"include": ["tests/**/*.ts", "src/**/*.ts"],
|
|
14
|
+
"exclude": ["node_modules"]
|
|
15
|
+
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import { IResponseMessageErrorMsg } from '../typings/realtime';
|
|
2
|
-
export declare class RealtimeErrorMessageError extends Error {
|
|
3
|
-
isRealtimeErrorMessageError: boolean;
|
|
4
|
-
payload: IResponseMessageErrorMsg;
|
|
5
|
-
constructor(serverErrorMsg: IResponseMessageErrorMsg);
|
|
6
|
-
}
|
|
7
|
-
export declare const isRealtimeErrorMessageError: (e: any) => e is RealtimeErrorMessageError;
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class RealtimeErrorMessageError extends Error {
|
|
4
|
-
constructor(serverErrorMsg) {
|
|
5
|
-
super(`Watch Error ${JSON.stringify(serverErrorMsg.msgData)} (requestid: ${serverErrorMsg.requestId})`);
|
|
6
|
-
this.isRealtimeErrorMessageError = true;
|
|
7
|
-
this.payload = serverErrorMsg;
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
exports.RealtimeErrorMessageError = RealtimeErrorMessageError;
|
|
11
|
-
exports.isRealtimeErrorMessageError = (e) => e && e.isRealtimeErrorMessageError;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { VirtualWebSocketClient } from './virtual-websocket-client';
|
|
2
|
-
import { IRealtimeListenerConstructorOptions, DBRealtimeListener } from '../typings/index';
|
|
3
|
-
interface IRealtimeListenerOptions extends IRealtimeListenerConstructorOptions {
|
|
4
|
-
close: () => void;
|
|
5
|
-
debug?: boolean;
|
|
6
|
-
virtualClient?: VirtualWebSocketClient;
|
|
7
|
-
}
|
|
8
|
-
export declare class RealtimeListener implements DBRealtimeListener {
|
|
9
|
-
close: () => void;
|
|
10
|
-
onChange: (res: any) => void;
|
|
11
|
-
onError: (error: any) => void;
|
|
12
|
-
constructor(options: IRealtimeListenerOptions);
|
|
13
|
-
}
|
|
14
|
-
export {};
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class RealtimeListener {
|
|
4
|
-
constructor(options) {
|
|
5
|
-
this.close = options.close;
|
|
6
|
-
this.onChange = options.onChange;
|
|
7
|
-
this.onError = options.onError;
|
|
8
|
-
if (options.debug) {
|
|
9
|
-
Object.defineProperty(this, 'virtualClient', {
|
|
10
|
-
get: () => {
|
|
11
|
-
return options.virtualClient;
|
|
12
|
-
}
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
exports.RealtimeListener = RealtimeListener;
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
function genRequestId(prefix = '') {
|
|
4
|
-
return `${prefix ? `${prefix}_` : ''}${+new Date()}_${Math.random()}`;
|
|
5
|
-
}
|
|
6
|
-
exports.genRequestId = genRequestId;
|
|
7
|
-
function isInitEventMessage(msg) {
|
|
8
|
-
return msg.msgType === 'INIT_EVENT';
|
|
9
|
-
}
|
|
10
|
-
exports.isInitEventMessage = isInitEventMessage;
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { ISingleDBEvent, SnapshotType, ISnapshot } from '../typings/index';
|
|
2
|
-
interface ISnapshotConstructorOptions {
|
|
3
|
-
id: number;
|
|
4
|
-
docChanges: ISingleDBEvent[];
|
|
5
|
-
docs: Record<string, any>[];
|
|
6
|
-
type?: SnapshotType;
|
|
7
|
-
msgType?: String;
|
|
8
|
-
}
|
|
9
|
-
export declare class Snapshot implements ISnapshot {
|
|
10
|
-
id: number;
|
|
11
|
-
docChanges: ISingleDBEvent[];
|
|
12
|
-
docs: Record<string, any>[];
|
|
13
|
-
type?: 'init';
|
|
14
|
-
constructor(options: ISnapshotConstructorOptions);
|
|
15
|
-
}
|
|
16
|
-
export {};
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class Snapshot {
|
|
4
|
-
constructor(options) {
|
|
5
|
-
const { id, docChanges, docs, msgType, type } = options;
|
|
6
|
-
let cachedDocChanges;
|
|
7
|
-
let cachedDocs;
|
|
8
|
-
Object.defineProperties(this, {
|
|
9
|
-
id: {
|
|
10
|
-
get: () => id,
|
|
11
|
-
enumerable: true
|
|
12
|
-
},
|
|
13
|
-
docChanges: {
|
|
14
|
-
get: () => {
|
|
15
|
-
if (!cachedDocChanges) {
|
|
16
|
-
cachedDocChanges = JSON.parse(JSON.stringify(docChanges));
|
|
17
|
-
}
|
|
18
|
-
return cachedDocChanges;
|
|
19
|
-
},
|
|
20
|
-
enumerable: true
|
|
21
|
-
},
|
|
22
|
-
docs: {
|
|
23
|
-
get: () => {
|
|
24
|
-
if (!cachedDocs) {
|
|
25
|
-
cachedDocs = JSON.parse(JSON.stringify(docs));
|
|
26
|
-
}
|
|
27
|
-
return cachedDocs;
|
|
28
|
-
},
|
|
29
|
-
enumerable: true
|
|
30
|
-
},
|
|
31
|
-
msgType: {
|
|
32
|
-
get: () => msgType,
|
|
33
|
-
enumerable: true
|
|
34
|
-
},
|
|
35
|
-
type: {
|
|
36
|
-
get: () => type,
|
|
37
|
-
enumerable: true
|
|
38
|
-
}
|
|
39
|
-
});
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
exports.Snapshot = Snapshot;
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
import { IResponseMessage } from '../typings/realtime';
|
|
2
|
-
import { RealtimeListener } from './listener';
|
|
3
|
-
import { IWSSendOptions } from './websocket-client';
|
|
4
|
-
import { IWatchOptions } from '../typings/index';
|
|
5
|
-
interface IVirtualWebSocketClientConstructorOptions extends IWatchOptions {
|
|
6
|
-
envId?: string;
|
|
7
|
-
collectionName: string;
|
|
8
|
-
query: string;
|
|
9
|
-
limit?: number;
|
|
10
|
-
orderBy?: Record<string, string>;
|
|
11
|
-
send: <T = any>(opts: IWSSendOptions) => Promise<T>;
|
|
12
|
-
login: (envId?: string, refresh?: boolean) => Promise<any>;
|
|
13
|
-
isWSConnected: () => boolean;
|
|
14
|
-
onceWSConnected: () => Promise<void>;
|
|
15
|
-
getWaitExpectedTimeoutLength: () => number;
|
|
16
|
-
onWatchStart: (client: VirtualWebSocketClient, queryID: string) => void;
|
|
17
|
-
onWatchClose: (client: VirtualWebSocketClient, queryID: string) => void;
|
|
18
|
-
debug?: boolean;
|
|
19
|
-
}
|
|
20
|
-
export declare class VirtualWebSocketClient {
|
|
21
|
-
watchId: string;
|
|
22
|
-
private envId?;
|
|
23
|
-
private collectionName;
|
|
24
|
-
private query;
|
|
25
|
-
private limit;
|
|
26
|
-
private orderBy;
|
|
27
|
-
private send;
|
|
28
|
-
private login;
|
|
29
|
-
private isWSConnected;
|
|
30
|
-
private onceWSConnected;
|
|
31
|
-
private getWaitExpectedTimeoutLength;
|
|
32
|
-
private onWatchStart;
|
|
33
|
-
private onWatchClose;
|
|
34
|
-
private debug?;
|
|
35
|
-
listener: RealtimeListener;
|
|
36
|
-
private watchStatus;
|
|
37
|
-
private _availableRetries;
|
|
38
|
-
private _ackTimeoutId?;
|
|
39
|
-
private _initWatchPromise?;
|
|
40
|
-
private _rebuildWatchPromise?;
|
|
41
|
-
private sessionInfo?;
|
|
42
|
-
private _waitExpectedTimeoutId?;
|
|
43
|
-
constructor(options: IVirtualWebSocketClientConstructorOptions);
|
|
44
|
-
private _login;
|
|
45
|
-
private initWatch;
|
|
46
|
-
private rebuildWatch;
|
|
47
|
-
private handleWatchEstablishmentError;
|
|
48
|
-
private closeWatch;
|
|
49
|
-
private scheduleSendACK;
|
|
50
|
-
private clearACKSchedule;
|
|
51
|
-
private sendACK;
|
|
52
|
-
private handleCommonError;
|
|
53
|
-
private useRetryTicket;
|
|
54
|
-
private handleServerEvents;
|
|
55
|
-
private _handleServerEvents;
|
|
56
|
-
private _postHandleServerEventsValidityCheck;
|
|
57
|
-
private clearWaitExpectedEvent;
|
|
58
|
-
onMessage(msg: IResponseMessage): void;
|
|
59
|
-
closeWithError(error: any): void;
|
|
60
|
-
pause(): void;
|
|
61
|
-
resume(): Promise<void>;
|
|
62
|
-
}
|
|
63
|
-
export {};
|