@cloudbase/database 1.4.1 → 1.4.2
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/.trunk/configs/.markdownlint.yaml +10 -0
- package/.trunk/trunk.yaml +26 -0
- package/dist/commonjs/ObjectId/index.d.ts +11 -11
- package/dist/commonjs/ObjectId/index.js +21 -21
- package/dist/commonjs/aggregate.d.ts +29 -29
- package/dist/commonjs/aggregate.js +124 -124
- package/dist/commonjs/collection.d.ts +17 -17
- package/dist/commonjs/collection.js +72 -72
- package/dist/commonjs/command.d.ts +175 -175
- package/dist/commonjs/command.js +285 -285
- package/dist/commonjs/commands/logic.d.ts +24 -24
- package/dist/commonjs/commands/logic.js +79 -79
- package/dist/commonjs/commands/query.d.ts +73 -73
- package/dist/commonjs/commands/query.js +147 -147
- package/dist/commonjs/commands/update.d.ts +29 -29
- package/dist/commonjs/commands/update.js +49 -49
- package/dist/commonjs/config/app.config.d.ts +6 -6
- package/dist/commonjs/config/app.config.js +7 -7
- package/dist/commonjs/config/error.config.d.ts +3 -3
- package/dist/commonjs/config/error.config.js +15 -15
- package/dist/commonjs/const/code.d.ts +34 -34
- package/dist/commonjs/const/code.js +36 -36
- package/dist/commonjs/constant.d.ts +54 -54
- package/dist/commonjs/constant.js +76 -76
- package/dist/commonjs/document.d.ts +14 -14
- package/dist/commonjs/document.js +217 -219
- package/dist/commonjs/geo/index.d.ts +6 -6
- package/dist/commonjs/geo/index.js +11 -11
- package/dist/commonjs/geo/interface.d.ts +24 -24
- package/dist/commonjs/geo/interface.js +2 -2
- package/dist/commonjs/geo/lineString.d.ts +19 -19
- package/dist/commonjs/geo/lineString.js +57 -57
- package/dist/commonjs/geo/multiLineString.d.ts +18 -18
- package/dist/commonjs/geo/multiLineString.js +56 -56
- package/dist/commonjs/geo/multiPoint.d.ts +18 -18
- package/dist/commonjs/geo/multiPoint.js +50 -50
- package/dist/commonjs/geo/multiPolygon.d.ts +18 -18
- package/dist/commonjs/geo/multiPolygon.js +62 -62
- package/dist/commonjs/geo/point.d.ts +19 -19
- package/dist/commonjs/geo/point.js +43 -43
- package/dist/commonjs/geo/polygon.d.ts +19 -19
- package/dist/commonjs/geo/polygon.js +70 -70
- package/dist/commonjs/helper/symbol.d.ts +15 -15
- package/dist/commonjs/helper/symbol.js +20 -20
- package/dist/commonjs/index.d.ts +50 -50
- package/dist/commonjs/index.js +41 -41
- package/dist/commonjs/operator-map.d.ts +4 -4
- package/dist/commonjs/operator-map.js +23 -23
- package/dist/commonjs/query.d.ts +38 -38
- package/dist/commonjs/query.js +249 -247
- package/dist/commonjs/realtime/error.d.ts +7 -7
- package/dist/commonjs/realtime/error.js +11 -11
- package/dist/commonjs/realtime/listener.d.ts +14 -14
- package/dist/commonjs/realtime/listener.js +17 -17
- package/dist/commonjs/realtime/message.d.ts +3 -3
- package/dist/commonjs/realtime/message.js +10 -10
- package/dist/commonjs/realtime/snapshot.d.ts +16 -16
- package/dist/commonjs/realtime/snapshot.js +42 -42
- package/dist/commonjs/realtime/virtual-websocket-client.d.ts +63 -63
- package/dist/commonjs/realtime/virtual-websocket-client.js +736 -736
- package/dist/commonjs/realtime/websocket-client.d.ts +78 -78
- package/dist/commonjs/realtime/websocket-client.js +567 -567
- package/dist/commonjs/realtime/ws-event.d.ts +126 -126
- package/dist/commonjs/realtime/ws-event.js +139 -139
- package/dist/commonjs/regexp/index.d.ts +18 -18
- package/dist/commonjs/regexp/index.js +30 -30
- package/dist/commonjs/serializer/common.d.ts +11 -11
- package/dist/commonjs/serializer/common.js +90 -90
- package/dist/commonjs/serializer/datatype.d.ts +7 -7
- package/dist/commonjs/serializer/datatype.js +99 -99
- package/dist/commonjs/serializer/query.d.ts +8 -8
- package/dist/commonjs/serializer/query.js +254 -254
- package/dist/commonjs/serializer/update.d.ts +16 -16
- package/dist/commonjs/serializer/update.js +142 -142
- package/dist/commonjs/serverDate/index.d.ts +13 -13
- package/dist/commonjs/serverDate/index.js +23 -23
- package/dist/commonjs/transaction/index.d.ts +30 -30
- package/dist/commonjs/transaction/index.js +105 -105
- package/dist/commonjs/transaction.d.ts +42 -42
- package/dist/commonjs/transaction.js +126 -126
- package/dist/commonjs/typings/index.d.ts +45 -45
- package/dist/commonjs/typings/index.js +2 -2
- package/dist/commonjs/typings/realtime.d.ts +219 -219
- package/dist/commonjs/typings/realtime.js +2 -2
- package/dist/commonjs/util.d.ts +9 -9
- package/dist/commonjs/util.js +101 -101
- package/dist/commonjs/utils/error.d.ts +37 -37
- package/dist/commonjs/utils/error.js +55 -55
- package/dist/commonjs/utils/symbol.d.ts +8 -8
- package/dist/commonjs/utils/symbol.js +39 -39
- package/dist/commonjs/utils/type.d.ts +13 -13
- package/dist/commonjs/utils/type.js +22 -22
- package/dist/commonjs/utils/utils.d.ts +20 -19
- package/dist/commonjs/utils/utils.js +59 -59
- package/dist/commonjs/validate.d.ts +1 -1
- package/dist/commonjs/validate.js +155 -155
- package/package.json +2 -3
- package/src/document.ts +1 -3
- package/src/query.ts +1 -0
- package/dist/esm/ObjectId/index.d.ts +0 -11
- package/dist/esm/ObjectId/index.js +0 -17
- package/dist/esm/aggregate.d.ts +0 -29
- package/dist/esm/aggregate.js +0 -121
- package/dist/esm/collection.d.ts +0 -17
- package/dist/esm/collection.js +0 -69
- package/dist/esm/command.d.ts +0 -175
- package/dist/esm/command.js +0 -281
- package/dist/esm/commands/logic.d.ts +0 -24
- package/dist/esm/commands/logic.js +0 -74
- package/dist/esm/commands/query.d.ts +0 -73
- package/dist/esm/commands/query.js +0 -141
- package/dist/esm/commands/update.d.ts +0 -29
- package/dist/esm/commands/update.js +0 -44
- package/dist/esm/config/app.config.d.ts +0 -6
- package/dist/esm/config/app.config.js +0 -5
- package/dist/esm/config/error.config.d.ts +0 -3
- package/dist/esm/config/error.config.js +0 -13
- package/dist/esm/const/code.d.ts +0 -34
- package/dist/esm/const/code.js +0 -34
- package/dist/esm/constant.d.ts +0 -54
- package/dist/esm/constant.js +0 -67
- package/dist/esm/document.d.ts +0 -14
- package/dist/esm/document.js +0 -216
- package/dist/esm/geo/index.d.ts +0 -6
- package/dist/esm/geo/index.js +0 -6
- package/dist/esm/geo/interface.d.ts +0 -24
- package/dist/esm/geo/interface.js +0 -0
- package/dist/esm/geo/lineString.d.ts +0 -19
- package/dist/esm/geo/lineString.js +0 -54
- package/dist/esm/geo/multiLineString.d.ts +0 -18
- package/dist/esm/geo/multiLineString.js +0 -53
- package/dist/esm/geo/multiPoint.d.ts +0 -18
- package/dist/esm/geo/multiPoint.js +0 -47
- package/dist/esm/geo/multiPolygon.d.ts +0 -18
- package/dist/esm/geo/multiPolygon.js +0 -59
- package/dist/esm/geo/point.d.ts +0 -19
- package/dist/esm/geo/point.js +0 -40
- package/dist/esm/geo/polygon.d.ts +0 -19
- package/dist/esm/geo/polygon.js +0 -67
- package/dist/esm/helper/symbol.d.ts +0 -15
- package/dist/esm/helper/symbol.js +0 -15
- package/dist/esm/index.d.ts +0 -50
- package/dist/esm/index.js +0 -35
- package/dist/esm/operator-map.d.ts +0 -4
- package/dist/esm/operator-map.js +0 -20
- package/dist/esm/query.d.ts +0 -38
- package/dist/esm/query.js +0 -244
- 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/regexp/index.d.ts +0 -18
- package/dist/esm/regexp/index.js +0 -26
- package/dist/esm/serializer/common.d.ts +0 -11
- package/dist/esm/serializer/common.js +0 -82
- package/dist/esm/serializer/datatype.d.ts +0 -7
- package/dist/esm/serializer/datatype.js +0 -95
- package/dist/esm/serializer/query.d.ts +0 -8
- package/dist/esm/serializer/query.js +0 -251
- package/dist/esm/serializer/update.d.ts +0 -16
- package/dist/esm/serializer/update.js +0 -139
- package/dist/esm/serverDate/index.d.ts +0 -13
- package/dist/esm/serverDate/index.js +0 -19
- package/dist/esm/transaction/index.d.ts +0 -30
- package/dist/esm/transaction/index.js +0 -100
- package/dist/esm/transaction.d.ts +0 -42
- package/dist/esm/transaction.js +0 -121
- package/dist/esm/typings/index.d.ts +0 -45
- package/dist/esm/typings/index.js +0 -0
- package/dist/esm/typings/realtime.d.ts +0 -219
- package/dist/esm/typings/realtime.js +0 -0
- package/dist/esm/util.d.ts +0 -9
- package/dist/esm/util.js +0 -98
- package/dist/esm/utils/error.d.ts +0 -37
- package/dist/esm/utils/error.js +0 -49
- package/dist/esm/utils/msg.d.ts +0 -0
- package/dist/esm/utils/msg.js +0 -0
- package/dist/esm/utils/symbol.d.ts +0 -8
- package/dist/esm/utils/symbol.js +0 -36
- package/dist/esm/utils/type.d.ts +0 -13
- package/dist/esm/utils/type.js +0 -20
- package/dist/esm/utils/utils.d.ts +0 -19
- package/dist/esm/utils/utils.js +0 -55
- package/dist/esm/validate.d.ts +0 -1
- package/dist/esm/validate.js +0 -152
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const constant_1 = require("./constant");
|
|
4
|
-
const util_1 = require("./util");
|
|
5
|
-
const code_1 = require("./const/code");
|
|
6
|
-
const utils_1 = require("./utils/utils");
|
|
7
|
-
const type_1 = require("./utils/type");
|
|
8
|
-
const symbol_1 = require("./helper/symbol");
|
|
9
|
-
const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout', 'raw'];
|
|
10
|
-
class Validate {
|
|
11
|
-
static isGeopoint(point, degree) {
|
|
12
|
-
if (util_1.Util.whichType(degree) !== constant_1.FieldType.Number) {
|
|
13
|
-
throw new Error('Geo Point must be number type');
|
|
14
|
-
}
|
|
15
|
-
const degreeAbs = Math.abs(degree);
|
|
16
|
-
if (point === 'latitude' && degreeAbs > 90) {
|
|
17
|
-
throw new Error('latitude should be a number ranges from -90 to 90');
|
|
18
|
-
}
|
|
19
|
-
else if (point === 'longitude' && degreeAbs > 180) {
|
|
20
|
-
throw new Error('longitude should be a number ranges from -180 to 180');
|
|
21
|
-
}
|
|
22
|
-
return true;
|
|
23
|
-
}
|
|
24
|
-
static isInteger(param, num) {
|
|
25
|
-
if (!Number.isInteger(num)) {
|
|
26
|
-
throw new Error(param + constant_1.ErrorCode.IntergerError);
|
|
27
|
-
}
|
|
28
|
-
return true;
|
|
29
|
-
}
|
|
30
|
-
static mustBeBoolean(param, bool) {
|
|
31
|
-
if (typeof bool !== 'boolean') {
|
|
32
|
-
throw new Error(param + constant_1.ErrorCode.BooleanError);
|
|
33
|
-
}
|
|
34
|
-
return true;
|
|
35
|
-
}
|
|
36
|
-
static isProjection(param, value) {
|
|
37
|
-
if (type_1.getType(value) !== 'object') {
|
|
38
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${param} projection must be an object` }));
|
|
39
|
-
}
|
|
40
|
-
for (const key in value) {
|
|
41
|
-
const subValue = value[key];
|
|
42
|
-
if (type_1.getType(subValue) === 'number') {
|
|
43
|
-
if (subValue !== 0 && subValue !== 1) {
|
|
44
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `if the value in projection is of number, it must be 0 or 1` }));
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
else if (type_1.getType(subValue) === 'object') {
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: 'invalid projection' }));
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
return true;
|
|
54
|
-
}
|
|
55
|
-
static isOrder(param, value) {
|
|
56
|
-
if (type_1.getType(value) !== 'object') {
|
|
57
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${param} order must be an object` }));
|
|
58
|
-
}
|
|
59
|
-
for (let key in value) {
|
|
60
|
-
const subValue = value[key];
|
|
61
|
-
if (subValue !== 1 && subValue !== -1) {
|
|
62
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `order value must be 1 or -1` }));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return true;
|
|
66
|
-
}
|
|
67
|
-
static isFieldOrder(direction) {
|
|
68
|
-
if (constant_1.OrderDirectionList.indexOf(direction) === -1) {
|
|
69
|
-
throw new Error(constant_1.ErrorCode.DirectionError);
|
|
70
|
-
}
|
|
71
|
-
return true;
|
|
72
|
-
}
|
|
73
|
-
static isFieldPath(path) {
|
|
74
|
-
if (!/^[a-zA-Z0-9-_\.]/.test(path)) {
|
|
75
|
-
throw new Error();
|
|
76
|
-
}
|
|
77
|
-
return true;
|
|
78
|
-
}
|
|
79
|
-
static isOperator(op) {
|
|
80
|
-
if (constant_1.WhereFilterOpList.indexOf(op) === -1) {
|
|
81
|
-
throw new Error(constant_1.ErrorCode.OpStrError);
|
|
82
|
-
}
|
|
83
|
-
return true;
|
|
84
|
-
}
|
|
85
|
-
static isCollName(name) {
|
|
86
|
-
if (!/^[a-zA-Z0-9]([a-zA-Z0-9-_]){1,32}$/.test(name)) {
|
|
87
|
-
throw new Error(constant_1.ErrorCode.CollNameError);
|
|
88
|
-
}
|
|
89
|
-
return true;
|
|
90
|
-
}
|
|
91
|
-
static isDocID(docId) {
|
|
92
|
-
if (!/^([a-fA-F0-9]){24}$/.test(docId)) {
|
|
93
|
-
throw new Error(constant_1.ErrorCode.DocIDError);
|
|
94
|
-
}
|
|
95
|
-
return true;
|
|
96
|
-
}
|
|
97
|
-
static isValidOptions(options = {}) {
|
|
98
|
-
if (type_1.getType(options) !== 'object') {
|
|
99
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `options must be an object` }));
|
|
100
|
-
}
|
|
101
|
-
const keys = Object.keys(options);
|
|
102
|
-
for (const index in keys) {
|
|
103
|
-
if (validOptionsKeys.indexOf(keys[index]) < 0) {
|
|
104
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${keys[index]} is invalid options key` }));
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
const { limit, offset, projection, order } = options;
|
|
108
|
-
const { multiple } = options;
|
|
109
|
-
if (limit !== undefined) {
|
|
110
|
-
Validate.isInteger('limit', limit);
|
|
111
|
-
}
|
|
112
|
-
if (offset !== undefined) {
|
|
113
|
-
Validate.isInteger('offset', offset);
|
|
114
|
-
}
|
|
115
|
-
if (projection !== undefined) {
|
|
116
|
-
Validate.isProjection('projection', projection);
|
|
117
|
-
}
|
|
118
|
-
if (order !== undefined) {
|
|
119
|
-
Validate.isOrder('order', order);
|
|
120
|
-
}
|
|
121
|
-
if (multiple !== undefined) {
|
|
122
|
-
Validate.mustBeBoolean('multiple', multiple);
|
|
123
|
-
}
|
|
124
|
-
if (options.timeout !== undefined) {
|
|
125
|
-
Validate.isInteger('timeout', options.timeout);
|
|
126
|
-
}
|
|
127
|
-
return true;
|
|
128
|
-
}
|
|
129
|
-
static isValidAggregation(stage) {
|
|
130
|
-
if (Object.keys(stage).length !== 1) {
|
|
131
|
-
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `aggregation stage must have one key` }));
|
|
132
|
-
}
|
|
133
|
-
return true;
|
|
134
|
-
}
|
|
135
|
-
static isCentersPhere(param) {
|
|
136
|
-
if (Array.isArray(param) && param.length === 2) {
|
|
137
|
-
if (type_1.getType(param[0]) === 'object' &&
|
|
138
|
-
param[0]._internalType === symbol_1.SYMBOL_GEO_POINT &&
|
|
139
|
-
typeof param[1] === 'number') {
|
|
140
|
-
return true;
|
|
141
|
-
}
|
|
142
|
-
if (Array.isArray(param[0]) && param[0].length === 2) {
|
|
143
|
-
const longitude = param[0][0];
|
|
144
|
-
const latitude = param[0][1];
|
|
145
|
-
Validate.isGeopoint('longitude', longitude);
|
|
146
|
-
Validate.isGeopoint('latitude', latitude);
|
|
147
|
-
if (typeof param[1] === 'number') {
|
|
148
|
-
return true;
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
throw new Error(`${constant_1.ErrorCode.CentersPhereError}`);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
exports.Validate = Validate;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constant_1 = require("./constant");
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
const code_1 = require("./const/code");
|
|
6
|
+
const utils_1 = require("./utils/utils");
|
|
7
|
+
const type_1 = require("./utils/type");
|
|
8
|
+
const symbol_1 = require("./helper/symbol");
|
|
9
|
+
const validOptionsKeys = ['limit', 'offset', 'projection', 'order', 'multiple', 'timeout', 'raw'];
|
|
10
|
+
class Validate {
|
|
11
|
+
static isGeopoint(point, degree) {
|
|
12
|
+
if (util_1.Util.whichType(degree) !== constant_1.FieldType.Number) {
|
|
13
|
+
throw new Error('Geo Point must be number type');
|
|
14
|
+
}
|
|
15
|
+
const degreeAbs = Math.abs(degree);
|
|
16
|
+
if (point === 'latitude' && degreeAbs > 90) {
|
|
17
|
+
throw new Error('latitude should be a number ranges from -90 to 90');
|
|
18
|
+
}
|
|
19
|
+
else if (point === 'longitude' && degreeAbs > 180) {
|
|
20
|
+
throw new Error('longitude should be a number ranges from -180 to 180');
|
|
21
|
+
}
|
|
22
|
+
return true;
|
|
23
|
+
}
|
|
24
|
+
static isInteger(param, num) {
|
|
25
|
+
if (!Number.isInteger(num)) {
|
|
26
|
+
throw new Error(param + constant_1.ErrorCode.IntergerError);
|
|
27
|
+
}
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
static mustBeBoolean(param, bool) {
|
|
31
|
+
if (typeof bool !== 'boolean') {
|
|
32
|
+
throw new Error(param + constant_1.ErrorCode.BooleanError);
|
|
33
|
+
}
|
|
34
|
+
return true;
|
|
35
|
+
}
|
|
36
|
+
static isProjection(param, value) {
|
|
37
|
+
if (type_1.getType(value) !== 'object') {
|
|
38
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${param} projection must be an object` }));
|
|
39
|
+
}
|
|
40
|
+
for (const key in value) {
|
|
41
|
+
const subValue = value[key];
|
|
42
|
+
if (type_1.getType(subValue) === 'number') {
|
|
43
|
+
if (subValue !== 0 && subValue !== 1) {
|
|
44
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `if the value in projection is of number, it must be 0 or 1` }));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
else if (type_1.getType(subValue) === 'object') {
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: 'invalid projection' }));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
static isOrder(param, value) {
|
|
56
|
+
if (type_1.getType(value) !== 'object') {
|
|
57
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${param} order must be an object` }));
|
|
58
|
+
}
|
|
59
|
+
for (let key in value) {
|
|
60
|
+
const subValue = value[key];
|
|
61
|
+
if (subValue !== 1 && subValue !== -1) {
|
|
62
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `order value must be 1 or -1` }));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
static isFieldOrder(direction) {
|
|
68
|
+
if (constant_1.OrderDirectionList.indexOf(direction) === -1) {
|
|
69
|
+
throw new Error(constant_1.ErrorCode.DirectionError);
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
static isFieldPath(path) {
|
|
74
|
+
if (!/^[a-zA-Z0-9-_\.]/.test(path)) {
|
|
75
|
+
throw new Error();
|
|
76
|
+
}
|
|
77
|
+
return true;
|
|
78
|
+
}
|
|
79
|
+
static isOperator(op) {
|
|
80
|
+
if (constant_1.WhereFilterOpList.indexOf(op) === -1) {
|
|
81
|
+
throw new Error(constant_1.ErrorCode.OpStrError);
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
static isCollName(name) {
|
|
86
|
+
if (!/^[a-zA-Z0-9]([a-zA-Z0-9-_]){1,32}$/.test(name)) {
|
|
87
|
+
throw new Error(constant_1.ErrorCode.CollNameError);
|
|
88
|
+
}
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
static isDocID(docId) {
|
|
92
|
+
if (!/^([a-fA-F0-9]){24}$/.test(docId)) {
|
|
93
|
+
throw new Error(constant_1.ErrorCode.DocIDError);
|
|
94
|
+
}
|
|
95
|
+
return true;
|
|
96
|
+
}
|
|
97
|
+
static isValidOptions(options = {}) {
|
|
98
|
+
if (type_1.getType(options) !== 'object') {
|
|
99
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `options must be an object` }));
|
|
100
|
+
}
|
|
101
|
+
const keys = Object.keys(options);
|
|
102
|
+
for (const index in keys) {
|
|
103
|
+
if (validOptionsKeys.indexOf(keys[index]) < 0) {
|
|
104
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `${keys[index]} is invalid options key` }));
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
const { limit, offset, projection, order } = options;
|
|
108
|
+
const { multiple } = options;
|
|
109
|
+
if (limit !== undefined) {
|
|
110
|
+
Validate.isInteger('limit', limit);
|
|
111
|
+
}
|
|
112
|
+
if (offset !== undefined) {
|
|
113
|
+
Validate.isInteger('offset', offset);
|
|
114
|
+
}
|
|
115
|
+
if (projection !== undefined) {
|
|
116
|
+
Validate.isProjection('projection', projection);
|
|
117
|
+
}
|
|
118
|
+
if (order !== undefined) {
|
|
119
|
+
Validate.isOrder('order', order);
|
|
120
|
+
}
|
|
121
|
+
if (multiple !== undefined) {
|
|
122
|
+
Validate.mustBeBoolean('multiple', multiple);
|
|
123
|
+
}
|
|
124
|
+
if (options.timeout !== undefined) {
|
|
125
|
+
Validate.isInteger('timeout', options.timeout);
|
|
126
|
+
}
|
|
127
|
+
return true;
|
|
128
|
+
}
|
|
129
|
+
static isValidAggregation(stage) {
|
|
130
|
+
if (Object.keys(stage).length !== 1) {
|
|
131
|
+
throw utils_1.E(Object.assign(Object.assign({}, code_1.ERRORS.INVALID_PARAM), { message: `aggregation stage must have one key` }));
|
|
132
|
+
}
|
|
133
|
+
return true;
|
|
134
|
+
}
|
|
135
|
+
static isCentersPhere(param) {
|
|
136
|
+
if (Array.isArray(param) && param.length === 2) {
|
|
137
|
+
if (type_1.getType(param[0]) === 'object' &&
|
|
138
|
+
param[0]._internalType === symbol_1.SYMBOL_GEO_POINT &&
|
|
139
|
+
typeof param[1] === 'number') {
|
|
140
|
+
return true;
|
|
141
|
+
}
|
|
142
|
+
if (Array.isArray(param[0]) && param[0].length === 2) {
|
|
143
|
+
const longitude = param[0][0];
|
|
144
|
+
const latitude = param[0][1];
|
|
145
|
+
Validate.isGeopoint('longitude', longitude);
|
|
146
|
+
Validate.isGeopoint('latitude', latitude);
|
|
147
|
+
if (typeof param[1] === 'number') {
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
throw new Error(`${constant_1.ErrorCode.CentersPhereError}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
exports.Validate = Validate;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cloudbase/database",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.2",
|
|
4
4
|
"description": "database for (node.)js sdk ",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/esm/index.js",
|
|
@@ -8,8 +8,7 @@
|
|
|
8
8
|
"eslint": "eslint \"./**/*.ts\"",
|
|
9
9
|
"eslint-fix": "eslint --fix \"./**/*.ts\"",
|
|
10
10
|
"test": "echo \"Error: no test specified\" && exit 1",
|
|
11
|
-
"build": "tsc -p tsconfig.json && tsc -p tsconfig.esm.json"
|
|
12
|
-
"prepublishOnly": "npm run build"
|
|
11
|
+
"build": "tsc -p tsconfig.json && tsc -p tsconfig.esm.json"
|
|
13
12
|
},
|
|
14
13
|
"author": "",
|
|
15
14
|
"license": "ISC",
|
package/src/document.ts
CHANGED
package/src/query.ts
CHANGED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export declare class ObjectId {
|
|
2
|
-
id: string;
|
|
3
|
-
constructor({ id }?: {
|
|
4
|
-
id?: string;
|
|
5
|
-
});
|
|
6
|
-
readonly _internalType: import("../utils/symbol").InternalSymbol;
|
|
7
|
-
parse(): {
|
|
8
|
-
$oid: string;
|
|
9
|
-
};
|
|
10
|
-
}
|
|
11
|
-
export declare function ObjectIdConstructor(opt: any): ObjectId;
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { SYMBOL_OBJECTID } from '../helper/symbol';
|
|
2
|
-
export class ObjectId {
|
|
3
|
-
constructor({ id = '' } = {}) {
|
|
4
|
-
this.id = id;
|
|
5
|
-
}
|
|
6
|
-
get _internalType() {
|
|
7
|
-
return SYMBOL_OBJECTID;
|
|
8
|
-
}
|
|
9
|
-
parse() {
|
|
10
|
-
return {
|
|
11
|
-
$oid: this.id
|
|
12
|
-
};
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
export function ObjectIdConstructor(opt) {
|
|
16
|
-
return new ObjectId(opt);
|
|
17
|
-
}
|
package/dist/esm/aggregate.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export default class Aggregation {
|
|
2
|
-
_db: any;
|
|
3
|
-
_request: any;
|
|
4
|
-
_stages: any[];
|
|
5
|
-
_collectionName: string;
|
|
6
|
-
constructor(db?: any, collectionName?: any, rawPipeline?: any);
|
|
7
|
-
end(): Promise<any>;
|
|
8
|
-
unwrap(): any[];
|
|
9
|
-
done(): {
|
|
10
|
-
[x: number]: any;
|
|
11
|
-
}[];
|
|
12
|
-
_pipe(stage: any, param: any, raw?: boolean): this;
|
|
13
|
-
addFields(param: any): this;
|
|
14
|
-
bucket(param: any): this;
|
|
15
|
-
bucketAuto(param: any): this;
|
|
16
|
-
count(param: any): this;
|
|
17
|
-
geoNear(param: any): this;
|
|
18
|
-
group(param: any): this;
|
|
19
|
-
limit(param: any): this;
|
|
20
|
-
match(param: any): this;
|
|
21
|
-
project(param: any): this;
|
|
22
|
-
lookup(param: any): this;
|
|
23
|
-
replaceRoot(param: any): this;
|
|
24
|
-
sample(param: any): this;
|
|
25
|
-
skip(param: any): this;
|
|
26
|
-
sort(param: any): this;
|
|
27
|
-
sortByCount(param: any): this;
|
|
28
|
-
unwind(param: any): this;
|
|
29
|
-
}
|
package/dist/esm/aggregate.js
DELETED
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { Db } from './index';
|
|
2
|
-
import { EJSON } from 'bson';
|
|
3
|
-
import { QuerySerializer } from './serializer/query';
|
|
4
|
-
import { stringifyByEJSON } from './utils/utils';
|
|
5
|
-
import { getType } from './utils/type';
|
|
6
|
-
import { Validate } from './validate';
|
|
7
|
-
import { Point } from './geo/point';
|
|
8
|
-
export default class Aggregation {
|
|
9
|
-
constructor(db, collectionName, rawPipeline) {
|
|
10
|
-
this._stages = [];
|
|
11
|
-
if (db && collectionName) {
|
|
12
|
-
this._db = db;
|
|
13
|
-
this._request = new Db.reqClass(this._db.config);
|
|
14
|
-
this._collectionName = collectionName;
|
|
15
|
-
if (rawPipeline && rawPipeline.length > 0) {
|
|
16
|
-
rawPipeline.forEach((stage) => {
|
|
17
|
-
Validate.isValidAggregation(stage);
|
|
18
|
-
const stageName = Object.keys(stage)[0];
|
|
19
|
-
this._pipe(stageName, stage[stageName], true);
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
async end() {
|
|
25
|
-
if (!this._collectionName || !this._db) {
|
|
26
|
-
throw new Error('Aggregation pipeline cannot send request');
|
|
27
|
-
}
|
|
28
|
-
const result = await this._request.send('database.aggregateDocuments', {
|
|
29
|
-
collectionName: this._collectionName,
|
|
30
|
-
stages: this._stages
|
|
31
|
-
});
|
|
32
|
-
if (result && result.data && result.data.list) {
|
|
33
|
-
return {
|
|
34
|
-
requestId: result.requestId,
|
|
35
|
-
data: result.data.list.map(EJSON.parse)
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
return result;
|
|
39
|
-
}
|
|
40
|
-
unwrap() {
|
|
41
|
-
return this._stages;
|
|
42
|
-
}
|
|
43
|
-
done() {
|
|
44
|
-
return this._stages.map(({ stageKey, stageValue }) => {
|
|
45
|
-
return {
|
|
46
|
-
[stageKey]: JSON.parse(stageValue)
|
|
47
|
-
};
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
_pipe(stage, param, raw = false) {
|
|
51
|
-
let transformParam = '';
|
|
52
|
-
if (getType(param) === 'object') {
|
|
53
|
-
transformParam = stringifyByEJSON(param);
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
transformParam = JSON.stringify(param);
|
|
57
|
-
}
|
|
58
|
-
this._stages.push({
|
|
59
|
-
stageKey: raw ? stage : `$${stage}`,
|
|
60
|
-
stageValue: transformParam
|
|
61
|
-
});
|
|
62
|
-
return this;
|
|
63
|
-
}
|
|
64
|
-
addFields(param) {
|
|
65
|
-
return this._pipe('addFields', param);
|
|
66
|
-
}
|
|
67
|
-
bucket(param) {
|
|
68
|
-
return this._pipe('bucket', param);
|
|
69
|
-
}
|
|
70
|
-
bucketAuto(param) {
|
|
71
|
-
return this._pipe('bucketAuto', param);
|
|
72
|
-
}
|
|
73
|
-
count(param) {
|
|
74
|
-
return this._pipe('count', param);
|
|
75
|
-
}
|
|
76
|
-
geoNear(param) {
|
|
77
|
-
if (param.query) {
|
|
78
|
-
param.query = QuerySerializer.encode(param.query);
|
|
79
|
-
}
|
|
80
|
-
if (param.distanceMultiplier && typeof (param.distanceMultiplier) === 'number') {
|
|
81
|
-
param.distanceMultiplier = param.distanceMultiplier;
|
|
82
|
-
}
|
|
83
|
-
if (param.near) {
|
|
84
|
-
param.near = new Point(param.near.longitude, param.near.latitude).toJSON();
|
|
85
|
-
}
|
|
86
|
-
return this._pipe('geoNear', param);
|
|
87
|
-
}
|
|
88
|
-
group(param) {
|
|
89
|
-
return this._pipe('group', param);
|
|
90
|
-
}
|
|
91
|
-
limit(param) {
|
|
92
|
-
return this._pipe('limit', param);
|
|
93
|
-
}
|
|
94
|
-
match(param) {
|
|
95
|
-
return this._pipe('match', QuerySerializer.encode(param));
|
|
96
|
-
}
|
|
97
|
-
project(param) {
|
|
98
|
-
return this._pipe('project', param);
|
|
99
|
-
}
|
|
100
|
-
lookup(param) {
|
|
101
|
-
return this._pipe('lookup', param);
|
|
102
|
-
}
|
|
103
|
-
replaceRoot(param) {
|
|
104
|
-
return this._pipe('replaceRoot', param);
|
|
105
|
-
}
|
|
106
|
-
sample(param) {
|
|
107
|
-
return this._pipe('sample', param);
|
|
108
|
-
}
|
|
109
|
-
skip(param) {
|
|
110
|
-
return this._pipe('skip', param);
|
|
111
|
-
}
|
|
112
|
-
sort(param) {
|
|
113
|
-
return this._pipe('sort', param);
|
|
114
|
-
}
|
|
115
|
-
sortByCount(param) {
|
|
116
|
-
return this._pipe('sortByCount', param);
|
|
117
|
-
}
|
|
118
|
-
unwind(param) {
|
|
119
|
-
return this._pipe('unwind', param);
|
|
120
|
-
}
|
|
121
|
-
}
|
package/dist/esm/collection.d.ts
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { DocumentReference } from './document';
|
|
2
|
-
import { Query, QueryOption, UpdateOption } from './query';
|
|
3
|
-
import Aggregation from './aggregate';
|
|
4
|
-
export declare class CollectionReference extends Query {
|
|
5
|
-
protected _transactionId: string;
|
|
6
|
-
readonly name: string;
|
|
7
|
-
doc(docID: string | number): DocumentReference;
|
|
8
|
-
add(data: any): Promise<{
|
|
9
|
-
ids?: string[];
|
|
10
|
-
id?: string;
|
|
11
|
-
inserted?: number;
|
|
12
|
-
ok?: number;
|
|
13
|
-
requestId: string;
|
|
14
|
-
}>;
|
|
15
|
-
aggregate(rawPipeline?: object[]): Aggregation;
|
|
16
|
-
options(apiOptions: QueryOption | UpdateOption): CollectionReference;
|
|
17
|
-
}
|
package/dist/esm/collection.js
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { DocumentReference } from './document';
|
|
2
|
-
import { Query } from './query';
|
|
3
|
-
import Aggregation from './aggregate';
|
|
4
|
-
import { serialize } from './serializer/datatype';
|
|
5
|
-
import { getReqOpts, stringifyByEJSON } from './utils/utils';
|
|
6
|
-
import { Validate } from './validate';
|
|
7
|
-
import { isArray } from './utils/type';
|
|
8
|
-
export class CollectionReference extends Query {
|
|
9
|
-
constructor(db, coll, apiOptions, transactionId) {
|
|
10
|
-
super(db, coll, '', apiOptions, transactionId);
|
|
11
|
-
if (transactionId) {
|
|
12
|
-
this._transactionId = transactionId;
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
get name() {
|
|
16
|
-
return this._coll;
|
|
17
|
-
}
|
|
18
|
-
doc(docID) {
|
|
19
|
-
if (typeof docID !== 'string' && typeof docID !== 'number') {
|
|
20
|
-
throw new Error('docId必须为字符串或数字');
|
|
21
|
-
}
|
|
22
|
-
return new DocumentReference(this._db, this._coll, this._apiOptions, docID, this._transactionId);
|
|
23
|
-
}
|
|
24
|
-
async add(data) {
|
|
25
|
-
let transformData = data;
|
|
26
|
-
if (!isArray(data)) {
|
|
27
|
-
transformData = [data];
|
|
28
|
-
}
|
|
29
|
-
transformData = transformData.map(item => {
|
|
30
|
-
return stringifyByEJSON(serialize(item));
|
|
31
|
-
});
|
|
32
|
-
let params = {
|
|
33
|
-
collectionName: this._coll,
|
|
34
|
-
data: transformData
|
|
35
|
-
};
|
|
36
|
-
if (this._transactionId) {
|
|
37
|
-
params.transactionId = this._transactionId;
|
|
38
|
-
}
|
|
39
|
-
const res = await this._request.send('database.insertDocument', params, getReqOpts(this._apiOptions));
|
|
40
|
-
if (res.code) {
|
|
41
|
-
return res;
|
|
42
|
-
}
|
|
43
|
-
if (!isArray(data)) {
|
|
44
|
-
if (this._transactionId) {
|
|
45
|
-
return {
|
|
46
|
-
inserted: 1,
|
|
47
|
-
ok: 1,
|
|
48
|
-
id: res.data.insertedIds[0],
|
|
49
|
-
requestId: res.requestId
|
|
50
|
-
};
|
|
51
|
-
}
|
|
52
|
-
return {
|
|
53
|
-
id: res.data.insertedIds[0],
|
|
54
|
-
requestId: res.requestId
|
|
55
|
-
};
|
|
56
|
-
}
|
|
57
|
-
return {
|
|
58
|
-
ids: res.data.insertedIds,
|
|
59
|
-
requestId: res.requestId
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
aggregate(rawPipeline = []) {
|
|
63
|
-
return new Aggregation(this._db, this._coll, (this._apiOptions.raw || false) ? rawPipeline : []);
|
|
64
|
-
}
|
|
65
|
-
options(apiOptions) {
|
|
66
|
-
Validate.isValidOptions(apiOptions);
|
|
67
|
-
return new CollectionReference(this._db, this._coll, apiOptions, this._transactionId);
|
|
68
|
-
}
|
|
69
|
-
}
|