@cloudbase/database 1.4.3-alpha.0 → 1.5.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.
- 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.js +4 -3
- package/dist/commonjs/operator-map.js +7 -6
- package/dist/commonjs/query.d.ts +8 -4
- package/dist/commonjs/query.js +308 -201
- 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 +1 -1
- package/dist/commonjs/transaction/collection.js +5 -2
- package/dist/commonjs/transaction/document.d.ts +1 -1
- package/dist/commonjs/transaction/document.js +5 -5
- package/dist/commonjs/transaction/index.js +196 -86
- package/dist/commonjs/transaction/query.d.ts +39 -1
- package/dist/commonjs/transaction/query.js +252 -1
- 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 +4 -1
- package/dist/commonjs/utils/utils.js +93 -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.js +1 -2
- package/dist/esm/operator-map.js +4 -4
- package/dist/esm/query.d.ts +8 -4
- package/dist/esm/query.js +299 -192
- 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 +1 -1
- package/dist/esm/transaction/collection.js +4 -2
- package/dist/esm/transaction/document.d.ts +1 -1
- package/dist/esm/transaction/document.js +2 -3
- package/dist/esm/transaction/index.js +191 -81
- package/dist/esm/transaction/query.d.ts +39 -1
- package/dist/esm/transaction/query.js +251 -1
- 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 +4 -1
- package/dist/esm/utils/utils.js +78 -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 +33 -29
- 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 +46 -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/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
|
@@ -4,17 +4,18 @@ import { getType, isArray } from '../utils/type';
|
|
|
4
4
|
import { operatorToString } from '../operator-map';
|
|
5
5
|
import { flattenQueryObject, encodeInternalDataType, mergeConditionAfterEncode } from './common';
|
|
6
6
|
import { stringifyByEJSON } from '../utils/utils';
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
static encode(query) {
|
|
10
|
-
const stringifier = new UpdateSerializer();
|
|
11
|
-
return stringifier.encodeUpdate(query);
|
|
7
|
+
var UpdateSerializer = (function () {
|
|
8
|
+
function UpdateSerializer() {
|
|
12
9
|
}
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
UpdateSerializer.encode = function (query) {
|
|
11
|
+
var stringifier = new UpdateSerializer();
|
|
12
|
+
return stringifier.encodeUpdate(query);
|
|
13
|
+
};
|
|
14
|
+
UpdateSerializer.encodeEJSON = function (query, raw) {
|
|
15
|
+
var stringifier = new UpdateSerializer();
|
|
15
16
|
return stringifyByEJSON(raw ? query : stringifier.encodeUpdate(query));
|
|
16
|
-
}
|
|
17
|
-
encodeUpdate(query) {
|
|
17
|
+
};
|
|
18
|
+
UpdateSerializer.prototype.encodeUpdate = function (query) {
|
|
18
19
|
if (isUpdateCommand(query)) {
|
|
19
20
|
return this.encodeUpdateCommand(query);
|
|
20
21
|
}
|
|
@@ -24,8 +25,8 @@ export class UpdateSerializer {
|
|
|
24
25
|
else {
|
|
25
26
|
return query;
|
|
26
27
|
}
|
|
27
|
-
}
|
|
28
|
-
encodeUpdateCommand(query) {
|
|
28
|
+
};
|
|
29
|
+
UpdateSerializer.prototype.encodeUpdateCommand = function (query) {
|
|
29
30
|
if (query.fieldName === SYMBOL_UNSET_FIELD_NAME) {
|
|
30
31
|
throw new Error('Cannot encode a comparison command with unset field name');
|
|
31
32
|
}
|
|
@@ -43,31 +44,33 @@ export class UpdateSerializer {
|
|
|
43
44
|
return this.encodeFieldUpdateCommand(query);
|
|
44
45
|
}
|
|
45
46
|
}
|
|
46
|
-
}
|
|
47
|
-
encodeFieldUpdateCommand(query) {
|
|
48
|
-
|
|
47
|
+
};
|
|
48
|
+
UpdateSerializer.prototype.encodeFieldUpdateCommand = function (query) {
|
|
49
|
+
var _a, _b, _c, _d;
|
|
50
|
+
var $op = operatorToString(query.operator);
|
|
49
51
|
switch (query.operator) {
|
|
50
52
|
case UPDATE_COMMANDS_LITERAL.REMOVE: {
|
|
51
|
-
return {
|
|
52
|
-
[$op]
|
|
53
|
-
[query.fieldName]
|
|
54
|
-
|
|
55
|
-
|
|
53
|
+
return _a = {},
|
|
54
|
+
_a[$op] = (_b = {},
|
|
55
|
+
_b[query.fieldName] = '',
|
|
56
|
+
_b),
|
|
57
|
+
_a;
|
|
56
58
|
}
|
|
57
59
|
default: {
|
|
58
|
-
return {
|
|
59
|
-
[$op]
|
|
60
|
-
[query.fieldName]
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
return _c = {},
|
|
61
|
+
_c[$op] = (_d = {},
|
|
62
|
+
_d[query.fieldName] = query.operands[0],
|
|
63
|
+
_d),
|
|
64
|
+
_c;
|
|
63
65
|
}
|
|
64
66
|
}
|
|
65
|
-
}
|
|
66
|
-
encodeArrayUpdateCommand(query) {
|
|
67
|
-
|
|
67
|
+
};
|
|
68
|
+
UpdateSerializer.prototype.encodeArrayUpdateCommand = function (query) {
|
|
69
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
70
|
+
var $op = operatorToString(query.operator);
|
|
68
71
|
switch (query.operator) {
|
|
69
72
|
case UPDATE_COMMANDS_LITERAL.PUSH: {
|
|
70
|
-
|
|
73
|
+
var modifiers = void 0;
|
|
71
74
|
if (isArray(query.operands)) {
|
|
72
75
|
modifiers = {
|
|
73
76
|
$each: query.operands.map(encodeInternalDataType)
|
|
@@ -76,64 +79,66 @@ export class UpdateSerializer {
|
|
|
76
79
|
else {
|
|
77
80
|
modifiers = query.operands;
|
|
78
81
|
}
|
|
79
|
-
return {
|
|
80
|
-
[$op]
|
|
81
|
-
[query.fieldName]
|
|
82
|
-
|
|
83
|
-
|
|
82
|
+
return _a = {},
|
|
83
|
+
_a[$op] = (_b = {},
|
|
84
|
+
_b[query.fieldName] = modifiers,
|
|
85
|
+
_b),
|
|
86
|
+
_a;
|
|
84
87
|
}
|
|
85
88
|
case UPDATE_COMMANDS_LITERAL.UNSHIFT: {
|
|
86
|
-
|
|
89
|
+
var modifiers = {
|
|
87
90
|
$each: query.operands.map(encodeInternalDataType),
|
|
88
91
|
$position: 0
|
|
89
92
|
};
|
|
90
|
-
return {
|
|
91
|
-
[$op]
|
|
92
|
-
[query.fieldName]
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
return _c = {},
|
|
94
|
+
_c[$op] = (_d = {},
|
|
95
|
+
_d[query.fieldName] = modifiers,
|
|
96
|
+
_d),
|
|
97
|
+
_c;
|
|
95
98
|
}
|
|
96
99
|
case UPDATE_COMMANDS_LITERAL.POP: {
|
|
97
|
-
return {
|
|
98
|
-
[$op]
|
|
99
|
-
[query.fieldName]
|
|
100
|
-
|
|
101
|
-
|
|
100
|
+
return _e = {},
|
|
101
|
+
_e[$op] = (_f = {},
|
|
102
|
+
_f[query.fieldName] = 1,
|
|
103
|
+
_f),
|
|
104
|
+
_e;
|
|
102
105
|
}
|
|
103
106
|
case UPDATE_COMMANDS_LITERAL.SHIFT: {
|
|
104
|
-
return {
|
|
105
|
-
[$op]
|
|
106
|
-
[query.fieldName]
|
|
107
|
-
|
|
108
|
-
|
|
107
|
+
return _g = {},
|
|
108
|
+
_g[$op] = (_h = {},
|
|
109
|
+
_h[query.fieldName] = -1,
|
|
110
|
+
_h),
|
|
111
|
+
_g;
|
|
109
112
|
}
|
|
110
113
|
default: {
|
|
111
|
-
return {
|
|
112
|
-
[$op]
|
|
113
|
-
[query.fieldName]
|
|
114
|
-
|
|
115
|
-
|
|
114
|
+
return _j = {},
|
|
115
|
+
_j[$op] = (_k = {},
|
|
116
|
+
_k[query.fieldName] = encodeInternalDataType(query.operands),
|
|
117
|
+
_k),
|
|
118
|
+
_j;
|
|
116
119
|
}
|
|
117
120
|
}
|
|
118
|
-
}
|
|
119
|
-
encodeUpdateObject(query) {
|
|
120
|
-
|
|
121
|
-
for (
|
|
121
|
+
};
|
|
122
|
+
UpdateSerializer.prototype.encodeUpdateObject = function (query) {
|
|
123
|
+
var flattened = flattenQueryObject(query);
|
|
124
|
+
for (var key in flattened) {
|
|
122
125
|
if (/^\$/.test(key))
|
|
123
126
|
continue;
|
|
124
|
-
|
|
127
|
+
var val = flattened[key];
|
|
125
128
|
if (isUpdateCommand(val)) {
|
|
126
129
|
flattened[key] = val._setFieldName(key);
|
|
127
|
-
|
|
130
|
+
var condition = this.encodeUpdateCommand(flattened[key]);
|
|
128
131
|
mergeConditionAfterEncode(flattened, condition, key);
|
|
129
132
|
}
|
|
130
133
|
else {
|
|
131
134
|
flattened[key] = val = encodeInternalDataType(val);
|
|
132
|
-
|
|
133
|
-
|
|
135
|
+
var $setCommand = new UpdateCommand(UPDATE_COMMANDS_LITERAL.SET, [val], key);
|
|
136
|
+
var condition = this.encodeUpdateCommand($setCommand);
|
|
134
137
|
mergeConditionAfterEncode(flattened, condition, key);
|
|
135
138
|
}
|
|
136
139
|
}
|
|
137
140
|
return flattened;
|
|
138
|
-
}
|
|
139
|
-
|
|
141
|
+
};
|
|
142
|
+
return UpdateSerializer;
|
|
143
|
+
}());
|
|
144
|
+
export { UpdateSerializer };
|
|
@@ -3,7 +3,7 @@ export declare class ServerDate {
|
|
|
3
3
|
constructor({ offset }?: {
|
|
4
4
|
offset?: number;
|
|
5
5
|
});
|
|
6
|
-
|
|
6
|
+
get _internalType(): import("../utils/symbol").InternalSymbol;
|
|
7
7
|
parse(): {
|
|
8
8
|
$tcb_server_date: {
|
|
9
9
|
offset: number;
|
|
@@ -1,19 +1,26 @@
|
|
|
1
1
|
import { SYMBOL_SERVER_DATE } from '../helper/symbol';
|
|
2
|
-
|
|
3
|
-
|
|
2
|
+
var ServerDate = (function () {
|
|
3
|
+
function ServerDate(_a) {
|
|
4
|
+
var _b = _a === void 0 ? {} : _a, _c = _b.offset, offset = _c === void 0 ? 0 : _c;
|
|
4
5
|
this.offset = offset;
|
|
5
6
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
7
|
+
Object.defineProperty(ServerDate.prototype, "_internalType", {
|
|
8
|
+
get: function () {
|
|
9
|
+
return SYMBOL_SERVER_DATE;
|
|
10
|
+
},
|
|
11
|
+
enumerable: false,
|
|
12
|
+
configurable: true
|
|
13
|
+
});
|
|
14
|
+
ServerDate.prototype.parse = function () {
|
|
10
15
|
return {
|
|
11
16
|
$tcb_server_date: {
|
|
12
17
|
offset: this.offset
|
|
13
18
|
}
|
|
14
19
|
};
|
|
15
|
-
}
|
|
16
|
-
|
|
20
|
+
};
|
|
21
|
+
return ServerDate;
|
|
22
|
+
}());
|
|
23
|
+
export { ServerDate };
|
|
17
24
|
export function ServerDateConstructor(opt) {
|
|
18
25
|
return new ServerDate(opt);
|
|
19
26
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DocumentReference } from './document';
|
|
2
2
|
import { Query } from './query';
|
|
3
3
|
export declare class CollectionReference extends Query {
|
|
4
|
-
|
|
4
|
+
get name(): string;
|
|
5
5
|
doc(docID?: string | number): DocumentReference;
|
|
6
6
|
add(data: any): Promise<any>;
|
|
7
7
|
}
|
|
@@ -2,10 +2,12 @@ var __extends = (this && this.__extends) || (function () {
|
|
|
2
2
|
var extendStatics = function (d, b) {
|
|
3
3
|
extendStatics = Object.setPrototypeOf ||
|
|
4
4
|
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
5
|
-
function (d, b) { for (var p in b) if (
|
|
5
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
6
6
|
return extendStatics(d, b);
|
|
7
7
|
};
|
|
8
8
|
return function (d, b) {
|
|
9
|
+
if (typeof b !== "function" && b !== null)
|
|
10
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
9
11
|
extendStatics(d, b);
|
|
10
12
|
function __() { this.constructor = d; }
|
|
11
13
|
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
@@ -22,7 +24,7 @@ var CollectionReference = (function (_super) {
|
|
|
22
24
|
get: function () {
|
|
23
25
|
return this._coll;
|
|
24
26
|
},
|
|
25
|
-
enumerable:
|
|
27
|
+
enumerable: false,
|
|
26
28
|
configurable: true
|
|
27
29
|
});
|
|
28
30
|
CollectionReference.prototype.doc = function (docID) {
|
|
@@ -24,7 +24,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
|
24
24
|
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
25
25
|
function step(op) {
|
|
26
26
|
if (f) throw new TypeError("Generator is already executing.");
|
|
27
|
-
while (_) try {
|
|
27
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
28
28
|
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
29
29
|
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
30
30
|
switch (op[0]) {
|
|
@@ -85,8 +85,7 @@ var DocumentReference = (function () {
|
|
|
85
85
|
inserted = EJSON.parse(res.inserted);
|
|
86
86
|
ok = EJSON.parse(res.ok);
|
|
87
87
|
if (ok == 1 && inserted == 1) {
|
|
88
|
-
return [2, __assign(__assign({}, res), { ok: ok,
|
|
89
|
-
inserted: inserted })];
|
|
88
|
+
return [2, __assign(__assign({}, res), { ok: ok, inserted: inserted })];
|
|
90
89
|
}
|
|
91
90
|
else {
|
|
92
91
|
throw new Error(ERRORS.INSERT_DOC_FAIL.message);
|
|
@@ -1,100 +1,210 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
17
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
1
37
|
import { Db } from '../index';
|
|
2
38
|
import { CollectionReference } from '../collection';
|
|
3
39
|
import { ERRORS } from '../const/code';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
40
|
+
var START = 'database.startTransaction';
|
|
41
|
+
var COMMIT = 'database.commitTransaction';
|
|
42
|
+
var ABORT = 'database.abortTransaction';
|
|
43
|
+
var Transaction = (function () {
|
|
44
|
+
function Transaction(db) {
|
|
9
45
|
this._db = db;
|
|
10
|
-
this._request =
|
|
46
|
+
this._request = Db.createRequest(this._db.config);
|
|
11
47
|
this.aborted = false;
|
|
12
48
|
this.commited = false;
|
|
13
49
|
this.inited = false;
|
|
14
50
|
}
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
51
|
+
Transaction.prototype.init = function () {
|
|
52
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
53
|
+
var res;
|
|
54
|
+
return __generator(this, function (_a) {
|
|
55
|
+
switch (_a.label) {
|
|
56
|
+
case 0: return [4, this._request.send(START)];
|
|
57
|
+
case 1:
|
|
58
|
+
res = _a.sent();
|
|
59
|
+
if (res.code) {
|
|
60
|
+
throw res;
|
|
61
|
+
}
|
|
62
|
+
this.inited = true;
|
|
63
|
+
this._id = res.transactionId;
|
|
64
|
+
return [2];
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
};
|
|
69
|
+
Transaction.prototype.collection = function (collName) {
|
|
24
70
|
if (!collName) {
|
|
25
71
|
throw new Error('Collection name is required');
|
|
26
72
|
}
|
|
27
73
|
return new CollectionReference(this._db, collName, {}, this._id);
|
|
28
|
-
}
|
|
29
|
-
getTransactionId() {
|
|
74
|
+
};
|
|
75
|
+
Transaction.prototype.getTransactionId = function () {
|
|
30
76
|
return this._id;
|
|
31
|
-
}
|
|
32
|
-
getRequestMethod() {
|
|
77
|
+
};
|
|
78
|
+
Transaction.prototype.getRequestMethod = function () {
|
|
33
79
|
return this._request;
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
throw res;
|
|
52
|
-
this.aborted = true;
|
|
53
|
-
this.abortReason = customRollbackRes;
|
|
54
|
-
return res;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
export async function startTransaction() {
|
|
58
|
-
const transaction = new Transaction(this);
|
|
59
|
-
await transaction.init();
|
|
60
|
-
return transaction;
|
|
61
|
-
}
|
|
62
|
-
export async function runTransaction(callback, times = 3) {
|
|
63
|
-
let transaction;
|
|
64
|
-
try {
|
|
65
|
-
transaction = new Transaction(this);
|
|
66
|
-
await transaction.init();
|
|
67
|
-
const callbackRes = await callback(transaction);
|
|
68
|
-
if (transaction.aborted === true) {
|
|
69
|
-
throw transaction.abortReason;
|
|
70
|
-
}
|
|
71
|
-
await transaction.commit();
|
|
72
|
-
return callbackRes;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
if (transaction.inited === false) {
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
const throwWithRollback = async (error) => {
|
|
79
|
-
if (!transaction.aborted && !transaction.commited) {
|
|
80
|
-
try {
|
|
81
|
-
await transaction.rollback();
|
|
80
|
+
};
|
|
81
|
+
Transaction.prototype.commit = function () {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
83
|
+
var param, res;
|
|
84
|
+
return __generator(this, function (_a) {
|
|
85
|
+
switch (_a.label) {
|
|
86
|
+
case 0:
|
|
87
|
+
param = {
|
|
88
|
+
transactionId: this._id
|
|
89
|
+
};
|
|
90
|
+
return [4, this._request.send(COMMIT, param)];
|
|
91
|
+
case 1:
|
|
92
|
+
res = _a.sent();
|
|
93
|
+
if (res.code)
|
|
94
|
+
throw res;
|
|
95
|
+
this.commited = true;
|
|
96
|
+
return [2, res];
|
|
82
97
|
}
|
|
83
|
-
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
};
|
|
101
|
+
Transaction.prototype.rollback = function (customRollbackRes) {
|
|
102
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
103
|
+
var param, res;
|
|
104
|
+
return __generator(this, function (_a) {
|
|
105
|
+
switch (_a.label) {
|
|
106
|
+
case 0:
|
|
107
|
+
param = {
|
|
108
|
+
transactionId: this._id
|
|
109
|
+
};
|
|
110
|
+
return [4, this._request.send(ABORT, param)];
|
|
111
|
+
case 1:
|
|
112
|
+
res = _a.sent();
|
|
113
|
+
if (res.code)
|
|
114
|
+
throw res;
|
|
115
|
+
this.aborted = true;
|
|
116
|
+
this.abortReason = customRollbackRes;
|
|
117
|
+
return [2, res];
|
|
84
118
|
}
|
|
85
|
-
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
};
|
|
122
|
+
return Transaction;
|
|
123
|
+
}());
|
|
124
|
+
export { Transaction };
|
|
125
|
+
export function startTransaction() {
|
|
126
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
127
|
+
var transaction;
|
|
128
|
+
return __generator(this, function (_a) {
|
|
129
|
+
switch (_a.label) {
|
|
130
|
+
case 0:
|
|
131
|
+
transaction = new Transaction(this);
|
|
132
|
+
return [4, transaction.init()];
|
|
133
|
+
case 1:
|
|
134
|
+
_a.sent();
|
|
135
|
+
return [2, transaction];
|
|
86
136
|
}
|
|
87
|
-
|
|
88
|
-
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
export function runTransaction(callback, times) {
|
|
141
|
+
if (times === void 0) { times = 3; }
|
|
142
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
143
|
+
var transaction, callbackRes, error_1, throwWithRollback;
|
|
144
|
+
var _this = this;
|
|
145
|
+
return __generator(this, function (_a) {
|
|
146
|
+
switch (_a.label) {
|
|
147
|
+
case 0:
|
|
148
|
+
_a.trys.push([0, 4, , 10]);
|
|
149
|
+
transaction = new Transaction(this);
|
|
150
|
+
return [4, transaction.init()];
|
|
151
|
+
case 1:
|
|
152
|
+
_a.sent();
|
|
153
|
+
return [4, callback(transaction)];
|
|
154
|
+
case 2:
|
|
155
|
+
callbackRes = _a.sent();
|
|
156
|
+
if (transaction.aborted === true) {
|
|
157
|
+
throw transaction.abortReason;
|
|
158
|
+
}
|
|
159
|
+
return [4, transaction.commit()];
|
|
160
|
+
case 3:
|
|
161
|
+
_a.sent();
|
|
162
|
+
return [2, callbackRes];
|
|
163
|
+
case 4:
|
|
164
|
+
error_1 = _a.sent();
|
|
165
|
+
if (transaction.inited === false) {
|
|
166
|
+
throw error_1;
|
|
167
|
+
}
|
|
168
|
+
throwWithRollback = function (error) { return __awaiter(_this, void 0, void 0, function () {
|
|
169
|
+
var err_1;
|
|
170
|
+
return __generator(this, function (_a) {
|
|
171
|
+
switch (_a.label) {
|
|
172
|
+
case 0:
|
|
173
|
+
if (!(!transaction.aborted && !transaction.commited)) return [3, 5];
|
|
174
|
+
_a.label = 1;
|
|
175
|
+
case 1:
|
|
176
|
+
_a.trys.push([1, 3, , 4]);
|
|
177
|
+
return [4, transaction.rollback()];
|
|
178
|
+
case 2:
|
|
179
|
+
_a.sent();
|
|
180
|
+
return [3, 4];
|
|
181
|
+
case 3:
|
|
182
|
+
err_1 = _a.sent();
|
|
183
|
+
return [3, 4];
|
|
184
|
+
case 4: throw error;
|
|
185
|
+
case 5:
|
|
186
|
+
if (transaction.aborted === true) {
|
|
187
|
+
throw transaction.abortReason;
|
|
188
|
+
}
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
}); };
|
|
193
|
+
if (!(times <= 0)) return [3, 6];
|
|
194
|
+
return [4, throwWithRollback(error_1)];
|
|
195
|
+
case 5:
|
|
196
|
+
_a.sent();
|
|
197
|
+
_a.label = 6;
|
|
198
|
+
case 6:
|
|
199
|
+
if (!(error_1 && error_1.code === ERRORS.DATABASE_TRANSACTION_CONFLICT.code)) return [3, 8];
|
|
200
|
+
return [4, runTransaction.bind(this)(callback, --times)];
|
|
201
|
+
case 7: return [2, _a.sent()];
|
|
202
|
+
case 8: return [4, throwWithRollback(error_1)];
|
|
203
|
+
case 9:
|
|
204
|
+
_a.sent();
|
|
205
|
+
return [3, 10];
|
|
206
|
+
case 10: return [2];
|
|
89
207
|
}
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
if (times <= 0) {
|
|
93
|
-
await throwWithRollback(error);
|
|
94
|
-
}
|
|
95
|
-
if (error && error.code === ERRORS.DATABASE_TRANSACTION_CONFLICT.code) {
|
|
96
|
-
return await runTransaction.bind(this)(callback, --times);
|
|
97
|
-
}
|
|
98
|
-
await throwWithRollback(error);
|
|
99
|
-
}
|
|
208
|
+
});
|
|
209
|
+
});
|
|
100
210
|
}
|
|
@@ -1,5 +1,43 @@
|
|
|
1
1
|
import { Transaction } from './index';
|
|
2
|
+
import { OrderByDirection } from '../constant';
|
|
3
|
+
interface QueryOrder {
|
|
4
|
+
field?: string;
|
|
5
|
+
direction?: 'asc' | 'desc';
|
|
6
|
+
}
|
|
7
|
+
interface QueryOption {
|
|
8
|
+
limit?: number;
|
|
9
|
+
offset?: number;
|
|
10
|
+
projection?: Object;
|
|
11
|
+
}
|
|
12
|
+
interface GetResult {
|
|
13
|
+
data: any[];
|
|
14
|
+
requestId: string;
|
|
15
|
+
total?: number;
|
|
16
|
+
limit?: number;
|
|
17
|
+
offset?: number;
|
|
18
|
+
}
|
|
19
|
+
interface UpdateResult {
|
|
20
|
+
requestId: string;
|
|
21
|
+
updated: number;
|
|
22
|
+
}
|
|
23
|
+
interface DeleteResult {
|
|
24
|
+
requestId: string;
|
|
25
|
+
deleted: number | string;
|
|
26
|
+
}
|
|
2
27
|
export declare class Query {
|
|
3
28
|
protected _transaction: Transaction;
|
|
4
|
-
constructor(transaction: Transaction, coll: string);
|
|
29
|
+
constructor(transaction: Transaction, coll: string, fieldFilters?: Object, fieldOrders?: QueryOrder[], queryOptions?: QueryOption);
|
|
30
|
+
where(query: object): Query;
|
|
31
|
+
orderBy(fieldPath: string, directionStr: OrderByDirection): Query;
|
|
32
|
+
limit(limit: number): Query;
|
|
33
|
+
skip(offset: number): Query;
|
|
34
|
+
field(projection: any): Query;
|
|
35
|
+
get(): Promise<GetResult>;
|
|
36
|
+
count(): Promise<{
|
|
37
|
+
requestId: string;
|
|
38
|
+
total: number;
|
|
39
|
+
}>;
|
|
40
|
+
update(data: Object): Promise<UpdateResult>;
|
|
41
|
+
remove(): Promise<DeleteResult>;
|
|
5
42
|
}
|
|
43
|
+
export {};
|